diff --git a/engine/blog/locale/ar_AR/LC_MESSAGES/django.mo b/engine/blog/locale/ar_AR/LC_MESSAGES/django.mo index ac6cf41d..c2884743 100644 Binary files a/engine/blog/locale/ar_AR/LC_MESSAGES/django.mo and b/engine/blog/locale/ar_AR/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/ar_AR/LC_MESSAGES/django.po b/engine/blog/locale/ar_AR/LC_MESSAGES/django.po index 3c9f7093..acfa2b96 100644 --- a/engine/blog/locale/ar_AR/LC_MESSAGES/django.po +++ b/engine/blog/locale/ar_AR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,6 +13,10 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#: engine/blog/admin.py:49 +msgid "picture preview" +msgstr "معاينة الصورة" + #: engine/blog/apps.py:8 msgid "blog" msgstr "المدونة" @@ -25,7 +29,7 @@ msgstr "سرد جميع المشاركات (للقراءة فقط)" msgid "retrieve a single post (read-only)" msgstr "استرداد منشور واحد (للقراءة فقط)" -#: engine/blog/models.py:19 +#: engine/blog/models.py:22 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " @@ -40,69 +44,69 @@ msgstr "" " ليس كلاهما في نفس الوقت. كما أنها تدعم إنشاء سبيكة تلقائية بناءً على " "العنوان." -#: engine/blog/models.py:40 +#: engine/blog/models.py:43 msgid "post title" msgstr "عنوان المنشور" -#: engine/blog/models.py:41 +#: engine/blog/models.py:44 msgid "title" msgstr "العنوان" -#: engine/blog/models.py:44 +#: engine/blog/models.py:47 msgid "content" msgstr "المحتوى" -#: engine/blog/models.py:45 +#: engine/blog/models.py:48 msgid "post content" msgstr "نشر المحتوى" -#: engine/blog/models.py:57 +#: engine/blog/models.py:68 msgid "is static page" msgstr "هي صفحة ثابتة" -#: engine/blog/models.py:59 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "" "هل هذا منشور لصفحة ذات عنوان URL ثابت (على سبيل المثال '/مساعدة/التسليم'؟)" -#: engine/blog/models.py:67 +#: engine/blog/models.py:82 msgid "post" msgstr "المنشور" -#: engine/blog/models.py:68 +#: engine/blog/models.py:83 msgid "posts" msgstr "المنشورات" -#: engine/blog/models.py:73 +#: engine/blog/models.py:88 msgid "file uploads are not supported yet - use content instead" msgstr "" "ملفات تخفيض السعر غير مدعومة Yer - استخدم محتوى تخفيض السعر بدلاً من ذلك!" -#: engine/blog/models.py:77 +#: engine/blog/models.py:92 msgid "a file or content must be provided - mutually exclusive" msgstr "يجب توفير ملف تخفيض أو محتوى تخفيض - متبادل الاستبعاد" -#: engine/blog/models.py:110 +#: engine/blog/models.py:125 msgid "internal tag identifier for the post tag" msgstr "معرّف العلامة الداخلي لعلامة المنشور" -#: engine/blog/models.py:111 +#: engine/blog/models.py:126 msgid "tag name" msgstr "اسم العلامة" -#: engine/blog/models.py:115 +#: engine/blog/models.py:130 msgid "user-friendly name for the post tag" msgstr "اسم سهل الاستخدام لعلامة المنشور" -#: engine/blog/models.py:116 +#: engine/blog/models.py:131 msgid "tag display name" msgstr "اسم عرض العلامة" -#: engine/blog/models.py:124 +#: engine/blog/models.py:139 msgid "post tag" msgstr "علامة المشاركة" -#: engine/blog/models.py:125 +#: engine/blog/models.py:140 msgid "post tags" msgstr "علامات المشاركة" diff --git a/engine/blog/locale/cs_CZ/LC_MESSAGES/django.mo b/engine/blog/locale/cs_CZ/LC_MESSAGES/django.mo index ebfe198d..23444c3f 100644 Binary files a/engine/blog/locale/cs_CZ/LC_MESSAGES/django.mo and b/engine/blog/locale/cs_CZ/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/cs_CZ/LC_MESSAGES/django.po b/engine/blog/locale/cs_CZ/LC_MESSAGES/django.po index 0f6ebb84..d522f4e2 100644 --- a/engine/blog/locale/cs_CZ/LC_MESSAGES/django.po +++ b/engine/blog/locale/cs_CZ/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,6 +13,10 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#: engine/blog/admin.py:49 +msgid "picture preview" +msgstr "Náhled obrázku" + #: engine/blog/apps.py:8 msgid "blog" msgstr "Blog" @@ -25,7 +29,7 @@ msgstr "Seznam všech příspěvků (pouze pro čtení)" msgid "retrieve a single post (read-only)" msgstr "Získání jednoho příspěvku (pouze pro čtení)" -#: engine/blog/models.py:19 +#: engine/blog/models.py:22 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " @@ -40,72 +44,72 @@ msgstr "" "je požadavek na obsah nebo přílohu souboru, ale ne obojí současně. Podporuje" " také automatické generování slugu na základě názvu." -#: engine/blog/models.py:40 +#: engine/blog/models.py:43 msgid "post title" msgstr "Název příspěvku" -#: engine/blog/models.py:41 +#: engine/blog/models.py:44 msgid "title" msgstr "Název" -#: engine/blog/models.py:44 +#: engine/blog/models.py:47 msgid "content" msgstr "obsah" -#: engine/blog/models.py:45 +#: engine/blog/models.py:48 msgid "post content" msgstr "obsah příspěvku" -#: engine/blog/models.py:57 +#: engine/blog/models.py:68 msgid "is static page" msgstr "je statická stránka" -#: engine/blog/models.py:59 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "" "je to příspěvek pro stránku se statickou adresou URL (např. " "`/help/delivery`)?" -#: engine/blog/models.py:67 +#: engine/blog/models.py:82 msgid "post" msgstr "Příspěvek" -#: engine/blog/models.py:68 +#: engine/blog/models.py:83 msgid "posts" msgstr "Příspěvky" -#: engine/blog/models.py:73 +#: engine/blog/models.py:88 msgid "file uploads are not supported yet - use content instead" msgstr "" "Soubory Markdown nejsou podporovány - místo toho použijte obsah Markdown!" -#: engine/blog/models.py:77 +#: engine/blog/models.py:92 msgid "a file or content must be provided - mutually exclusive" msgstr "" "musí být poskytnut soubor markdown nebo obsah markdown - vzájemně se " "vylučují." -#: engine/blog/models.py:110 +#: engine/blog/models.py:125 msgid "internal tag identifier for the post tag" msgstr "interní identifikátor tagu pro tag příspěvku" -#: engine/blog/models.py:111 +#: engine/blog/models.py:126 msgid "tag name" msgstr "Název štítku" -#: engine/blog/models.py:115 +#: engine/blog/models.py:130 msgid "user-friendly name for the post tag" msgstr "Uživatelsky přívětivý název pro značku příspěvku" -#: engine/blog/models.py:116 +#: engine/blog/models.py:131 msgid "tag display name" msgstr "Zobrazení názvu štítku" -#: engine/blog/models.py:124 +#: engine/blog/models.py:139 msgid "post tag" msgstr "Označení příspěvku" -#: engine/blog/models.py:125 +#: engine/blog/models.py:140 msgid "post tags" msgstr "Štítky příspěvků" diff --git a/engine/blog/locale/da_DK/LC_MESSAGES/django.mo b/engine/blog/locale/da_DK/LC_MESSAGES/django.mo index c8cb24e2..66e7edda 100644 Binary files a/engine/blog/locale/da_DK/LC_MESSAGES/django.mo and b/engine/blog/locale/da_DK/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/da_DK/LC_MESSAGES/django.po b/engine/blog/locale/da_DK/LC_MESSAGES/django.po index 42325efa..78fe4075 100644 --- a/engine/blog/locale/da_DK/LC_MESSAGES/django.po +++ b/engine/blog/locale/da_DK/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,6 +13,10 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#: engine/blog/admin.py:49 +msgid "picture preview" +msgstr "Billedforhåndsvisning" + #: engine/blog/apps.py:8 msgid "blog" msgstr "Blog" @@ -25,7 +29,7 @@ msgstr "Vis alle indlæg (skrivebeskyttet)" msgid "retrieve a single post (read-only)" msgstr "Hent et enkelt indlæg (skrivebeskyttet)" -#: engine/blog/models.py:19 +#: engine/blog/models.py:22 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " @@ -41,69 +45,69 @@ msgstr "" "ikke begge dele på samme tid. Den understøtter også automatisk generering af" " slugs baseret på titlen." -#: engine/blog/models.py:40 +#: engine/blog/models.py:43 msgid "post title" msgstr "Indlæggets titel" -#: engine/blog/models.py:41 +#: engine/blog/models.py:44 msgid "title" msgstr "Titel" -#: engine/blog/models.py:44 +#: engine/blog/models.py:47 msgid "content" msgstr "indhold" -#: engine/blog/models.py:45 +#: engine/blog/models.py:48 msgid "post content" msgstr "indhold" -#: engine/blog/models.py:57 +#: engine/blog/models.py:68 msgid "is static page" msgstr "er en statisk side" -#: engine/blog/models.py:59 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "" "Er dette et indlæg til en side med statisk URL (f.eks. `/help/delivery`)?" -#: engine/blog/models.py:67 +#: engine/blog/models.py:82 msgid "post" msgstr "Indlæg" -#: engine/blog/models.py:68 +#: engine/blog/models.py:83 msgid "posts" msgstr "Indlæg" -#: engine/blog/models.py:73 +#: engine/blog/models.py:88 msgid "file uploads are not supported yet - use content instead" msgstr "filoverførsler understøttes endnu ikke – brug i stedet indhold" -#: engine/blog/models.py:77 +#: engine/blog/models.py:92 msgid "a file or content must be provided - mutually exclusive" msgstr "" "en markdown-fil eller markdown-indhold skal leveres - gensidigt udelukkende" -#: engine/blog/models.py:110 +#: engine/blog/models.py:125 msgid "internal tag identifier for the post tag" msgstr "intern tag-identifikator for indlægs-tagget" -#: engine/blog/models.py:111 +#: engine/blog/models.py:126 msgid "tag name" msgstr "Tag-navn" -#: engine/blog/models.py:115 +#: engine/blog/models.py:130 msgid "user-friendly name for the post tag" msgstr "Brugervenligt navn til posttagget" -#: engine/blog/models.py:116 +#: engine/blog/models.py:131 msgid "tag display name" msgstr "Navn på tag-visning" -#: engine/blog/models.py:124 +#: engine/blog/models.py:139 msgid "post tag" msgstr "Tag til indlæg" -#: engine/blog/models.py:125 +#: engine/blog/models.py:140 msgid "post tags" msgstr "Tags til indlæg" diff --git a/engine/blog/locale/de_DE/LC_MESSAGES/django.mo b/engine/blog/locale/de_DE/LC_MESSAGES/django.mo index ce19a128..9213bacf 100644 Binary files a/engine/blog/locale/de_DE/LC_MESSAGES/django.mo and b/engine/blog/locale/de_DE/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/de_DE/LC_MESSAGES/django.po b/engine/blog/locale/de_DE/LC_MESSAGES/django.po index ed1a1284..96ea2cf3 100644 --- a/engine/blog/locale/de_DE/LC_MESSAGES/django.po +++ b/engine/blog/locale/de_DE/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,6 +13,10 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#: engine/blog/admin.py:49 +msgid "picture preview" +msgstr "Bildvorschau" + #: engine/blog/apps.py:8 msgid "blog" msgstr "Blog" @@ -25,7 +29,7 @@ msgstr "Alle Beiträge auflisten (schreibgeschützt)" msgid "retrieve a single post (read-only)" msgstr "Einen einzelnen Beitrag abrufen (schreibgeschützt)" -#: engine/blog/models.py:19 +#: engine/blog/models.py:22 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " @@ -42,73 +46,73 @@ msgstr "" "unterstützt auch die automatische Slug-Generierung auf der Grundlage des " "Titels." -#: engine/blog/models.py:40 +#: engine/blog/models.py:43 msgid "post title" msgstr "Titel des Beitrags" -#: engine/blog/models.py:41 +#: engine/blog/models.py:44 msgid "title" msgstr "Titel" -#: engine/blog/models.py:44 +#: engine/blog/models.py:47 msgid "content" msgstr "Inhalt" -#: engine/blog/models.py:45 +#: engine/blog/models.py:48 msgid "post content" msgstr "Beitragsinhalte" -#: engine/blog/models.py:57 +#: engine/blog/models.py:68 msgid "is static page" msgstr "ist eine statische Seite" -#: engine/blog/models.py:59 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "" "Ist dies ein Beitrag für eine Seite mit statischer URL (z. B. " "`/help/delivery`)?" -#: engine/blog/models.py:67 +#: engine/blog/models.py:82 msgid "post" msgstr "Beitrag" -#: engine/blog/models.py:68 +#: engine/blog/models.py:83 msgid "posts" msgstr "Beiträge" -#: engine/blog/models.py:73 +#: engine/blog/models.py:88 msgid "file uploads are not supported yet - use content instead" msgstr "" "Markdown-Dateien werden nicht unterstützt - verwenden Sie stattdessen " "Markdown-Inhalte!" -#: engine/blog/models.py:77 +#: engine/blog/models.py:92 msgid "a file or content must be provided - mutually exclusive" msgstr "" "eine Markdown-Datei oder ein Markdown-Inhalt muss bereitgestellt werden - " "beide schließen sich gegenseitig aus" -#: engine/blog/models.py:110 +#: engine/blog/models.py:125 msgid "internal tag identifier for the post tag" msgstr "interner Tag-Bezeichner für den Post-Tag" -#: engine/blog/models.py:111 +#: engine/blog/models.py:126 msgid "tag name" msgstr "Tag name" -#: engine/blog/models.py:115 +#: engine/blog/models.py:130 msgid "user-friendly name for the post tag" msgstr "Benutzerfreundlicher Name für das Post-Tag" -#: engine/blog/models.py:116 +#: engine/blog/models.py:131 msgid "tag display name" msgstr "Tag-Anzeigename" -#: engine/blog/models.py:124 +#: engine/blog/models.py:139 msgid "post tag" msgstr "Tag eintragen" -#: engine/blog/models.py:125 +#: engine/blog/models.py:140 msgid "post tags" msgstr "Tags eintragen" diff --git a/engine/blog/locale/en_GB/LC_MESSAGES/django.mo b/engine/blog/locale/en_GB/LC_MESSAGES/django.mo index 06cf2382..091cc151 100644 Binary files a/engine/blog/locale/en_GB/LC_MESSAGES/django.mo and b/engine/blog/locale/en_GB/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/en_GB/LC_MESSAGES/django.po b/engine/blog/locale/en_GB/LC_MESSAGES/django.po index c673d15e..a929dd86 100644 --- a/engine/blog/locale/en_GB/LC_MESSAGES/django.po +++ b/engine/blog/locale/en_GB/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,6 +13,10 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#: engine/blog/admin.py:49 +msgid "picture preview" +msgstr "Picture preview" + #: engine/blog/apps.py:8 msgid "blog" msgstr "Blog" @@ -25,7 +29,7 @@ msgstr "List all posts (read-only)" msgid "retrieve a single post (read-only)" msgstr "Retrieve a single post (read-only)" -#: engine/blog/models.py:19 +#: engine/blog/models.py:22 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " @@ -41,68 +45,68 @@ msgstr "" "both simultaneously. It also supports automatic slug generation based on the" " title." -#: engine/blog/models.py:40 +#: engine/blog/models.py:43 msgid "post title" msgstr "Post's title" -#: engine/blog/models.py:41 +#: engine/blog/models.py:44 msgid "title" msgstr "Title" -#: engine/blog/models.py:44 +#: engine/blog/models.py:47 msgid "content" msgstr "content" -#: engine/blog/models.py:45 +#: engine/blog/models.py:48 msgid "post content" msgstr "post content" -#: engine/blog/models.py:57 +#: engine/blog/models.py:68 msgid "is static page" msgstr "is static page" -#: engine/blog/models.py:59 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "is this a post for a page with static URL (e.g. `/help/delivery`)?" -#: engine/blog/models.py:67 +#: engine/blog/models.py:82 msgid "post" msgstr "Post" -#: engine/blog/models.py:68 +#: engine/blog/models.py:83 msgid "posts" msgstr "Posts" -#: engine/blog/models.py:73 +#: engine/blog/models.py:88 msgid "file uploads are not supported yet - use content instead" msgstr "file uploads are not supported yet - use content instead" -#: engine/blog/models.py:77 +#: engine/blog/models.py:92 msgid "a file or content must be provided - mutually exclusive" msgstr "" "a markdown file or markdown content must be provided - mutually exclusive" -#: engine/blog/models.py:110 +#: engine/blog/models.py:125 msgid "internal tag identifier for the post tag" msgstr "internal tag identifier for the post tag" -#: engine/blog/models.py:111 +#: engine/blog/models.py:126 msgid "tag name" msgstr "Tag name" -#: engine/blog/models.py:115 +#: engine/blog/models.py:130 msgid "user-friendly name for the post tag" msgstr "User-friendly name for the post tag" -#: engine/blog/models.py:116 +#: engine/blog/models.py:131 msgid "tag display name" msgstr "Tag display name" -#: engine/blog/models.py:124 +#: engine/blog/models.py:139 msgid "post tag" msgstr "Post tag" -#: engine/blog/models.py:125 +#: engine/blog/models.py:140 msgid "post tags" msgstr "Post tags" diff --git a/engine/blog/locale/en_US/LC_MESSAGES/django.mo b/engine/blog/locale/en_US/LC_MESSAGES/django.mo index a336cf3d..bd1171d5 100644 Binary files a/engine/blog/locale/en_US/LC_MESSAGES/django.mo and b/engine/blog/locale/en_US/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/en_US/LC_MESSAGES/django.po b/engine/blog/locale/en_US/LC_MESSAGES/django.po index 3252e8b0..acc179b1 100644 --- a/engine/blog/locale/en_US/LC_MESSAGES/django.po +++ b/engine/blog/locale/en_US/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,6 +13,10 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#: engine/blog/admin.py:49 +msgid "picture preview" +msgstr "Picture preview" + #: engine/blog/apps.py:8 msgid "blog" msgstr "Blog" @@ -25,7 +29,7 @@ msgstr "List all posts (read-only)" msgid "retrieve a single post (read-only)" msgstr "Retrieve a single post (read-only)" -#: engine/blog/models.py:19 +#: engine/blog/models.py:22 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " @@ -41,68 +45,68 @@ msgstr "" "both simultaneously. It also supports automatic slug generation based on the" " title." -#: engine/blog/models.py:40 +#: engine/blog/models.py:43 msgid "post title" msgstr "Post's title" -#: engine/blog/models.py:41 +#: engine/blog/models.py:44 msgid "title" msgstr "Title" -#: engine/blog/models.py:44 +#: engine/blog/models.py:47 msgid "content" msgstr "content" -#: engine/blog/models.py:45 +#: engine/blog/models.py:48 msgid "post content" msgstr "post content" -#: engine/blog/models.py:57 +#: engine/blog/models.py:68 msgid "is static page" msgstr "is static page" -#: engine/blog/models.py:59 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "is this a post for a page with static URL (e.g. `/help/delivery`)?" -#: engine/blog/models.py:67 +#: engine/blog/models.py:82 msgid "post" msgstr "Post" -#: engine/blog/models.py:68 +#: engine/blog/models.py:83 msgid "posts" msgstr "Posts" -#: engine/blog/models.py:73 +#: engine/blog/models.py:88 msgid "file uploads are not supported yet - use content instead" msgstr "file uploads are not supported yet - use content instead" -#: engine/blog/models.py:77 +#: engine/blog/models.py:92 msgid "a file or content must be provided - mutually exclusive" msgstr "" "a markdown file or markdown content must be provided - mutually exclusive" -#: engine/blog/models.py:110 +#: engine/blog/models.py:125 msgid "internal tag identifier for the post tag" msgstr "internal tag identifier for the post tag" -#: engine/blog/models.py:111 +#: engine/blog/models.py:126 msgid "tag name" msgstr "Tag name" -#: engine/blog/models.py:115 +#: engine/blog/models.py:130 msgid "user-friendly name for the post tag" msgstr "User-friendly name for the post tag" -#: engine/blog/models.py:116 +#: engine/blog/models.py:131 msgid "tag display name" msgstr "Tag display name" -#: engine/blog/models.py:124 +#: engine/blog/models.py:139 msgid "post tag" msgstr "Post tag" -#: engine/blog/models.py:125 +#: engine/blog/models.py:140 msgid "post tags" msgstr "Post tags" diff --git a/engine/blog/locale/es_ES/LC_MESSAGES/django.mo b/engine/blog/locale/es_ES/LC_MESSAGES/django.mo index 7f86818e..ae0e7464 100644 Binary files a/engine/blog/locale/es_ES/LC_MESSAGES/django.mo and b/engine/blog/locale/es_ES/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/es_ES/LC_MESSAGES/django.po b/engine/blog/locale/es_ES/LC_MESSAGES/django.po index 9ae265c0..4ca267da 100644 --- a/engine/blog/locale/es_ES/LC_MESSAGES/django.po +++ b/engine/blog/locale/es_ES/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,6 +13,10 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#: engine/blog/admin.py:49 +msgid "picture preview" +msgstr "Vista previa de la imagen" + #: engine/blog/apps.py:8 msgid "blog" msgstr "Blog" @@ -25,7 +29,7 @@ msgstr "Listar todos los mensajes (sólo lectura)" msgid "retrieve a single post (read-only)" msgstr "Recuperar una única entrada (sólo lectura)" -#: engine/blog/models.py:19 +#: engine/blog/models.py:22 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " @@ -41,72 +45,72 @@ msgstr "" "adjunto, pero no ambos simultáneamente. También admite la generación " "automática de slug a partir del título." -#: engine/blog/models.py:40 +#: engine/blog/models.py:43 msgid "post title" msgstr "Título del mensaje" -#: engine/blog/models.py:41 +#: engine/blog/models.py:44 msgid "title" msgstr "Título" -#: engine/blog/models.py:44 +#: engine/blog/models.py:47 msgid "content" msgstr "contenido" -#: engine/blog/models.py:45 +#: engine/blog/models.py:48 msgid "post content" msgstr "publicar contenido" -#: engine/blog/models.py:57 +#: engine/blog/models.py:68 msgid "is static page" msgstr "es una página estática" -#: engine/blog/models.py:59 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "" "¿se trata de una entrada para una página con URL estática (por ejemplo, " "`/help/delivery`)?" -#: engine/blog/models.py:67 +#: engine/blog/models.py:82 msgid "post" msgstr "Publicar en" -#: engine/blog/models.py:68 +#: engine/blog/models.py:83 msgid "posts" msgstr "Puestos" -#: engine/blog/models.py:73 +#: engine/blog/models.py:88 msgid "file uploads are not supported yet - use content instead" msgstr "" "No se admiten archivos Markdown - ¡utiliza contenido Markdown en su lugar!" -#: engine/blog/models.py:77 +#: engine/blog/models.py:92 msgid "a file or content must be provided - mutually exclusive" msgstr "" "se debe proporcionar un archivo markdown o contenido markdown - mutuamente " "excluyentes" -#: engine/blog/models.py:110 +#: engine/blog/models.py:125 msgid "internal tag identifier for the post tag" msgstr "identificador interno de la etiqueta post" -#: engine/blog/models.py:111 +#: engine/blog/models.py:126 msgid "tag name" msgstr "Nombre de la etiqueta" -#: engine/blog/models.py:115 +#: engine/blog/models.py:130 msgid "user-friendly name for the post tag" msgstr "Nombre fácil de usar para la etiqueta de la entrada" -#: engine/blog/models.py:116 +#: engine/blog/models.py:131 msgid "tag display name" msgstr "Nombre de la etiqueta" -#: engine/blog/models.py:124 +#: engine/blog/models.py:139 msgid "post tag" msgstr "Etiqueta postal" -#: engine/blog/models.py:125 +#: engine/blog/models.py:140 msgid "post tags" msgstr "Etiquetas" diff --git a/engine/blog/locale/fa_IR/LC_MESSAGES/django.po b/engine/blog/locale/fa_IR/LC_MESSAGES/django.po index 09f58f69..95ecb211 100644 --- a/engine/blog/locale/fa_IR/LC_MESSAGES/django.po +++ b/engine/blog/locale/fa_IR/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 01:44+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,6 +16,10 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +#: engine/blog/admin.py:49 +msgid "picture preview" +msgstr "" + #: engine/blog/apps.py:8 msgid "blog" msgstr "" @@ -28,7 +32,7 @@ msgstr "" msgid "retrieve a single post (read-only)" msgstr "" -#: engine/blog/models.py:19 +#: engine/blog/models.py:22 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " @@ -38,67 +42,67 @@ msgid "" "title." msgstr "" -#: engine/blog/models.py:40 +#: engine/blog/models.py:43 msgid "post title" msgstr "" -#: engine/blog/models.py:41 +#: engine/blog/models.py:44 msgid "title" msgstr "" -#: engine/blog/models.py:44 +#: engine/blog/models.py:47 msgid "content" msgstr "" -#: engine/blog/models.py:45 +#: engine/blog/models.py:48 msgid "post content" msgstr "" -#: engine/blog/models.py:57 +#: engine/blog/models.py:68 msgid "is static page" msgstr "" -#: engine/blog/models.py:59 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "" -#: engine/blog/models.py:67 +#: engine/blog/models.py:82 msgid "post" msgstr "" -#: engine/blog/models.py:68 +#: engine/blog/models.py:83 msgid "posts" msgstr "" -#: engine/blog/models.py:73 +#: engine/blog/models.py:88 msgid "file uploads are not supported yet - use content instead" msgstr "" -#: engine/blog/models.py:77 +#: engine/blog/models.py:92 msgid "a file or content must be provided - mutually exclusive" msgstr "" -#: engine/blog/models.py:110 +#: engine/blog/models.py:125 msgid "internal tag identifier for the post tag" msgstr "" -#: engine/blog/models.py:111 +#: engine/blog/models.py:126 msgid "tag name" msgstr "" -#: engine/blog/models.py:115 +#: engine/blog/models.py:130 msgid "user-friendly name for the post tag" msgstr "" -#: engine/blog/models.py:116 +#: engine/blog/models.py:131 msgid "tag display name" msgstr "" -#: engine/blog/models.py:124 +#: engine/blog/models.py:139 msgid "post tag" msgstr "" -#: engine/blog/models.py:125 +#: engine/blog/models.py:140 msgid "post tags" msgstr "" diff --git a/engine/blog/locale/fr_FR/LC_MESSAGES/django.mo b/engine/blog/locale/fr_FR/LC_MESSAGES/django.mo index 5a04d3d3..faaffe8f 100644 Binary files a/engine/blog/locale/fr_FR/LC_MESSAGES/django.mo and b/engine/blog/locale/fr_FR/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/fr_FR/LC_MESSAGES/django.po b/engine/blog/locale/fr_FR/LC_MESSAGES/django.po index e7e281d0..b457bbf3 100644 --- a/engine/blog/locale/fr_FR/LC_MESSAGES/django.po +++ b/engine/blog/locale/fr_FR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,6 +13,10 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#: engine/blog/admin.py:49 +msgid "picture preview" +msgstr "Aperçu de l'image" + #: engine/blog/apps.py:8 msgid "blog" msgstr "Blog" @@ -25,7 +29,7 @@ msgstr "Liste de tous les messages (en lecture seule)" msgid "retrieve a single post (read-only)" msgstr "Récupérer un seul message (en lecture seule)" -#: engine/blog/models.py:19 +#: engine/blog/models.py:22 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " @@ -42,73 +46,73 @@ msgstr "" "simultanément. Elle prend également en charge la génération automatique " "d'une balise en fonction du titre." -#: engine/blog/models.py:40 +#: engine/blog/models.py:43 msgid "post title" msgstr "Titre du message" -#: engine/blog/models.py:41 +#: engine/blog/models.py:44 msgid "title" msgstr "Titre" -#: engine/blog/models.py:44 +#: engine/blog/models.py:47 msgid "content" msgstr "contenu" -#: engine/blog/models.py:45 +#: engine/blog/models.py:48 msgid "post content" msgstr "contenu de publication" -#: engine/blog/models.py:57 +#: engine/blog/models.py:68 msgid "is static page" msgstr "est une page statique" -#: engine/blog/models.py:59 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "" "s'agit-il d'un message pour une page dont l'URL est statique (par exemple " "`/help/delivery`) ?" -#: engine/blog/models.py:67 +#: engine/blog/models.py:82 msgid "post" msgstr "Poste" -#: engine/blog/models.py:68 +#: engine/blog/models.py:83 msgid "posts" msgstr "Postes" -#: engine/blog/models.py:73 +#: engine/blog/models.py:88 msgid "file uploads are not supported yet - use content instead" msgstr "" "Les fichiers Markdown ne sont pas pris en charge - utilisez plutôt du " "contenu Markdown !" -#: engine/blog/models.py:77 +#: engine/blog/models.py:92 msgid "a file or content must be provided - mutually exclusive" msgstr "" "un fichier markdown ou un contenu markdown doit être fourni - ils s'excluent" " mutuellement" -#: engine/blog/models.py:110 +#: engine/blog/models.py:125 msgid "internal tag identifier for the post tag" msgstr "identifiant interne de la balise post" -#: engine/blog/models.py:111 +#: engine/blog/models.py:126 msgid "tag name" msgstr "Nom du jour" -#: engine/blog/models.py:115 +#: engine/blog/models.py:130 msgid "user-friendly name for the post tag" msgstr "Nom convivial pour la balise post" -#: engine/blog/models.py:116 +#: engine/blog/models.py:131 msgid "tag display name" msgstr "Nom d'affichage de l'étiquette" -#: engine/blog/models.py:124 +#: engine/blog/models.py:139 msgid "post tag" msgstr "Tag de poste" -#: engine/blog/models.py:125 +#: engine/blog/models.py:140 msgid "post tags" msgstr "Tags de la poste" diff --git a/engine/blog/locale/he_IL/LC_MESSAGES/django.mo b/engine/blog/locale/he_IL/LC_MESSAGES/django.mo index a33245c7..9b163c86 100644 Binary files a/engine/blog/locale/he_IL/LC_MESSAGES/django.mo and b/engine/blog/locale/he_IL/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/he_IL/LC_MESSAGES/django.po b/engine/blog/locale/he_IL/LC_MESSAGES/django.po index c537d769..e525f28d 100644 --- a/engine/blog/locale/he_IL/LC_MESSAGES/django.po +++ b/engine/blog/locale/he_IL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,6 +13,10 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#: engine/blog/admin.py:49 +msgid "picture preview" +msgstr "תצוגה מקדימה של תמונה" + #: engine/blog/apps.py:8 msgid "blog" msgstr "בלוג" @@ -25,7 +29,7 @@ msgstr "הצג את כל ההודעות (לקריאה בלבד)" msgid "retrieve a single post (read-only)" msgstr "איתור פוסט בודד (לקריאה בלבד)" -#: engine/blog/models.py:19 +#: engine/blog/models.py:22 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " @@ -39,67 +43,67 @@ msgstr "" "ותגיות נלוות. המחלקה אוכפת אילוצים כגון דרישה לתוכן או לקובץ מצורף, אך לא " "לשניהם בו-זמנית. היא תומכת גם ביצירה אוטומטית של slug על סמך הכותרת." -#: engine/blog/models.py:40 +#: engine/blog/models.py:43 msgid "post title" msgstr "כותרת הפוסט" -#: engine/blog/models.py:41 +#: engine/blog/models.py:44 msgid "title" msgstr "כותרת" -#: engine/blog/models.py:44 +#: engine/blog/models.py:47 msgid "content" msgstr "תוכן" -#: engine/blog/models.py:45 +#: engine/blog/models.py:48 msgid "post content" msgstr "תוכן הפוסט" -#: engine/blog/models.py:57 +#: engine/blog/models.py:68 msgid "is static page" msgstr "הוא דף סטטי" -#: engine/blog/models.py:59 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "האם זו הודעה לדף עם כתובת URL סטטית (למשל `/help/delivery`)?" -#: engine/blog/models.py:67 +#: engine/blog/models.py:82 msgid "post" msgstr "פוסט" -#: engine/blog/models.py:68 +#: engine/blog/models.py:83 msgid "posts" msgstr "פוסטים" -#: engine/blog/models.py:73 +#: engine/blog/models.py:88 msgid "file uploads are not supported yet - use content instead" msgstr "העלאת קבצים אינה נתמכת עדיין - השתמש בתוכן במקום זאת" -#: engine/blog/models.py:77 +#: engine/blog/models.py:92 msgid "a file or content must be provided - mutually exclusive" msgstr "יש לספק קובץ markdown או תוכן markdown - באופן בלעדי" -#: engine/blog/models.py:110 +#: engine/blog/models.py:125 msgid "internal tag identifier for the post tag" msgstr "מזהה תגיות פנימי עבור תגיות הפוסט" -#: engine/blog/models.py:111 +#: engine/blog/models.py:126 msgid "tag name" msgstr "שם היום" -#: engine/blog/models.py:115 +#: engine/blog/models.py:130 msgid "user-friendly name for the post tag" msgstr "שם ידידותי למשתמש עבור תגיות הפוסט" -#: engine/blog/models.py:116 +#: engine/blog/models.py:131 msgid "tag display name" msgstr "שם תצוגה של התג" -#: engine/blog/models.py:124 +#: engine/blog/models.py:139 msgid "post tag" msgstr "תגית פוסט" -#: engine/blog/models.py:125 +#: engine/blog/models.py:140 msgid "post tags" msgstr "תגיות פוסט" diff --git a/engine/blog/locale/hi_IN/LC_MESSAGES/django.po b/engine/blog/locale/hi_IN/LC_MESSAGES/django.po index 43351be5..f6c2ff0d 100644 --- a/engine/blog/locale/hi_IN/LC_MESSAGES/django.po +++ b/engine/blog/locale/hi_IN/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:26+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -12,6 +12,10 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +#: engine/blog/admin.py:49 +msgid "picture preview" +msgstr "" + #: engine/blog/apps.py:8 msgid "blog" msgstr "" @@ -24,7 +28,7 @@ msgstr "" msgid "retrieve a single post (read-only)" msgstr "" -#: engine/blog/models.py:19 +#: engine/blog/models.py:22 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " @@ -34,67 +38,67 @@ msgid "" "title." msgstr "" -#: engine/blog/models.py:40 +#: engine/blog/models.py:43 msgid "post title" msgstr "" -#: engine/blog/models.py:41 +#: engine/blog/models.py:44 msgid "title" msgstr "" -#: engine/blog/models.py:44 +#: engine/blog/models.py:47 msgid "content" msgstr "" -#: engine/blog/models.py:45 +#: engine/blog/models.py:48 msgid "post content" msgstr "" -#: engine/blog/models.py:57 +#: engine/blog/models.py:68 msgid "is static page" msgstr "" -#: engine/blog/models.py:59 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "" -#: engine/blog/models.py:67 +#: engine/blog/models.py:82 msgid "post" msgstr "" -#: engine/blog/models.py:68 +#: engine/blog/models.py:83 msgid "posts" msgstr "" -#: engine/blog/models.py:73 +#: engine/blog/models.py:88 msgid "file uploads are not supported yet - use content instead" msgstr "" -#: engine/blog/models.py:77 +#: engine/blog/models.py:92 msgid "a file or content must be provided - mutually exclusive" msgstr "" -#: engine/blog/models.py:110 +#: engine/blog/models.py:125 msgid "internal tag identifier for the post tag" msgstr "" -#: engine/blog/models.py:111 +#: engine/blog/models.py:126 msgid "tag name" msgstr "" -#: engine/blog/models.py:115 +#: engine/blog/models.py:130 msgid "user-friendly name for the post tag" msgstr "" -#: engine/blog/models.py:116 +#: engine/blog/models.py:131 msgid "tag display name" msgstr "" -#: engine/blog/models.py:124 +#: engine/blog/models.py:139 msgid "post tag" msgstr "" -#: engine/blog/models.py:125 +#: engine/blog/models.py:140 msgid "post tags" msgstr "" diff --git a/engine/blog/locale/hr_HR/LC_MESSAGES/django.po b/engine/blog/locale/hr_HR/LC_MESSAGES/django.po index 09f58f69..95ecb211 100644 --- a/engine/blog/locale/hr_HR/LC_MESSAGES/django.po +++ b/engine/blog/locale/hr_HR/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 01:44+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,6 +16,10 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +#: engine/blog/admin.py:49 +msgid "picture preview" +msgstr "" + #: engine/blog/apps.py:8 msgid "blog" msgstr "" @@ -28,7 +32,7 @@ msgstr "" msgid "retrieve a single post (read-only)" msgstr "" -#: engine/blog/models.py:19 +#: engine/blog/models.py:22 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " @@ -38,67 +42,67 @@ msgid "" "title." msgstr "" -#: engine/blog/models.py:40 +#: engine/blog/models.py:43 msgid "post title" msgstr "" -#: engine/blog/models.py:41 +#: engine/blog/models.py:44 msgid "title" msgstr "" -#: engine/blog/models.py:44 +#: engine/blog/models.py:47 msgid "content" msgstr "" -#: engine/blog/models.py:45 +#: engine/blog/models.py:48 msgid "post content" msgstr "" -#: engine/blog/models.py:57 +#: engine/blog/models.py:68 msgid "is static page" msgstr "" -#: engine/blog/models.py:59 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "" -#: engine/blog/models.py:67 +#: engine/blog/models.py:82 msgid "post" msgstr "" -#: engine/blog/models.py:68 +#: engine/blog/models.py:83 msgid "posts" msgstr "" -#: engine/blog/models.py:73 +#: engine/blog/models.py:88 msgid "file uploads are not supported yet - use content instead" msgstr "" -#: engine/blog/models.py:77 +#: engine/blog/models.py:92 msgid "a file or content must be provided - mutually exclusive" msgstr "" -#: engine/blog/models.py:110 +#: engine/blog/models.py:125 msgid "internal tag identifier for the post tag" msgstr "" -#: engine/blog/models.py:111 +#: engine/blog/models.py:126 msgid "tag name" msgstr "" -#: engine/blog/models.py:115 +#: engine/blog/models.py:130 msgid "user-friendly name for the post tag" msgstr "" -#: engine/blog/models.py:116 +#: engine/blog/models.py:131 msgid "tag display name" msgstr "" -#: engine/blog/models.py:124 +#: engine/blog/models.py:139 msgid "post tag" msgstr "" -#: engine/blog/models.py:125 +#: engine/blog/models.py:140 msgid "post tags" msgstr "" diff --git a/engine/blog/locale/id_ID/LC_MESSAGES/django.mo b/engine/blog/locale/id_ID/LC_MESSAGES/django.mo index 9d51cba8..f9f368b0 100644 Binary files a/engine/blog/locale/id_ID/LC_MESSAGES/django.mo and b/engine/blog/locale/id_ID/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/id_ID/LC_MESSAGES/django.po b/engine/blog/locale/id_ID/LC_MESSAGES/django.po index b37bbe9a..684deb77 100644 --- a/engine/blog/locale/id_ID/LC_MESSAGES/django.po +++ b/engine/blog/locale/id_ID/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,6 +13,10 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#: engine/blog/admin.py:49 +msgid "picture preview" +msgstr "Pratinjau gambar" + #: engine/blog/apps.py:8 msgid "blog" msgstr "Blog" @@ -25,7 +29,7 @@ msgstr "Daftar semua postingan (hanya-baca)" msgid "retrieve a single post (read-only)" msgstr "Mengambil satu postingan (hanya-baca)" -#: engine/blog/models.py:19 +#: engine/blog/models.py:22 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " @@ -41,73 +45,73 @@ msgstr "" " secara bersamaan. Kelas ini juga mendukung pembuatan slug otomatis " "berdasarkan judul." -#: engine/blog/models.py:40 +#: engine/blog/models.py:43 msgid "post title" msgstr "Judul postingan" -#: engine/blog/models.py:41 +#: engine/blog/models.py:44 msgid "title" msgstr "Judul" -#: engine/blog/models.py:44 +#: engine/blog/models.py:47 msgid "content" msgstr "konten" -#: engine/blog/models.py:45 +#: engine/blog/models.py:48 msgid "post content" msgstr "posting konten" -#: engine/blog/models.py:57 +#: engine/blog/models.py:68 msgid "is static page" msgstr "adalah halaman statis" -#: engine/blog/models.py:59 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "" "apakah ini adalah postingan untuk halaman dengan URL statis (misalnya " "`/help/pengiriman`)?" -#: engine/blog/models.py:67 +#: engine/blog/models.py:82 msgid "post" msgstr "Pos" -#: engine/blog/models.py:68 +#: engine/blog/models.py:83 msgid "posts" msgstr "Posting" -#: engine/blog/models.py:73 +#: engine/blog/models.py:88 msgid "file uploads are not supported yet - use content instead" msgstr "" "File penurunan harga tidak didukung - gunakan konten penurunan harga sebagai" " gantinya!" -#: engine/blog/models.py:77 +#: engine/blog/models.py:92 msgid "a file or content must be provided - mutually exclusive" msgstr "" "file penurunan harga atau konten penurunan harga harus disediakan - tidak " "boleh ada yang sama" -#: engine/blog/models.py:110 +#: engine/blog/models.py:125 msgid "internal tag identifier for the post tag" msgstr "pengidentifikasi tag internal untuk tag pos" -#: engine/blog/models.py:111 +#: engine/blog/models.py:126 msgid "tag name" msgstr "Nama tag" -#: engine/blog/models.py:115 +#: engine/blog/models.py:130 msgid "user-friendly name for the post tag" msgstr "Nama yang mudah digunakan untuk tag postingan" -#: engine/blog/models.py:116 +#: engine/blog/models.py:131 msgid "tag display name" msgstr "Nama tampilan tag" -#: engine/blog/models.py:124 +#: engine/blog/models.py:139 msgid "post tag" msgstr "Tag pos" -#: engine/blog/models.py:125 +#: engine/blog/models.py:140 msgid "post tags" msgstr "Tag pos" diff --git a/engine/blog/locale/it_IT/LC_MESSAGES/django.mo b/engine/blog/locale/it_IT/LC_MESSAGES/django.mo index 51222dab..9d51ce48 100644 Binary files a/engine/blog/locale/it_IT/LC_MESSAGES/django.mo and b/engine/blog/locale/it_IT/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/it_IT/LC_MESSAGES/django.po b/engine/blog/locale/it_IT/LC_MESSAGES/django.po index e9f516bf..4e8c33bb 100644 --- a/engine/blog/locale/it_IT/LC_MESSAGES/django.po +++ b/engine/blog/locale/it_IT/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,6 +13,10 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#: engine/blog/admin.py:49 +msgid "picture preview" +msgstr "Anteprima immagine" + #: engine/blog/apps.py:8 msgid "blog" msgstr "Blog" @@ -25,7 +29,7 @@ msgstr "Elenco di tutti i messaggi (solo lettura)" msgid "retrieve a single post (read-only)" msgstr "Recuperare un singolo post (solo lettura)" -#: engine/blog/models.py:19 +#: engine/blog/models.py:22 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " @@ -41,73 +45,73 @@ msgstr "" " di un file allegato, ma non di entrambi contemporaneamente. Supporta anche " "la generazione automatica dello slug in base al titolo." -#: engine/blog/models.py:40 +#: engine/blog/models.py:43 msgid "post title" msgstr "Titolo del post" -#: engine/blog/models.py:41 +#: engine/blog/models.py:44 msgid "title" msgstr "Titolo" -#: engine/blog/models.py:44 +#: engine/blog/models.py:47 msgid "content" msgstr "contenuto" -#: engine/blog/models.py:45 +#: engine/blog/models.py:48 msgid "post content" msgstr "pubblicare contenuti" -#: engine/blog/models.py:57 +#: engine/blog/models.py:68 msgid "is static page" msgstr "è una pagina statica" -#: engine/blog/models.py:59 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "" "Si tratta di un post per una pagina con URL statico (ad esempio " "`/help/delivery`)?" -#: engine/blog/models.py:67 +#: engine/blog/models.py:82 msgid "post" msgstr "Posta" -#: engine/blog/models.py:68 +#: engine/blog/models.py:83 msgid "posts" msgstr "Messaggi" -#: engine/blog/models.py:73 +#: engine/blog/models.py:88 msgid "file uploads are not supported yet - use content instead" msgstr "" "Il caricamento dei file non è ancora supportato: utilizzare invece i " "contenuti." -#: engine/blog/models.py:77 +#: engine/blog/models.py:92 msgid "a file or content must be provided - mutually exclusive" msgstr "" "deve essere fornito un file markdown o un contenuto markdown - si escludono " "a vicenda" -#: engine/blog/models.py:110 +#: engine/blog/models.py:125 msgid "internal tag identifier for the post tag" msgstr "identificatore interno del tag post" -#: engine/blog/models.py:111 +#: engine/blog/models.py:126 msgid "tag name" msgstr "Nome del tag" -#: engine/blog/models.py:115 +#: engine/blog/models.py:130 msgid "user-friendly name for the post tag" msgstr "Nome intuitivo per il tag del post" -#: engine/blog/models.py:116 +#: engine/blog/models.py:131 msgid "tag display name" msgstr "Nome del tag" -#: engine/blog/models.py:124 +#: engine/blog/models.py:139 msgid "post tag" msgstr "Post tag" -#: engine/blog/models.py:125 +#: engine/blog/models.py:140 msgid "post tags" msgstr "Tag dei post" diff --git a/engine/blog/locale/ja_JP/LC_MESSAGES/django.mo b/engine/blog/locale/ja_JP/LC_MESSAGES/django.mo index cd343eee..502a2e25 100644 Binary files a/engine/blog/locale/ja_JP/LC_MESSAGES/django.mo and b/engine/blog/locale/ja_JP/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/ja_JP/LC_MESSAGES/django.po b/engine/blog/locale/ja_JP/LC_MESSAGES/django.po index e684b04e..fc55468d 100644 --- a/engine/blog/locale/ja_JP/LC_MESSAGES/django.po +++ b/engine/blog/locale/ja_JP/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,6 +13,10 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#: engine/blog/admin.py:49 +msgid "picture preview" +msgstr "画像プレビュー" + #: engine/blog/apps.py:8 msgid "blog" msgstr "ブログ" @@ -25,7 +29,7 @@ msgstr "すべての投稿をリストアップする(読み取り専用)" msgid "retrieve a single post (read-only)" msgstr "単一の投稿を取得する(読み取り専用)" -#: engine/blog/models.py:19 +#: engine/blog/models.py:22 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " @@ -37,67 +41,67 @@ msgstr "" "ブログ記事のモデルを表します。Post " "クラスはブログ記事の構造と動作を定義します。著者、タイトル、内容、オプションの添付ファイル、スラッグ、関連タグの属性を含みます。このクラスは、内容か添付ファイルのどちらかを要求するが、両方は同時に要求しないといった制約を強制します。また、タイトルに基づくスラッグの自動生成もサポートしています。" -#: engine/blog/models.py:40 +#: engine/blog/models.py:43 msgid "post title" msgstr "投稿タイトル" -#: engine/blog/models.py:41 +#: engine/blog/models.py:44 msgid "title" msgstr "タイトル" -#: engine/blog/models.py:44 +#: engine/blog/models.py:47 msgid "content" msgstr "内容" -#: engine/blog/models.py:45 +#: engine/blog/models.py:48 msgid "post content" msgstr "投稿内容" -#: engine/blog/models.py:57 +#: engine/blog/models.py:68 msgid "is static page" msgstr "は静的ページ" -#: engine/blog/models.py:59 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "これは静的URLのページ(例:`/help/delivery`)への投稿ですか?" -#: engine/blog/models.py:67 +#: engine/blog/models.py:82 msgid "post" msgstr "ポスト" -#: engine/blog/models.py:68 +#: engine/blog/models.py:83 msgid "posts" msgstr "投稿" -#: engine/blog/models.py:73 +#: engine/blog/models.py:88 msgid "file uploads are not supported yet - use content instead" msgstr "マークダウン・ファイルはサポートされていません - 代わりにマークダウン・コンテンツを使用してください!" -#: engine/blog/models.py:77 +#: engine/blog/models.py:92 msgid "a file or content must be provided - mutually exclusive" msgstr "マークダウン・ファイルまたはマークダウン・コンテンツを提供しなければならない。" -#: engine/blog/models.py:110 +#: engine/blog/models.py:125 msgid "internal tag identifier for the post tag" msgstr "投稿タグの内部タグ識別子" -#: engine/blog/models.py:111 +#: engine/blog/models.py:126 msgid "tag name" msgstr "タグ名" -#: engine/blog/models.py:115 +#: engine/blog/models.py:130 msgid "user-friendly name for the post tag" msgstr "投稿タグのユーザーフレンドリーな名前" -#: engine/blog/models.py:116 +#: engine/blog/models.py:131 msgid "tag display name" msgstr "タグ表示名" -#: engine/blog/models.py:124 +#: engine/blog/models.py:139 msgid "post tag" msgstr "投稿タグ" -#: engine/blog/models.py:125 +#: engine/blog/models.py:140 msgid "post tags" msgstr "投稿タグ" diff --git a/engine/blog/locale/kk_KZ/LC_MESSAGES/django.po b/engine/blog/locale/kk_KZ/LC_MESSAGES/django.po index 087286ae..f6c2ff0d 100644 --- a/engine/blog/locale/kk_KZ/LC_MESSAGES/django.po +++ b/engine/blog/locale/kk_KZ/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:13+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -12,6 +12,10 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +#: engine/blog/admin.py:49 +msgid "picture preview" +msgstr "" + #: engine/blog/apps.py:8 msgid "blog" msgstr "" @@ -24,7 +28,7 @@ msgstr "" msgid "retrieve a single post (read-only)" msgstr "" -#: engine/blog/models.py:19 +#: engine/blog/models.py:22 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " @@ -34,67 +38,67 @@ msgid "" "title." msgstr "" -#: engine/blog/models.py:40 +#: engine/blog/models.py:43 msgid "post title" msgstr "" -#: engine/blog/models.py:41 +#: engine/blog/models.py:44 msgid "title" msgstr "" -#: engine/blog/models.py:44 +#: engine/blog/models.py:47 msgid "content" msgstr "" -#: engine/blog/models.py:45 +#: engine/blog/models.py:48 msgid "post content" msgstr "" -#: engine/blog/models.py:57 +#: engine/blog/models.py:68 msgid "is static page" msgstr "" -#: engine/blog/models.py:59 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "" -#: engine/blog/models.py:67 +#: engine/blog/models.py:82 msgid "post" msgstr "" -#: engine/blog/models.py:68 +#: engine/blog/models.py:83 msgid "posts" msgstr "" -#: engine/blog/models.py:73 +#: engine/blog/models.py:88 msgid "file uploads are not supported yet - use content instead" msgstr "" -#: engine/blog/models.py:77 +#: engine/blog/models.py:92 msgid "a file or content must be provided - mutually exclusive" msgstr "" -#: engine/blog/models.py:110 +#: engine/blog/models.py:125 msgid "internal tag identifier for the post tag" msgstr "" -#: engine/blog/models.py:111 +#: engine/blog/models.py:126 msgid "tag name" msgstr "" -#: engine/blog/models.py:115 +#: engine/blog/models.py:130 msgid "user-friendly name for the post tag" msgstr "" -#: engine/blog/models.py:116 +#: engine/blog/models.py:131 msgid "tag display name" msgstr "" -#: engine/blog/models.py:124 +#: engine/blog/models.py:139 msgid "post tag" msgstr "" -#: engine/blog/models.py:125 +#: engine/blog/models.py:140 msgid "post tags" msgstr "" diff --git a/engine/blog/locale/ko_KR/LC_MESSAGES/django.mo b/engine/blog/locale/ko_KR/LC_MESSAGES/django.mo index ad997dbf..a0447aa2 100644 Binary files a/engine/blog/locale/ko_KR/LC_MESSAGES/django.mo and b/engine/blog/locale/ko_KR/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/ko_KR/LC_MESSAGES/django.po b/engine/blog/locale/ko_KR/LC_MESSAGES/django.po index 2b1eec1c..72945da4 100644 --- a/engine/blog/locale/ko_KR/LC_MESSAGES/django.po +++ b/engine/blog/locale/ko_KR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,6 +13,10 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#: engine/blog/admin.py:49 +msgid "picture preview" +msgstr "사진 미리보기" + #: engine/blog/apps.py:8 msgid "blog" msgstr "블로그" @@ -25,7 +29,7 @@ msgstr "모든 게시물 나열(읽기 전용)" msgid "retrieve a single post (read-only)" msgstr "단일 게시물 검색(읽기 전용)" -#: engine/blog/models.py:19 +#: engine/blog/models.py:22 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " @@ -38,67 +42,67 @@ msgstr "" "첨부, 슬러그 및 관련 태그에 대한 속성이 포함됩니다. 이 클래스는 콘텐츠 또는 파일 첨부 중 하나만 요구하고 둘 다 동시에 요구하지 " "않는 등의 제약 조건을 적용합니다. 또한 제목에 따른 자동 슬러그 생성도 지원합니다." -#: engine/blog/models.py:40 +#: engine/blog/models.py:43 msgid "post title" msgstr "게시물 제목" -#: engine/blog/models.py:41 +#: engine/blog/models.py:44 msgid "title" msgstr "제목" -#: engine/blog/models.py:44 +#: engine/blog/models.py:47 msgid "content" msgstr "콘텐츠" -#: engine/blog/models.py:45 +#: engine/blog/models.py:48 msgid "post content" msgstr "게시물 내용" -#: engine/blog/models.py:57 +#: engine/blog/models.py:68 msgid "is static page" msgstr "는 정적 페이지입니다." -#: engine/blog/models.py:59 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "정적 URL(예: `/help/delivery`)이 있는 페이지의 게시물인가요?" -#: engine/blog/models.py:67 +#: engine/blog/models.py:82 msgid "post" msgstr "게시물" -#: engine/blog/models.py:68 +#: engine/blog/models.py:83 msgid "posts" msgstr "게시물" -#: engine/blog/models.py:73 +#: engine/blog/models.py:88 msgid "file uploads are not supported yet - use content instead" msgstr "마크다운 파일은 지원되지 않습니다 예 - 대신 마크다운 콘텐츠를 사용하세요!" -#: engine/blog/models.py:77 +#: engine/blog/models.py:92 msgid "a file or content must be provided - mutually exclusive" msgstr "마크다운 파일 또는 마크다운 콘텐츠를 제공해야 합니다 - 상호 배타적" -#: engine/blog/models.py:110 +#: engine/blog/models.py:125 msgid "internal tag identifier for the post tag" msgstr "게시물 태그의 내부 태그 식별자" -#: engine/blog/models.py:111 +#: engine/blog/models.py:126 msgid "tag name" msgstr "태그 이름" -#: engine/blog/models.py:115 +#: engine/blog/models.py:130 msgid "user-friendly name for the post tag" msgstr "게시물 태그의 사용자 친화적인 이름" -#: engine/blog/models.py:116 +#: engine/blog/models.py:131 msgid "tag display name" msgstr "태그 표시 이름" -#: engine/blog/models.py:124 +#: engine/blog/models.py:139 msgid "post tag" msgstr "게시물 태그" -#: engine/blog/models.py:125 +#: engine/blog/models.py:140 msgid "post tags" msgstr "게시물 태그" diff --git a/engine/blog/locale/nl_NL/LC_MESSAGES/django.mo b/engine/blog/locale/nl_NL/LC_MESSAGES/django.mo index 0b36d5fe..604c1ecd 100644 Binary files a/engine/blog/locale/nl_NL/LC_MESSAGES/django.mo and b/engine/blog/locale/nl_NL/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/nl_NL/LC_MESSAGES/django.po b/engine/blog/locale/nl_NL/LC_MESSAGES/django.po index 64c1ea99..787d0931 100644 --- a/engine/blog/locale/nl_NL/LC_MESSAGES/django.po +++ b/engine/blog/locale/nl_NL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,6 +13,10 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#: engine/blog/admin.py:49 +msgid "picture preview" +msgstr "Afbeelding preview" + #: engine/blog/apps.py:8 msgid "blog" msgstr "Blog" @@ -25,7 +29,7 @@ msgstr "Alle berichten weergeven (alleen-lezen)" msgid "retrieve a single post (read-only)" msgstr "Een enkel bericht ophalen (alleen-lezen)" -#: engine/blog/models.py:19 +#: engine/blog/models.py:22 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " @@ -41,73 +45,73 @@ msgstr "" "maar niet beide tegelijk. Het ondersteunt ook het automatisch genereren van " "slugs op basis van de titel." -#: engine/blog/models.py:40 +#: engine/blog/models.py:43 msgid "post title" msgstr "Titel van de post" -#: engine/blog/models.py:41 +#: engine/blog/models.py:44 msgid "title" msgstr "Titel" -#: engine/blog/models.py:44 +#: engine/blog/models.py:47 msgid "content" msgstr "inhoud" -#: engine/blog/models.py:45 +#: engine/blog/models.py:48 msgid "post content" msgstr "berichtinhoud" -#: engine/blog/models.py:57 +#: engine/blog/models.py:68 msgid "is static page" msgstr "is statische pagina" -#: engine/blog/models.py:59 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "" "Is dit een bericht voor een pagina met een statische URL (bijv. " "`/help/delivery`)?" -#: engine/blog/models.py:67 +#: engine/blog/models.py:82 msgid "post" msgstr "Plaats" -#: engine/blog/models.py:68 +#: engine/blog/models.py:83 msgid "posts" msgstr "Berichten" -#: engine/blog/models.py:73 +#: engine/blog/models.py:88 msgid "file uploads are not supported yet - use content instead" msgstr "" "Markdown-bestanden worden niet ondersteund - gebruik in plaats daarvan " "markdown-inhoud!" -#: engine/blog/models.py:77 +#: engine/blog/models.py:92 msgid "a file or content must be provided - mutually exclusive" msgstr "" "er moet een markdown-bestand of markdown-inhoud worden geleverd - wederzijds" " exclusief" -#: engine/blog/models.py:110 +#: engine/blog/models.py:125 msgid "internal tag identifier for the post tag" msgstr "interne tagidentifier voor de posttag" -#: engine/blog/models.py:111 +#: engine/blog/models.py:126 msgid "tag name" msgstr "Tag naam" -#: engine/blog/models.py:115 +#: engine/blog/models.py:130 msgid "user-friendly name for the post tag" msgstr "Gebruiksvriendelijke naam voor de posttag" -#: engine/blog/models.py:116 +#: engine/blog/models.py:131 msgid "tag display name" msgstr "Tag weergavenaam" -#: engine/blog/models.py:124 +#: engine/blog/models.py:139 msgid "post tag" msgstr "Post tag" -#: engine/blog/models.py:125 +#: engine/blog/models.py:140 msgid "post tags" msgstr "Post tags" diff --git a/engine/blog/locale/no_NO/LC_MESSAGES/django.mo b/engine/blog/locale/no_NO/LC_MESSAGES/django.mo index 72f737bc..263fefeb 100644 Binary files a/engine/blog/locale/no_NO/LC_MESSAGES/django.mo and b/engine/blog/locale/no_NO/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/no_NO/LC_MESSAGES/django.po b/engine/blog/locale/no_NO/LC_MESSAGES/django.po index bf2e7048..84835b79 100644 --- a/engine/blog/locale/no_NO/LC_MESSAGES/django.po +++ b/engine/blog/locale/no_NO/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,6 +13,10 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#: engine/blog/admin.py:49 +msgid "picture preview" +msgstr "Bildeforhåndsvisning" + #: engine/blog/apps.py:8 msgid "blog" msgstr "Blogg" @@ -25,7 +29,7 @@ msgstr "Liste over alle innlegg (skrivebeskyttet)" msgid "retrieve a single post (read-only)" msgstr "Hent et enkelt innlegg (skrivebeskyttet)" -#: engine/blog/models.py:19 +#: engine/blog/models.py:22 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " @@ -41,69 +45,69 @@ msgstr "" "må være med, men ikke begge deler samtidig. Den støtter også automatisk " "generering av slug basert på tittelen." -#: engine/blog/models.py:40 +#: engine/blog/models.py:43 msgid "post title" msgstr "Innleggets tittel" -#: engine/blog/models.py:41 +#: engine/blog/models.py:44 msgid "title" msgstr "Title" -#: engine/blog/models.py:44 +#: engine/blog/models.py:47 msgid "content" msgstr "innhold" -#: engine/blog/models.py:45 +#: engine/blog/models.py:48 msgid "post content" msgstr "innleggsinnhold" -#: engine/blog/models.py:57 +#: engine/blog/models.py:68 msgid "is static page" msgstr "er statisk side" -#: engine/blog/models.py:59 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "" "er dette et innlegg for en side med statisk URL (f.eks. `/help/delivery`)?" -#: engine/blog/models.py:67 +#: engine/blog/models.py:82 msgid "post" msgstr "Post" -#: engine/blog/models.py:68 +#: engine/blog/models.py:83 msgid "posts" msgstr "Innlegg" -#: engine/blog/models.py:73 +#: engine/blog/models.py:88 msgid "file uploads are not supported yet - use content instead" msgstr "filopplasting støttes ikke ennå – bruk innhold i stedet" -#: engine/blog/models.py:77 +#: engine/blog/models.py:92 msgid "a file or content must be provided - mutually exclusive" msgstr "" "en markdown-fil eller markdown-innhold må oppgis - gjensidig utelukkende" -#: engine/blog/models.py:110 +#: engine/blog/models.py:125 msgid "internal tag identifier for the post tag" msgstr "intern tagg-identifikator for innleggstaggen" -#: engine/blog/models.py:111 +#: engine/blog/models.py:126 msgid "tag name" msgstr "Tagg navn" -#: engine/blog/models.py:115 +#: engine/blog/models.py:130 msgid "user-friendly name for the post tag" msgstr "Brukervennlig navn for innleggstaggen" -#: engine/blog/models.py:116 +#: engine/blog/models.py:131 msgid "tag display name" msgstr "Visningsnavn for taggen" -#: engine/blog/models.py:124 +#: engine/blog/models.py:139 msgid "post tag" msgstr "Post tag" -#: engine/blog/models.py:125 +#: engine/blog/models.py:140 msgid "post tags" msgstr "Tagger for innlegg" diff --git a/engine/blog/locale/pl_PL/LC_MESSAGES/django.mo b/engine/blog/locale/pl_PL/LC_MESSAGES/django.mo index d49ea28f..3493a5b2 100644 Binary files a/engine/blog/locale/pl_PL/LC_MESSAGES/django.mo and b/engine/blog/locale/pl_PL/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/pl_PL/LC_MESSAGES/django.po b/engine/blog/locale/pl_PL/LC_MESSAGES/django.po index 4d84be41..ec12a796 100644 --- a/engine/blog/locale/pl_PL/LC_MESSAGES/django.po +++ b/engine/blog/locale/pl_PL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,6 +13,10 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#: engine/blog/admin.py:49 +msgid "picture preview" +msgstr "Podgląd obrazu" + #: engine/blog/apps.py:8 msgid "blog" msgstr "Blog" @@ -25,7 +29,7 @@ msgstr "Lista wszystkich postów (tylko do odczytu)" msgid "retrieve a single post (read-only)" msgstr "Pobieranie pojedynczego wpisu (tylko do odczytu)" -#: engine/blog/models.py:19 +#: engine/blog/models.py:22 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " @@ -41,72 +45,72 @@ msgstr "" "nie obu jednocześnie. Obsługuje również automatyczne generowanie slug na " "podstawie tytułu." -#: engine/blog/models.py:40 +#: engine/blog/models.py:43 msgid "post title" msgstr "Tytuł postu" -#: engine/blog/models.py:41 +#: engine/blog/models.py:44 msgid "title" msgstr "Tytuł" -#: engine/blog/models.py:44 +#: engine/blog/models.py:47 msgid "content" msgstr "treść" -#: engine/blog/models.py:45 +#: engine/blog/models.py:48 msgid "post content" msgstr "treść postu" -#: engine/blog/models.py:57 +#: engine/blog/models.py:68 msgid "is static page" msgstr "jest stroną statyczną" -#: engine/blog/models.py:59 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "" "Czy jest to post dla strony ze statycznym adresem URL (np. " "`/help/delivery`)?" -#: engine/blog/models.py:67 +#: engine/blog/models.py:82 msgid "post" msgstr "Post" -#: engine/blog/models.py:68 +#: engine/blog/models.py:83 msgid "posts" msgstr "Posty" -#: engine/blog/models.py:73 +#: engine/blog/models.py:88 msgid "file uploads are not supported yet - use content instead" msgstr "" "Pliki Markdown nie są obsługiwane - zamiast tego użyj zawartości Markdown!" -#: engine/blog/models.py:77 +#: engine/blog/models.py:92 msgid "a file or content must be provided - mutually exclusive" msgstr "" "należy dostarczyć plik markdown lub zawartość markdown - wzajemnie się " "wykluczające" -#: engine/blog/models.py:110 +#: engine/blog/models.py:125 msgid "internal tag identifier for the post tag" msgstr "wewnętrzny identyfikator tagu posta" -#: engine/blog/models.py:111 +#: engine/blog/models.py:126 msgid "tag name" msgstr "Nazwa tagu" -#: engine/blog/models.py:115 +#: engine/blog/models.py:130 msgid "user-friendly name for the post tag" msgstr "Przyjazna dla użytkownika nazwa tagu posta" -#: engine/blog/models.py:116 +#: engine/blog/models.py:131 msgid "tag display name" msgstr "Wyświetlana nazwa znacznika" -#: engine/blog/models.py:124 +#: engine/blog/models.py:139 msgid "post tag" msgstr "Tag posta" -#: engine/blog/models.py:125 +#: engine/blog/models.py:140 msgid "post tags" msgstr "Tagi postów" diff --git a/engine/blog/locale/pt_BR/LC_MESSAGES/django.mo b/engine/blog/locale/pt_BR/LC_MESSAGES/django.mo index 5575a822..804ce6df 100644 Binary files a/engine/blog/locale/pt_BR/LC_MESSAGES/django.mo and b/engine/blog/locale/pt_BR/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/pt_BR/LC_MESSAGES/django.po b/engine/blog/locale/pt_BR/LC_MESSAGES/django.po index 8400e87b..f787df0b 100644 --- a/engine/blog/locale/pt_BR/LC_MESSAGES/django.po +++ b/engine/blog/locale/pt_BR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,6 +13,10 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#: engine/blog/admin.py:49 +msgid "picture preview" +msgstr "Pré-visualização da imagem" + #: engine/blog/apps.py:8 msgid "blog" msgstr "Blog" @@ -25,7 +29,7 @@ msgstr "Listar todas as postagens (somente leitura)" msgid "retrieve a single post (read-only)" msgstr "Recuperar um único post (somente leitura)" -#: engine/blog/models.py:19 +#: engine/blog/models.py:22 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " @@ -41,72 +45,72 @@ msgstr "" "simultaneamente. Ela também oferece suporte à geração automática de slug com" " base no título." -#: engine/blog/models.py:40 +#: engine/blog/models.py:43 msgid "post title" msgstr "Título da postagem" -#: engine/blog/models.py:41 +#: engine/blog/models.py:44 msgid "title" msgstr "Título" -#: engine/blog/models.py:44 +#: engine/blog/models.py:47 msgid "content" msgstr "conteúdo" -#: engine/blog/models.py:45 +#: engine/blog/models.py:48 msgid "post content" msgstr "conteúdo da publicação" -#: engine/blog/models.py:57 +#: engine/blog/models.py:68 msgid "is static page" msgstr "é uma página estática" -#: engine/blog/models.py:59 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "" "Essa é uma postagem para uma página com URL estático (por exemplo, " "`/help/delivery`)?" -#: engine/blog/models.py:67 +#: engine/blog/models.py:82 msgid "post" msgstr "Postar" -#: engine/blog/models.py:68 +#: engine/blog/models.py:83 msgid "posts" msgstr "Publicações" -#: engine/blog/models.py:73 +#: engine/blog/models.py:88 msgid "file uploads are not supported yet - use content instead" msgstr "" "Os arquivos markdown não são suportados - use conteúdo markdown em vez " "disso!" -#: engine/blog/models.py:77 +#: engine/blog/models.py:92 msgid "a file or content must be provided - mutually exclusive" msgstr "" "um arquivo ou conteúdo de markdown deve ser fornecido - mutuamente exclusivo" -#: engine/blog/models.py:110 +#: engine/blog/models.py:125 msgid "internal tag identifier for the post tag" msgstr "identificador de tag interno para a tag de postagem" -#: engine/blog/models.py:111 +#: engine/blog/models.py:126 msgid "tag name" msgstr "Nome da etiqueta" -#: engine/blog/models.py:115 +#: engine/blog/models.py:130 msgid "user-friendly name for the post tag" msgstr "Nome de fácil utilização para a tag de postagem" -#: engine/blog/models.py:116 +#: engine/blog/models.py:131 msgid "tag display name" msgstr "Nome de exibição da tag" -#: engine/blog/models.py:124 +#: engine/blog/models.py:139 msgid "post tag" msgstr "Etiqueta de postagem" -#: engine/blog/models.py:125 +#: engine/blog/models.py:140 msgid "post tags" msgstr "Tags de postagem" diff --git a/engine/blog/locale/ro_RO/LC_MESSAGES/django.mo b/engine/blog/locale/ro_RO/LC_MESSAGES/django.mo index bc034e02..4d05906a 100644 Binary files a/engine/blog/locale/ro_RO/LC_MESSAGES/django.mo and b/engine/blog/locale/ro_RO/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/ro_RO/LC_MESSAGES/django.po b/engine/blog/locale/ro_RO/LC_MESSAGES/django.po index 1c04321c..bd76db39 100644 --- a/engine/blog/locale/ro_RO/LC_MESSAGES/django.po +++ b/engine/blog/locale/ro_RO/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,6 +13,10 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#: engine/blog/admin.py:49 +msgid "picture preview" +msgstr "Previzualizare imagine" + #: engine/blog/apps.py:8 msgid "blog" msgstr "Blog" @@ -25,7 +29,7 @@ msgstr "Listează toate postările (doar pentru citire)" msgid "retrieve a single post (read-only)" msgstr "Recuperează o singură postare (read-only)" -#: engine/blog/models.py:19 +#: engine/blog/models.py:22 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " @@ -41,73 +45,73 @@ msgstr "" "fișier atașat, dar nu ambele simultan. De asemenea, acceptă generarea " "automată a slug-ului pe baza titlului." -#: engine/blog/models.py:40 +#: engine/blog/models.py:43 msgid "post title" msgstr "Titlul postului" -#: engine/blog/models.py:41 +#: engine/blog/models.py:44 msgid "title" msgstr "Titlul" -#: engine/blog/models.py:44 +#: engine/blog/models.py:47 msgid "content" msgstr "conținut" -#: engine/blog/models.py:45 +#: engine/blog/models.py:48 msgid "post content" msgstr "conținutul postării" -#: engine/blog/models.py:57 +#: engine/blog/models.py:68 msgid "is static page" msgstr "este o pagină statică" -#: engine/blog/models.py:59 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "" "este aceasta o postare pentru o pagină cu URL static (de exemplu " "`/help/delivery`)?" -#: engine/blog/models.py:67 +#: engine/blog/models.py:82 msgid "post" msgstr "Post" -#: engine/blog/models.py:68 +#: engine/blog/models.py:83 msgid "posts" msgstr "Mesaje" -#: engine/blog/models.py:73 +#: engine/blog/models.py:88 msgid "file uploads are not supported yet - use content instead" msgstr "" "Fișierele Markdown nu sunt acceptate - utilizați în schimb conținut " "Markdown!" -#: engine/blog/models.py:77 +#: engine/blog/models.py:92 msgid "a file or content must be provided - mutually exclusive" msgstr "" "trebuie furnizat un fișier markdown sau conținut markdown - se exclud " "reciproc" -#: engine/blog/models.py:110 +#: engine/blog/models.py:125 msgid "internal tag identifier for the post tag" msgstr "identificator intern de etichetă pentru eticheta postului" -#: engine/blog/models.py:111 +#: engine/blog/models.py:126 msgid "tag name" msgstr "Nume etichetă" -#: engine/blog/models.py:115 +#: engine/blog/models.py:130 msgid "user-friendly name for the post tag" msgstr "Nume ușor de utilizat pentru eticheta postului" -#: engine/blog/models.py:116 +#: engine/blog/models.py:131 msgid "tag display name" msgstr "Nume afișare etichetă" -#: engine/blog/models.py:124 +#: engine/blog/models.py:139 msgid "post tag" msgstr "Etichetă post" -#: engine/blog/models.py:125 +#: engine/blog/models.py:140 msgid "post tags" msgstr "Etichete poștale" diff --git a/engine/blog/locale/ru_RU/LC_MESSAGES/django.mo b/engine/blog/locale/ru_RU/LC_MESSAGES/django.mo index f8c23f51..f86845fc 100644 Binary files a/engine/blog/locale/ru_RU/LC_MESSAGES/django.mo and b/engine/blog/locale/ru_RU/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/ru_RU/LC_MESSAGES/django.po b/engine/blog/locale/ru_RU/LC_MESSAGES/django.po index 25319683..35e817d8 100644 --- a/engine/blog/locale/ru_RU/LC_MESSAGES/django.po +++ b/engine/blog/locale/ru_RU/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,6 +13,10 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#: engine/blog/admin.py:49 +msgid "picture preview" +msgstr "Предварительный просмотр изображения" + #: engine/blog/apps.py:8 msgid "blog" msgstr "Блог" @@ -25,7 +29,7 @@ msgstr "Список всех сообщений (только для чтени msgid "retrieve a single post (read-only)" msgstr "Получение одного сообщения (только для чтения)" -#: engine/blog/models.py:19 +#: engine/blog/models.py:22 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " @@ -41,72 +45,72 @@ msgstr "" "вложение файла, но не то и другое одновременно. Он также поддерживает " "автоматическую генерацию slug на основе заголовка." -#: engine/blog/models.py:40 +#: engine/blog/models.py:43 msgid "post title" msgstr "Заголовок сообщения" -#: engine/blog/models.py:41 +#: engine/blog/models.py:44 msgid "title" msgstr "Название" -#: engine/blog/models.py:44 +#: engine/blog/models.py:47 msgid "content" msgstr "содержание" -#: engine/blog/models.py:45 +#: engine/blog/models.py:48 msgid "post content" msgstr "содержание публикации" -#: engine/blog/models.py:57 +#: engine/blog/models.py:68 msgid "is static page" msgstr "это статическая страница" -#: engine/blog/models.py:59 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "" "Это сообщение для страницы со статическим URL (например, `/help/delivery`)?" -#: engine/blog/models.py:67 +#: engine/blog/models.py:82 msgid "post" msgstr "Пост" -#: engine/blog/models.py:68 +#: engine/blog/models.py:83 msgid "posts" msgstr "Посты" -#: engine/blog/models.py:73 +#: engine/blog/models.py:88 msgid "file uploads are not supported yet - use content instead" msgstr "" "Файлы в формате Markdown не поддерживаются - используйте вместо них " "содержимое в формате Markdown!" -#: engine/blog/models.py:77 +#: engine/blog/models.py:92 msgid "a file or content must be provided - mutually exclusive" msgstr "" "необходимо предоставить файл разметки или содержимое разметки - " "взаимоисключающие варианты" -#: engine/blog/models.py:110 +#: engine/blog/models.py:125 msgid "internal tag identifier for the post tag" msgstr "внутренний идентификатор тега для тега post" -#: engine/blog/models.py:111 +#: engine/blog/models.py:126 msgid "tag name" msgstr "Название тега" -#: engine/blog/models.py:115 +#: engine/blog/models.py:130 msgid "user-friendly name for the post tag" msgstr "Удобное для пользователя название тега поста" -#: engine/blog/models.py:116 +#: engine/blog/models.py:131 msgid "tag display name" msgstr "Отображаемое имя тега" -#: engine/blog/models.py:124 +#: engine/blog/models.py:139 msgid "post tag" msgstr "Тэг поста" -#: engine/blog/models.py:125 +#: engine/blog/models.py:140 msgid "post tags" msgstr "Тэги постов" diff --git a/engine/blog/locale/sv_SE/LC_MESSAGES/django.mo b/engine/blog/locale/sv_SE/LC_MESSAGES/django.mo index 1f0afa37..a58f8d21 100644 Binary files a/engine/blog/locale/sv_SE/LC_MESSAGES/django.mo and b/engine/blog/locale/sv_SE/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/sv_SE/LC_MESSAGES/django.po b/engine/blog/locale/sv_SE/LC_MESSAGES/django.po index 6b46d2f7..6fc1cd27 100644 --- a/engine/blog/locale/sv_SE/LC_MESSAGES/django.po +++ b/engine/blog/locale/sv_SE/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,6 +13,10 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#: engine/blog/admin.py:49 +msgid "picture preview" +msgstr "Bildförhandsvisning" + #: engine/blog/apps.py:8 msgid "blog" msgstr "Blogg" @@ -25,7 +29,7 @@ msgstr "Lista alla inlägg (skrivskyddad)" msgid "retrieve a single post (read-only)" msgstr "Hämta ett enskilt inlägg (skrivskyddat)" -#: engine/blog/models.py:19 +#: engine/blog/models.py:22 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " @@ -41,70 +45,70 @@ msgstr "" "filbilaga krävs, men inte båda samtidigt. Den stöder också automatisk " "sluggenerering baserat på titeln." -#: engine/blog/models.py:40 +#: engine/blog/models.py:43 msgid "post title" msgstr "Inläggets titel" -#: engine/blog/models.py:41 +#: engine/blog/models.py:44 msgid "title" msgstr "Titel" -#: engine/blog/models.py:44 +#: engine/blog/models.py:47 msgid "content" msgstr "innehåll" -#: engine/blog/models.py:45 +#: engine/blog/models.py:48 msgid "post content" msgstr "inläggsinnehåll" -#: engine/blog/models.py:57 +#: engine/blog/models.py:68 msgid "is static page" msgstr "är statisk sida" -#: engine/blog/models.py:59 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "" "är detta ett inlägg för en sida med statisk URL (t.ex. `/help/delivery`)?" -#: engine/blog/models.py:67 +#: engine/blog/models.py:82 msgid "post" msgstr "Post" -#: engine/blog/models.py:68 +#: engine/blog/models.py:83 msgid "posts" msgstr "Inlägg" -#: engine/blog/models.py:73 +#: engine/blog/models.py:88 msgid "file uploads are not supported yet - use content instead" msgstr "filuppladdningar stöds ännu inte – använd innehåll istället" -#: engine/blog/models.py:77 +#: engine/blog/models.py:92 msgid "a file or content must be provided - mutually exclusive" msgstr "" "en markdown-fil eller markdown-innehåll måste tillhandahållas - ömsesidigt " "uteslutande" -#: engine/blog/models.py:110 +#: engine/blog/models.py:125 msgid "internal tag identifier for the post tag" msgstr "intern taggidentifierare för inläggstaggen" -#: engine/blog/models.py:111 +#: engine/blog/models.py:126 msgid "tag name" msgstr "Tagg namn" -#: engine/blog/models.py:115 +#: engine/blog/models.py:130 msgid "user-friendly name for the post tag" msgstr "Användarvänligt namn för inläggstaggen" -#: engine/blog/models.py:116 +#: engine/blog/models.py:131 msgid "tag display name" msgstr "Taggens visningsnamn" -#: engine/blog/models.py:124 +#: engine/blog/models.py:139 msgid "post tag" msgstr "Post tagg" -#: engine/blog/models.py:125 +#: engine/blog/models.py:140 msgid "post tags" msgstr "Taggar för inlägg" diff --git a/engine/blog/locale/th_TH/LC_MESSAGES/django.mo b/engine/blog/locale/th_TH/LC_MESSAGES/django.mo index 283fc508..c8e201e8 100644 Binary files a/engine/blog/locale/th_TH/LC_MESSAGES/django.mo and b/engine/blog/locale/th_TH/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/th_TH/LC_MESSAGES/django.po b/engine/blog/locale/th_TH/LC_MESSAGES/django.po index 7aa0df81..1d995a58 100644 --- a/engine/blog/locale/th_TH/LC_MESSAGES/django.po +++ b/engine/blog/locale/th_TH/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,6 +13,10 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#: engine/blog/admin.py:49 +msgid "picture preview" +msgstr "ภาพตัวอย่าง" + #: engine/blog/apps.py:8 msgid "blog" msgstr "บล็อก" @@ -25,7 +29,7 @@ msgstr "แสดงรายการโพสต์ทั้งหมด (อ msgid "retrieve a single post (read-only)" msgstr "ดึงโพสต์เดียว (อ่านอย่างเดียว)" -#: engine/blog/models.py:19 +#: engine/blog/models.py:22 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " @@ -42,69 +46,69 @@ msgstr "" "แต่ไม่สามารถมีทั้งสองอย่างพร้อมกันได้ นอกจากนี้ยังรองรับการสร้าง slug " "โดยอัตโนมัติจากชื่อเรื่อง" -#: engine/blog/models.py:40 +#: engine/blog/models.py:43 msgid "post title" msgstr "ชื่อโพสต์" -#: engine/blog/models.py:41 +#: engine/blog/models.py:44 msgid "title" msgstr "ชื่อเรื่อง" -#: engine/blog/models.py:44 +#: engine/blog/models.py:47 msgid "content" msgstr "เนื้อหา" -#: engine/blog/models.py:45 +#: engine/blog/models.py:48 msgid "post content" msgstr "โพสต์เนื้อหา" -#: engine/blog/models.py:57 +#: engine/blog/models.py:68 msgid "is static page" msgstr "เป็นหน้าคงที่" -#: engine/blog/models.py:59 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "นี่คือโพสต์สำหรับหน้าที่มี URL แบบคงที่ (เช่น `/help/delivery`)?" -#: engine/blog/models.py:67 +#: engine/blog/models.py:82 msgid "post" msgstr "โพสต์" -#: engine/blog/models.py:68 +#: engine/blog/models.py:83 msgid "posts" msgstr "โพสต์" -#: engine/blog/models.py:73 +#: engine/blog/models.py:88 msgid "file uploads are not supported yet - use content instead" msgstr "ยังไม่รองรับการอัปโหลดไฟล์ - กรุณาใช้เนื้อหาแทน" -#: engine/blog/models.py:77 +#: engine/blog/models.py:92 msgid "a file or content must be provided - mutually exclusive" msgstr "" "ไฟล์มาร์กดาวน์หรือเนื้อหาแบบมาร์กดาวน์ต้องได้รับการจัดเตรียมไว้ - " "ไม่สามารถใช้ร่วมกันได้" -#: engine/blog/models.py:110 +#: engine/blog/models.py:125 msgid "internal tag identifier for the post tag" msgstr "ตัวระบุแท็กภายในสำหรับแท็กโพสต์" -#: engine/blog/models.py:111 +#: engine/blog/models.py:126 msgid "tag name" msgstr "ชื่อวัน" -#: engine/blog/models.py:115 +#: engine/blog/models.py:130 msgid "user-friendly name for the post tag" msgstr "ชื่อที่ใช้งานได้ง่ายสำหรับแท็กโพสต์" -#: engine/blog/models.py:116 +#: engine/blog/models.py:131 msgid "tag display name" msgstr "แสดงชื่อแท็ก" -#: engine/blog/models.py:124 +#: engine/blog/models.py:139 msgid "post tag" msgstr "โพสต์แท็ก" -#: engine/blog/models.py:125 +#: engine/blog/models.py:140 msgid "post tags" msgstr "ป้ายกำกับโพสต์" diff --git a/engine/blog/locale/tr_TR/LC_MESSAGES/django.mo b/engine/blog/locale/tr_TR/LC_MESSAGES/django.mo index 1870d64b..5915c16e 100644 Binary files a/engine/blog/locale/tr_TR/LC_MESSAGES/django.mo and b/engine/blog/locale/tr_TR/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/tr_TR/LC_MESSAGES/django.po b/engine/blog/locale/tr_TR/LC_MESSAGES/django.po index 63aa0b9e..5c18904c 100644 --- a/engine/blog/locale/tr_TR/LC_MESSAGES/django.po +++ b/engine/blog/locale/tr_TR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,6 +13,10 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#: engine/blog/admin.py:49 +msgid "picture preview" +msgstr "Resim önizlemesi" + #: engine/blog/apps.py:8 msgid "blog" msgstr "Blog" @@ -25,7 +29,7 @@ msgstr "Tüm gönderileri listele (salt okunur)" msgid "retrieve a single post (read-only)" msgstr "Tek bir gönderiyi al (salt okunur)" -#: engine/blog/models.py:19 +#: engine/blog/models.py:22 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " @@ -41,73 +45,73 @@ msgstr "" "kısıtlamalar uygular. Ayrıca başlığa dayalı otomatik slug oluşturmayı da " "destekler." -#: engine/blog/models.py:40 +#: engine/blog/models.py:43 msgid "post title" msgstr "Gönderinin başlığı" -#: engine/blog/models.py:41 +#: engine/blog/models.py:44 msgid "title" msgstr "Başlık" -#: engine/blog/models.py:44 +#: engine/blog/models.py:47 msgid "content" msgstr "içerik" -#: engine/blog/models.py:45 +#: engine/blog/models.py:48 msgid "post content" msgstr "yazı içeriği" -#: engine/blog/models.py:57 +#: engine/blog/models.py:68 msgid "is static page" msgstr "statik sayfadır" -#: engine/blog/models.py:59 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "" "Bu, statik URL'ye sahip bir sayfa (örneğin `/help/delivery`) için bir " "gönderi mi?" -#: engine/blog/models.py:67 +#: engine/blog/models.py:82 msgid "post" msgstr "Posta" -#: engine/blog/models.py:68 +#: engine/blog/models.py:83 msgid "posts" msgstr "Mesajlar" -#: engine/blog/models.py:73 +#: engine/blog/models.py:88 msgid "file uploads are not supported yet - use content instead" msgstr "" "Markdown dosyaları desteklenmiyor yer - bunun yerine markdown içeriği " "kullanın!" -#: engine/blog/models.py:77 +#: engine/blog/models.py:92 msgid "a file or content must be provided - mutually exclusive" msgstr "" "bir markdown dosyası veya markdown içeriği sağlanmalıdır - birbirini " "dışlayan" -#: engine/blog/models.py:110 +#: engine/blog/models.py:125 msgid "internal tag identifier for the post tag" msgstr "gönderi etiketi için dahili etiket tanımlayıcısı" -#: engine/blog/models.py:111 +#: engine/blog/models.py:126 msgid "tag name" msgstr "Etiket adı" -#: engine/blog/models.py:115 +#: engine/blog/models.py:130 msgid "user-friendly name for the post tag" msgstr "Gönderi etiketi için kullanıcı dostu ad" -#: engine/blog/models.py:116 +#: engine/blog/models.py:131 msgid "tag display name" msgstr "Etiket görünen adı" -#: engine/blog/models.py:124 +#: engine/blog/models.py:139 msgid "post tag" msgstr "Mesaj etiketi" -#: engine/blog/models.py:125 +#: engine/blog/models.py:140 msgid "post tags" msgstr "Gönderi etiketleri" diff --git a/engine/blog/locale/vi_VN/LC_MESSAGES/django.mo b/engine/blog/locale/vi_VN/LC_MESSAGES/django.mo index 8a2703b4..12470c3a 100644 Binary files a/engine/blog/locale/vi_VN/LC_MESSAGES/django.mo and b/engine/blog/locale/vi_VN/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/vi_VN/LC_MESSAGES/django.po b/engine/blog/locale/vi_VN/LC_MESSAGES/django.po index 4b69d8ba..5e0ab34a 100644 --- a/engine/blog/locale/vi_VN/LC_MESSAGES/django.po +++ b/engine/blog/locale/vi_VN/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,6 +13,10 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#: engine/blog/admin.py:49 +msgid "picture preview" +msgstr "Xem trước hình ảnh" + #: engine/blog/apps.py:8 msgid "blog" msgstr "Blog" @@ -25,7 +29,7 @@ msgstr "Danh sách tất cả các bài đăng (chỉ đọc)" msgid "retrieve a single post (read-only)" msgstr "Lấy một bài đăng duy nhất (chỉ đọc)" -#: engine/blog/models.py:19 +#: engine/blog/models.py:22 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " @@ -40,72 +44,72 @@ msgstr "" "ràng buộc như yêu cầu phải có nội dung hoặc tệp đính kèm nhưng không cả hai " "cùng lúc. Nó cũng hỗ trợ tạo slug tự động dựa trên tiêu đề." -#: engine/blog/models.py:40 +#: engine/blog/models.py:43 msgid "post title" msgstr "Tiêu đề bài đăng" -#: engine/blog/models.py:41 +#: engine/blog/models.py:44 msgid "title" msgstr "Tiêu đề" -#: engine/blog/models.py:44 +#: engine/blog/models.py:47 msgid "content" msgstr "nội dung" -#: engine/blog/models.py:45 +#: engine/blog/models.py:48 msgid "post content" msgstr "Nội dung bài đăng" -#: engine/blog/models.py:57 +#: engine/blog/models.py:68 msgid "is static page" msgstr "là trang tĩnh" -#: engine/blog/models.py:59 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "" "Đây có phải là bài đăng cho một trang có URL tĩnh (ví dụ: `/help/delivery`) " "không?" -#: engine/blog/models.py:67 +#: engine/blog/models.py:82 msgid "post" msgstr "Bài đăng" -#: engine/blog/models.py:68 +#: engine/blog/models.py:83 msgid "posts" msgstr "Bài đăng" -#: engine/blog/models.py:73 +#: engine/blog/models.py:88 msgid "file uploads are not supported yet - use content instead" msgstr "" "Tệp Markdown hiện chưa được hỗ trợ - hãy sử dụng nội dung Markdown thay thế!" -#: engine/blog/models.py:77 +#: engine/blog/models.py:92 msgid "a file or content must be provided - mutually exclusive" msgstr "" "Phải cung cấp tệp Markdown hoặc nội dung Markdown - hai tùy chọn này là " "tương phản nhau." -#: engine/blog/models.py:110 +#: engine/blog/models.py:125 msgid "internal tag identifier for the post tag" msgstr "Mã định danh thẻ nội bộ cho thẻ bài viết" -#: engine/blog/models.py:111 +#: engine/blog/models.py:126 msgid "tag name" msgstr "Tên ngày" -#: engine/blog/models.py:115 +#: engine/blog/models.py:130 msgid "user-friendly name for the post tag" msgstr "Tên thân thiện với người dùng cho thẻ bài viết" -#: engine/blog/models.py:116 +#: engine/blog/models.py:131 msgid "tag display name" msgstr "Hiển thị tên thẻ" -#: engine/blog/models.py:124 +#: engine/blog/models.py:139 msgid "post tag" msgstr "Thẻ bài viết" -#: engine/blog/models.py:125 +#: engine/blog/models.py:140 msgid "post tags" msgstr "Thẻ bài viết" diff --git a/engine/blog/locale/zh_Hans/LC_MESSAGES/django.mo b/engine/blog/locale/zh_Hans/LC_MESSAGES/django.mo index 33b29390..15569509 100644 Binary files a/engine/blog/locale/zh_Hans/LC_MESSAGES/django.mo and b/engine/blog/locale/zh_Hans/LC_MESSAGES/django.mo differ diff --git a/engine/blog/locale/zh_Hans/LC_MESSAGES/django.po b/engine/blog/locale/zh_Hans/LC_MESSAGES/django.po index 1cde08d6..3aaf2cbd 100644 --- a/engine/blog/locale/zh_Hans/LC_MESSAGES/django.po +++ b/engine/blog/locale/zh_Hans/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,6 +13,10 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#: engine/blog/admin.py:49 +msgid "picture preview" +msgstr "图片预览" + #: engine/blog/apps.py:8 msgid "blog" msgstr "博客" @@ -25,7 +29,7 @@ msgstr "列出所有帖子(只读)" msgid "retrieve a single post (read-only)" msgstr "检索单个帖子(只读)" -#: engine/blog/models.py:19 +#: engine/blog/models.py:22 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " @@ -36,67 +40,67 @@ msgid "" msgstr "" "代表博文模型。帖子类定义了博文的结构和行为。它包括作者、标题、内容、可选文件附件、标签和相关标记的属性。该类可强制执行一些限制条件,如要求提供内容或文件附件,但不能同时提供这两种内容。它还支持根据标题自动生成标签。" -#: engine/blog/models.py:40 +#: engine/blog/models.py:43 msgid "post title" msgstr "帖子标题" -#: engine/blog/models.py:41 +#: engine/blog/models.py:44 msgid "title" msgstr "标题" -#: engine/blog/models.py:44 +#: engine/blog/models.py:47 msgid "content" msgstr "内容" -#: engine/blog/models.py:45 +#: engine/blog/models.py:48 msgid "post content" msgstr "发布内容" -#: engine/blog/models.py:57 +#: engine/blog/models.py:68 msgid "is static page" msgstr "是静态页面" -#: engine/blog/models.py:59 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "这是静态 URL 页面(如 `/help/delivery`)的帖子吗?" -#: engine/blog/models.py:67 +#: engine/blog/models.py:82 msgid "post" msgstr "职位" -#: engine/blog/models.py:68 +#: engine/blog/models.py:83 msgid "posts" msgstr "职位" -#: engine/blog/models.py:73 +#: engine/blog/models.py:88 msgid "file uploads are not supported yet - use content instead" msgstr "目前尚不支持文件上传——请改用内容上传功能" -#: engine/blog/models.py:77 +#: engine/blog/models.py:92 msgid "a file or content must be provided - mutually exclusive" msgstr "必须提供一个Markdown文件或Markdown内容——两者互斥" -#: engine/blog/models.py:110 +#: engine/blog/models.py:125 msgid "internal tag identifier for the post tag" msgstr "职位标签的内部标签标识符" -#: engine/blog/models.py:111 +#: engine/blog/models.py:126 msgid "tag name" msgstr "标签名称" -#: engine/blog/models.py:115 +#: engine/blog/models.py:130 msgid "user-friendly name for the post tag" msgstr "方便用户使用的帖子标签名称" -#: engine/blog/models.py:116 +#: engine/blog/models.py:131 msgid "tag display name" msgstr "标签显示名称" -#: engine/blog/models.py:124 +#: engine/blog/models.py:139 msgid "post tag" msgstr "职位标签" -#: engine/blog/models.py:125 +#: engine/blog/models.py:140 msgid "post tags" msgstr "帖子标签" diff --git a/engine/core/locale/ar_AR/LC_MESSAGES/django.mo b/engine/core/locale/ar_AR/LC_MESSAGES/django.mo index b0e1f277..1edf8f20 100644 Binary files a/engine/core/locale/ar_AR/LC_MESSAGES/django.mo and b/engine/core/locale/ar_AR/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/ar_AR/LC_MESSAGES/django.po b/engine/core/locale/ar_AR/LC_MESSAGES/django.po index 1335c1c0..1718de44 100644 --- a/engine/core/locale/ar_AR/LC_MESSAGES/django.po +++ b/engine/core/locale/ar_AR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -48,113 +48,133 @@ msgstr "تم التعديل" msgid "when the object was last modified" msgstr "متى تم تحرير الكائن آخر مرة" -#: engine/core/admin.py:94 +#: engine/core/admin.py:98 msgid "translations" msgstr "الترجمات" -#: engine/core/admin.py:102 +#: engine/core/admin.py:106 msgid "general" msgstr "جنرال لواء" -#: engine/core/admin.py:106 +#: engine/core/admin.py:110 msgid "relations" msgstr "العلاقات" -#: engine/core/admin.py:111 +#: engine/core/admin.py:115 msgid "additional info" msgstr "معلومات إضافية" -#: engine/core/admin.py:133 +#: engine/core/admin.py:137 msgid "metadata" msgstr "البيانات الوصفية" -#: engine/core/admin.py:141 +#: engine/core/admin.py:145 msgid "timestamps" msgstr "الطوابع الزمنية" -#: engine/core/admin.py:158 +#: engine/core/admin.py:162 #, python-format msgid "Activate selected %(verbose_name_plural)s" msgstr "تنشيط %(verbose_name_plural)s المحدد" -#: engine/core/admin.py:166 +#: engine/core/admin.py:170 msgid "selected items have been activated." msgstr "تم تفعيل العناصر المختارة!" -#: engine/core/admin.py:174 +#: engine/core/admin.py:178 #, python-format msgid "Deactivate selected %(verbose_name_plural)s" msgstr "إلغاء تنشيط %(verbose_name_plural)s المحدد" -#: engine/core/admin.py:184 +#: engine/core/admin.py:188 msgid "selected items have been deactivated." msgstr "تم إلغاء تنشيط العناصر المحددة!" -#: engine/core/admin.py:196 engine/core/graphene/object_types.py:653 -#: engine/core/graphene/object_types.py:660 engine/core/models.py:832 -#: engine/core/models.py:840 +#: engine/core/admin.py:200 engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:673 engine/core/models.py:918 +#: engine/core/models.py:928 msgid "attribute value" msgstr "قيمة السمة" -#: engine/core/admin.py:197 engine/core/graphene/object_types.py:77 -#: engine/core/models.py:841 +#: engine/core/admin.py:201 engine/core/graphene/object_types.py:81 +#: engine/core/models.py:929 msgid "attribute values" msgstr "قيم السمات" -#: engine/core/admin.py:208 +#: engine/core/admin.py:212 engine/core/models.py:2232 msgid "image" msgstr "الصورة" -#: engine/core/admin.py:209 engine/core/graphene/object_types.py:530 +#: engine/core/admin.py:213 engine/core/graphene/object_types.py:535 msgid "images" msgstr "الصور" -#: engine/core/admin.py:220 engine/core/models.py:576 +#: engine/core/admin.py:224 engine/core/models.py:635 msgid "stock" msgstr "المخزون" -#: engine/core/admin.py:221 engine/core/graphene/object_types.py:713 +#: engine/core/admin.py:225 engine/core/graphene/object_types.py:735 msgid "stocks" msgstr "الأسهم" -#: engine/core/admin.py:232 engine/core/models.py:1938 +#: engine/core/admin.py:236 engine/core/models.py:2046 msgid "order product" msgstr "طلب المنتج" -#: engine/core/admin.py:233 engine/core/graphene/object_types.py:441 -#: engine/core/models.py:1939 +#: engine/core/admin.py:237 engine/core/graphene/object_types.py:446 +#: engine/core/models.py:2047 msgid "order products" msgstr "اطلب المنتجات" -#: engine/core/admin.py:251 engine/core/admin.py:252 +#: engine/core/admin.py:255 engine/core/admin.py:256 msgid "children" msgstr "الأطفال" -#: engine/core/admin.py:528 +#: engine/core/admin.py:545 +msgid "video preview" +msgstr "معاينة الفيديو" + +#: engine/core/admin.py:551 msgid "has images" msgstr "يحتوي على صور" -#: engine/core/admin.py:531 +#: engine/core/admin.py:554 #, python-format msgid "Export selected %(verbose_name_plural)s to marketplaces' feeds" msgstr "تصدير %(verbose_name_plural)s المحدد إلى موجزات الأسواق" -#: engine/core/admin.py:542 +#: engine/core/admin.py:565 #, python-format msgid "selected %(verbose_name_plural)s have been marked for export." msgstr "تم تحديد %(verbose_name_plural)s للتصدير." -#: engine/core/admin.py:553 +#: engine/core/admin.py:576 #, python-format msgid "Ban selected %(verbose_name_plural)s from marketplaces' feeds" msgstr "حظر %(verbose_name_plural)s المحدد من موجزات الأسواق" -#: engine/core/admin.py:564 +#: engine/core/admin.py:587 #, python-format msgid "selected %(verbose_name_plural)s have been banned from export." msgstr "تم حظر تصدير %(verbose_name_plural)s المختار." -#: engine/core/admin.py:1116 +#: engine/core/admin.py:1030 +msgid "Preview" +msgstr "معاينة" + +#: engine/core/admin.py:1031 +msgid "Metadata" +msgstr "البيانات الوصفية" + +#: engine/core/admin.py:1034 +msgid "preview" +msgstr "معاينة" + +#: engine/core/admin.py:1043 +msgid "image preview" +msgstr "معاينة الصورة" + +#: engine/core/admin.py:1166 msgid "Config" msgstr "التكوين" @@ -221,7 +241,7 @@ msgstr "" " المحتوى. يمكن تحديد اللغة باستخدام معلمة قبول اللغة ومعلمة الاستعلام على حد" " سواء." -#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:36 +#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "ذاكرة التخزين المؤقت للإدخال/الإخراج" @@ -245,7 +265,7 @@ msgstr "الحصول على معلمات التطبيق القابلة للكش msgid "send a message to the support team" msgstr "إرسال رسالة إلى فريق الدعم" -#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:59 msgid "request a CORSed URL" msgstr "طلب عنوان URL مرتبط بـ CORSed. مسموح بـ https فقط." @@ -375,11 +395,11 @@ msgstr "إعادة كتابة فئة موجودة حفظ غير المواد غ msgid "rewrite some fields of an existing category saving non-editables" msgstr "إعادة كتابة بعض حقول فئة موجودة حفظ غير القابلة للتعديل" -#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757 -#: engine/core/docs/drf/viewsets.py:1046 -#: engine/core/graphene/object_types.py:119 -#: engine/core/graphene/object_types.py:239 -#: engine/core/graphene/object_types.py:540 +#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:781 +#: engine/core/docs/drf/viewsets.py:1070 +#: engine/core/graphene/object_types.py:123 +#: engine/core/graphene/object_types.py:247 +#: engine/core/graphene/object_types.py:546 msgid "SEO Meta snapshot" msgstr "لقطة تعريفية لتحسين محركات البحث SEO" @@ -661,7 +681,7 @@ msgstr "استرداد منتج واحد (عرض تفصيلي)" #: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683 #: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725 -#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763 +#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:787 msgid "Product UUID or slug" msgstr "معرف المنتج UUID أو سبيكة المنتج" @@ -686,39 +706,52 @@ msgstr "حذف منتج" msgid "lists all permitted feedbacks for a product" msgstr "سرد جميع الملاحظات المسموح بها للمنتج" -#: engine/core/docs/drf/viewsets.py:758 +#: engine/core/docs/drf/viewsets.py:757 +msgid "retrieve exact products by identifier" +msgstr "استرجاع المنتجات المحددة حسب المعرف" + +#: engine/core/docs/drf/viewsets.py:759 +msgid "" +"retrieve a list of products by identifier type (uuid, slug, or sku). Send a " +"POST request with `identificator_type` and `identificators` (list of " +"values)." +msgstr "" +"استرداد قائمة المنتجات حسب نوع المعرف (uuid أو slug أو sku). أرسل طلب POST " +"مع `identificator_type` و`identificators` (قائمة القيم)." + +#: engine/core/docs/drf/viewsets.py:782 msgid "returns a snapshot of the product's SEO meta data" msgstr "إرجاع لقطة من البيانات الوصفية لتحسين محركات البحث للمنتج" -#: engine/core/docs/drf/viewsets.py:779 +#: engine/core/docs/drf/viewsets.py:803 msgid "list all addresses" msgstr "قائمة بجميع العناوين" -#: engine/core/docs/drf/viewsets.py:789 +#: engine/core/docs/drf/viewsets.py:813 msgid "retrieve a single address" msgstr "استرجاع عنوان واحد" -#: engine/core/docs/drf/viewsets.py:799 +#: engine/core/docs/drf/viewsets.py:823 msgid "create a new address" msgstr "إنشاء عنوان جديد" -#: engine/core/docs/drf/viewsets.py:810 +#: engine/core/docs/drf/viewsets.py:834 msgid "delete an address" msgstr "حذف عنوان" -#: engine/core/docs/drf/viewsets.py:820 +#: engine/core/docs/drf/viewsets.py:844 msgid "update an entire address" msgstr "تحديث عنوان كامل" -#: engine/core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:855 msgid "partially update an address" msgstr "تحديث جزئي للعنوان" -#: engine/core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:866 msgid "autocomplete address suggestions" msgstr "إدخال عنوان الإكمال التلقائي" -#: engine/core/docs/drf/viewsets.py:848 +#: engine/core/docs/drf/viewsets.py:872 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" "تطبيق docker compose exec تطبيق docker exec الشعر تشغيل إدارة python.py " @@ -727,232 +760,232 @@ msgstr "" "pl -l pt-br -l ro-ro -l ru-ru -l zh-hans -l zh-ans -a core -a geo -a geo -a " "payments -a vibes_auth -a blog" -#: engine/core/docs/drf/viewsets.py:855 +#: engine/core/docs/drf/viewsets.py:879 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "تحديد كمية النتائج، 1 < الحد < 10، الافتراضي: 5" -#: engine/core/docs/drf/viewsets.py:871 +#: engine/core/docs/drf/viewsets.py:895 msgid "list all feedbacks (simple view)" msgstr "سرد جميع الملاحظات (عرض بسيط)" -#: engine/core/docs/drf/viewsets.py:881 +#: engine/core/docs/drf/viewsets.py:905 msgid "retrieve a single feedback (detailed view)" msgstr "استرداد تعليق واحد (عرض مفصل)" -#: engine/core/docs/drf/viewsets.py:888 +#: engine/core/docs/drf/viewsets.py:912 msgid "create a feedback" msgstr "إنشاء ملاحظات" -#: engine/core/docs/drf/viewsets.py:895 +#: engine/core/docs/drf/viewsets.py:919 msgid "delete a feedback" msgstr "حذف تعليق" -#: engine/core/docs/drf/viewsets.py:902 +#: engine/core/docs/drf/viewsets.py:926 msgid "rewrite an existing feedback saving non-editables" msgstr "إعادة كتابة ملاحظات حالية تحفظ المواد غير القابلة للتعديل" -#: engine/core/docs/drf/viewsets.py:909 +#: engine/core/docs/drf/viewsets.py:933 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "إعادة كتابة بعض حقول الملاحظات الحالية التي تحفظ غير القابلة للتعديل" -#: engine/core/docs/drf/viewsets.py:919 +#: engine/core/docs/drf/viewsets.py:943 msgid "list all order–product relations (simple view)" msgstr "سرد جميع العلاقات بين الطلب والمنتج (عرض بسيط)" -#: engine/core/docs/drf/viewsets.py:929 +#: engine/core/docs/drf/viewsets.py:953 msgid "retrieve a single order–product relation (detailed view)" msgstr "استرداد علاقة طلب منتج واحد (عرض تفصيلي)" -#: engine/core/docs/drf/viewsets.py:939 +#: engine/core/docs/drf/viewsets.py:963 msgid "create a new order–product relation" msgstr "إنشاء علاقة جديدة بين الطلب والمنتج" -#: engine/core/docs/drf/viewsets.py:949 +#: engine/core/docs/drf/viewsets.py:973 msgid "replace an existing order–product relation" msgstr "استبدال علاقة الطلب-المنتج الحالية" -#: engine/core/docs/drf/viewsets.py:959 +#: engine/core/docs/drf/viewsets.py:983 msgid "partially update an existing order–product relation" msgstr "تحديث جزئي لعلاقة الطلب والمنتج الحالية" -#: engine/core/docs/drf/viewsets.py:969 +#: engine/core/docs/drf/viewsets.py:993 msgid "delete an order–product relation" msgstr "حذف علاقة الطلب-المنتج" -#: engine/core/docs/drf/viewsets.py:979 +#: engine/core/docs/drf/viewsets.py:1003 msgid "add or remove feedback on an order–product relation" msgstr "إضافة أو إزالة الملاحظات على العلاقة بين الطلب والمنتج" -#: engine/core/docs/drf/viewsets.py:996 +#: engine/core/docs/drf/viewsets.py:1020 msgid "list all brands (simple view)" msgstr "قائمة بجميع العلامات التجارية (عرض بسيط)" -#: engine/core/docs/drf/viewsets.py:1003 +#: engine/core/docs/drf/viewsets.py:1027 msgid "retrieve a single brand (detailed view)" msgstr "استرداد علامة تجارية واحدة (عرض تفصيلي)" -#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051 +#: engine/core/docs/drf/viewsets.py:1032 engine/core/docs/drf/viewsets.py:1075 msgid "Brand UUID or slug" msgstr "UUID أو سبيكة العلامة التجارية" -#: engine/core/docs/drf/viewsets.py:1018 +#: engine/core/docs/drf/viewsets.py:1042 msgid "create a brand" msgstr "إنشاء علامة تجارية" -#: engine/core/docs/drf/viewsets.py:1025 +#: engine/core/docs/drf/viewsets.py:1049 msgid "delete a brand" msgstr "حذف علامة تجارية" -#: engine/core/docs/drf/viewsets.py:1032 +#: engine/core/docs/drf/viewsets.py:1056 msgid "rewrite an existing brand saving non-editables" msgstr "إعادة كتابة علامة تجارية حالية توفر المواد غير القابلة للتعديل" -#: engine/core/docs/drf/viewsets.py:1039 +#: engine/core/docs/drf/viewsets.py:1063 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "إعادة كتابة بعض الحقول لعلامة تجارية موجودة حفظ غير قابلة للتعديل" -#: engine/core/docs/drf/viewsets.py:1064 +#: engine/core/docs/drf/viewsets.py:1088 msgid "list all vendors (simple view)" msgstr "قائمة بجميع البائعين (عرض بسيط)" -#: engine/core/docs/drf/viewsets.py:1074 +#: engine/core/docs/drf/viewsets.py:1098 msgid "retrieve a single vendor (detailed view)" msgstr "استرداد بائع واحد (عرض تفصيلي)" -#: engine/core/docs/drf/viewsets.py:1081 +#: engine/core/docs/drf/viewsets.py:1105 msgid "create a vendor" msgstr "إنشاء بائع" -#: engine/core/docs/drf/viewsets.py:1088 +#: engine/core/docs/drf/viewsets.py:1112 msgid "delete a vendor" msgstr "حذف بائع" -#: engine/core/docs/drf/viewsets.py:1095 +#: engine/core/docs/drf/viewsets.py:1119 msgid "rewrite an existing vendor saving non-editables" msgstr "إعادة كتابة بائع موجود حفظ المواد غير القابلة للتعديل" -#: engine/core/docs/drf/viewsets.py:1102 +#: engine/core/docs/drf/viewsets.py:1126 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "إعادة كتابة بعض حقول البائع الحالي لحفظ المواد غير القابلة للتعديل" -#: engine/core/docs/drf/viewsets.py:1112 +#: engine/core/docs/drf/viewsets.py:1136 msgid "list all product images (simple view)" msgstr "سرد جميع صور المنتج (عرض بسيط)" -#: engine/core/docs/drf/viewsets.py:1122 +#: engine/core/docs/drf/viewsets.py:1146 msgid "retrieve a single product image (detailed view)" msgstr "استرداد صورة منتج واحد (عرض تفصيلي)" -#: engine/core/docs/drf/viewsets.py:1129 +#: engine/core/docs/drf/viewsets.py:1153 msgid "create a product image" msgstr "إنشاء صورة المنتج" -#: engine/core/docs/drf/viewsets.py:1139 +#: engine/core/docs/drf/viewsets.py:1163 msgid "delete a product image" msgstr "حذف صورة المنتج" -#: engine/core/docs/drf/viewsets.py:1146 +#: engine/core/docs/drf/viewsets.py:1170 msgid "rewrite an existing product image saving non-editables" msgstr "إعادة كتابة صورة منتج موجود حفظ غير قابل للتعديل" -#: engine/core/docs/drf/viewsets.py:1154 +#: engine/core/docs/drf/viewsets.py:1178 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "إعادة كتابة بعض حقول صورة منتج موجود حفظ غير قابل للتعديل" -#: engine/core/docs/drf/viewsets.py:1165 +#: engine/core/docs/drf/viewsets.py:1189 msgid "list all promo codes (simple view)" msgstr "قائمة بجميع الرموز الترويجية (عرض بسيط)" -#: engine/core/docs/drf/viewsets.py:1175 +#: engine/core/docs/drf/viewsets.py:1199 msgid "retrieve a single promo code (detailed view)" msgstr "استرداد رمز ترويجي واحد (عرض تفصيلي)" -#: engine/core/docs/drf/viewsets.py:1182 +#: engine/core/docs/drf/viewsets.py:1206 msgid "create a promo code" msgstr "إنشاء رمز ترويجي" -#: engine/core/docs/drf/viewsets.py:1189 +#: engine/core/docs/drf/viewsets.py:1213 msgid "delete a promo code" msgstr "حذف الرمز الترويجي" -#: engine/core/docs/drf/viewsets.py:1196 +#: engine/core/docs/drf/viewsets.py:1220 msgid "rewrite an existing promo code saving non-editables" msgstr "إعادة كتابة الرمز الترويجي الحالي الذي يوفر غير القابل للتعديل" -#: engine/core/docs/drf/viewsets.py:1203 +#: engine/core/docs/drf/viewsets.py:1227 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "إعادة كتابة بعض حقول الرمز الترويجي الحالي مع حفظ غير القابل للتعديل" -#: engine/core/docs/drf/viewsets.py:1213 +#: engine/core/docs/drf/viewsets.py:1237 msgid "list all promotions (simple view)" msgstr "قائمة بجميع العروض الترويجية (عرض بسيط)" -#: engine/core/docs/drf/viewsets.py:1223 +#: engine/core/docs/drf/viewsets.py:1247 msgid "retrieve a single promotion (detailed view)" msgstr "استرداد ترقية واحدة (عرض تفصيلي)" -#: engine/core/docs/drf/viewsets.py:1230 +#: engine/core/docs/drf/viewsets.py:1254 msgid "create a promotion" msgstr "إنشاء عرض ترويجي" -#: engine/core/docs/drf/viewsets.py:1237 +#: engine/core/docs/drf/viewsets.py:1261 msgid "delete a promotion" msgstr "حذف ترقية" -#: engine/core/docs/drf/viewsets.py:1244 +#: engine/core/docs/drf/viewsets.py:1268 msgid "rewrite an existing promotion saving non-editables" msgstr "إعادة كتابة عرض ترويجي حالي يوفر المواد غير القابلة للتعديل" -#: engine/core/docs/drf/viewsets.py:1251 +#: engine/core/docs/drf/viewsets.py:1275 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "" "إعادة كتابة بعض الحقول في ترقية حالية مع حفظ غير المواد غير القابلة للتعديل" -#: engine/core/docs/drf/viewsets.py:1261 +#: engine/core/docs/drf/viewsets.py:1285 msgid "list all stocks (simple view)" msgstr "قائمة بجميع الأسهم (عرض بسيط)" -#: engine/core/docs/drf/viewsets.py:1268 +#: engine/core/docs/drf/viewsets.py:1292 msgid "retrieve a single stock (detailed view)" msgstr "استرداد مخزون واحد (عرض تفصيلي)" -#: engine/core/docs/drf/viewsets.py:1275 +#: engine/core/docs/drf/viewsets.py:1299 msgid "create a stock record" msgstr "إنشاء سجل مخزون" -#: engine/core/docs/drf/viewsets.py:1282 +#: engine/core/docs/drf/viewsets.py:1306 msgid "delete a stock record" msgstr "حذف سجل مخزون" -#: engine/core/docs/drf/viewsets.py:1289 +#: engine/core/docs/drf/viewsets.py:1313 msgid "rewrite an existing stock record saving non-editables" msgstr "إعادة كتابة سجل مخزون موجود يحفظ المواد غير القابلة للتعديل" -#: engine/core/docs/drf/viewsets.py:1297 +#: engine/core/docs/drf/viewsets.py:1321 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "إعادة كتابة بعض حقول السجل الحالي للمخزون مع حفظ غير القابل للتعديل" -#: engine/core/docs/drf/viewsets.py:1308 +#: engine/core/docs/drf/viewsets.py:1332 msgid "list all product tags (simple view)" msgstr "سرد جميع علامات المنتج (عرض بسيط)" -#: engine/core/docs/drf/viewsets.py:1318 +#: engine/core/docs/drf/viewsets.py:1342 msgid "retrieve a single product tag (detailed view)" msgstr "استرداد علامة منتج واحد (عرض تفصيلي)" -#: engine/core/docs/drf/viewsets.py:1325 +#: engine/core/docs/drf/viewsets.py:1349 msgid "create a product tag" msgstr "إنشاء علامة منتج" -#: engine/core/docs/drf/viewsets.py:1335 +#: engine/core/docs/drf/viewsets.py:1359 msgid "delete a product tag" msgstr "حذف علامة منتج" -#: engine/core/docs/drf/viewsets.py:1342 +#: engine/core/docs/drf/viewsets.py:1366 msgid "rewrite an existing product tag saving non-editables" msgstr "إعادة كتابة علامة منتج موجود حفظ غير قابل للتعديل" -#: engine/core/docs/drf/viewsets.py:1350 +#: engine/core/docs/drf/viewsets.py:1374 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "إعادة كتابة بعض حقول علامة منتج موجود حفظ غير قابل للتعديل" @@ -961,370 +994,372 @@ msgstr "إعادة كتابة بعض حقول علامة منتج موجود ح msgid "no search term provided." msgstr "لم يتم توفير مصطلح بحث." -#: engine/core/filters.py:78 engine/core/filters.py:484 -#: engine/core/filters.py:625 +#: engine/core/filters.py:79 engine/core/filters.py:485 +#: engine/core/filters.py:626 msgid "Search" msgstr "بحث" -#: engine/core/filters.py:79 engine/core/filters.py:663 -#: engine/core/filters.py:692 +#: engine/core/filters.py:80 engine/core/filters.py:664 +#: engine/core/filters.py:693 msgid "UUID" msgstr "UUID" -#: engine/core/filters.py:80 engine/core/filters.py:487 -#: engine/core/filters.py:627 +#: engine/core/filters.py:81 engine/core/filters.py:488 +#: engine/core/filters.py:628 msgid "Name" msgstr "الاسم" -#: engine/core/filters.py:82 engine/core/filters.py:630 +#: engine/core/filters.py:83 engine/core/filters.py:631 msgid "Categories" msgstr "الفئات" -#: engine/core/filters.py:86 +#: engine/core/filters.py:87 msgid "Categories Slugs" msgstr "الفئات الرخويات" -#: engine/core/filters.py:88 engine/core/filters.py:495 +#: engine/core/filters.py:89 engine/core/filters.py:496 +#: engine/core/templates/admin_doc/index.html:37 +#: engine/core/templates/admin_doc/template_tag_index.html:12 msgid "Tags" msgstr "الوسوم" -#: engine/core/filters.py:90 +#: engine/core/filters.py:91 msgid "Min Price" msgstr "الحد الأدنى للسعر" -#: engine/core/filters.py:93 +#: engine/core/filters.py:94 msgid "Max Price" msgstr "ماكس برايس" -#: engine/core/filters.py:95 +#: engine/core/filters.py:96 msgid "Is Active" msgstr "نشط" -#: engine/core/filters.py:96 +#: engine/core/filters.py:97 msgid "Brand" msgstr "العلامة التجارية" -#: engine/core/filters.py:97 +#: engine/core/filters.py:98 msgid "Attributes" msgstr "السمات" -#: engine/core/filters.py:99 +#: engine/core/filters.py:100 msgid "Quantity" msgstr "الكمية" -#: engine/core/filters.py:101 engine/core/filters.py:489 -#: engine/core/filters.py:628 engine/core/models.py:316 -#: engine/core/models.py:497 engine/core/models.py:663 +#: engine/core/filters.py:102 engine/core/filters.py:490 +#: engine/core/filters.py:629 engine/core/models.py:339 +#: engine/core/models.py:546 engine/core/models.py:736 msgid "Slug" msgstr "سبيكة" -#: engine/core/filters.py:102 +#: engine/core/filters.py:103 msgid "Is Digital" msgstr "هو رقمي" -#: engine/core/filters.py:104 +#: engine/core/filters.py:105 msgid "Include sub-categories" msgstr "تضمين الفئات الفرعية" -#: engine/core/filters.py:108 +#: engine/core/filters.py:109 msgid "Include personal ordered" msgstr "تضمين المنتجات المطلوبة شخصيًا" -#: engine/core/filters.py:110 engine/core/models.py:667 +#: engine/core/filters.py:111 engine/core/models.py:740 msgid "SKU" msgstr "وحدة التخزين" -#: engine/core/filters.py:212 +#: engine/core/filters.py:213 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "يجب أن يكون هناك category_uid لاستخدام علامة تضمين_الفئات_الفرعية" -#: engine/core/filters.py:398 +#: engine/core/filters.py:399 msgid "Search (ID, product name or part number)" msgstr "البحث (المعرف أو اسم المنتج أو رقم الجزء)" -#: engine/core/filters.py:402 +#: engine/core/filters.py:403 msgid "Bought after (inclusive)" msgstr "تم الشراء بعد (شامل)" -#: engine/core/filters.py:405 +#: engine/core/filters.py:406 msgid "Bought before (inclusive)" msgstr "تم الشراء من قبل (شامل)" -#: engine/core/filters.py:410 engine/core/filters.py:461 -#: engine/core/filters.py:697 +#: engine/core/filters.py:411 engine/core/filters.py:462 +#: engine/core/filters.py:698 msgid "User email" msgstr "البريد الإلكتروني للمستخدم" -#: engine/core/filters.py:413 engine/core/filters.py:464 -#: engine/core/filters.py:672 engine/core/filters.py:694 +#: engine/core/filters.py:414 engine/core/filters.py:465 +#: engine/core/filters.py:673 engine/core/filters.py:695 msgid "User UUID" msgstr "معرّف المستخدم UUID" -#: engine/core/filters.py:415 +#: engine/core/filters.py:416 msgid "Status" msgstr "الحالة" -#: engine/core/filters.py:419 +#: engine/core/filters.py:420 msgid "Human Readable ID" msgstr "معرّف قابل للقراءة من قبل الإنسان" -#: engine/core/filters.py:488 +#: engine/core/filters.py:489 msgid "Parent" msgstr "الوالدين" -#: engine/core/filters.py:492 +#: engine/core/filters.py:493 msgid "Whole category(has at least 1 product or not)" msgstr "الفئة الكاملة (تحتوي على منتج واحد على الأقل أو لا)" -#: engine/core/filters.py:496 +#: engine/core/filters.py:497 msgid "Level" msgstr "المستوى" -#: engine/core/filters.py:667 +#: engine/core/filters.py:668 msgid "Product UUID" msgstr "UUID المنتج" -#: engine/core/graphene/mutations.py:40 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "" "مفتاح للبحث عنه في ذاكرة التخزين المؤقت أو تعيينه في ذاكرة التخزين المؤقت" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:43 msgid "data to store in cache" msgstr "البيانات المراد تخزينها في ذاكرة التخزين المؤقت" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:46 msgid "timeout in seconds to set the data for into the cache" msgstr "المهلة بالثواني لتعيين البيانات في ذاكرة التخزين المؤقت" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:49 msgid "cached data" msgstr "البيانات المخزنة مؤقتاً" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:64 msgid "camelized JSON data from the requested URL" msgstr "بيانات JSON مجمّلة من عنوان URL المطلوب" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:248 +#: engine/core/graphene/mutations.py:69 engine/core/views.py:267 msgid "only URLs starting with http(s):// are allowed" msgstr "يُسمح فقط بعناوين URL التي تبدأ ب http(s)://" -#: engine/core/graphene/mutations.py:86 +#: engine/core/graphene/mutations.py:87 msgid "add a product to the order" msgstr "إضافة منتج إلى الطلب" -#: engine/core/graphene/mutations.py:109 engine/core/graphene/mutations.py:138 -#: engine/core/graphene/mutations.py:254 engine/core/graphene/mutations.py:306 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139 +#: engine/core/graphene/mutations.py:256 engine/core/graphene/mutations.py:308 #, python-brace-format msgid "order {order_uuid} not found" msgstr "الطلب {order_uuid} غير موجود!" -#: engine/core/graphene/mutations.py:115 engine/core/graphene/mutations.py:166 +#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167 msgid "remove a product from the order" msgstr "إزالة منتج من الطلب" -#: engine/core/graphene/mutations.py:144 +#: engine/core/graphene/mutations.py:145 msgid "remove all products from the order" msgstr "إزالة جميع المنتجات من الطلب" -#: engine/core/graphene/mutations.py:189 +#: engine/core/graphene/mutations.py:190 msgid "buy an order" msgstr "شراء طلبية" -#: engine/core/graphene/mutations.py:220 engine/core/graphene/mutations.py:282 +#: engine/core/graphene/mutations.py:222 engine/core/graphene/mutations.py:284 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "يرجى تقديم إما Order_uuid أو order_uid_hr_hr_id - متنافيان!" -#: engine/core/graphene/mutations.py:249 engine/core/graphene/mutations.py:524 -#: engine/core/graphene/mutations.py:573 engine/core/viewsets.py:753 +#: engine/core/graphene/mutations.py:251 engine/core/graphene/mutations.py:526 +#: engine/core/graphene/mutations.py:576 engine/core/viewsets.py:783 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "جاء نوع خاطئ من طريقة order.buy(): {type(instance)!s}" -#: engine/core/graphene/mutations.py:260 +#: engine/core/graphene/mutations.py:262 msgid "perform an action on a list of products in the order" msgstr "تنفيذ إجراء على قائمة من المنتجات بالترتيب" -#: engine/core/graphene/mutations.py:265 +#: engine/core/graphene/mutations.py:267 msgid "remove/add" msgstr "إزالة/إضافة" -#: engine/core/graphene/mutations.py:301 engine/core/graphene/mutations.py:342 +#: engine/core/graphene/mutations.py:303 engine/core/graphene/mutations.py:342 msgid "action must be either add or remove" msgstr "يجب أن يكون الإجراء إما \"إضافة\" أو \"إزالة\"!" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:314 msgid "perform an action on a list of products in the wishlist" msgstr "تنفيذ إجراء على قائمة المنتجات في قائمة الأمنيات" -#: engine/core/graphene/mutations.py:330 -msgid "please provide wishlist_uuid value" -msgstr "يُرجى تقديم قيمة \"wishlist_uid\"." - -#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:423 -#: engine/core/graphene/mutations.py:451 engine/core/graphene/mutations.py:479 -#: engine/core/graphene/mutations.py:529 +#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:424 +#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480 +#: engine/core/graphene/mutations.py:531 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "قائمة الرغبات {wishlist_uuid} غير موجودة!" -#: engine/core/graphene/mutations.py:401 +#: engine/core/graphene/mutations.py:402 msgid "add a product to the wishlist" msgstr "إضافة منتج إلى الطلب" -#: engine/core/graphene/mutations.py:429 +#: engine/core/graphene/mutations.py:430 msgid "remove a product from the wishlist" msgstr "إزالة منتج من الطلب" -#: engine/core/graphene/mutations.py:457 +#: engine/core/graphene/mutations.py:458 msgid "remove all products from the wishlist" msgstr "إزالة منتج من الطلب" -#: engine/core/graphene/mutations.py:485 +#: engine/core/graphene/mutations.py:486 msgid "buy all products from the wishlist" msgstr "إزالة منتج من الطلب" -#: engine/core/graphene/mutations.py:535 +#: engine/core/graphene/mutations.py:537 msgid "buy a product" msgstr "شراء طلبية" -#: engine/core/graphene/mutations.py:542 +#: engine/core/graphene/mutations.py:544 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" msgstr "الرجاء إرسال السمات كسلسلة منسقة مثل attr1=قيمة1، attr2=قيمة2" -#: engine/core/graphene/mutations.py:580 +#: engine/core/graphene/mutations.py:583 msgid "add or delete a feedback for orderproduct" msgstr "إضافة أو حذف تعليق على طلبالمنتج" -#: engine/core/graphene/mutations.py:606 +#: engine/core/graphene/mutations.py:610 msgid "action must be either `add` or `remove`" msgstr "يجب أن يكون الإجراء إما \"إضافة\" أو \"إزالة\"!" -#: engine/core/graphene/mutations.py:609 +#: engine/core/graphene/mutations.py:613 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "طلب المنتج {order_product_uuid} غير موجود!" -#: engine/core/graphene/mutations.py:616 +#: engine/core/graphene/mutations.py:620 msgid "original address string provided by the user" msgstr "سلسلة العنوان الأصلي المقدمة من المستخدم" -#: engine/core/graphene/mutations.py:653 engine/core/models.py:986 -#: engine/core/models.py:999 engine/core/models.py:1443 -#: engine/core/models.py:1474 engine/core/models.py:1505 -#: engine/core/viewsets.py:760 +#: engine/core/graphene/mutations.py:662 engine/core/models.py:1079 +#: engine/core/models.py:1092 engine/core/models.py:1544 +#: engine/core/models.py:1575 engine/core/models.py:1606 +#: engine/core/viewsets.py:790 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} غير موجود: {uuid}!" -#: engine/core/graphene/mutations.py:667 +#: engine/core/graphene/mutations.py:676 msgid "limit must be between 1 and 10" msgstr "يجب أن يكون الحد بين 1 و10" -#: engine/core/graphene/mutations.py:716 +#: engine/core/graphene/mutations.py:726 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - يعمل مثل السحر" -#: engine/core/graphene/object_types.py:84 -#: engine/core/graphene/object_types.py:420 -#: engine/core/graphene/object_types.py:471 engine/core/models.py:803 -#: engine/core/models.py:1297 engine/core/models.py:2033 +#: engine/core/graphene/object_types.py:88 +#: engine/core/graphene/object_types.py:425 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:889 +#: engine/core/models.py:1394 engine/core/models.py:2139 msgid "attributes" msgstr "السمات" -#: engine/core/graphene/object_types.py:97 +#: engine/core/graphene/object_types.py:101 msgid "grouped attributes" msgstr "السمات المجمعة" -#: engine/core/graphene/object_types.py:104 +#: engine/core/graphene/object_types.py:108 msgid "groups of attributes" msgstr "مجموعات السمات" -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:217 -#: engine/core/graphene/object_types.py:255 engine/core/models.py:440 +#: engine/core/graphene/object_types.py:122 +#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:264 engine/core/models.py:489 msgid "categories" msgstr "الفئات" -#: engine/core/graphene/object_types.py:134 engine/core/models.py:511 +#: engine/core/graphene/object_types.py:138 engine/core/models.py:564 msgid "brands" msgstr "العلامات التجارية" -#: engine/core/graphene/object_types.py:219 +#: engine/core/graphene/object_types.py:226 msgid "category image url" msgstr "الفئات" -#: engine/core/graphene/object_types.py:220 -#: engine/core/graphene/object_types.py:365 engine/core/models.py:278 +#: engine/core/graphene/object_types.py:227 +#: engine/core/graphene/object_types.py:369 engine/core/models.py:301 msgid "markup percentage" msgstr "النسبة المئوية للترميز" -#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:231 msgid "which attributes and values can be used for filtering this category." msgstr "ما هي السمات والقيم التي يمكن استخدامها لتصفية هذه الفئة." -#: engine/core/graphene/object_types.py:230 +#: engine/core/graphene/object_types.py:237 msgid "" "minimum and maximum prices for products in this category, if available." msgstr "" "الحد الأدنى والحد الأقصى لأسعار المنتجات في هذه الفئة، إذا كانت متوفرة." -#: engine/core/graphene/object_types.py:234 +#: engine/core/graphene/object_types.py:240 +msgid "brands in this category" +msgstr "العلامات التجارية في هذه الفئة" + +#: engine/core/graphene/object_types.py:242 msgid "tags for this category" msgstr "العلامات الخاصة بهذه الفئة" -#: engine/core/graphene/object_types.py:237 +#: engine/core/graphene/object_types.py:245 msgid "products in this category" msgstr "المنتجات في هذه الفئة" -#: engine/core/graphene/object_types.py:372 engine/core/models.py:183 +#: engine/core/graphene/object_types.py:376 engine/core/models.py:202 msgid "vendors" msgstr "البائعون" -#: engine/core/graphene/object_types.py:376 +#: engine/core/graphene/object_types.py:380 msgid "Latitude (Y coordinate)" msgstr "خط العرض (الإحداثي Y)" -#: engine/core/graphene/object_types.py:377 +#: engine/core/graphene/object_types.py:381 msgid "Longitude (X coordinate)" msgstr "خط الطول (الإحداثي X)" -#: engine/core/graphene/object_types.py:406 +#: engine/core/graphene/object_types.py:411 msgid "comment" msgstr "كيفية" -#: engine/core/graphene/object_types.py:408 -#: engine/core/graphene/object_types.py:542 +#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:548 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "قيمة التصنيف من 1 إلى 10، شاملة، أو 0 إذا لم يتم تعيينها." -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:421 msgid "represents feedback from a user." msgstr "يمثل ملاحظات من المستخدم." -#: engine/core/graphene/object_types.py:421 -#: engine/core/graphene/object_types.py:472 engine/core/models.py:1291 +#: engine/core/graphene/object_types.py:426 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:1388 msgid "notifications" msgstr "الإشعارات" -#: engine/core/graphene/object_types.py:423 +#: engine/core/graphene/object_types.py:428 msgid "download url for this order product if applicable" msgstr "تحميل الرابط الخاص بمنتج الطلب هذا إن أمكن" -#: engine/core/graphene/object_types.py:425 engine/core/models.py:1856 +#: engine/core/graphene/object_types.py:430 engine/core/models.py:1959 msgid "feedback" msgstr "الملاحظات" -#: engine/core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:464 msgid "a list of order products in this order" msgstr "قائمة بطلب المنتجات بهذا الترتيب" -#: engine/core/graphene/object_types.py:461 engine/core/models.py:1261 +#: engine/core/graphene/object_types.py:466 engine/core/models.py:1358 msgid "billing address" msgstr "عنوان إرسال الفواتير" -#: engine/core/graphene/object_types.py:465 +#: engine/core/graphene/object_types.py:470 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1332,53 +1367,57 @@ msgstr "" "عنوان الشحن لهذا الطلب، اترك العنوان فارغًا إذا كان هو نفسه عنوان إرسال " "الفواتير أو إذا لم يكن منطبقًا" -#: engine/core/graphene/object_types.py:468 +#: engine/core/graphene/object_types.py:473 msgid "total price of this order" msgstr "السعر الإجمالي لهذا الطلب" -#: engine/core/graphene/object_types.py:469 +#: engine/core/graphene/object_types.py:474 msgid "total quantity of products in order" msgstr "إجمالي كمية المنتجات بالترتيب" -#: engine/core/graphene/object_types.py:470 +#: engine/core/graphene/object_types.py:475 msgid "are all products in the order digital" msgstr "هل جميع المنتجات في الطلب رقمي" -#: engine/core/graphene/object_types.py:474 +#: engine/core/graphene/object_types.py:479 msgid "transactions for this order" msgstr "المعاملات الخاصة بهذا الطلب" -#: engine/core/graphene/object_types.py:494 engine/core/models.py:1325 +#: engine/core/graphene/object_types.py:499 engine/core/models.py:1422 msgid "orders" msgstr "الطلبات" -#: engine/core/graphene/object_types.py:515 +#: engine/core/graphene/object_types.py:520 msgid "image url" msgstr "رابط الصورة" -#: engine/core/graphene/object_types.py:522 +#: engine/core/graphene/object_types.py:527 msgid "product's images" msgstr "صور المنتج" -#: engine/core/graphene/object_types.py:529 engine/core/models.py:439 -#: engine/core/models.py:596 +#: engine/core/graphene/object_types.py:534 engine/core/models.py:488 +#: engine/core/models.py:661 msgid "category" msgstr "الفئة" -#: engine/core/graphene/object_types.py:531 engine/core/models.py:1857 +#: engine/core/graphene/object_types.py:536 engine/core/models.py:1960 msgid "feedbacks" msgstr "الملاحظات" -#: engine/core/graphene/object_types.py:532 engine/core/models.py:510 -#: engine/core/models.py:605 +#: engine/core/graphene/object_types.py:537 engine/core/models.py:563 +#: engine/core/models.py:670 msgid "brand" msgstr "العلامة التجارية" -#: engine/core/graphene/object_types.py:534 engine/core/models.py:103 +#: engine/core/graphene/object_types.py:538 +msgid "video url" +msgstr "رابط الفيديو" + +#: engine/core/graphene/object_types.py:540 engine/core/models.py:122 msgid "attribute groups" msgstr "مجموعات السمات" -#: engine/core/graphene/object_types.py:536 +#: engine/core/graphene/object_types.py:542 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1386,7 +1425,7 @@ msgstr "مجموعات السمات" msgid "price" msgstr "السعر" -#: engine/core/graphene/object_types.py:537 +#: engine/core/graphene/object_types.py:543 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1394,39 +1433,39 @@ msgstr "السعر" msgid "quantity" msgstr "الكمية" -#: engine/core/graphene/object_types.py:538 +#: engine/core/graphene/object_types.py:544 msgid "number of feedbacks" msgstr "عدد الملاحظات" -#: engine/core/graphene/object_types.py:539 +#: engine/core/graphene/object_types.py:545 msgid "only available for personal orders" msgstr "المنتجات متاحة للطلبات الشخصية فقط" -#: engine/core/graphene/object_types.py:544 +#: engine/core/graphene/object_types.py:550 msgid "discount price" msgstr "سعر الخصم" -#: engine/core/graphene/object_types.py:568 engine/core/models.py:682 +#: engine/core/graphene/object_types.py:575 engine/core/models.py:755 msgid "products" msgstr "المنتجات" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:691 msgid "promocodes" msgstr "الرموز الترويجية" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:706 msgid "products on sale" msgstr "المنتجات المعروضة للبيع" -#: engine/core/graphene/object_types.py:701 engine/core/models.py:935 +#: engine/core/graphene/object_types.py:720 engine/core/models.py:1028 msgid "promotions" msgstr "العروض الترويجية" -#: engine/core/graphene/object_types.py:705 engine/core/models.py:182 +#: engine/core/graphene/object_types.py:727 engine/core/models.py:201 msgid "vendor" msgstr "البائع" -#: engine/core/graphene/object_types.py:706 engine/core/models.py:681 +#: engine/core/graphene/object_types.py:728 engine/core/models.py:754 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1434,104 +1473,104 @@ msgstr "البائع" msgid "product" msgstr "المنتج" -#: engine/core/graphene/object_types.py:718 engine/core/models.py:958 +#: engine/core/graphene/object_types.py:740 engine/core/models.py:1051 msgid "wishlisted products" msgstr "المنتجات المفضلة" -#: engine/core/graphene/object_types.py:725 engine/core/models.py:975 +#: engine/core/graphene/object_types.py:747 engine/core/models.py:1068 msgid "wishlists" msgstr "قوائم التمنيات" -#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:752 msgid "tagged products" msgstr "المنتجات الموسومة" -#: engine/core/graphene/object_types.py:738 engine/core/models.py:219 -#: engine/core/models.py:611 +#: engine/core/graphene/object_types.py:760 engine/core/models.py:238 +#: engine/core/models.py:676 msgid "product tags" msgstr "علامات المنتج" -#: engine/core/graphene/object_types.py:743 +#: engine/core/graphene/object_types.py:765 msgid "tagged categories" msgstr "الفئات الموسومة" -#: engine/core/graphene/object_types.py:751 +#: engine/core/graphene/object_types.py:773 msgid "categories tags" msgstr "علامات الفئات" -#: engine/core/graphene/object_types.py:755 +#: engine/core/graphene/object_types.py:777 msgid "project name" msgstr "اسم المشروع" -#: engine/core/graphene/object_types.py:756 +#: engine/core/graphene/object_types.py:778 msgid "company name" msgstr "اسم الشركة" -#: engine/core/graphene/object_types.py:757 +#: engine/core/graphene/object_types.py:779 msgid "company address" msgstr "عنوان الشركة" -#: engine/core/graphene/object_types.py:758 +#: engine/core/graphene/object_types.py:780 msgid "company phone number" msgstr "رقم هاتف الشركة" -#: engine/core/graphene/object_types.py:761 +#: engine/core/graphene/object_types.py:783 msgid "email from, sometimes it must be used instead of host user value" msgstr "" "\"البريد الإلكتروني من\"، في بعض الأحيان يجب استخدامه بدلاً من قيمة المستخدم" " المضيف" -#: engine/core/graphene/object_types.py:764 +#: engine/core/graphene/object_types.py:786 msgid "email host user" msgstr "مستخدم البريد الإلكتروني المضيف" -#: engine/core/graphene/object_types.py:765 +#: engine/core/graphene/object_types.py:787 msgid "maximum amount for payment" msgstr "الحد الأقصى لمبلغ السداد" -#: engine/core/graphene/object_types.py:766 +#: engine/core/graphene/object_types.py:788 msgid "minimum amount for payment" msgstr "الحد الأدنى لمبلغ السداد" -#: engine/core/graphene/object_types.py:767 +#: engine/core/graphene/object_types.py:789 msgid "analytics data" msgstr "بيانات التحليلات" -#: engine/core/graphene/object_types.py:768 +#: engine/core/graphene/object_types.py:790 msgid "advertisement data" msgstr "بيانات الإعلانات" -#: engine/core/graphene/object_types.py:771 +#: engine/core/graphene/object_types.py:793 msgid "company configuration" msgstr "التكوين" -#: engine/core/graphene/object_types.py:775 +#: engine/core/graphene/object_types.py:797 msgid "language code" msgstr "رمز اللغة" -#: engine/core/graphene/object_types.py:776 +#: engine/core/graphene/object_types.py:798 msgid "language name" msgstr "اسم اللغة" -#: engine/core/graphene/object_types.py:777 +#: engine/core/graphene/object_types.py:799 msgid "language flag, if exists :)" msgstr "علم اللغة، إذا كان موجوداً :)" -#: engine/core/graphene/object_types.py:780 +#: engine/core/graphene/object_types.py:802 msgid "supported languages" msgstr "الحصول على قائمة باللغات المدعومة" -#: engine/core/graphene/object_types.py:812 -#: engine/core/graphene/object_types.py:815 -#: engine/core/graphene/object_types.py:818 +#: engine/core/graphene/object_types.py:834 +#: engine/core/graphene/object_types.py:837 +#: engine/core/graphene/object_types.py:840 msgid "products search results" msgstr "نتائج البحث عن المنتجات" -#: engine/core/graphene/object_types.py:820 +#: engine/core/graphene/object_types.py:842 msgid "posts search results" msgstr "نتائج البحث عن المنتجات" -#: engine/core/models.py:75 +#: engine/core/models.py:91 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 " @@ -1543,23 +1582,23 @@ msgstr "" "يشكل بنية هرمية. يمكن أن يكون هذا مفيدًا لتصنيف السمات وإدارتها بشكل أكثر " "فعالية في النظام المعقد." -#: engine/core/models.py:88 +#: engine/core/models.py:107 msgid "parent of this group" msgstr "والد هذه المجموعة" -#: engine/core/models.py:89 +#: engine/core/models.py:108 msgid "parent attribute group" msgstr "مجموعة السمات الرئيسية" -#: engine/core/models.py:93 engine/core/models.py:94 +#: engine/core/models.py:112 engine/core/models.py:113 msgid "attribute group's name" msgstr "اسم مجموعة السمات" -#: engine/core/models.py:102 engine/core/models.py:763 +#: engine/core/models.py:121 engine/core/models.py:849 msgid "attribute group" msgstr "مجموعة السمات" -#: engine/core/models.py:108 +#: engine/core/models.py:127 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1576,49 +1615,49 @@ msgstr "" "أيضًا ببيانات وصفية وقيود إضافية، مما يجعله مناسبًا للاستخدام في الأنظمة " "التي تتفاعل مع البائعين الخارجيين." -#: engine/core/models.py:122 +#: engine/core/models.py:141 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "تخزين بيانات الاعتماد ونقاط النهاية المطلوبة لاتصالات واجهة برمجة التطبيقات " "الخاصة بالمورّد" -#: engine/core/models.py:124 +#: engine/core/models.py:143 msgid "authentication info" msgstr "معلومات المصادقة" -#: engine/core/models.py:129 +#: engine/core/models.py:148 msgid "define the markup for products retrieved from this vendor" msgstr "تحديد الترميز للمنتجات المسترجعة من هذا البائع" -#: engine/core/models.py:130 +#: engine/core/models.py:149 msgid "vendor markup percentage" msgstr "نسبة هامش الربح للبائع" -#: engine/core/models.py:134 +#: engine/core/models.py:153 msgid "name of this vendor" msgstr "اسم هذا البائع" -#: engine/core/models.py:135 +#: engine/core/models.py:154 msgid "vendor name" msgstr "اسم البائع" -#: engine/core/models.py:150 +#: engine/core/models.py:169 msgid "response file" msgstr "ملف الاستجابة" -#: engine/core/models.py:151 +#: engine/core/models.py:170 msgid "vendor's last processing response" msgstr "استجابة البائع الأخيرة للمعالجة" -#: engine/core/models.py:157 +#: engine/core/models.py:176 msgid "vendor's integration file path" msgstr "مسار ملف تكامل البائع" -#: engine/core/models.py:158 +#: engine/core/models.py:177 msgid "integration path" msgstr "مسار التكامل" -#: engine/core/models.py:192 +#: engine/core/models.py:211 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1631,27 +1670,27 @@ msgstr "" "عرض سهل الاستخدام. وهي تدعم العمليات التي يتم تصديرها من خلال mixins وتوفر " "تخصيص البيانات الوصفية لأغراض إدارية." -#: engine/core/models.py:204 engine/core/models.py:235 +#: engine/core/models.py:223 engine/core/models.py:254 msgid "internal tag identifier for the product tag" msgstr "معرّف العلامة الداخلي لعلامة المنتج" -#: engine/core/models.py:205 engine/core/models.py:236 +#: engine/core/models.py:224 engine/core/models.py:255 msgid "tag name" msgstr "اسم العلامة" -#: engine/core/models.py:209 engine/core/models.py:240 +#: engine/core/models.py:228 engine/core/models.py:259 msgid "user-friendly name for the product tag" msgstr "اسم سهل الاستخدام لعلامة المنتج" -#: engine/core/models.py:210 engine/core/models.py:241 +#: engine/core/models.py:229 engine/core/models.py:260 msgid "tag display name" msgstr "اسم عرض العلامة" -#: engine/core/models.py:218 +#: engine/core/models.py:237 msgid "product tag" msgstr "علامة المنتج" -#: engine/core/models.py:224 +#: engine/core/models.py:243 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 " @@ -1660,15 +1699,15 @@ msgstr "" "يمثل علامة فئة تستخدم للمنتجات. تمثل هذه الفئة علامة فئة يمكن استخدامها لربط" " المنتجات وتصنيفها. وهي تتضمن سمات لمعرف علامة داخلي واسم عرض سهل الاستخدام." -#: engine/core/models.py:249 +#: engine/core/models.py:268 msgid "category tag" msgstr "علامة الفئة" -#: engine/core/models.py:250 engine/core/models.py:322 +#: engine/core/models.py:269 engine/core/models.py:345 msgid "category tags" msgstr "علامات الفئة" -#: engine/core/models.py:255 +#: engine/core/models.py:274 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1688,51 +1727,51 @@ msgstr "" " الفئات ووصفها وتسلسلها الهرمي، بالإضافة إلى تعيين سمات مثل الصور أو " "العلامات أو الأولوية." -#: engine/core/models.py:269 +#: engine/core/models.py:292 msgid "upload an image representing this category" msgstr "تحميل صورة تمثل هذه الفئة" -#: engine/core/models.py:272 +#: engine/core/models.py:295 msgid "category image" msgstr "صورة الفئة" -#: engine/core/models.py:277 +#: engine/core/models.py:300 msgid "define a markup percentage for products in this category" msgstr "تحديد نسبة ترميز للمنتجات في هذه الفئة" -#: engine/core/models.py:286 +#: engine/core/models.py:309 msgid "parent of this category to form a hierarchical structure" msgstr "أصل هذه الفئة لتكوين بنية هرمية" -#: engine/core/models.py:287 +#: engine/core/models.py:310 msgid "parent category" msgstr "الفئة الرئيسية" -#: engine/core/models.py:292 +#: engine/core/models.py:315 msgid "category name" msgstr "اسم الفئة" -#: engine/core/models.py:293 +#: engine/core/models.py:316 msgid "provide a name for this category" msgstr "تقديم اسم لهذه الفئة" -#: engine/core/models.py:300 +#: engine/core/models.py:323 msgid "add a detailed description for this category" msgstr "إضافة وصف تفصيلي لهذه الفئة" -#: engine/core/models.py:301 +#: engine/core/models.py:324 msgid "category description" msgstr "وصف الفئة" -#: engine/core/models.py:321 +#: engine/core/models.py:344 msgid "tags that help describe or group this category" msgstr "العلامات التي تساعد في وصف هذه الفئة أو تجميعها" -#: engine/core/models.py:328 engine/core/models.py:503 +#: engine/core/models.py:351 engine/core/models.py:552 msgid "priority" msgstr "الأولوية" -#: engine/core/models.py:446 +#: engine/core/models.py:495 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1745,47 +1784,43 @@ msgstr "" "المرتبطة بها وسبيكة فريدة وترتيب الأولوية. يسمح بتنظيم وتمثيل البيانات " "المتعلقة بالعلامة التجارية داخل التطبيق." -#: engine/core/models.py:456 +#: engine/core/models.py:505 msgid "name of this brand" msgstr "اسم هذه العلامة التجارية" -#: engine/core/models.py:457 +#: engine/core/models.py:506 msgid "brand name" msgstr "اسم العلامة التجارية" -#: engine/core/models.py:464 +#: engine/core/models.py:513 msgid "upload a logo representing this brand" msgstr "تحميل شعار يمثل هذه العلامة التجارية" -#: engine/core/models.py:466 +#: engine/core/models.py:515 msgid "brand small image" msgstr "صورة العلامة التجارية الصغيرة" -#: engine/core/models.py:472 +#: engine/core/models.py:521 msgid "upload a big logo representing this brand" msgstr "رفع شعار كبير يمثل هذه العلامة التجارية" -#: engine/core/models.py:474 +#: engine/core/models.py:523 msgid "brand big image" msgstr "صورة كبيرة للعلامة التجارية" -#: engine/core/models.py:479 +#: engine/core/models.py:528 msgid "add a detailed description of the brand" msgstr "إضافة وصف تفصيلي للعلامة التجارية" -#: engine/core/models.py:480 +#: engine/core/models.py:529 msgid "brand description" msgstr "وصف العلامة التجارية" -#: engine/core/models.py:485 -msgid "optional categories that this brand is associated with" -msgstr "الفئات الاختيارية التي ترتبط بها هذه العلامة التجارية" +#: engine/core/models.py:534 engine/core/models.py:535 +msgid "DEPRECATED" +msgstr "مهمل" -#: engine/core/models.py:486 -msgid "associated categories" -msgstr "الفئات" - -#: engine/core/models.py:516 +#: engine/core/models.py:569 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1800,72 +1835,72 @@ msgstr "" "والأصول الرقمية. وهي جزء من نظام إدارة المخزون للسماح بتتبع وتقييم المنتجات " "المتاحة من مختلف البائعين." -#: engine/core/models.py:528 +#: engine/core/models.py:581 msgid "the vendor supplying this product stock" msgstr "البائع الذي يورد هذا المنتج المخزون" -#: engine/core/models.py:529 +#: engine/core/models.py:582 msgid "associated vendor" msgstr "البائع المرتبط" -#: engine/core/models.py:533 +#: engine/core/models.py:588 msgid "final price to the customer after markups" msgstr "السعر النهائي للعميل بعد هوامش الربح" -#: engine/core/models.py:534 +#: engine/core/models.py:589 msgid "selling price" msgstr "سعر البيع" -#: engine/core/models.py:539 +#: engine/core/models.py:594 msgid "the product associated with this stock entry" msgstr "المنتج المرتبط بإدخال المخزون هذا" -#: engine/core/models.py:540 engine/core/models.py:828 -#: engine/core/models.py:874 engine/core/models.py:1912 +#: engine/core/models.py:595 engine/core/models.py:914 +#: engine/core/models.py:962 engine/core/models.py:2020 msgid "associated product" msgstr "المنتج المرتبط" -#: engine/core/models.py:547 +#: engine/core/models.py:604 msgid "the price paid to the vendor for this product" msgstr "السعر المدفوع للبائع مقابل هذا المنتج" -#: engine/core/models.py:548 +#: engine/core/models.py:605 msgid "vendor purchase price" msgstr "سعر الشراء من البائع" -#: engine/core/models.py:552 +#: engine/core/models.py:609 msgid "available quantity of the product in stock" msgstr "الكمية المتوفرة من المنتج في المخزون" -#: engine/core/models.py:553 +#: engine/core/models.py:610 msgid "quantity in stock" msgstr "الكمية في المخزون" -#: engine/core/models.py:557 +#: engine/core/models.py:614 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU المعين من قبل البائع لتحديد المنتج" -#: engine/core/models.py:558 +#: engine/core/models.py:615 msgid "vendor sku" msgstr "وحدة تخزين البائع" -#: engine/core/models.py:564 +#: engine/core/models.py:621 msgid "digital file associated with this stock if applicable" msgstr "الملف الرقمي المرتبط بهذا المخزون إن أمكن" -#: engine/core/models.py:565 +#: engine/core/models.py:622 msgid "digital file" msgstr "ملف رقمي" -#: engine/core/models.py:569 +#: engine/core/models.py:626 msgid "system attributes" msgstr "سمات النظام" -#: engine/core/models.py:577 +#: engine/core/models.py:636 msgid "stock entries" msgstr "إدخالات المخزون" -#: engine/core/models.py:582 +#: engine/core/models.py:641 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1885,71 +1920,79 @@ msgstr "" "للخصائص التي يتم الوصول إليها بشكل متكرر لتحسين الأداء. يتم استخدامه لتعريف " "ومعالجة بيانات المنتج والمعلومات المرتبطة به داخل التطبيق." -#: engine/core/models.py:595 +#: engine/core/models.py:660 msgid "category this product belongs to" msgstr "الفئة التي ينتمي إليها هذا المنتج" -#: engine/core/models.py:604 +#: engine/core/models.py:669 msgid "optionally associate this product with a brand" msgstr "ربط هذا المنتج اختياريًا بعلامة تجارية" -#: engine/core/models.py:610 +#: engine/core/models.py:675 msgid "tags that help describe or group this product" msgstr "العلامات التي تساعد في وصف أو تجميع هذا المنتج" -#: engine/core/models.py:615 +#: engine/core/models.py:680 msgid "indicates whether this product is digitally delivered" msgstr "يشير إلى ما إذا كان هذا المنتج يتم تسليمه رقميًا أم لا" -#: engine/core/models.py:616 +#: engine/core/models.py:681 msgid "is product digital" msgstr "هل المنتج رقمي" -#: engine/core/models.py:623 +#: engine/core/models.py:688 msgid "indicates whether this product should be updated from periodic task" msgstr "يشير إلى ما إذا كان يجب تحديث هذا المنتج من المهمة الدورية" -#: engine/core/models.py:625 +#: engine/core/models.py:690 msgid "is product updatable" msgstr "هو منتج قابل للتحديث" -#: engine/core/models.py:631 +#: engine/core/models.py:696 msgid "provide a clear identifying name for the product" msgstr "توفير اسم تعريفي واضح للمنتج" -#: engine/core/models.py:632 +#: engine/core/models.py:697 msgid "product name" msgstr "اسم المنتج" -#: engine/core/models.py:638 engine/core/models.py:923 +#: engine/core/models.py:703 engine/core/models.py:1012 msgid "add a detailed description of the product" msgstr "إضافة وصف تفصيلي للمنتج" -#: engine/core/models.py:639 +#: engine/core/models.py:704 msgid "product description" msgstr "وصف المنتج" -#: engine/core/models.py:646 +#: engine/core/models.py:710 +msgid "optional video file for this product" +msgstr "ملف فيديو اختياري لهذا المنتج" + +#: engine/core/models.py:711 +msgid "product video" +msgstr "فيديو المنتج" + +#: engine/core/models.py:719 msgid "part number for this product" msgstr "رقم الجزء لهذا المنتج" -#: engine/core/models.py:647 +#: engine/core/models.py:720 msgid "part number" msgstr "رقم الجزء" -#: engine/core/models.py:666 +#: engine/core/models.py:739 msgid "stock keeping unit for this product" msgstr "وحدة حفظ المخزون لهذا المنتج" -#: engine/core/models.py:673 +#: engine/core/models.py:746 msgid "whether to export this product to marketplaces" msgstr "ما إذا كان سيتم تصدير هذا المنتج إلى الأسواق" -#: engine/core/models.py:674 +#: engine/core/models.py:747 msgid "Export to Marketplaces" msgstr "التصدير إلى الأسواق" -#: engine/core/models.py:749 +#: engine/core/models.py:835 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 " @@ -1964,64 +2007,64 @@ msgstr "" "من القيم، بما في ذلك السلسلة، والعدد الصحيح، والعائم، والمنطقي، والصفيف، " "والكائن. وهذا يسمح بهيكلة ديناميكية ومرنة للبيانات." -#: engine/core/models.py:762 +#: engine/core/models.py:848 msgid "group of this attribute" msgstr "مجموعة هذه السمة" -#: engine/core/models.py:768 +#: engine/core/models.py:854 msgid "string" msgstr "الخيط" -#: engine/core/models.py:769 +#: engine/core/models.py:855 msgid "integer" msgstr "عدد صحيح" -#: engine/core/models.py:770 +#: engine/core/models.py:856 msgid "float" msgstr "تعويم" -#: engine/core/models.py:771 +#: engine/core/models.py:857 msgid "boolean" msgstr "منطقية" -#: engine/core/models.py:772 +#: engine/core/models.py:858 msgid "array" msgstr "المصفوفة" -#: engine/core/models.py:773 +#: engine/core/models.py:859 msgid "object" msgstr "الكائن" -#: engine/core/models.py:775 +#: engine/core/models.py:861 msgid "type of the attribute's value" msgstr "نوع قيمة السمة" -#: engine/core/models.py:776 +#: engine/core/models.py:862 msgid "value type" msgstr "نوع القيمة" -#: engine/core/models.py:781 +#: engine/core/models.py:867 msgid "name of this attribute" msgstr "اسم هذه السمة" -#: engine/core/models.py:782 +#: engine/core/models.py:868 msgid "attribute's name" msgstr "اسم السمة" -#: engine/core/models.py:787 +#: engine/core/models.py:873 msgid "is filterable" msgstr "قابل للتصفية" -#: engine/core/models.py:789 +#: engine/core/models.py:875 msgid "designates whether this attribute can be used for filtering or not" msgstr "يحدد ما إذا كان يمكن استخدام هذه السمة للتصفية أم لا" -#: engine/core/models.py:802 engine/core/models.py:820 +#: engine/core/models.py:888 engine/core/models.py:906 #: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "السمة" -#: engine/core/models.py:808 +#: engine/core/models.py:894 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" @@ -2030,19 +2073,19 @@ msgstr "" "يمثل قيمة محددة لسمة مرتبطة بمنتج ما. يربط \"السمة\" بـ \"قيمة\" فريدة، مما " "يسمح بتنظيم أفضل وتمثيل ديناميكي لخصائص المنتج." -#: engine/core/models.py:819 +#: engine/core/models.py:905 msgid "attribute of this value" msgstr "سمة هذه القيمة" -#: engine/core/models.py:827 +#: engine/core/models.py:913 msgid "the specific product associated with this attribute's value" msgstr "المنتج المحدد المرتبط بقيمة هذه السمة" -#: engine/core/models.py:833 +#: engine/core/models.py:919 msgid "the specific value for this attribute" msgstr "القيمة المحددة لهذه السمة" -#: engine/core/models.py:846 +#: engine/core/models.py:934 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -2054,39 +2097,39 @@ msgstr "" "بالمنتجات، بما في ذلك وظيفة تحميل ملفات الصور، وربطها بمنتجات معينة، وتحديد " "ترتيب عرضها. وتتضمن أيضًا ميزة إمكانية الوصول مع نص بديل للصور." -#: engine/core/models.py:857 +#: engine/core/models.py:945 msgid "provide alternative text for the image for accessibility" msgstr "توفير نص بديل للصورة لإمكانية الوصول" -#: engine/core/models.py:858 +#: engine/core/models.py:946 msgid "image alt text" msgstr "النص البديل للصورة" -#: engine/core/models.py:861 +#: engine/core/models.py:949 msgid "upload the image file for this product" msgstr "تحميل ملف الصورة لهذا المنتج" -#: engine/core/models.py:862 engine/core/models.py:893 +#: engine/core/models.py:950 engine/core/models.py:982 msgid "product image" msgstr "صورة المنتج" -#: engine/core/models.py:867 +#: engine/core/models.py:955 msgid "determines the order in which images are displayed" msgstr "يحدد الترتيب الذي يتم عرض الصور به" -#: engine/core/models.py:868 +#: engine/core/models.py:956 msgid "display priority" msgstr "أولوية العرض" -#: engine/core/models.py:873 +#: engine/core/models.py:961 msgid "the product that this image represents" msgstr "المنتج الذي تمثله هذه الصورة" -#: engine/core/models.py:894 +#: engine/core/models.py:983 msgid "product images" msgstr "صور المنتج" -#: engine/core/models.py:899 +#: engine/core/models.py:988 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -2101,39 +2144,39 @@ msgstr "" "بالمنتجات القابلة للتطبيق. تتكامل مع كتالوج المنتجات لتحديد العناصر المتأثرة" " في الحملة." -#: engine/core/models.py:911 +#: engine/core/models.py:1000 msgid "percentage discount for the selected products" msgstr "النسبة المئوية للخصم على المنتجات المختارة" -#: engine/core/models.py:912 +#: engine/core/models.py:1001 msgid "discount percentage" msgstr "نسبة الخصم" -#: engine/core/models.py:917 +#: engine/core/models.py:1006 msgid "provide a unique name for this promotion" msgstr "تقديم اسم فريد لهذا العرض الترويجي" -#: engine/core/models.py:918 +#: engine/core/models.py:1007 msgid "promotion name" msgstr "اسم الترقية" -#: engine/core/models.py:924 +#: engine/core/models.py:1013 msgid "promotion description" msgstr "وصف الترقية" -#: engine/core/models.py:929 +#: engine/core/models.py:1018 msgid "select which products are included in this promotion" msgstr "حدد المنتجات المشمولة في هذا العرض الترويجي" -#: engine/core/models.py:930 +#: engine/core/models.py:1019 msgid "included products" msgstr "المنتجات المشمولة" -#: engine/core/models.py:934 +#: engine/core/models.py:1027 msgid "promotion" msgstr "الترقية" -#: engine/core/models.py:945 +#: engine/core/models.py:1038 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2144,23 +2187,23 @@ msgstr "" " لإدارة مجموعة من المنتجات، وتدعم عمليات مثل إضافة المنتجات وإزالتها، " "بالإضافة إلى دعم عمليات إضافة وإزالة منتجات متعددة في وقت واحد." -#: engine/core/models.py:957 +#: engine/core/models.py:1050 msgid "products that the user has marked as wanted" msgstr "المنتجات التي حددها المستخدم على أنها مطلوبة" -#: engine/core/models.py:965 +#: engine/core/models.py:1058 msgid "user who owns this wishlist" msgstr "المستخدم الذي يمتلك قائمة الرغبات هذه" -#: engine/core/models.py:966 +#: engine/core/models.py:1059 msgid "wishlist owner" msgstr "مالك قائمة الرغبات" -#: engine/core/models.py:974 +#: engine/core/models.py:1067 msgid "wishlist" msgstr "قائمة الرغبات" -#: engine/core/models.py:1016 +#: engine/core/models.py:1109 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2174,19 +2217,19 @@ msgstr "" "الوصفية. يحتوي على أساليب وخصائص للتعامل مع نوع الملف ومسار التخزين للملفات " "الوثائقية. وهو يوسع الوظائف من مزيج معين ويوفر ميزات مخصصة إضافية." -#: engine/core/models.py:1031 +#: engine/core/models.py:1124 msgid "documentary" msgstr "فيلم وثائقي" -#: engine/core/models.py:1032 +#: engine/core/models.py:1125 msgid "documentaries" msgstr "الأفلام الوثائقية" -#: engine/core/models.py:1042 +#: engine/core/models.py:1135 msgid "unresolved" msgstr "لم يتم حلها" -#: engine/core/models.py:1047 +#: engine/core/models.py:1140 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2205,59 +2248,59 @@ msgstr "" "يتيح تخزين استجابات واجهة برمجة التطبيقات الخام لمزيد من المعالجة أو الفحص. " "تسمح الفئة أيضًا بربط عنوان مع مستخدم، مما يسهل التعامل مع البيانات الشخصية." -#: engine/core/models.py:1062 +#: engine/core/models.py:1155 msgid "address line for the customer" msgstr "سطر العنوان للعميل" -#: engine/core/models.py:1063 +#: engine/core/models.py:1156 msgid "address line" msgstr "سطر العنوان" -#: engine/core/models.py:1065 +#: engine/core/models.py:1158 msgid "street" msgstr "الشارع" -#: engine/core/models.py:1066 +#: engine/core/models.py:1159 msgid "district" msgstr "المنطقة" -#: engine/core/models.py:1067 +#: engine/core/models.py:1160 msgid "city" msgstr "المدينة" -#: engine/core/models.py:1068 +#: engine/core/models.py:1161 msgid "region" msgstr "المنطقة" -#: engine/core/models.py:1069 +#: engine/core/models.py:1162 msgid "postal code" msgstr "الرمز البريدي" -#: engine/core/models.py:1070 +#: engine/core/models.py:1163 msgid "country" msgstr "البلد" -#: engine/core/models.py:1077 +#: engine/core/models.py:1170 msgid "geolocation point: (longitude, latitude)" msgstr "نقطة تحديد الموقع الجغرافي(خط الطول، خط العرض)" -#: engine/core/models.py:1083 +#: engine/core/models.py:1176 msgid "full JSON response from geocoder for this address" msgstr "استجابة JSON كاملة من أداة التشفير الجغرافي لهذا العنوان" -#: engine/core/models.py:1089 +#: engine/core/models.py:1182 msgid "stored JSON response from the geocoding service" msgstr "استجابة JSON مخزّنة من خدمة الترميز الجغرافي" -#: engine/core/models.py:1099 +#: engine/core/models.py:1192 msgid "address" msgstr "العنوان" -#: engine/core/models.py:1100 +#: engine/core/models.py:1193 msgid "addresses" msgstr "العناوين" -#: engine/core/models.py:1112 +#: engine/core/models.py:1205 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2272,72 +2315,72 @@ msgstr "" "والمستخدم المرتبط به (إن وجد)، وحالة استخدامه. ويتضمن وظيفة للتحقق من صحة " "الرمز الترويجي وتطبيقه على الطلب مع ضمان استيفاء القيود." -#: engine/core/models.py:1126 +#: engine/core/models.py:1219 msgid "unique code used by a user to redeem a discount" msgstr "الرمز الفريد الذي يستخدمه المستخدم لاسترداد قيمة الخصم" -#: engine/core/models.py:1127 +#: engine/core/models.py:1220 msgid "promo code identifier" msgstr "معرّف الرمز الترويجي" -#: engine/core/models.py:1134 +#: engine/core/models.py:1227 msgid "fixed discount amount applied if percent is not used" msgstr "مبلغ الخصم الثابت المطبق في حالة عدم استخدام النسبة المئوية" -#: engine/core/models.py:1135 +#: engine/core/models.py:1228 msgid "fixed discount amount" msgstr "مبلغ الخصم الثابت" -#: engine/core/models.py:1141 +#: engine/core/models.py:1234 msgid "percentage discount applied if fixed amount is not used" msgstr "النسبة المئوية للخصم المطبق في حالة عدم استخدام مبلغ ثابت" -#: engine/core/models.py:1142 +#: engine/core/models.py:1235 msgid "percentage discount" msgstr "النسبة المئوية للخصم" -#: engine/core/models.py:1147 +#: engine/core/models.py:1240 msgid "timestamp when the promocode expires" msgstr "الطابع الزمني عند انتهاء صلاحية الرمز الترويجي" -#: engine/core/models.py:1148 +#: engine/core/models.py:1241 msgid "end validity time" msgstr "وقت انتهاء الصلاحية" -#: engine/core/models.py:1153 +#: engine/core/models.py:1246 msgid "timestamp from which this promocode is valid" msgstr "الطابع الزمني الذي يكون هذا الرمز الترويجي صالحاً منه" -#: engine/core/models.py:1154 +#: engine/core/models.py:1247 msgid "start validity time" msgstr "وقت بدء الصلاحية" -#: engine/core/models.py:1159 +#: engine/core/models.py:1252 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "الطابع الزمني عند استخدام الرمز الترويجي، فارغ إذا لم يتم استخدامه بعد" -#: engine/core/models.py:1160 +#: engine/core/models.py:1253 msgid "usage timestamp" msgstr "الطابع الزمني للاستخدام" -#: engine/core/models.py:1165 +#: engine/core/models.py:1258 msgid "user assigned to this promocode if applicable" msgstr "المستخدم المعين لهذا الرمز الترويجي إن أمكن" -#: engine/core/models.py:1166 +#: engine/core/models.py:1259 msgid "assigned user" msgstr "المستخدم المعين" -#: engine/core/models.py:1173 +#: engine/core/models.py:1266 msgid "promo code" msgstr "الرمز الترويجي" -#: engine/core/models.py:1174 +#: engine/core/models.py:1267 msgid "promo codes" msgstr "الرموز الترويجية" -#: engine/core/models.py:1190 +#: engine/core/models.py:1283 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2345,16 +2388,16 @@ msgstr "" "يجب تحديد نوع واحد فقط من الخصم (المبلغ أو النسبة المئوية)، وليس كلا النوعين" " أو لا هذا ولا ذاك." -#: engine/core/models.py:1212 +#: engine/core/models.py:1305 msgid "promocode already used" msgstr "تم استخدام الرمز الترويجي بالفعل" -#: engine/core/models.py:1234 +#: engine/core/models.py:1327 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "نوع الخصم غير صالح للرمز الترويجي {self.uuid}" -#: engine/core/models.py:1243 +#: engine/core/models.py:1336 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 " @@ -2369,135 +2412,135 @@ msgstr "" "مرتبطة، ويمكن تطبيق العروض الترويجية، وتعيين العناوين، وتحديث تفاصيل الشحن " "أو الفوترة. وبالمثل، تدعم الوظيفة إدارة المنتجات في دورة حياة الطلب." -#: engine/core/models.py:1260 +#: engine/core/models.py:1357 msgid "the billing address used for this order" msgstr "عنوان إرسال الفواتير المستخدم لهذا الطلب" -#: engine/core/models.py:1268 +#: engine/core/models.py:1365 msgid "optional promo code applied to this order" msgstr "الرمز الترويجي الاختياري المطبق على هذا الطلب" -#: engine/core/models.py:1269 +#: engine/core/models.py:1366 msgid "applied promo code" msgstr "الرمز الترويجي المطبق" -#: engine/core/models.py:1277 +#: engine/core/models.py:1374 msgid "the shipping address used for this order" msgstr "عنوان الشحن المستخدم لهذا الطلب" -#: engine/core/models.py:1278 +#: engine/core/models.py:1375 msgid "shipping address" msgstr "عنوان الشحن" -#: engine/core/models.py:1284 +#: engine/core/models.py:1381 msgid "current status of the order in its lifecycle" msgstr "الحالة الحالية للطلب في دورة حياته" -#: engine/core/models.py:1285 +#: engine/core/models.py:1382 msgid "order status" msgstr "حالة الطلب" -#: engine/core/models.py:1290 engine/core/models.py:1889 +#: engine/core/models.py:1387 engine/core/models.py:1997 msgid "json structure of notifications to display to users" msgstr "" "بنية JSON للإشعارات التي سيتم عرضها للمستخدمين، في واجهة مستخدم المشرف، يتم " "استخدام عرض الجدول" -#: engine/core/models.py:1296 +#: engine/core/models.py:1393 msgid "json representation of order attributes for this order" msgstr "تمثيل JSON لسمات الطلب لهذا الطلب" -#: engine/core/models.py:1302 +#: engine/core/models.py:1399 msgid "the user who placed the order" msgstr "المستخدم الذي قدم الطلب" -#: engine/core/models.py:1303 +#: engine/core/models.py:1400 msgid "user" msgstr "المستخدم" -#: engine/core/models.py:1309 +#: engine/core/models.py:1406 msgid "the timestamp when the order was finalized" msgstr "الطابع الزمني عند الانتهاء من الطلب" -#: engine/core/models.py:1310 +#: engine/core/models.py:1407 msgid "buy time" msgstr "وقت الشراء" -#: engine/core/models.py:1317 +#: engine/core/models.py:1414 msgid "a human-readable identifier for the order" msgstr "معرّف يمكن قراءته بواسطة البشر للطلب" -#: engine/core/models.py:1318 +#: engine/core/models.py:1415 msgid "human readable id" msgstr "معرّف يمكن قراءته من قبل البشر" -#: engine/core/models.py:1324 +#: engine/core/models.py:1421 msgid "order" msgstr "الطلب" -#: engine/core/models.py:1371 +#: engine/core/models.py:1468 msgid "a user must have only one pending order at a time" msgstr "يجب أن يكون لدى المستخدم طلب واحد فقط معلق في كل مرة!" -#: engine/core/models.py:1404 +#: engine/core/models.py:1504 msgid "you cannot add products to an order that is not a pending one" msgstr "لا يمكنك إضافة منتجات إلى طلب غير معلق إلى طلب غير معلق" -#: engine/core/models.py:1410 +#: engine/core/models.py:1510 msgid "you cannot add inactive products to order" msgstr "لا يمكنك إضافة منتجات غير نشطة للطلب" -#: engine/core/models.py:1432 +#: engine/core/models.py:1533 msgid "you cannot add more products than available in stock" msgstr "لا يمكنك إضافة منتجات أكثر من المتوفرة في المخزون" -#: engine/core/models.py:1456 engine/core/models.py:1485 -#: engine/core/models.py:1495 +#: engine/core/models.py:1557 engine/core/models.py:1586 +#: engine/core/models.py:1596 msgid "you cannot remove products from an order that is not a pending one" msgstr "لا يمكنك إزالة المنتجات من طلب غير معلق من طلب غير معلق" -#: engine/core/models.py:1480 +#: engine/core/models.py:1581 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} غير موجود مع الاستعلام <{query}>!" -#: engine/core/models.py:1519 +#: engine/core/models.py:1620 msgid "promocode does not exist" msgstr "الرمز الترويجي غير موجود" -#: engine/core/models.py:1534 +#: engine/core/models.py:1635 msgid "you can only buy physical products with shipping address specified" msgstr "يمكنك فقط شراء المنتجات المادية مع تحديد عنوان الشحن فقط!" -#: engine/core/models.py:1555 +#: engine/core/models.py:1656 msgid "address does not exist" msgstr "العنوان غير موجود" -#: engine/core/models.py:1577 engine/core/models.py:1656 +#: engine/core/models.py:1678 engine/core/models.py:1757 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "لا يمكنك الشراء في هذه اللحظة، يرجى المحاولة مرة أخرى بعد بضع دقائق." -#: engine/core/models.py:1583 engine/core/models.py:1649 +#: engine/core/models.py:1684 engine/core/models.py:1750 msgid "invalid force value" msgstr "قيمة القوة غير صالحة" -#: engine/core/models.py:1589 engine/core/models.py:1660 +#: engine/core/models.py:1690 engine/core/models.py:1761 msgid "you cannot purchase an empty order!" msgstr "لا يمكنك شراء طلبية فارغة!" -#: engine/core/models.py:1610 +#: engine/core/models.py:1711 msgid "you cannot buy an order without a user" msgstr "لا يمكنك شراء طلب بدون مستخدم!" -#: engine/core/models.py:1624 +#: engine/core/models.py:1725 msgid "a user without a balance cannot buy with balance" msgstr "المستخدم بدون رصيد لا يمكنه الشراء بالرصيد!" -#: engine/core/models.py:1630 +#: engine/core/models.py:1731 msgid "insufficient funds to complete the order" msgstr "عدم كفاية الأموال لإكمال الطلب" -#: engine/core/models.py:1671 +#: engine/core/models.py:1772 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2505,14 +2548,14 @@ msgstr "" "لا يمكنك الشراء بدون تسجيل، يرجى تقديم المعلومات التالية: اسم العميل، البريد" " الإلكتروني للعميل، رقم هاتف العميل" -#: engine/core/models.py:1682 +#: engine/core/models.py:1783 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "طريقة الدفع غير صالحة: {payment_method} من {available_payment_methods}!" -#: engine/core/models.py:1813 +#: engine/core/models.py:1916 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2525,32 +2568,32 @@ msgstr "" "المستخدم، ومرجع إلى المنتج ذي الصلة في الطلب، وتقييم معين من قبل المستخدم. " "يستخدم الفصل حقول قاعدة البيانات لنمذجة وإدارة بيانات الملاحظات بشكل فعال." -#: engine/core/models.py:1825 +#: engine/core/models.py:1928 msgid "user-provided comments about their experience with the product" msgstr "التعليقات المقدمة من المستخدمين حول تجربتهم مع المنتج" -#: engine/core/models.py:1826 +#: engine/core/models.py:1929 msgid "feedback comments" msgstr "تعليقات على الملاحظات" -#: engine/core/models.py:1834 +#: engine/core/models.py:1937 msgid "" "references the specific product in an order that this feedback is about" msgstr "الإشارة إلى المنتج المحدد في الطلب الذي تدور حوله هذه الملاحظات" -#: engine/core/models.py:1836 +#: engine/core/models.py:1939 msgid "related order product" msgstr "منتجات الطلبات ذات الصلة" -#: engine/core/models.py:1841 +#: engine/core/models.py:1944 msgid "user-assigned rating for the product" msgstr "التصنيف المعين من قبل المستخدم للمنتج" -#: engine/core/models.py:1842 +#: engine/core/models.py:1945 msgid "product rating" msgstr "تصنيف المنتج" -#: engine/core/models.py:1862 +#: engine/core/models.py:1965 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2569,108 +2612,108 @@ msgstr "" " تدعم منطق العمل، مثل حساب السعر الإجمالي أو إنشاء عنوان URL للتنزيل " "للمنتجات الرقمية. يتكامل النموذج مع نموذجي الطلب والمنتج ويخزن مرجعًا لهما." -#: engine/core/models.py:1877 +#: engine/core/models.py:1985 msgid "the price paid by the customer for this product at purchase time" msgstr "السعر الذي دفعه العميل لهذا المنتج وقت الشراء" -#: engine/core/models.py:1878 +#: engine/core/models.py:1986 msgid "purchase price at order time" msgstr "سعر الشراء وقت الطلب" -#: engine/core/models.py:1883 +#: engine/core/models.py:1991 msgid "internal comments for admins about this ordered product" msgstr "تعليقات داخلية للمسؤولين حول هذا المنتج المطلوب" -#: engine/core/models.py:1884 +#: engine/core/models.py:1992 msgid "internal comments" msgstr "التعليقات الداخلية" -#: engine/core/models.py:1890 +#: engine/core/models.py:1998 msgid "user notifications" msgstr "إشعارات المستخدم" -#: engine/core/models.py:1895 +#: engine/core/models.py:2003 msgid "json representation of this item's attributes" msgstr "تمثيل JSON لسمات هذا العنصر" -#: engine/core/models.py:1896 +#: engine/core/models.py:2004 msgid "ordered product attributes" msgstr "سمات المنتج المطلوبة" -#: engine/core/models.py:1901 +#: engine/core/models.py:2009 msgid "reference to the parent order that contains this product" msgstr "الإشارة إلى الطلب الأصلي الذي يحتوي على هذا المنتج" -#: engine/core/models.py:1902 +#: engine/core/models.py:2010 msgid "parent order" msgstr "ترتيب الوالدين" -#: engine/core/models.py:1911 +#: engine/core/models.py:2019 msgid "the specific product associated with this order line" msgstr "المنتج المحدد المرتبط بخط الطلب هذا" -#: engine/core/models.py:1918 +#: engine/core/models.py:2026 msgid "quantity of this specific product in the order" msgstr "كمية هذا المنتج المحدد في الطلب" -#: engine/core/models.py:1919 +#: engine/core/models.py:2027 msgid "product quantity" msgstr "كمية المنتج" -#: engine/core/models.py:1926 +#: engine/core/models.py:2034 msgid "current status of this product in the order" msgstr "الحالة الحالية لهذا المنتج بالترتيب" -#: engine/core/models.py:1927 +#: engine/core/models.py:2035 msgid "product line status" msgstr "حالة خط الإنتاج" -#: engine/core/models.py:1998 +#: engine/core/models.py:2106 msgid "order product must have an order" msgstr "يجب أن يكون لـ Orderproduct طلب مرتبط به!" -#: engine/core/models.py:2000 +#: engine/core/models.py:2108 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "تم تحديد إجراء خاطئ للتغذية الراجعة: {action}!" -#: engine/core/models.py:2017 +#: engine/core/models.py:2125 msgid "you cannot feedback an order which is not received" msgstr "لا يمكنك التعليق على طلب لم يتم استلامه" -#: engine/core/models.py:2026 +#: engine/core/models.py:2132 engine/core/models.py:2227 msgid "name" msgstr "الاسم" -#: engine/core/models.py:2028 +#: engine/core/models.py:2134 msgid "URL of the integration" msgstr "رابط التكامل" -#: engine/core/models.py:2031 +#: engine/core/models.py:2137 msgid "authentication credentials" msgstr "بيانات اعتماد المصادقة" -#: engine/core/models.py:2054 +#: engine/core/models.py:2160 msgid "you can only have one default CRM provider" msgstr "يمكن أن يكون لديك موفر CRM افتراضي واحد فقط" -#: engine/core/models.py:2064 +#: engine/core/models.py:2170 msgid "CRM" msgstr "إدارة علاقات العملاء" -#: engine/core/models.py:2065 +#: engine/core/models.py:2171 msgid "CRMs" msgstr "إدارة علاقات العملاء" -#: engine/core/models.py:2081 +#: engine/core/models.py:2187 msgid "order CRM link" msgstr "رابط إدارة علاقات العملاء الخاصة بالطلب" -#: engine/core/models.py:2082 +#: engine/core/models.py:2188 msgid "orders CRM links" msgstr "روابط إدارة علاقات العملاء الخاصة بالطلبات" -#: engine/core/models.py:2087 +#: engine/core/models.py:2193 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2685,20 +2728,54 @@ msgstr "" "إذا كان الأصل مرئيًا للعامة. وتتضمن طريقة لإنشاء عنوان URL لتنزيل الأصل " "عندما يكون الطلب المرتبط في حالة مكتملة." -#: engine/core/models.py:2103 +#: engine/core/models.py:2209 msgid "download" msgstr "تنزيل" -#: engine/core/models.py:2104 +#: engine/core/models.py:2210 msgid "downloads" msgstr "التنزيلات" +#: engine/core/models.py:2228 +msgid "descriptive name for the image" +msgstr "الاسم الوصفي للصورة" + +#: engine/core/models.py:2233 +msgid "image file pasted in the markdown editor" +msgstr "ملف صورة ملصق في محرر التخفيض" + +#: engine/core/models.py:2239 +msgid "alt text" +msgstr "نص آخر" + +#: engine/core/models.py:2240 +msgid "alternative text for accessibility" +msgstr "نص بديل لإمكانية الوصول" + +#: engine/core/models.py:2244 +msgid "pasted image" +msgstr "صورة ملصقة" + +#: engine/core/models.py:2245 +msgid "pasted images" +msgstr "الصور الملصقة" + #: engine/core/serializers/utility.py:91 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "يجب عليك تقديم تعليق، وتقييم، وطلب المنتج uuid لإضافة ملاحظاتك." #: engine/core/sitemaps.py:25 +#: engine/core/templates/admin_doc/bookmarklets.html:8 +#: engine/core/templates/admin_doc/index.html:8 +#: engine/core/templates/admin_doc/missing_docutils.html:8 +#: engine/core/templates/admin_doc/model_detail.html:8 +#: engine/core/templates/admin_doc/model_index.html:8 +#: engine/core/templates/admin_doc/template_detail.html:8 +#: engine/core/templates/admin_doc/template_filter_index.html:8 +#: engine/core/templates/admin_doc/template_tag_index.html:8 +#: engine/core/templates/admin_doc/view_detail.html:8 +#: engine/core/templates/admin_doc/view_index.html:8 msgid "Home" msgstr "الصفحة الرئيسية" @@ -2751,45 +2828,34 @@ msgstr "الإجمالي" msgid "Dashboard" msgstr "لوحة التحكم" -#: engine/core/templates/admin/dashboard/_income_overview.html:7 +#: engine/core/templates/admin/dashboard/_income_overview.html:6 msgid "Income overview" msgstr "نظرة عامة على الدخل" -#: engine/core/templates/admin/dashboard/_income_overview.html:31 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Net" +#: engine/core/templates/admin/dashboard/_income_overview.html:16 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" msgstr "صافي الإيرادات" -#: engine/core/templates/admin/dashboard/_income_overview.html:37 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Taxes" -msgstr "الضرائب" - -#: engine/core/templates/admin/dashboard/_income_overview.html:43 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 +#: engine/core/templates/admin/dashboard/_income_overview.html:21 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 msgid "Returns" msgstr "المرتجعات" -#: engine/core/templates/admin/dashboard/_income_overview.html:48 -msgid "Gross (pie total)" -msgstr "إجمالي الإيرادات" - -#: engine/core/templates/admin/dashboard/_income_overview.html:72 -msgid "No data" -msgstr "لا يوجد تاريخ" - +#: engine/core/templates/admin/dashboard/_income_overview.html:26 #: engine/core/templates/admin/dashboard/_kpis.html:6 msgid "GMV" msgstr "GMV" +#: engine/core/templates/admin/dashboard/_income_overview.html:50 +msgid "No data" +msgstr "لا يوجد تاريخ" + #: engine/core/templates/admin/dashboard/_kpis.html:34 msgid "AOV" msgstr "AOV" -#: engine/core/templates/admin/dashboard/_kpis.html:48 -msgid "Net revenue" -msgstr "صافي الإيرادات" - #: engine/core/templates/admin/dashboard/_kpis.html:62 msgid "Refund rate" msgstr "معدل الاسترداد" @@ -2802,7 +2868,7 @@ msgstr "تم الإرجاع" msgid "Low stock" msgstr "مخزون منخفض" -#: engine/core/templates/admin/dashboard/_low_stock.html:29 +#: engine/core/templates/admin/dashboard/_low_stock.html:33 msgid "No low stock items." msgstr "لا توجد عناصر منخفضة المخزون." @@ -2859,6 +2925,295 @@ msgstr "لم يتم بيع أي فئة في آخر 30 يوماً." msgid "Django site admin" msgstr "مشرف موقع جانغو" +#: engine/core/templates/admin_doc/bookmarklets.html:4 +#: engine/core/templates/admin_doc/bookmarklets.html:17 +msgid "Documentation bookmarklets" +msgstr "إشارات مرجعية للوثائق" + +#: engine/core/templates/admin_doc/bookmarklets.html:10 +#: engine/core/templates/admin_doc/index.html:4 +#: engine/core/templates/admin_doc/index.html:10 +#: engine/core/templates/admin_doc/index.html:15 +#: engine/core/templates/admin_doc/missing_docutils.html:10 +#: engine/core/templates/admin_doc/missing_docutils.html:19 +#: engine/core/templates/admin_doc/model_detail.html:10 +#: engine/core/templates/admin_doc/model_index.html:10 +#: engine/core/templates/admin_doc/template_detail.html:10 +#: engine/core/templates/admin_doc/template_filter_index.html:10 +#: engine/core/templates/admin_doc/template_tag_index.html:10 +#: engine/core/templates/admin_doc/view_detail.html:10 +#: engine/core/templates/admin_doc/view_index.html:10 +msgid "Documentation" +msgstr "التوثيق" + +#: engine/core/templates/admin_doc/bookmarklets.html:12 +#: engine/core/templates/admin_doc/index.html:53 +msgid "Bookmarklets" +msgstr "إشارات مرجعية" + +#: engine/core/templates/admin_doc/bookmarklets.html:19 +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"لتثبيت الإشارات المرجعية، اسحب الرابط إلى شريط الإشارات المرجعية، أو انقر " +"بزر الماوس الأيمن على الرابط وأضفه إلى الإشارات المرجعية. الآن يمكنك تحديد " +"الإشارة المرجعية من أي صفحة في الموقع." + +#: engine/core/templates/admin_doc/bookmarklets.html:29 +msgid "Documentation for this page" +msgstr "وثائق هذه الصفحة" + +#: engine/core/templates/admin_doc/bookmarklets.html:31 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "ينقلك من أي صفحة إلى الوثائق الخاصة بالعرض الذي يولد تلك الصفحة." + +#: engine/core/templates/admin_doc/index.html:21 +#: engine/core/templates/admin_doc/model_detail.html:12 +#: engine/core/templates/admin_doc/model_index.html:4 +#: engine/core/templates/admin_doc/model_index.html:12 +msgid "Models" +msgstr "نماذج" + +#: engine/core/templates/admin_doc/index.html:23 +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"النماذج هي أوصاف لجميع الكائنات في النظام والحقول المرتبطة بها. يحتوي كل " +"نموذج على قائمة بالحقول التي يمكن الوصول إليها كمتغيرات قالب." + +#: engine/core/templates/admin_doc/index.html:29 +#: engine/core/templates/admin_doc/view_detail.html:12 +#: engine/core/templates/admin_doc/view_index.html:4 +#: engine/core/templates/admin_doc/view_index.html:12 +msgid "Views" +msgstr "المشاهدات" + +#: engine/core/templates/admin_doc/index.html:31 +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"يتم إنشاء كل صفحة على الموقع العام بواسطة عرض. يحدد العرض القالب المستخدم " +"لإنشاء الصفحة والكائنات المتاحة لهذا القالب." + +#: engine/core/templates/admin_doc/index.html:39 +msgid "List of all the template tags and their functions." +msgstr "قائمة بجميع علامات القوالب ووظائفها." + +#: engine/core/templates/admin_doc/index.html:45 +#: engine/core/templates/admin_doc/template_filter_index.html:12 +msgid "Filters" +msgstr "المرشحات" + +#: engine/core/templates/admin_doc/index.html:47 +msgid "" +"Filters are actions which can be applied to variables in a template to alter" +" the output." +msgstr "" +"المرشحات هي إجراءات يمكن تطبيقها على المتغيرات في القالب لتغيير الناتج." + +#: engine/core/templates/admin_doc/index.html:55 +msgid "Tools for your browser to quickly access admin functionality." +msgstr "أدوات لمتصفحك للوصول بسرعة إلى وظائف الإدارة." + +#: engine/core/templates/admin_doc/missing_docutils.html:4 +msgid "Please install docutils" +msgstr "يرجى تثبيت docutils" + +#: engine/core/templates/admin_doc/missing_docutils.html:20 +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"يتطلب نظام توثيق الإدارة مكتبة docutils الخاصة بـ Python." + +#: engine/core/templates/admin_doc/missing_docutils.html:21 +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"يرجى مطالبة المسؤولين عن الإدارة بتثبيت docutils." + +#: engine/core/templates/admin_doc/model_detail.html:4 +#, python-format +msgid "Model: %(name)s" +msgstr "الطراز: %(name)s" + +#: engine/core/templates/admin_doc/model_detail.html:29 +msgid "Fields" +msgstr "الحقول" + +#: engine/core/templates/admin_doc/model_detail.html:36 +msgid "Field" +msgstr "الميدان" + +#: engine/core/templates/admin_doc/model_detail.html:37 +msgid "Type" +msgstr "النوع" + +#: engine/core/templates/admin_doc/model_detail.html:38 +#: engine/core/templates/admin_doc/model_detail.html:70 +msgid "Description" +msgstr "الوصف" + +#: engine/core/templates/admin_doc/model_detail.html:61 +msgid "Methods with arguments" +msgstr "الطرق مع الحجج" + +#: engine/core/templates/admin_doc/model_detail.html:68 +msgid "Method" +msgstr "الطريقة" + +#: engine/core/templates/admin_doc/model_detail.html:69 +msgid "Arguments" +msgstr "الحجج" + +#: engine/core/templates/admin_doc/model_detail.html:89 +msgid "Back to Model documentation" +msgstr "العودة إلى وثائق النموذج" + +#: engine/core/templates/admin_doc/model_index.html:17 +msgid "Model documentation" +msgstr "وثائق النموذج" + +#: engine/core/templates/admin_doc/model_index.html:44 +msgid "Model groups" +msgstr "مجموعات النماذج" + +#: engine/core/templates/admin_doc/template_detail.html:4 +#, python-format +msgid "Template: %(name)s" +msgstr "قالب: %(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:12 +msgid "Templates" +msgstr "القوالب" + +#: engine/core/templates/admin_doc/template_detail.html:17 +#, python-format +msgid "" +"Template: %(name)s" +msgstr "" +"قالب: %(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:21 +#, python-format +msgid "Search path for template %(name)s:" +msgstr "مسار البحث عن القالب %(name)s:" + +#: engine/core/templates/admin_doc/template_detail.html:29 +msgid "(does not exist)" +msgstr "(غير موجود)" + +#: engine/core/templates/admin_doc/template_detail.html:40 +msgid "Back to Documentation" +msgstr "العودة إلى الوثائق" + +#: engine/core/templates/admin_doc/template_filter_index.html:4 +msgid "Template filters" +msgstr "مرشحات القوالب" + +#: engine/core/templates/admin_doc/template_filter_index.html:17 +msgid "Template filter documentation" +msgstr "وثائق مرشح القوالب" + +#: engine/core/templates/admin_doc/template_filter_index.html:26 +#: engine/core/templates/admin_doc/template_filter_index.html:52 +msgid "Built-in filters" +msgstr "مرشحات مدمجة" + +#: engine/core/templates/admin_doc/template_filter_index.html:29 +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before using" +" the filter." +msgstr "" +"لاستخدام هذه المرشحات، ضع %(code)s في القالب الخاص بك قبل " +"استخدام المرشح." + +#: engine/core/templates/admin_doc/template_tag_index.html:4 +msgid "Template tags" +msgstr "علامات القوالب" + +#: engine/core/templates/admin_doc/template_tag_index.html:17 +msgid "Template tag documentation" +msgstr "وثائق علامات القوالب" + +#: engine/core/templates/admin_doc/template_tag_index.html:26 +#: engine/core/templates/admin_doc/template_tag_index.html:52 +msgid "Built-in tags" +msgstr "العلامات المدمجة" + +#: engine/core/templates/admin_doc/template_tag_index.html:29 +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using the tag." +msgstr "" +"لاستخدام هذه العلامات، ضع %(code)s في القالب الخاص بك قبل " +"استخدام العلامة." + +#: engine/core/templates/admin_doc/view_detail.html:4 +#, python-format +msgid "View: %(name)s" +msgstr "عرض: %(name)s" + +#: engine/core/templates/admin_doc/view_detail.html:28 +msgid "Context:" +msgstr "السياق:" + +#: engine/core/templates/admin_doc/view_detail.html:33 +msgid "Templates:" +msgstr "القوالب:" + +#: engine/core/templates/admin_doc/view_detail.html:41 +msgid "Back to View documentation" +msgstr "العودة إلى عرض الوثائق" + +#: engine/core/templates/admin_doc/view_index.html:17 +msgid "View documentation" +msgstr "عرض الوثائق" + +#: engine/core/templates/admin_doc/view_index.html:28 +#, python-format +msgid "Views by namespace %(name)s" +msgstr "عرض حسب مساحة الاسم %(name)s" + +#: engine/core/templates/admin_doc/view_index.html:30 +msgid "Views by empty namespace" +msgstr "عرض حسب مساحة الاسم الفارغة" + +#: engine/core/templates/admin_doc/view_index.html:40 +#, python-format +msgid "" +"View function: %(full_name)s. Name: %(url_name)s." +msgstr "" +"وظيفة العرض: %(full_name)s. الاسم: %(url_name)s." + +#: engine/core/templates/admin_doc/view_index.html:54 +msgid "Jump to namespace" +msgstr "الانتقال إلى مساحة الاسم" + +#: engine/core/templates/admin_doc/view_index.html:59 +msgid "Empty namespace" +msgstr "مساحة اسم فارغة" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -2956,7 +3311,7 @@ msgstr "" " معلومات إضافية" #: engine/core/templates/digital_order_delivered_email.html:137 -#: engine/core/templates/json_table_widget.html:6 +#: engine/core/templates/json_table_widget.html:26 msgid "value" msgstr "القيمة" @@ -2975,11 +3330,23 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "مع أطيب تحياتي،
فريق %(project_name)s" -#: engine/core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:7 +msgid "Key" +msgstr "مفتاح" + +#: engine/core/templates/json_table_widget.html:8 +msgid "Value" +msgstr "القيمة" + +#: engine/core/templates/json_table_widget.html:19 msgid "key" msgstr "المفتاح" -#: engine/core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:32 +msgid "Delete row" +msgstr "حذف الصف" + +#: engine/core/templates/json_table_widget.html:44 msgid "Add Row" msgstr "إضافة صف" @@ -3064,12 +3431,21 @@ msgstr "ليس لديك إذن لتنفيذ هذا الإجراء." msgid "NOMINATIM_URL must be configured." msgstr "يجب تكوين معلمة NOMINATIM_URL!" -#: engine/core/validators.py:23 +#: engine/core/validators.py:18 +msgid "could not determine file type" +msgstr "تعذر تحديد نوع الملف" + +#: engine/core/validators.py:24 +#, python-brace-format +msgid "unsupported video format. supported formats: {supported}" +msgstr "تنسيق الفيديو غير مدعوم. التنسيقات المدعومة: {supported}" + +#: engine/core/validators.py:45 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "يجب ألا تتجاوز أبعاد الصورة w{max_width} x h{max_height} بكسل!" -#: engine/core/views.py:104 +#: engine/core/views.py:108 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3077,7 +3453,7 @@ msgstr "" "يتعامل مع طلب فهرس خريطة الموقع ويعيد استجابة XML. يضمن أن تتضمن الاستجابة " "رأس نوع المحتوى المناسب ل XML." -#: engine/core/views.py:119 +#: engine/core/views.py:123 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3086,16 +3462,16 @@ msgstr "" "يعالج استجابة العرض التفصيلي لخريطة الموقع. تقوم هذه الدالة بمعالجة الطلب، " "وجلب استجابة تفاصيل خريطة الموقع المناسبة، وتعيين رأس نوع المحتوى ل XML." -#: engine/core/views.py:155 +#: engine/core/views.py:174 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "إرجاع قائمة باللغات المدعومة والمعلومات الخاصة بها." -#: engine/core/views.py:182 +#: engine/core/views.py:201 msgid "Returns the parameters of the website as a JSON object." msgstr "إرجاع معلمات الموقع الإلكتروني ككائن JSON." -#: engine/core/views.py:198 +#: engine/core/views.py:217 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3103,11 +3479,11 @@ msgstr "" "يعالج عمليات ذاكرة التخزين المؤقت مثل قراءة بيانات ذاكرة التخزين المؤقت " "وتعيينها بمفتاح ومهلة محددة." -#: engine/core/views.py:220 +#: engine/core/views.py:239 msgid "Handles `contact us` form submissions." msgstr "يتعامل مع عمليات إرسال نموذج \"اتصل بنا\"." -#: engine/core/views.py:236 +#: engine/core/views.py:255 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3115,15 +3491,15 @@ msgstr "" "يعالج طلبات معالجة عناوين URL والتحقق من صحة عناوين URL من طلبات POST " "الواردة." -#: engine/core/views.py:273 +#: engine/core/views.py:292 msgid "Handles global search queries." msgstr "يتعامل مع استعلامات البحث العامة." -#: engine/core/views.py:289 +#: engine/core/views.py:308 msgid "Handles the logic of buying as a business without registration." msgstr "يتعامل بمنطق الشراء كشركة تجارية دون تسجيل." -#: engine/core/views.py:337 +#: engine/core/views.py:356 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3131,31 +3507,31 @@ msgstr "" "يتعامل مع تنزيل الأصل الرقمي المرتبط بأمر ما.\n" "تحاول هذه الدالة خدمة ملف الأصل الرقمي الموجود في دليل التخزين الخاص بالمشروع. إذا لم يتم العثور على الملف، يتم رفع خطأ HTTP 404 للإشارة إلى أن المورد غير متوفر." -#: engine/core/views.py:348 +#: engine/core/views.py:367 msgid "order_product_uuid is required" msgstr "الطلب_برو_منتج_uuid مطلوب" -#: engine/core/views.py:355 +#: engine/core/views.py:374 msgid "order product does not exist" msgstr "طلب المنتج غير موجود" -#: engine/core/views.py:358 +#: engine/core/views.py:377 msgid "you can only download the digital asset once" msgstr "يمكنك تنزيل الأصل الرقمي مرة واحدة فقط" -#: engine/core/views.py:362 +#: engine/core/views.py:381 msgid "the order must be paid before downloading the digital asset" msgstr "يجب دفع الطلب قبل تنزيل الأصل الرقمي" -#: engine/core/views.py:369 +#: engine/core/views.py:388 msgid "the order product does not have a product" msgstr "لا يحتوي منتج الطلب على منتج" -#: engine/core/views.py:412 +#: engine/core/views.py:431 msgid "favicon not found" msgstr "الرمز المفضل غير موجود" -#: engine/core/views.py:418 +#: engine/core/views.py:437 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3163,7 +3539,7 @@ msgstr "" "يتعامل مع طلبات الرمز المفضل لموقع ويب.\n" "تحاول هذه الدالة عرض ملف الأيقونة المفضلة الموجود في الدليل الثابت للمشروع. إذا لم يتم العثور على ملف الأيقونة المفضلة، يتم رفع خطأ HTTP 404 للإشارة إلى أن المورد غير متوفر." -#: engine/core/views.py:432 +#: engine/core/views.py:451 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3173,16 +3549,20 @@ msgstr "" " توجيهها إلى صفحة فهرس واجهة إدارة Django. تستخدم دالة \"إعادة التوجيه\" في " "Django للتعامل مع إعادة توجيه HTTP." -#: engine/core/views.py:445 +#: engine/core/views.py:464 msgid "Returns current version of the Schon. " msgstr "إرجاع الإصدار الحالي من Schon." -#: engine/core/views.py:674 engine/core/views.py:689 +#: engine/core/views.py:475 +msgid "no image file provided" +msgstr "لم يتم توفير ملف صورة" + +#: engine/core/views.py:710 engine/core/views.py:725 #, python-format msgid "Revenue & Orders (last %(days)d)" msgstr "الإيرادات والطلبات (آخر %(days)d)" -#: engine/core/views.py:870 +#: engine/core/views.py:911 msgid "Returns custom variables for Dashboard. " msgstr "إرجاع المتغيرات المخصصة للوحة التحكم." @@ -3266,7 +3646,7 @@ msgstr "" "Django's ViewSet لتبسيط تنفيذ نقاط نهاية واجهة برمجة التطبيقات لكائنات " "العلامة التجارية." -#: engine/core/viewsets.py:458 +#: engine/core/viewsets.py:460 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3282,7 +3662,15 @@ msgstr "" "عمل Django REST لعمليات RESTful API. يتضمن أساليب لاسترجاع تفاصيل المنتج، " "وتطبيق الأذونات، والوصول إلى الملاحظات ذات الصلة بمنتج ما." -#: engine/core/viewsets.py:605 +#: engine/core/viewsets.py:541 +msgid "identificator_type and identificators are required" +msgstr "identificator_type و identificators مطلوبان" + +#: engine/core/viewsets.py:554 +msgid "identificator_type must be one of: uuid, slug, sku" +msgstr "يجب أن يكون نوع المعرف أحد الأنواع التالية: uuid، slug، sku" + +#: engine/core/viewsets.py:635 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3296,7 +3684,7 @@ msgstr "" "الفئة هو توفير وصول مبسط إلى الموارد المتعلقة بالمورد من خلال إطار عمل " "Django REST." -#: engine/core/viewsets.py:625 +#: engine/core/viewsets.py:655 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3312,7 +3700,7 @@ msgstr "" " \"مجموعة عرض الملاحظات\" الأساسية وتستفيد من نظام تصفية Django للاستعلام عن" " البيانات." -#: engine/core/viewsets.py:652 +#: engine/core/viewsets.py:682 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3329,7 +3717,7 @@ msgstr "" "عليه. يستخدم ViewSet العديد من المتسلسلات بناءً على الإجراء المحدد الذي يتم " "تنفيذه ويفرض الأذونات وفقًا لذلك أثناء التفاعل مع بيانات الطلبات." -#: engine/core/viewsets.py:914 +#: engine/core/viewsets.py:944 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3342,11 +3730,11 @@ msgstr "" "من الأذونات، وتبديل المتسلسل بناءً على الإجراء المطلوب. بالإضافة إلى ذلك، " "توفر إجراءً مفصلاً للتعامل مع الملاحظات على مثيلات OrderProduct" -#: engine/core/viewsets.py:974 +#: engine/core/viewsets.py:1004 msgid "Manages operations related to Product images in the application. " msgstr "يدير العمليات المتعلقة بصور المنتج في التطبيق." -#: engine/core/viewsets.py:988 +#: engine/core/viewsets.py:1018 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3354,15 +3742,15 @@ msgstr "" "يدير استرداد مثيلات PromoCode ومعالجتها من خلال إجراءات واجهة برمجة " "التطبيقات المختلفة." -#: engine/core/viewsets.py:1019 +#: engine/core/viewsets.py:1049 msgid "Represents a view set for managing promotions. " msgstr "يمثل مجموعة عرض لإدارة الترقيات." -#: engine/core/viewsets.py:1032 +#: engine/core/viewsets.py:1062 msgid "Handles operations related to Stock data in the system." msgstr "يتعامل مع العمليات المتعلقة ببيانات المخزون في النظام." -#: engine/core/viewsets.py:1046 +#: engine/core/viewsets.py:1076 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3379,7 +3767,7 @@ msgstr "" "الأذونات للتأكد من أن المستخدمين يمكنهم فقط إدارة قوائم الرغبات الخاصة بهم " "ما لم يتم منح أذونات صريحة." -#: engine/core/viewsets.py:1183 +#: engine/core/viewsets.py:1213 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3392,12 +3780,12 @@ msgstr "" "العناوين. وتتضمن سلوكيات متخصصة لطرق HTTP المختلفة، وتجاوزات المتسلسل، " "ومعالجة الأذونات بناءً على سياق الطلب." -#: engine/core/viewsets.py:1254 +#: engine/core/viewsets.py:1275 #, python-brace-format msgid "Geocoding error: {e}" msgstr "خطأ في الترميز الجغرافي: {e}" -#: engine/core/viewsets.py:1262 +#: engine/core/viewsets.py:1283 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/cs_CZ/LC_MESSAGES/django.mo b/engine/core/locale/cs_CZ/LC_MESSAGES/django.mo index a18bbab6..5239aaa8 100644 Binary files a/engine/core/locale/cs_CZ/LC_MESSAGES/django.mo and b/engine/core/locale/cs_CZ/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/cs_CZ/LC_MESSAGES/django.po b/engine/core/locale/cs_CZ/LC_MESSAGES/django.po index e0956411..314257b2 100644 --- a/engine/core/locale/cs_CZ/LC_MESSAGES/django.po +++ b/engine/core/locale/cs_CZ/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -50,113 +50,133 @@ msgstr "Upraveno" msgid "when the object was last modified" msgstr "Kdy byl objekt naposledy upraven" -#: engine/core/admin.py:94 +#: engine/core/admin.py:98 msgid "translations" msgstr "Překlady" -#: engine/core/admin.py:102 +#: engine/core/admin.py:106 msgid "general" msgstr "Obecné" -#: engine/core/admin.py:106 +#: engine/core/admin.py:110 msgid "relations" msgstr "Vztahy" -#: engine/core/admin.py:111 +#: engine/core/admin.py:115 msgid "additional info" msgstr "další informace" -#: engine/core/admin.py:133 +#: engine/core/admin.py:137 msgid "metadata" msgstr "Metadata" -#: engine/core/admin.py:141 +#: engine/core/admin.py:145 msgid "timestamps" msgstr "Časová razítka" -#: engine/core/admin.py:158 +#: engine/core/admin.py:162 #, python-format msgid "Activate selected %(verbose_name_plural)s" msgstr "Aktivovat vybrané %(verbose_name_plural)s" -#: engine/core/admin.py:166 +#: engine/core/admin.py:170 msgid "selected items have been activated." msgstr "Vybrané položky byly aktivovány!" -#: engine/core/admin.py:174 +#: engine/core/admin.py:178 #, python-format msgid "Deactivate selected %(verbose_name_plural)s" msgstr "Deaktivovat vybrané %(verbose_name_plural)s" -#: engine/core/admin.py:184 +#: engine/core/admin.py:188 msgid "selected items have been deactivated." msgstr "Vybrané položky byly deaktivovány!" -#: engine/core/admin.py:196 engine/core/graphene/object_types.py:653 -#: engine/core/graphene/object_types.py:660 engine/core/models.py:832 -#: engine/core/models.py:840 +#: engine/core/admin.py:200 engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:673 engine/core/models.py:918 +#: engine/core/models.py:928 msgid "attribute value" msgstr "Hodnota atributu" -#: engine/core/admin.py:197 engine/core/graphene/object_types.py:77 -#: engine/core/models.py:841 +#: engine/core/admin.py:201 engine/core/graphene/object_types.py:81 +#: engine/core/models.py:929 msgid "attribute values" msgstr "Hodnoty atributů" -#: engine/core/admin.py:208 +#: engine/core/admin.py:212 engine/core/models.py:2232 msgid "image" msgstr "Obrázek" -#: engine/core/admin.py:209 engine/core/graphene/object_types.py:530 +#: engine/core/admin.py:213 engine/core/graphene/object_types.py:535 msgid "images" msgstr "Obrázky" -#: engine/core/admin.py:220 engine/core/models.py:576 +#: engine/core/admin.py:224 engine/core/models.py:635 msgid "stock" msgstr "Stock" -#: engine/core/admin.py:221 engine/core/graphene/object_types.py:713 +#: engine/core/admin.py:225 engine/core/graphene/object_types.py:735 msgid "stocks" msgstr "Zásoby" -#: engine/core/admin.py:232 engine/core/models.py:1938 +#: engine/core/admin.py:236 engine/core/models.py:2046 msgid "order product" msgstr "Objednat produkt" -#: engine/core/admin.py:233 engine/core/graphene/object_types.py:441 -#: engine/core/models.py:1939 +#: engine/core/admin.py:237 engine/core/graphene/object_types.py:446 +#: engine/core/models.py:2047 msgid "order products" msgstr "Objednat produkty" -#: engine/core/admin.py:251 engine/core/admin.py:252 +#: engine/core/admin.py:255 engine/core/admin.py:256 msgid "children" msgstr "Děti" -#: engine/core/admin.py:528 +#: engine/core/admin.py:545 +msgid "video preview" +msgstr "Náhled videa" + +#: engine/core/admin.py:551 msgid "has images" msgstr "Obsahuje obrázky" -#: engine/core/admin.py:531 +#: engine/core/admin.py:554 #, python-format msgid "Export selected %(verbose_name_plural)s to marketplaces' feeds" msgstr "Exportovat vybrané %(verbose_name_plural)s do feedů tržišť" -#: engine/core/admin.py:542 +#: engine/core/admin.py:565 #, python-format msgid "selected %(verbose_name_plural)s have been marked for export." msgstr "Vybrané %(verbose_name_plural)s byly označeny pro export." -#: engine/core/admin.py:553 +#: engine/core/admin.py:576 #, python-format msgid "Ban selected %(verbose_name_plural)s from marketplaces' feeds" msgstr "Zakázat vybraný %(verbose_name_plural)s z feedů tržišť" -#: engine/core/admin.py:564 +#: engine/core/admin.py:587 #, python-format msgid "selected %(verbose_name_plural)s have been banned from export." msgstr "Vybrané %(verbose_name_plural)s byly zakázány pro export." -#: engine/core/admin.py:1116 +#: engine/core/admin.py:1030 +msgid "Preview" +msgstr "Náhled" + +#: engine/core/admin.py:1031 +msgid "Metadata" +msgstr "Metadata" + +#: engine/core/admin.py:1034 +msgid "preview" +msgstr "Náhled" + +#: engine/core/admin.py:1043 +msgid "image preview" +msgstr "Náhled obrázku" + +#: engine/core/admin.py:1166 msgid "Config" msgstr "Konfigurace" @@ -223,7 +243,7 @@ msgstr "" "vyjednávání obsahu. Jazyk lze zvolit pomocí Accept-Language a parametru " "dotazu." -#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:36 +#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "Vstup/výstup mezipaměti" @@ -247,7 +267,7 @@ msgstr "Získání vystavitelných parametrů aplikace" msgid "send a message to the support team" msgstr "Odeslání zprávy týmu podpory" -#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:59 msgid "request a CORSed URL" msgstr "Vyžádejte si adresu URL s protokolem CORS. Povoleno pouze https." @@ -386,11 +406,11 @@ msgid "rewrite some fields of an existing category saving non-editables" msgstr "" "Přepsat některá pole existující kategorie a uložit neupravitelné položky" -#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757 -#: engine/core/docs/drf/viewsets.py:1046 -#: engine/core/graphene/object_types.py:119 -#: engine/core/graphene/object_types.py:239 -#: engine/core/graphene/object_types.py:540 +#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:781 +#: engine/core/docs/drf/viewsets.py:1070 +#: engine/core/graphene/object_types.py:123 +#: engine/core/graphene/object_types.py:247 +#: engine/core/graphene/object_types.py:546 msgid "SEO Meta snapshot" msgstr "Meta snímek SEO" @@ -685,7 +705,7 @@ msgstr "Vyhledání jednoho produktu (podrobné zobrazení)" #: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683 #: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725 -#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763 +#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:787 msgid "Product UUID or slug" msgstr "Identifikátor UUID produktu nebo Slug" @@ -713,280 +733,294 @@ msgstr "Odstranění produktu" msgid "lists all permitted feedbacks for a product" msgstr "seznam všech povolených zpětných vazeb pro produkt" -#: engine/core/docs/drf/viewsets.py:758 +#: engine/core/docs/drf/viewsets.py:757 +msgid "retrieve exact products by identifier" +msgstr "Vyhledejte přesné produkty podle identifikátoru" + +#: engine/core/docs/drf/viewsets.py:759 +msgid "" +"retrieve a list of products by identifier type (uuid, slug, or sku). Send a " +"POST request with `identificator_type` and `identificators` (list of " +"values)." +msgstr "" +"načíst seznam produktů podle typu identifikátoru (uuid, slug nebo sku). " +"Odeslat požadavek POST s `identificator_type` a `identificators` (seznam " +"hodnot)." + +#: engine/core/docs/drf/viewsets.py:782 msgid "returns a snapshot of the product's SEO meta data" msgstr "Vrátí snímek meta dat SEO produktu." -#: engine/core/docs/drf/viewsets.py:779 +#: engine/core/docs/drf/viewsets.py:803 msgid "list all addresses" msgstr "Seznam všech adres" -#: engine/core/docs/drf/viewsets.py:789 +#: engine/core/docs/drf/viewsets.py:813 msgid "retrieve a single address" msgstr "Získání jedné adresy" -#: engine/core/docs/drf/viewsets.py:799 +#: engine/core/docs/drf/viewsets.py:823 msgid "create a new address" msgstr "Vytvoření nové adresy" -#: engine/core/docs/drf/viewsets.py:810 +#: engine/core/docs/drf/viewsets.py:834 msgid "delete an address" msgstr "Odstranění adresy" -#: engine/core/docs/drf/viewsets.py:820 +#: engine/core/docs/drf/viewsets.py:844 msgid "update an entire address" msgstr "Aktualizace celé adresy" -#: engine/core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:855 msgid "partially update an address" msgstr "Částečná aktualizace adresy" -#: engine/core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:866 msgid "autocomplete address suggestions" msgstr "Automatické dokončování zadávání adresy" -#: engine/core/docs/drf/viewsets.py:848 +#: engine/core/docs/drf/viewsets.py:872 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" "Řetězec dotazu na nezpracovaná data, doplňte prosím data z koncového bodu " "geo-IP" -#: engine/core/docs/drf/viewsets.py:855 +#: engine/core/docs/drf/viewsets.py:879 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "omezuje množství výsledků, 1 < limit < 10, výchozí: 5" -#: engine/core/docs/drf/viewsets.py:871 +#: engine/core/docs/drf/viewsets.py:895 msgid "list all feedbacks (simple view)" msgstr "seznam všech ohlasů (jednoduché zobrazení)" -#: engine/core/docs/drf/viewsets.py:881 +#: engine/core/docs/drf/viewsets.py:905 msgid "retrieve a single feedback (detailed view)" msgstr "načtení jedné zpětné vazby (podrobné zobrazení)." -#: engine/core/docs/drf/viewsets.py:888 +#: engine/core/docs/drf/viewsets.py:912 msgid "create a feedback" msgstr "vytvořit zpětnou vazbu" -#: engine/core/docs/drf/viewsets.py:895 +#: engine/core/docs/drf/viewsets.py:919 msgid "delete a feedback" msgstr "odstranit zpětnou vazbu" -#: engine/core/docs/drf/viewsets.py:902 +#: engine/core/docs/drf/viewsets.py:926 msgid "rewrite an existing feedback saving non-editables" msgstr "přepsat existující zpětnou vazbu a uložit neupravitelné položky." -#: engine/core/docs/drf/viewsets.py:909 +#: engine/core/docs/drf/viewsets.py:933 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" "Přepsat některá pole existující kategorie a uložit neupravitelné položky" -#: engine/core/docs/drf/viewsets.py:919 +#: engine/core/docs/drf/viewsets.py:943 msgid "list all order–product relations (simple view)" msgstr "seznam všech vztahů objednávka-produkt (jednoduché zobrazení)" -#: engine/core/docs/drf/viewsets.py:929 +#: engine/core/docs/drf/viewsets.py:953 msgid "retrieve a single order–product relation (detailed view)" msgstr "načtení jednoho vztahu zakázka-produkt (podrobné zobrazení)" -#: engine/core/docs/drf/viewsets.py:939 +#: engine/core/docs/drf/viewsets.py:963 msgid "create a new order–product relation" msgstr "vytvořit nový vztah objednávka-produkt" -#: engine/core/docs/drf/viewsets.py:949 +#: engine/core/docs/drf/viewsets.py:973 msgid "replace an existing order–product relation" msgstr "nahradit existující vztah objednávka-produkt" -#: engine/core/docs/drf/viewsets.py:959 +#: engine/core/docs/drf/viewsets.py:983 msgid "partially update an existing order–product relation" msgstr "částečně aktualizovat existující vztah objednávka-produkt" -#: engine/core/docs/drf/viewsets.py:969 +#: engine/core/docs/drf/viewsets.py:993 msgid "delete an order–product relation" msgstr "odstranit vztah objednávka-produkt" -#: engine/core/docs/drf/viewsets.py:979 +#: engine/core/docs/drf/viewsets.py:1003 msgid "add or remove feedback on an order–product relation" msgstr "přidat nebo odebrat zpětnou vazbu na vztah objednávka-produkt." -#: engine/core/docs/drf/viewsets.py:996 +#: engine/core/docs/drf/viewsets.py:1020 msgid "list all brands (simple view)" msgstr "Seznam všech značek (jednoduché zobrazení)" -#: engine/core/docs/drf/viewsets.py:1003 +#: engine/core/docs/drf/viewsets.py:1027 msgid "retrieve a single brand (detailed view)" msgstr "Získání jedné značky (podrobné zobrazení)" -#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051 +#: engine/core/docs/drf/viewsets.py:1032 engine/core/docs/drf/viewsets.py:1075 msgid "Brand UUID or slug" msgstr "Značka UUID nebo slimák" -#: engine/core/docs/drf/viewsets.py:1018 +#: engine/core/docs/drf/viewsets.py:1042 msgid "create a brand" msgstr "Vytvoření značky" -#: engine/core/docs/drf/viewsets.py:1025 +#: engine/core/docs/drf/viewsets.py:1049 msgid "delete a brand" msgstr "Odstranění značky" -#: engine/core/docs/drf/viewsets.py:1032 +#: engine/core/docs/drf/viewsets.py:1056 msgid "rewrite an existing brand saving non-editables" msgstr "Přepsání existující značky s uložením neupravitelných položek" -#: engine/core/docs/drf/viewsets.py:1039 +#: engine/core/docs/drf/viewsets.py:1063 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "" "Přepsat některá pole existující kategorie a uložit neupravitelné položky" -#: engine/core/docs/drf/viewsets.py:1064 +#: engine/core/docs/drf/viewsets.py:1088 msgid "list all vendors (simple view)" msgstr "Seznam všech prodejců (jednoduché zobrazení)" -#: engine/core/docs/drf/viewsets.py:1074 +#: engine/core/docs/drf/viewsets.py:1098 msgid "retrieve a single vendor (detailed view)" msgstr "Získání jednoho prodejce (podrobné zobrazení)" -#: engine/core/docs/drf/viewsets.py:1081 +#: engine/core/docs/drf/viewsets.py:1105 msgid "create a vendor" msgstr "Vytvoření prodejce" -#: engine/core/docs/drf/viewsets.py:1088 +#: engine/core/docs/drf/viewsets.py:1112 msgid "delete a vendor" msgstr "Odstranění prodejce" -#: engine/core/docs/drf/viewsets.py:1095 +#: engine/core/docs/drf/viewsets.py:1119 msgid "rewrite an existing vendor saving non-editables" msgstr "Přepsání existujícího dodavatele s uložením neupravitelných položek" -#: engine/core/docs/drf/viewsets.py:1102 +#: engine/core/docs/drf/viewsets.py:1126 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "" "Přepsat některá pole existující kategorie a uložit neupravitelné položky" -#: engine/core/docs/drf/viewsets.py:1112 +#: engine/core/docs/drf/viewsets.py:1136 msgid "list all product images (simple view)" msgstr "Seznam všech obrázků produktu (jednoduché zobrazení)" -#: engine/core/docs/drf/viewsets.py:1122 +#: engine/core/docs/drf/viewsets.py:1146 msgid "retrieve a single product image (detailed view)" msgstr "Získání jednoho obrázku produktu (podrobné zobrazení)" -#: engine/core/docs/drf/viewsets.py:1129 +#: engine/core/docs/drf/viewsets.py:1153 msgid "create a product image" msgstr "Vytvoření obrázku produktu" -#: engine/core/docs/drf/viewsets.py:1139 +#: engine/core/docs/drf/viewsets.py:1163 msgid "delete a product image" msgstr "Odstranění obrázku produktu" -#: engine/core/docs/drf/viewsets.py:1146 +#: engine/core/docs/drf/viewsets.py:1170 msgid "rewrite an existing product image saving non-editables" msgstr "" "Přepsání existujícího obrázku produktu s uložením neupravitelných položek" -#: engine/core/docs/drf/viewsets.py:1154 +#: engine/core/docs/drf/viewsets.py:1178 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "" "Přepsat některá pole existující kategorie a uložit neupravitelné položky" -#: engine/core/docs/drf/viewsets.py:1165 +#: engine/core/docs/drf/viewsets.py:1189 msgid "list all promo codes (simple view)" msgstr "Seznam všech propagačních kódů (jednoduché zobrazení)" -#: engine/core/docs/drf/viewsets.py:1175 +#: engine/core/docs/drf/viewsets.py:1199 msgid "retrieve a single promo code (detailed view)" msgstr "Získání jednoho propagačního kódu (podrobné zobrazení)" -#: engine/core/docs/drf/viewsets.py:1182 +#: engine/core/docs/drf/viewsets.py:1206 msgid "create a promo code" msgstr "Vytvoření propagačního kódu" -#: engine/core/docs/drf/viewsets.py:1189 +#: engine/core/docs/drf/viewsets.py:1213 msgid "delete a promo code" msgstr "Odstranění propagačního kódu" -#: engine/core/docs/drf/viewsets.py:1196 +#: engine/core/docs/drf/viewsets.py:1220 msgid "rewrite an existing promo code saving non-editables" msgstr "Přepsání stávajícího propagačního kódu, který není určen k úpravám" -#: engine/core/docs/drf/viewsets.py:1203 +#: engine/core/docs/drf/viewsets.py:1227 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "" "Přepsat některá pole existující kategorie a uložit neupravitelné položky" -#: engine/core/docs/drf/viewsets.py:1213 +#: engine/core/docs/drf/viewsets.py:1237 msgid "list all promotions (simple view)" msgstr "Seznam všech propagačních akcí (jednoduché zobrazení)" -#: engine/core/docs/drf/viewsets.py:1223 +#: engine/core/docs/drf/viewsets.py:1247 msgid "retrieve a single promotion (detailed view)" msgstr "Získání jednoho povýšení (podrobné zobrazení)" -#: engine/core/docs/drf/viewsets.py:1230 +#: engine/core/docs/drf/viewsets.py:1254 msgid "create a promotion" msgstr "Vytvořit propagaci" -#: engine/core/docs/drf/viewsets.py:1237 +#: engine/core/docs/drf/viewsets.py:1261 msgid "delete a promotion" msgstr "Odstranění povýšení" -#: engine/core/docs/drf/viewsets.py:1244 +#: engine/core/docs/drf/viewsets.py:1268 msgid "rewrite an existing promotion saving non-editables" msgstr "" "Přepsání existující propagační akce s uložením neupravitelných položek" -#: engine/core/docs/drf/viewsets.py:1251 +#: engine/core/docs/drf/viewsets.py:1275 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "" "Přepsat některá pole existující kategorie a uložit neupravitelné položky" -#: engine/core/docs/drf/viewsets.py:1261 +#: engine/core/docs/drf/viewsets.py:1285 msgid "list all stocks (simple view)" msgstr "Seznam všech zásob (jednoduché zobrazení)" -#: engine/core/docs/drf/viewsets.py:1268 +#: engine/core/docs/drf/viewsets.py:1292 msgid "retrieve a single stock (detailed view)" msgstr "Získání jedné zásoby (podrobné zobrazení)" -#: engine/core/docs/drf/viewsets.py:1275 +#: engine/core/docs/drf/viewsets.py:1299 msgid "create a stock record" msgstr "Vytvoření skladového záznamu" -#: engine/core/docs/drf/viewsets.py:1282 +#: engine/core/docs/drf/viewsets.py:1306 msgid "delete a stock record" msgstr "Odstranění skladového záznamu" -#: engine/core/docs/drf/viewsets.py:1289 +#: engine/core/docs/drf/viewsets.py:1313 msgid "rewrite an existing stock record saving non-editables" msgstr "" "Přepsání existujícího skladového záznamu s uložením neupravitelných položek" -#: engine/core/docs/drf/viewsets.py:1297 +#: engine/core/docs/drf/viewsets.py:1321 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "" "Přepsat některá pole existující kategorie a uložit neupravitelné položky" -#: engine/core/docs/drf/viewsets.py:1308 +#: engine/core/docs/drf/viewsets.py:1332 msgid "list all product tags (simple view)" msgstr "Seznam všech značek produktu (jednoduché zobrazení)" -#: engine/core/docs/drf/viewsets.py:1318 +#: engine/core/docs/drf/viewsets.py:1342 msgid "retrieve a single product tag (detailed view)" msgstr "Získání jedné značky produktu (podrobné zobrazení)" -#: engine/core/docs/drf/viewsets.py:1325 +#: engine/core/docs/drf/viewsets.py:1349 msgid "create a product tag" msgstr "Vytvoření značky produktu" -#: engine/core/docs/drf/viewsets.py:1335 +#: engine/core/docs/drf/viewsets.py:1359 msgid "delete a product tag" msgstr "Odstranění značky produktu" -#: engine/core/docs/drf/viewsets.py:1342 +#: engine/core/docs/drf/viewsets.py:1366 msgid "rewrite an existing product tag saving non-editables" msgstr "" "Přepsání existující značky produktu s uložením neupravitelných položek" -#: engine/core/docs/drf/viewsets.py:1350 +#: engine/core/docs/drf/viewsets.py:1374 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "" "Přepsat některá pole existující kategorie a uložit neupravitelné položky" @@ -996,233 +1030,231 @@ msgstr "" msgid "no search term provided." msgstr "Nebyl zadán žádný vyhledávací termín." -#: engine/core/filters.py:78 engine/core/filters.py:484 -#: engine/core/filters.py:625 +#: engine/core/filters.py:79 engine/core/filters.py:485 +#: engine/core/filters.py:626 msgid "Search" msgstr "Vyhledávání" -#: engine/core/filters.py:79 engine/core/filters.py:663 -#: engine/core/filters.py:692 +#: engine/core/filters.py:80 engine/core/filters.py:664 +#: engine/core/filters.py:693 msgid "UUID" msgstr "UUID" -#: engine/core/filters.py:80 engine/core/filters.py:487 -#: engine/core/filters.py:627 +#: engine/core/filters.py:81 engine/core/filters.py:488 +#: engine/core/filters.py:628 msgid "Name" msgstr "Název" -#: engine/core/filters.py:82 engine/core/filters.py:630 +#: engine/core/filters.py:83 engine/core/filters.py:631 msgid "Categories" msgstr "Kategorie" -#: engine/core/filters.py:86 +#: engine/core/filters.py:87 msgid "Categories Slugs" msgstr "Kategorie Slimáci" -#: engine/core/filters.py:88 engine/core/filters.py:495 +#: engine/core/filters.py:89 engine/core/filters.py:496 +#: engine/core/templates/admin_doc/index.html:37 +#: engine/core/templates/admin_doc/template_tag_index.html:12 msgid "Tags" msgstr "Štítky" -#: engine/core/filters.py:90 +#: engine/core/filters.py:91 msgid "Min Price" msgstr "Minimální cena" -#: engine/core/filters.py:93 +#: engine/core/filters.py:94 msgid "Max Price" msgstr "Max Price" -#: engine/core/filters.py:95 +#: engine/core/filters.py:96 msgid "Is Active" msgstr "Je aktivní" -#: engine/core/filters.py:96 +#: engine/core/filters.py:97 msgid "Brand" msgstr "Značka" -#: engine/core/filters.py:97 +#: engine/core/filters.py:98 msgid "Attributes" msgstr "Atributy" -#: engine/core/filters.py:99 +#: engine/core/filters.py:100 msgid "Quantity" msgstr "Množství" -#: engine/core/filters.py:101 engine/core/filters.py:489 -#: engine/core/filters.py:628 engine/core/models.py:316 -#: engine/core/models.py:497 engine/core/models.py:663 +#: engine/core/filters.py:102 engine/core/filters.py:490 +#: engine/core/filters.py:629 engine/core/models.py:339 +#: engine/core/models.py:546 engine/core/models.py:736 msgid "Slug" msgstr "Slug" -#: engine/core/filters.py:102 +#: engine/core/filters.py:103 msgid "Is Digital" msgstr "Je digitální" -#: engine/core/filters.py:104 +#: engine/core/filters.py:105 msgid "Include sub-categories" msgstr "Zahrnout podkategorie" -#: engine/core/filters.py:108 +#: engine/core/filters.py:109 msgid "Include personal ordered" msgstr "Zahrnout osobně objednané produkty" -#: engine/core/filters.py:110 engine/core/models.py:667 +#: engine/core/filters.py:111 engine/core/models.py:740 msgid "SKU" msgstr "SKU" -#: engine/core/filters.py:212 +#: engine/core/filters.py:213 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" "Pro použití příznaku include_subcategories musí existovat category_uuid." -#: engine/core/filters.py:398 +#: engine/core/filters.py:399 msgid "Search (ID, product name or part number)" msgstr "Vyhledávání (ID, název produktu nebo číslo dílu)" -#: engine/core/filters.py:402 +#: engine/core/filters.py:403 msgid "Bought after (inclusive)" msgstr "Koupeno po (včetně)" -#: engine/core/filters.py:405 +#: engine/core/filters.py:406 msgid "Bought before (inclusive)" msgstr "Koupeno před (včetně)" -#: engine/core/filters.py:410 engine/core/filters.py:461 -#: engine/core/filters.py:697 +#: engine/core/filters.py:411 engine/core/filters.py:462 +#: engine/core/filters.py:698 msgid "User email" msgstr "E-mail uživatele" -#: engine/core/filters.py:413 engine/core/filters.py:464 -#: engine/core/filters.py:672 engine/core/filters.py:694 +#: engine/core/filters.py:414 engine/core/filters.py:465 +#: engine/core/filters.py:673 engine/core/filters.py:695 msgid "User UUID" msgstr "UUID uživatele" -#: engine/core/filters.py:415 +#: engine/core/filters.py:416 msgid "Status" msgstr "Stav" -#: engine/core/filters.py:419 +#: engine/core/filters.py:420 msgid "Human Readable ID" msgstr "Lidsky čitelné ID" -#: engine/core/filters.py:488 +#: engine/core/filters.py:489 msgid "Parent" msgstr "Rodič" -#: engine/core/filters.py:492 +#: engine/core/filters.py:493 msgid "Whole category(has at least 1 product or not)" msgstr "Celá kategorie (má nebo nemá alespoň 1 produkt)" -#: engine/core/filters.py:496 +#: engine/core/filters.py:497 msgid "Level" msgstr "Úroveň" -#: engine/core/filters.py:667 +#: engine/core/filters.py:668 msgid "Product UUID" msgstr "UUID produktu" -#: engine/core/graphene/mutations.py:40 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Klíč k vyhledání v keši nebo nastavení do keše" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:43 msgid "data to store in cache" msgstr "Data k uložení do mezipaměti" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:46 msgid "timeout in seconds to set the data for into the cache" msgstr "Časový limit v sekundách pro nastavení dat do mezipaměti" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:49 msgid "cached data" msgstr "Data uložená v mezipaměti" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:64 msgid "camelized JSON data from the requested URL" msgstr "Kamelizovaná data JSON z požadované adresy URL" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:248 +#: engine/core/graphene/mutations.py:69 engine/core/views.py:267 msgid "only URLs starting with http(s):// are allowed" msgstr "Povoleny jsou pouze adresy URL začínající http(s)://." -#: engine/core/graphene/mutations.py:86 +#: engine/core/graphene/mutations.py:87 msgid "add a product to the order" msgstr "Přidání produktu do objednávky" -#: engine/core/graphene/mutations.py:109 engine/core/graphene/mutations.py:138 -#: engine/core/graphene/mutations.py:254 engine/core/graphene/mutations.py:306 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139 +#: engine/core/graphene/mutations.py:256 engine/core/graphene/mutations.py:308 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Objednávka {order_uuid} nebyla nalezena!" -#: engine/core/graphene/mutations.py:115 engine/core/graphene/mutations.py:166 +#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167 msgid "remove a product from the order" msgstr "Odstranění produktu z objednávky" -#: engine/core/graphene/mutations.py:144 +#: engine/core/graphene/mutations.py:145 msgid "remove all products from the order" msgstr "Odstranění všech produktů z objednávky" -#: engine/core/graphene/mutations.py:189 +#: engine/core/graphene/mutations.py:190 msgid "buy an order" msgstr "Koupit objednávku" -#: engine/core/graphene/mutations.py:220 engine/core/graphene/mutations.py:282 +#: engine/core/graphene/mutations.py:222 engine/core/graphene/mutations.py:284 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í!" -#: engine/core/graphene/mutations.py:249 engine/core/graphene/mutations.py:524 -#: engine/core/graphene/mutations.py:573 engine/core/viewsets.py:753 +#: engine/core/graphene/mutations.py:251 engine/core/graphene/mutations.py:526 +#: engine/core/graphene/mutations.py:576 engine/core/viewsets.py:783 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Z metody order.buy() pochází nesprávný typ: {type(instance)!s}" -#: engine/core/graphene/mutations.py:260 +#: engine/core/graphene/mutations.py:262 msgid "perform an action on a list of products in the order" msgstr "Provedení akce na seznamu produktů v objednávce" -#: engine/core/graphene/mutations.py:265 +#: engine/core/graphene/mutations.py:267 msgid "remove/add" msgstr "Odebrat/přidat" -#: engine/core/graphene/mutations.py:301 engine/core/graphene/mutations.py:342 +#: engine/core/graphene/mutations.py:303 engine/core/graphene/mutations.py:342 msgid "action must be either add or remove" msgstr "Akce musí být buď \"přidat\", nebo \"odebrat\"!" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:314 msgid "perform an action on a list of products in the wishlist" msgstr "Provedení akce na seznamu produktů v seznamu přání" -#: engine/core/graphene/mutations.py:330 -msgid "please provide wishlist_uuid value" -msgstr "Zadejte prosím hodnotu `wishlist_uuid`." - -#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:423 -#: engine/core/graphene/mutations.py:451 engine/core/graphene/mutations.py:479 -#: engine/core/graphene/mutations.py:529 +#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:424 +#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480 +#: engine/core/graphene/mutations.py:531 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Seznam přání {wishlist_uuid} nenalezen!" -#: engine/core/graphene/mutations.py:401 +#: engine/core/graphene/mutations.py:402 msgid "add a product to the wishlist" msgstr "Přidání produktu do objednávky" -#: engine/core/graphene/mutations.py:429 +#: engine/core/graphene/mutations.py:430 msgid "remove a product from the wishlist" msgstr "Odstranění produktu z objednávky" -#: engine/core/graphene/mutations.py:457 +#: engine/core/graphene/mutations.py:458 msgid "remove all products from the wishlist" msgstr "Odstranění produktu z objednávky" -#: engine/core/graphene/mutations.py:485 +#: engine/core/graphene/mutations.py:486 msgid "buy all products from the wishlist" msgstr "Odstranění produktu z objednávky" -#: engine/core/graphene/mutations.py:535 +#: engine/core/graphene/mutations.py:537 msgid "buy a product" msgstr "Koupit objednávku" -#: engine/core/graphene/mutations.py:542 +#: engine/core/graphene/mutations.py:544 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" @@ -1230,139 +1262,143 @@ msgstr "" "Prosím, pošlete atributy jako řetězec ve formátu " "attr1=hodnota1,attr2=hodnota2." -#: engine/core/graphene/mutations.py:580 +#: engine/core/graphene/mutations.py:583 msgid "add or delete a feedback for orderproduct" msgstr "Přidání nebo odstranění zpětné vazby pro objednávkuprodukt" -#: engine/core/graphene/mutations.py:606 +#: engine/core/graphene/mutations.py:610 msgid "action must be either `add` or `remove`" msgstr "Akce musí být buď `add` nebo `remove`!" -#: engine/core/graphene/mutations.py:609 +#: engine/core/graphene/mutations.py:613 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderproduct {order_product_uuid} nenalezen!" -#: engine/core/graphene/mutations.py:616 +#: engine/core/graphene/mutations.py:620 msgid "original address string provided by the user" msgstr "Původní řetězec adresy zadaný uživatelem" -#: engine/core/graphene/mutations.py:653 engine/core/models.py:986 -#: engine/core/models.py:999 engine/core/models.py:1443 -#: engine/core/models.py:1474 engine/core/models.py:1505 -#: engine/core/viewsets.py:760 +#: engine/core/graphene/mutations.py:662 engine/core/models.py:1079 +#: engine/core/models.py:1092 engine/core/models.py:1544 +#: engine/core/models.py:1575 engine/core/models.py:1606 +#: engine/core/viewsets.py:790 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} neexistuje: {uuid}!" -#: engine/core/graphene/mutations.py:667 +#: engine/core/graphene/mutations.py:676 msgid "limit must be between 1 and 10" msgstr "Limit musí být mezi 1 a 10" -#: engine/core/graphene/mutations.py:716 +#: engine/core/graphene/mutations.py:726 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - funguje jako kouzlo" -#: engine/core/graphene/object_types.py:84 -#: engine/core/graphene/object_types.py:420 -#: engine/core/graphene/object_types.py:471 engine/core/models.py:803 -#: engine/core/models.py:1297 engine/core/models.py:2033 +#: engine/core/graphene/object_types.py:88 +#: engine/core/graphene/object_types.py:425 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:889 +#: engine/core/models.py:1394 engine/core/models.py:2139 msgid "attributes" msgstr "Atributy" -#: engine/core/graphene/object_types.py:97 +#: engine/core/graphene/object_types.py:101 msgid "grouped attributes" msgstr "Seskupené atributy" -#: engine/core/graphene/object_types.py:104 +#: engine/core/graphene/object_types.py:108 msgid "groups of attributes" msgstr "Skupiny atributů" -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:217 -#: engine/core/graphene/object_types.py:255 engine/core/models.py:440 +#: engine/core/graphene/object_types.py:122 +#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:264 engine/core/models.py:489 msgid "categories" msgstr "Kategorie" -#: engine/core/graphene/object_types.py:134 engine/core/models.py:511 +#: engine/core/graphene/object_types.py:138 engine/core/models.py:564 msgid "brands" msgstr "Značky" -#: engine/core/graphene/object_types.py:219 +#: engine/core/graphene/object_types.py:226 msgid "category image url" msgstr "Kategorie" -#: engine/core/graphene/object_types.py:220 -#: engine/core/graphene/object_types.py:365 engine/core/models.py:278 +#: engine/core/graphene/object_types.py:227 +#: engine/core/graphene/object_types.py:369 engine/core/models.py:301 msgid "markup percentage" msgstr "Procento přirážky" -#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:231 msgid "which attributes and values can be used for filtering this category." msgstr "Které atributy a hodnoty lze použít pro filtrování této kategorie." -#: engine/core/graphene/object_types.py:230 +#: engine/core/graphene/object_types.py:237 msgid "" "minimum and maximum prices for products in this category, if available." msgstr "" "Minimální a maximální ceny produktů v této kategorii, pokud jsou k " "dispozici." -#: engine/core/graphene/object_types.py:234 +#: engine/core/graphene/object_types.py:240 +msgid "brands in this category" +msgstr "Značky v této kategorii" + +#: engine/core/graphene/object_types.py:242 msgid "tags for this category" msgstr "Štítky pro tuto kategorii" -#: engine/core/graphene/object_types.py:237 +#: engine/core/graphene/object_types.py:245 msgid "products in this category" msgstr "Produkty v této kategorii" -#: engine/core/graphene/object_types.py:372 engine/core/models.py:183 +#: engine/core/graphene/object_types.py:376 engine/core/models.py:202 msgid "vendors" msgstr "Prodejci" -#: engine/core/graphene/object_types.py:376 +#: engine/core/graphene/object_types.py:380 msgid "Latitude (Y coordinate)" msgstr "Zeměpisná šířka (souřadnice Y)" -#: engine/core/graphene/object_types.py:377 +#: engine/core/graphene/object_types.py:381 msgid "Longitude (X coordinate)" msgstr "Zeměpisná délka (souřadnice X)" -#: engine/core/graphene/object_types.py:406 +#: engine/core/graphene/object_types.py:411 msgid "comment" msgstr "Jak na to" -#: engine/core/graphene/object_types.py:408 -#: engine/core/graphene/object_types.py:542 +#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:548 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "Hodnota hodnocení od 1 do 10 včetně nebo 0, pokud není nastaveno." -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:421 msgid "represents feedback from a user." msgstr "Představuje zpětnou vazbu od uživatele." -#: engine/core/graphene/object_types.py:421 -#: engine/core/graphene/object_types.py:472 engine/core/models.py:1291 +#: engine/core/graphene/object_types.py:426 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:1388 msgid "notifications" msgstr "Oznámení" -#: engine/core/graphene/object_types.py:423 +#: engine/core/graphene/object_types.py:428 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é" -#: engine/core/graphene/object_types.py:425 engine/core/models.py:1856 +#: engine/core/graphene/object_types.py:430 engine/core/models.py:1959 msgid "feedback" msgstr "Zpětná vazba" -#: engine/core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:464 msgid "a list of order products in this order" msgstr "Seznam objednaných produktů v tomto pořadí" -#: engine/core/graphene/object_types.py:461 engine/core/models.py:1261 +#: engine/core/graphene/object_types.py:466 engine/core/models.py:1358 msgid "billing address" msgstr "Fakturační adresa" -#: engine/core/graphene/object_types.py:465 +#: engine/core/graphene/object_types.py:470 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1370,53 +1406,57 @@ msgstr "" "Dodací adresa pro tuto objednávku, pokud je stejná jako fakturační adresa " "nebo pokud není použitelná, ponechte prázdné." -#: engine/core/graphene/object_types.py:468 +#: engine/core/graphene/object_types.py:473 msgid "total price of this order" msgstr "Celková cena této objednávky" -#: engine/core/graphene/object_types.py:469 +#: engine/core/graphene/object_types.py:474 msgid "total quantity of products in order" msgstr "Celkové množství objednaných produktů" -#: engine/core/graphene/object_types.py:470 +#: engine/core/graphene/object_types.py:475 msgid "are all products in the order digital" msgstr "Jsou všechny produkty v objednávce digitální" -#: engine/core/graphene/object_types.py:474 +#: engine/core/graphene/object_types.py:479 msgid "transactions for this order" msgstr "Transakce pro tuto objednávku" -#: engine/core/graphene/object_types.py:494 engine/core/models.py:1325 +#: engine/core/graphene/object_types.py:499 engine/core/models.py:1422 msgid "orders" msgstr "Objednávky" -#: engine/core/graphene/object_types.py:515 +#: engine/core/graphene/object_types.py:520 msgid "image url" msgstr "Adresa URL obrázku" -#: engine/core/graphene/object_types.py:522 +#: engine/core/graphene/object_types.py:527 msgid "product's images" msgstr "Obrázky produktu" -#: engine/core/graphene/object_types.py:529 engine/core/models.py:439 -#: engine/core/models.py:596 +#: engine/core/graphene/object_types.py:534 engine/core/models.py:488 +#: engine/core/models.py:661 msgid "category" msgstr "Kategorie" -#: engine/core/graphene/object_types.py:531 engine/core/models.py:1857 +#: engine/core/graphene/object_types.py:536 engine/core/models.py:1960 msgid "feedbacks" msgstr "Zpětná vazba" -#: engine/core/graphene/object_types.py:532 engine/core/models.py:510 -#: engine/core/models.py:605 +#: engine/core/graphene/object_types.py:537 engine/core/models.py:563 +#: engine/core/models.py:670 msgid "brand" msgstr "Značka" -#: engine/core/graphene/object_types.py:534 engine/core/models.py:103 +#: engine/core/graphene/object_types.py:538 +msgid "video url" +msgstr "URL videa" + +#: engine/core/graphene/object_types.py:540 engine/core/models.py:122 msgid "attribute groups" msgstr "Skupiny atributů" -#: engine/core/graphene/object_types.py:536 +#: engine/core/graphene/object_types.py:542 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1424,7 +1464,7 @@ msgstr "Skupiny atributů" msgid "price" msgstr "Cena" -#: engine/core/graphene/object_types.py:537 +#: engine/core/graphene/object_types.py:543 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1432,39 +1472,39 @@ msgstr "Cena" msgid "quantity" msgstr "Množství" -#: engine/core/graphene/object_types.py:538 +#: engine/core/graphene/object_types.py:544 msgid "number of feedbacks" msgstr "Počet zpětných vazeb" -#: engine/core/graphene/object_types.py:539 +#: engine/core/graphene/object_types.py:545 msgid "only available for personal orders" msgstr "Produkty jsou k dispozici pouze pro osobní objednávky" -#: engine/core/graphene/object_types.py:544 +#: engine/core/graphene/object_types.py:550 msgid "discount price" msgstr "Cena se slevou" -#: engine/core/graphene/object_types.py:568 engine/core/models.py:682 +#: engine/core/graphene/object_types.py:575 engine/core/models.py:755 msgid "products" msgstr "Produkty" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:691 msgid "promocodes" msgstr "Propagační kódy" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:706 msgid "products on sale" msgstr "Produkty v prodeji" -#: engine/core/graphene/object_types.py:701 engine/core/models.py:935 +#: engine/core/graphene/object_types.py:720 engine/core/models.py:1028 msgid "promotions" msgstr "Propagační akce" -#: engine/core/graphene/object_types.py:705 engine/core/models.py:182 +#: engine/core/graphene/object_types.py:727 engine/core/models.py:201 msgid "vendor" msgstr "Prodejce" -#: engine/core/graphene/object_types.py:706 engine/core/models.py:681 +#: engine/core/graphene/object_types.py:728 engine/core/models.py:754 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1472,103 +1512,103 @@ msgstr "Prodejce" msgid "product" msgstr "Produkt" -#: engine/core/graphene/object_types.py:718 engine/core/models.py:958 +#: engine/core/graphene/object_types.py:740 engine/core/models.py:1051 msgid "wishlisted products" msgstr "Produkty uvedené na seznamu přání" -#: engine/core/graphene/object_types.py:725 engine/core/models.py:975 +#: engine/core/graphene/object_types.py:747 engine/core/models.py:1068 msgid "wishlists" msgstr "Seznamy přání" -#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:752 msgid "tagged products" msgstr "Produkty s příznakem" -#: engine/core/graphene/object_types.py:738 engine/core/models.py:219 -#: engine/core/models.py:611 +#: engine/core/graphene/object_types.py:760 engine/core/models.py:238 +#: engine/core/models.py:676 msgid "product tags" msgstr "Štítky produktu" -#: engine/core/graphene/object_types.py:743 +#: engine/core/graphene/object_types.py:765 msgid "tagged categories" msgstr "Kategorie s příznakem" -#: engine/core/graphene/object_types.py:751 +#: engine/core/graphene/object_types.py:773 msgid "categories tags" msgstr "Štítky kategorií" -#: engine/core/graphene/object_types.py:755 +#: engine/core/graphene/object_types.py:777 msgid "project name" msgstr "Název projektu" -#: engine/core/graphene/object_types.py:756 +#: engine/core/graphene/object_types.py:778 msgid "company name" msgstr "Název společnosti" -#: engine/core/graphene/object_types.py:757 +#: engine/core/graphene/object_types.py:779 msgid "company address" msgstr "Adresa společnosti" -#: engine/core/graphene/object_types.py:758 +#: engine/core/graphene/object_types.py:780 msgid "company phone number" msgstr "Telefonní číslo společnosti" -#: engine/core/graphene/object_types.py:761 +#: engine/core/graphene/object_types.py:783 msgid "email from, sometimes it must be used instead of host user value" msgstr "" "'email from', někdy se musí použít místo hodnoty hostitelského uživatele." -#: engine/core/graphene/object_types.py:764 +#: engine/core/graphene/object_types.py:786 msgid "email host user" msgstr "Uživatel hostitelského e-mailu" -#: engine/core/graphene/object_types.py:765 +#: engine/core/graphene/object_types.py:787 msgid "maximum amount for payment" msgstr "Maximální částka pro platbu" -#: engine/core/graphene/object_types.py:766 +#: engine/core/graphene/object_types.py:788 msgid "minimum amount for payment" msgstr "Minimální částka pro platbu" -#: engine/core/graphene/object_types.py:767 +#: engine/core/graphene/object_types.py:789 msgid "analytics data" msgstr "Analytická data" -#: engine/core/graphene/object_types.py:768 +#: engine/core/graphene/object_types.py:790 msgid "advertisement data" msgstr "Reklamní údaje" -#: engine/core/graphene/object_types.py:771 +#: engine/core/graphene/object_types.py:793 msgid "company configuration" msgstr "Konfigurace" -#: engine/core/graphene/object_types.py:775 +#: engine/core/graphene/object_types.py:797 msgid "language code" msgstr "Kód jazyka" -#: engine/core/graphene/object_types.py:776 +#: engine/core/graphene/object_types.py:798 msgid "language name" msgstr "Název jazyka" -#: engine/core/graphene/object_types.py:777 +#: engine/core/graphene/object_types.py:799 msgid "language flag, if exists :)" msgstr "Příznak jazyka, pokud existuje :)" -#: engine/core/graphene/object_types.py:780 +#: engine/core/graphene/object_types.py:802 msgid "supported languages" msgstr "Získat seznam podporovaných jazyků" -#: engine/core/graphene/object_types.py:812 -#: engine/core/graphene/object_types.py:815 -#: engine/core/graphene/object_types.py:818 +#: engine/core/graphene/object_types.py:834 +#: engine/core/graphene/object_types.py:837 +#: engine/core/graphene/object_types.py:840 msgid "products search results" msgstr "Výsledky vyhledávání produktů" -#: engine/core/graphene/object_types.py:820 +#: engine/core/graphene/object_types.py:842 msgid "posts search results" msgstr "Výsledky vyhledávání produktů" -#: engine/core/models.py:75 +#: engine/core/models.py:91 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 " @@ -1581,23 +1621,23 @@ msgstr "" "užitečné pro efektivnější kategorizaci a správu atributů v komplexním " "systému." -#: engine/core/models.py:88 +#: engine/core/models.py:107 msgid "parent of this group" msgstr "Rodič této skupiny" -#: engine/core/models.py:89 +#: engine/core/models.py:108 msgid "parent attribute group" msgstr "Nadřazená skupina atributů" -#: engine/core/models.py:93 engine/core/models.py:94 +#: engine/core/models.py:112 engine/core/models.py:113 msgid "attribute group's name" msgstr "Název skupiny atributů" -#: engine/core/models.py:102 engine/core/models.py:763 +#: engine/core/models.py:121 engine/core/models.py:849 msgid "attribute group" msgstr "Skupina atributů" -#: engine/core/models.py:108 +#: engine/core/models.py:127 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1615,49 +1655,49 @@ msgstr "" " další metadata a omezení, takže je vhodný pro použití v systémech, které " "komunikují s prodejci třetích stran." -#: engine/core/models.py:122 +#: engine/core/models.py:141 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." -#: engine/core/models.py:124 +#: engine/core/models.py:143 msgid "authentication info" msgstr "Informace o ověřování" -#: engine/core/models.py:129 +#: engine/core/models.py:148 msgid "define the markup for products retrieved from this vendor" msgstr "Definice přirážky pro produkty získané od tohoto dodavatele" -#: engine/core/models.py:130 +#: engine/core/models.py:149 msgid "vendor markup percentage" msgstr "Procento přirážky prodejce" -#: engine/core/models.py:134 +#: engine/core/models.py:153 msgid "name of this vendor" msgstr "Název tohoto prodejce" -#: engine/core/models.py:135 +#: engine/core/models.py:154 msgid "vendor name" msgstr "Název prodejce" -#: engine/core/models.py:150 +#: engine/core/models.py:169 msgid "response file" msgstr "soubor s odpovědí" -#: engine/core/models.py:151 +#: engine/core/models.py:170 msgid "vendor's last processing response" msgstr "poslední odpověď prodejce na zpracování" -#: engine/core/models.py:157 +#: engine/core/models.py:176 msgid "vendor's integration file path" msgstr "Cesta k integračnímu souboru prodejce" -#: engine/core/models.py:158 +#: engine/core/models.py:177 msgid "integration path" msgstr "Cesta integrace" -#: engine/core/models.py:192 +#: engine/core/models.py:211 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1671,27 +1711,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." -#: engine/core/models.py:204 engine/core/models.py:235 +#: engine/core/models.py:223 engine/core/models.py:254 msgid "internal tag identifier for the product tag" msgstr "Interní identifikátor značky produktu" -#: engine/core/models.py:205 engine/core/models.py:236 +#: engine/core/models.py:224 engine/core/models.py:255 msgid "tag name" msgstr "Název štítku" -#: engine/core/models.py:209 engine/core/models.py:240 +#: engine/core/models.py:228 engine/core/models.py:259 msgid "user-friendly name for the product tag" msgstr "Uživatelsky přívětivý název pro značku produktu" -#: engine/core/models.py:210 engine/core/models.py:241 +#: engine/core/models.py:229 engine/core/models.py:260 msgid "tag display name" msgstr "Zobrazení názvu štítku" -#: engine/core/models.py:218 +#: engine/core/models.py:237 msgid "product tag" msgstr "Štítek produktu" -#: engine/core/models.py:224 +#: engine/core/models.py:243 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 " @@ -1702,15 +1742,15 @@ msgstr "" "Obsahuje atributy pro interní identifikátor značky a uživatelsky přívětivý " "zobrazovací název." -#: engine/core/models.py:249 +#: engine/core/models.py:268 msgid "category tag" msgstr "značka kategorie" -#: engine/core/models.py:250 engine/core/models.py:322 +#: engine/core/models.py:269 engine/core/models.py:345 msgid "category tags" msgstr "štítky kategorií" -#: engine/core/models.py:255 +#: engine/core/models.py:274 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1732,51 +1772,51 @@ msgstr "" "kategorií a také přiřazovat atributy, jako jsou obrázky, značky nebo " "priorita." -#: engine/core/models.py:269 +#: engine/core/models.py:292 msgid "upload an image representing this category" msgstr "Nahrát obrázek reprezentující tuto kategorii" -#: engine/core/models.py:272 +#: engine/core/models.py:295 msgid "category image" msgstr "Obrázek kategorie" -#: engine/core/models.py:277 +#: engine/core/models.py:300 msgid "define a markup percentage for products in this category" msgstr "Definovat procento přirážky pro produkty v této kategorii." -#: engine/core/models.py:286 +#: engine/core/models.py:309 msgid "parent of this category to form a hierarchical structure" msgstr "Nadřízený této kategorie, který tvoří hierarchickou strukturu." -#: engine/core/models.py:287 +#: engine/core/models.py:310 msgid "parent category" msgstr "Nadřazená kategorie" -#: engine/core/models.py:292 +#: engine/core/models.py:315 msgid "category name" msgstr "Název kategorie" -#: engine/core/models.py:293 +#: engine/core/models.py:316 msgid "provide a name for this category" msgstr "Uveďte název této kategorie" -#: engine/core/models.py:300 +#: engine/core/models.py:323 msgid "add a detailed description for this category" msgstr "Přidejte podrobný popis této kategorie" -#: engine/core/models.py:301 +#: engine/core/models.py:324 msgid "category description" msgstr "Popis kategorie" -#: engine/core/models.py:321 +#: engine/core/models.py:344 msgid "tags that help describe or group this category" msgstr "značky, které pomáhají popsat nebo seskupit tuto kategorii" -#: engine/core/models.py:328 engine/core/models.py:503 +#: engine/core/models.py:351 engine/core/models.py:552 msgid "priority" msgstr "Priorita" -#: engine/core/models.py:446 +#: engine/core/models.py:495 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1789,47 +1829,43 @@ 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." -#: engine/core/models.py:456 +#: engine/core/models.py:505 msgid "name of this brand" msgstr "Název této značky" -#: engine/core/models.py:457 +#: engine/core/models.py:506 msgid "brand name" msgstr "Název značky" -#: engine/core/models.py:464 +#: engine/core/models.py:513 msgid "upload a logo representing this brand" msgstr "Nahrát logo reprezentující tuto značku" -#: engine/core/models.py:466 +#: engine/core/models.py:515 msgid "brand small image" msgstr "Malý obrázek značky" -#: engine/core/models.py:472 +#: engine/core/models.py:521 msgid "upload a big logo representing this brand" msgstr "Nahrát velké logo reprezentující tuto značku" -#: engine/core/models.py:474 +#: engine/core/models.py:523 msgid "brand big image" msgstr "Velká image značky" -#: engine/core/models.py:479 +#: engine/core/models.py:528 msgid "add a detailed description of the brand" msgstr "Přidejte podrobný popis značky" -#: engine/core/models.py:480 +#: engine/core/models.py:529 msgid "brand description" msgstr "Popis značky" -#: engine/core/models.py:485 -msgid "optional categories that this brand is associated with" -msgstr "Volitelné kategorie, se kterými je tato značka spojena" +#: engine/core/models.py:534 engine/core/models.py:535 +msgid "DEPRECATED" +msgstr "ZASTARALÉ" -#: engine/core/models.py:486 -msgid "associated categories" -msgstr "Kategorie" - -#: engine/core/models.py:516 +#: engine/core/models.py:569 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1845,72 +1881,72 @@ msgstr "" "zásob, který umožňuje sledovat a vyhodnocovat produkty dostupné od různých " "dodavatelů." -#: engine/core/models.py:528 +#: engine/core/models.py:581 msgid "the vendor supplying this product stock" msgstr "Prodejce dodávající tento výrobek na sklad" -#: engine/core/models.py:529 +#: engine/core/models.py:582 msgid "associated vendor" msgstr "Přidružený prodejce" -#: engine/core/models.py:533 +#: engine/core/models.py:588 msgid "final price to the customer after markups" msgstr "Konečná cena pro zákazníka po přirážkách" -#: engine/core/models.py:534 +#: engine/core/models.py:589 msgid "selling price" msgstr "Prodejní cena" -#: engine/core/models.py:539 +#: engine/core/models.py:594 msgid "the product associated with this stock entry" msgstr "Produkt spojený s touto skladovou položkou" -#: engine/core/models.py:540 engine/core/models.py:828 -#: engine/core/models.py:874 engine/core/models.py:1912 +#: engine/core/models.py:595 engine/core/models.py:914 +#: engine/core/models.py:962 engine/core/models.py:2020 msgid "associated product" msgstr "Související produkt" -#: engine/core/models.py:547 +#: engine/core/models.py:604 msgid "the price paid to the vendor for this product" msgstr "Cena zaplacená prodejci za tento výrobek" -#: engine/core/models.py:548 +#: engine/core/models.py:605 msgid "vendor purchase price" msgstr "Kupní cena prodejce" -#: engine/core/models.py:552 +#: engine/core/models.py:609 msgid "available quantity of the product in stock" msgstr "Dostupné množství produktu na skladě" -#: engine/core/models.py:553 +#: engine/core/models.py:610 msgid "quantity in stock" msgstr "Množství na skladě" -#: engine/core/models.py:557 +#: engine/core/models.py:614 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU přidělený prodejcem pro identifikaci výrobku" -#: engine/core/models.py:558 +#: engine/core/models.py:615 msgid "vendor sku" msgstr "SKU prodejce" -#: engine/core/models.py:564 +#: engine/core/models.py:621 msgid "digital file associated with this stock if applicable" msgstr "Digitální soubor spojený s touto zásobou, je-li to vhodné" -#: engine/core/models.py:565 +#: engine/core/models.py:622 msgid "digital file" msgstr "Digitální soubor" -#: engine/core/models.py:569 +#: engine/core/models.py:626 msgid "system attributes" msgstr "Atributy systému" -#: engine/core/models.py:577 +#: engine/core/models.py:636 msgid "stock entries" msgstr "Zápisy do zásob" -#: engine/core/models.py:582 +#: engine/core/models.py:641 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1931,71 +1967,79 @@ msgstr "" " Používá se k definování a manipulaci s údaji o produktu a souvisejícími " "informacemi v rámci aplikace." -#: engine/core/models.py:595 +#: engine/core/models.py:660 msgid "category this product belongs to" msgstr "Kategorie, do které tento produkt patří" -#: engine/core/models.py:604 +#: engine/core/models.py:669 msgid "optionally associate this product with a brand" msgstr "Volitelně přiřadit tento produkt ke značce" -#: engine/core/models.py:610 +#: engine/core/models.py:675 msgid "tags that help describe or group this product" msgstr "Značky, které pomáhají popsat nebo seskupit tento produkt" -#: engine/core/models.py:615 +#: engine/core/models.py:680 msgid "indicates whether this product is digitally delivered" msgstr "Označuje, zda je tento produkt dodáván digitálně" -#: engine/core/models.py:616 +#: engine/core/models.py:681 msgid "is product digital" msgstr "Je produkt digitální" -#: engine/core/models.py:623 +#: engine/core/models.py:688 msgid "indicates whether this product should be updated from periodic task" msgstr "označuje, zda má být tento produkt aktualizován z periodické úlohy." -#: engine/core/models.py:625 +#: engine/core/models.py:690 msgid "is product updatable" msgstr "je produkt aktualizovatelný" -#: engine/core/models.py:631 +#: engine/core/models.py:696 msgid "provide a clear identifying name for the product" msgstr "Uveďte jasný identifikační název výrobku" -#: engine/core/models.py:632 +#: engine/core/models.py:697 msgid "product name" msgstr "Název produktu" -#: engine/core/models.py:638 engine/core/models.py:923 +#: engine/core/models.py:703 engine/core/models.py:1012 msgid "add a detailed description of the product" msgstr "Přidejte podrobný popis produktu" -#: engine/core/models.py:639 +#: engine/core/models.py:704 msgid "product description" msgstr "Popis produktu" -#: engine/core/models.py:646 +#: engine/core/models.py:710 +msgid "optional video file for this product" +msgstr "Volitelný video soubor pro tento produkt" + +#: engine/core/models.py:711 +msgid "product video" +msgstr "Video o produktu" + +#: engine/core/models.py:719 msgid "part number for this product" msgstr "Číslo dílu pro tento produkt" -#: engine/core/models.py:647 +#: engine/core/models.py:720 msgid "part number" msgstr "Číslo dílu" -#: engine/core/models.py:666 +#: engine/core/models.py:739 msgid "stock keeping unit for this product" msgstr "Skladová jednotka pro tento produkt" -#: engine/core/models.py:673 +#: engine/core/models.py:746 msgid "whether to export this product to marketplaces" msgstr "Zda exportovat tento produkt na tržiště" -#: engine/core/models.py:674 +#: engine/core/models.py:747 msgid "Export to Marketplaces" msgstr "Export na tržiště" -#: engine/core/models.py:749 +#: engine/core/models.py:835 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 " @@ -2011,64 +2055,64 @@ msgstr "" "booleanu, pole a objektu. To umožňuje dynamické a flexibilní strukturování " "dat." -#: engine/core/models.py:762 +#: engine/core/models.py:848 msgid "group of this attribute" msgstr "Skupina tohoto atributu" -#: engine/core/models.py:768 +#: engine/core/models.py:854 msgid "string" msgstr "Řetězec" -#: engine/core/models.py:769 +#: engine/core/models.py:855 msgid "integer" msgstr "Celé číslo" -#: engine/core/models.py:770 +#: engine/core/models.py:856 msgid "float" msgstr "Float" -#: engine/core/models.py:771 +#: engine/core/models.py:857 msgid "boolean" msgstr "Boolean" -#: engine/core/models.py:772 +#: engine/core/models.py:858 msgid "array" msgstr "Pole" -#: engine/core/models.py:773 +#: engine/core/models.py:859 msgid "object" msgstr "Objekt" -#: engine/core/models.py:775 +#: engine/core/models.py:861 msgid "type of the attribute's value" msgstr "Typ hodnoty atributu" -#: engine/core/models.py:776 +#: engine/core/models.py:862 msgid "value type" msgstr "Typ hodnoty" -#: engine/core/models.py:781 +#: engine/core/models.py:867 msgid "name of this attribute" msgstr "Název tohoto atributu" -#: engine/core/models.py:782 +#: engine/core/models.py:868 msgid "attribute's name" msgstr "Název atributu" -#: engine/core/models.py:787 +#: engine/core/models.py:873 msgid "is filterable" msgstr "je filtrovatelný" -#: engine/core/models.py:789 +#: engine/core/models.py:875 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." -#: engine/core/models.py:802 engine/core/models.py:820 +#: engine/core/models.py:888 engine/core/models.py:906 #: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Atribut" -#: engine/core/models.py:808 +#: engine/core/models.py:894 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" @@ -2078,19 +2122,19 @@ msgstr "" " \"atribut\" s jedinečnou \"hodnotou\", což umožňuje lepší organizaci a " "dynamickou reprezentaci vlastností produktu." -#: engine/core/models.py:819 +#: engine/core/models.py:905 msgid "attribute of this value" msgstr "Atribut této hodnoty" -#: engine/core/models.py:827 +#: engine/core/models.py:913 msgid "the specific product associated with this attribute's value" msgstr "Konkrétní produkt spojený s hodnotou tohoto atributu" -#: engine/core/models.py:833 +#: engine/core/models.py:919 msgid "the specific value for this attribute" msgstr "Konkrétní hodnota tohoto atributu" -#: engine/core/models.py:846 +#: engine/core/models.py:934 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -2104,39 +2148,39 @@ msgstr "" " zobrazení. Obsahuje také funkci pro zpřístupnění alternativního textu pro " "obrázky." -#: engine/core/models.py:857 +#: engine/core/models.py:945 msgid "provide alternative text for the image for accessibility" msgstr "Poskytněte alternativní text k obrázku kvůli přístupnosti." -#: engine/core/models.py:858 +#: engine/core/models.py:946 msgid "image alt text" msgstr "Text alt obrázku" -#: engine/core/models.py:861 +#: engine/core/models.py:949 msgid "upload the image file for this product" msgstr "Nahrát soubor s obrázkem tohoto produktu" -#: engine/core/models.py:862 engine/core/models.py:893 +#: engine/core/models.py:950 engine/core/models.py:982 msgid "product image" msgstr "Obrázek produktu" -#: engine/core/models.py:867 +#: engine/core/models.py:955 msgid "determines the order in which images are displayed" msgstr "Určuje pořadí, v jakém se obrázky zobrazují." -#: engine/core/models.py:868 +#: engine/core/models.py:956 msgid "display priority" msgstr "Priorita zobrazení" -#: engine/core/models.py:873 +#: engine/core/models.py:961 msgid "the product that this image represents" msgstr "Výrobek, který tento obrázek představuje" -#: engine/core/models.py:894 +#: engine/core/models.py:983 msgid "product images" msgstr "Obrázky produktů" -#: engine/core/models.py:899 +#: engine/core/models.py:988 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -2151,39 +2195,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á." -#: engine/core/models.py:911 +#: engine/core/models.py:1000 msgid "percentage discount for the selected products" msgstr "Procentuální sleva na vybrané produkty" -#: engine/core/models.py:912 +#: engine/core/models.py:1001 msgid "discount percentage" msgstr "Procento slevy" -#: engine/core/models.py:917 +#: engine/core/models.py:1006 msgid "provide a unique name for this promotion" msgstr "Uveďte jedinečný název této propagační akce" -#: engine/core/models.py:918 +#: engine/core/models.py:1007 msgid "promotion name" msgstr "Název akce" -#: engine/core/models.py:924 +#: engine/core/models.py:1013 msgid "promotion description" msgstr "Popis propagace" -#: engine/core/models.py:929 +#: engine/core/models.py:1018 msgid "select which products are included in this promotion" msgstr "Vyberte, které produkty jsou zahrnuty do této akce" -#: engine/core/models.py:930 +#: engine/core/models.py:1019 msgid "included products" msgstr "Zahrnuté produkty" -#: engine/core/models.py:934 +#: engine/core/models.py:1027 msgid "promotion" msgstr "Propagace" -#: engine/core/models.py:945 +#: engine/core/models.py:1038 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2195,23 +2239,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." -#: engine/core/models.py:957 +#: engine/core/models.py:1050 msgid "products that the user has marked as wanted" msgstr "Výrobky, které uživatel označil jako požadované" -#: engine/core/models.py:965 +#: engine/core/models.py:1058 msgid "user who owns this wishlist" msgstr "Uživatel, který vlastní tento seznam přání" -#: engine/core/models.py:966 +#: engine/core/models.py:1059 msgid "wishlist owner" msgstr "Majitel seznamu přání" -#: engine/core/models.py:974 +#: engine/core/models.py:1067 msgid "wishlist" msgstr "Seznam přání" -#: engine/core/models.py:1016 +#: engine/core/models.py:1109 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2226,19 +2270,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." -#: engine/core/models.py:1031 +#: engine/core/models.py:1124 msgid "documentary" msgstr "Dokumentární film" -#: engine/core/models.py:1032 +#: engine/core/models.py:1125 msgid "documentaries" msgstr "Dokumentární filmy" -#: engine/core/models.py:1042 +#: engine/core/models.py:1135 msgid "unresolved" msgstr "Nevyřešené" -#: engine/core/models.py:1047 +#: engine/core/models.py:1140 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2258,59 +2302,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." -#: engine/core/models.py:1062 +#: engine/core/models.py:1155 msgid "address line for the customer" msgstr "Adresní řádek pro zákazníka" -#: engine/core/models.py:1063 +#: engine/core/models.py:1156 msgid "address line" msgstr "Adresní řádek" -#: engine/core/models.py:1065 +#: engine/core/models.py:1158 msgid "street" msgstr "Ulice" -#: engine/core/models.py:1066 +#: engine/core/models.py:1159 msgid "district" msgstr "Okres" -#: engine/core/models.py:1067 +#: engine/core/models.py:1160 msgid "city" msgstr "Město" -#: engine/core/models.py:1068 +#: engine/core/models.py:1161 msgid "region" msgstr "Region" -#: engine/core/models.py:1069 +#: engine/core/models.py:1162 msgid "postal code" msgstr "Poštovní směrovací číslo" -#: engine/core/models.py:1070 +#: engine/core/models.py:1163 msgid "country" msgstr "Země" -#: engine/core/models.py:1077 +#: engine/core/models.py:1170 msgid "geolocation point: (longitude, latitude)" msgstr "Geolokace Bod(Zeměpisná délka, Zeměpisná šířka)" -#: engine/core/models.py:1083 +#: engine/core/models.py:1176 msgid "full JSON response from geocoder for this address" msgstr "Úplná odpověď JSON z geokodéru pro tuto adresu" -#: engine/core/models.py:1089 +#: engine/core/models.py:1182 msgid "stored JSON response from the geocoding service" msgstr "Uložená odpověď JSON ze služby geokódování" -#: engine/core/models.py:1099 +#: engine/core/models.py:1192 msgid "address" msgstr "Adresa" -#: engine/core/models.py:1100 +#: engine/core/models.py:1193 msgid "addresses" msgstr "Adresy" -#: engine/core/models.py:1112 +#: engine/core/models.py:1205 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2326,71 +2370,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í." -#: engine/core/models.py:1126 +#: engine/core/models.py:1219 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." -#: engine/core/models.py:1127 +#: engine/core/models.py:1220 msgid "promo code identifier" msgstr "Identifikátor propagačního kódu" -#: engine/core/models.py:1134 +#: engine/core/models.py:1227 msgid "fixed discount amount applied if percent is not used" msgstr "Pevná výše slevy, pokud není použito procento" -#: engine/core/models.py:1135 +#: engine/core/models.py:1228 msgid "fixed discount amount" msgstr "Pevná výše slevy" -#: engine/core/models.py:1141 +#: engine/core/models.py:1234 msgid "percentage discount applied if fixed amount is not used" msgstr "Procentuální sleva uplatněná v případě nevyužití pevné částky" -#: engine/core/models.py:1142 +#: engine/core/models.py:1235 msgid "percentage discount" msgstr "Procentuální sleva" -#: engine/core/models.py:1147 +#: engine/core/models.py:1240 msgid "timestamp when the promocode expires" msgstr "Časové razítko ukončení platnosti promokódu" -#: engine/core/models.py:1148 +#: engine/core/models.py:1241 msgid "end validity time" msgstr "Doba ukončení platnosti" -#: engine/core/models.py:1153 +#: engine/core/models.py:1246 msgid "timestamp from which this promocode is valid" msgstr "Časové razítko, od kterého je tento promokód platný" -#: engine/core/models.py:1154 +#: engine/core/models.py:1247 msgid "start validity time" msgstr "Čas zahájení platnosti" -#: engine/core/models.py:1159 +#: engine/core/models.py:1252 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." -#: engine/core/models.py:1160 +#: engine/core/models.py:1253 msgid "usage timestamp" msgstr "Časové razítko použití" -#: engine/core/models.py:1165 +#: engine/core/models.py:1258 msgid "user assigned to this promocode if applicable" msgstr "Uživatel přiřazený k tomuto promokódu, je-li to relevantní" -#: engine/core/models.py:1166 +#: engine/core/models.py:1259 msgid "assigned user" msgstr "Přiřazený uživatel" -#: engine/core/models.py:1173 +#: engine/core/models.py:1266 msgid "promo code" msgstr "Propagační kód" -#: engine/core/models.py:1174 +#: engine/core/models.py:1267 msgid "promo codes" msgstr "Propagační kódy" -#: engine/core/models.py:1190 +#: engine/core/models.py:1283 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2398,16 +2442,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." -#: engine/core/models.py:1212 +#: engine/core/models.py:1305 msgid "promocode already used" msgstr "Promo kód byl již použit" -#: engine/core/models.py:1234 +#: engine/core/models.py:1327 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Neplatný typ slevy pro promokód {self.uuid}!" -#: engine/core/models.py:1243 +#: engine/core/models.py:1336 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 " @@ -2424,137 +2468,137 @@ msgstr "" "fakturaci. Stejně tak funkce podporuje správu produktů v životním cyklu " "objednávky." -#: engine/core/models.py:1260 +#: engine/core/models.py:1357 msgid "the billing address used for this order" msgstr "Fakturační adresa použitá pro tuto objednávku" -#: engine/core/models.py:1268 +#: engine/core/models.py:1365 msgid "optional promo code applied to this order" msgstr "Volitelný promo kód použitý na tuto objednávku" -#: engine/core/models.py:1269 +#: engine/core/models.py:1366 msgid "applied promo code" msgstr "Použitý promo kód" -#: engine/core/models.py:1277 +#: engine/core/models.py:1374 msgid "the shipping address used for this order" msgstr "Dodací adresa použitá pro tuto objednávku" -#: engine/core/models.py:1278 +#: engine/core/models.py:1375 msgid "shipping address" msgstr "Dodací adresa" -#: engine/core/models.py:1284 +#: engine/core/models.py:1381 msgid "current status of the order in its lifecycle" msgstr "Aktuální stav zakázky v jejím životním cyklu" -#: engine/core/models.py:1285 +#: engine/core/models.py:1382 msgid "order status" msgstr "Stav objednávky" -#: engine/core/models.py:1290 engine/core/models.py:1889 +#: engine/core/models.py:1387 engine/core/models.py:1997 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í." -#: engine/core/models.py:1296 +#: engine/core/models.py:1393 msgid "json representation of order attributes for this order" msgstr "JSON reprezentace atributů objednávky pro tuto objednávku" -#: engine/core/models.py:1302 +#: engine/core/models.py:1399 msgid "the user who placed the order" msgstr "Uživatel, který zadal objednávku" -#: engine/core/models.py:1303 +#: engine/core/models.py:1400 msgid "user" msgstr "Uživatel" -#: engine/core/models.py:1309 +#: engine/core/models.py:1406 msgid "the timestamp when the order was finalized" msgstr "Časové razítko, kdy byla objednávka dokončena." -#: engine/core/models.py:1310 +#: engine/core/models.py:1407 msgid "buy time" msgstr "Kupte si čas" -#: engine/core/models.py:1317 +#: engine/core/models.py:1414 msgid "a human-readable identifier for the order" msgstr "Lidsky čitelný identifikátor objednávky" -#: engine/core/models.py:1318 +#: engine/core/models.py:1415 msgid "human readable id" msgstr "lidsky čitelné ID" -#: engine/core/models.py:1324 +#: engine/core/models.py:1421 msgid "order" msgstr "Objednávka" -#: engine/core/models.py:1371 +#: engine/core/models.py:1468 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!" -#: engine/core/models.py:1404 +#: engine/core/models.py:1504 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." -#: engine/core/models.py:1410 +#: engine/core/models.py:1510 msgid "you cannot add inactive products to order" msgstr "Do objednávky nelze přidat neaktivní produkty" -#: engine/core/models.py:1432 +#: engine/core/models.py:1533 msgid "you cannot add more products than available in stock" msgstr "Nelze přidat více produktů, než je dostupné na skladě" -#: engine/core/models.py:1456 engine/core/models.py:1485 -#: engine/core/models.py:1495 +#: engine/core/models.py:1557 engine/core/models.py:1586 +#: engine/core/models.py:1596 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á." -#: engine/core/models.py:1480 +#: engine/core/models.py:1581 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} neexistuje s dotazem <{query}>!" -#: engine/core/models.py:1519 +#: engine/core/models.py:1620 msgid "promocode does not exist" msgstr "Promo kód neexistuje" -#: engine/core/models.py:1534 +#: engine/core/models.py:1635 msgid "you can only buy physical products with shipping address specified" msgstr "Fyzické produkty můžete zakoupit pouze se zadanou dodací adresou!" -#: engine/core/models.py:1555 +#: engine/core/models.py:1656 msgid "address does not exist" msgstr "Adresa neexistuje" -#: engine/core/models.py:1577 engine/core/models.py:1656 +#: engine/core/models.py:1678 engine/core/models.py:1757 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." -#: engine/core/models.py:1583 engine/core/models.py:1649 +#: engine/core/models.py:1684 engine/core/models.py:1750 msgid "invalid force value" msgstr "Neplatná hodnota síly" -#: engine/core/models.py:1589 engine/core/models.py:1660 +#: engine/core/models.py:1690 engine/core/models.py:1761 msgid "you cannot purchase an empty order!" msgstr "Nelze zakoupit prázdnou objednávku!" -#: engine/core/models.py:1610 +#: engine/core/models.py:1711 msgid "you cannot buy an order without a user" msgstr "Bez uživatele nelze objednávku zakoupit!" -#: engine/core/models.py:1624 +#: engine/core/models.py:1725 msgid "a user without a balance cannot buy with balance" msgstr "Uživatel bez zůstatku nemůže nakupovat se zůstatkem!" -#: engine/core/models.py:1630 +#: engine/core/models.py:1731 msgid "insufficient funds to complete the order" msgstr "Nedostatek finančních prostředků na dokončení objednávky" -#: engine/core/models.py:1671 +#: engine/core/models.py:1772 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2562,14 +2606,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." -#: engine/core/models.py:1682 +#: engine/core/models.py:1783 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "Neplatný způsob platby: {payment_method} z {available_payment_methods}!" -#: engine/core/models.py:1813 +#: engine/core/models.py:1916 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2583,34 +2627,34 @@ 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." -#: engine/core/models.py:1825 +#: engine/core/models.py:1928 msgid "user-provided comments about their experience with the product" msgstr "Komentáře uživatelů o jejich zkušenostech s produktem" -#: engine/core/models.py:1826 +#: engine/core/models.py:1929 msgid "feedback comments" msgstr "Zpětná vazba" -#: engine/core/models.py:1834 +#: engine/core/models.py:1937 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á." -#: engine/core/models.py:1836 +#: engine/core/models.py:1939 msgid "related order product" msgstr "Související objednávka produktu" -#: engine/core/models.py:1841 +#: engine/core/models.py:1944 msgid "user-assigned rating for the product" msgstr "Hodnocení produktu přidělené uživatelem" -#: engine/core/models.py:1842 +#: engine/core/models.py:1945 msgid "product rating" msgstr "Hodnocení produktu" -#: engine/core/models.py:1862 +#: engine/core/models.py:1965 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2632,108 +2676,108 @@ msgstr "" "produktů. Model se integruje s modely objednávek a produktů a ukládá na ně " "odkaz." -#: engine/core/models.py:1877 +#: engine/core/models.py:1985 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." -#: engine/core/models.py:1878 +#: engine/core/models.py:1986 msgid "purchase price at order time" msgstr "Nákupní cena v době objednávky" -#: engine/core/models.py:1883 +#: engine/core/models.py:1991 msgid "internal comments for admins about this ordered product" msgstr "Interní komentáře pro administrátory k tomuto objednanému produktu" -#: engine/core/models.py:1884 +#: engine/core/models.py:1992 msgid "internal comments" msgstr "Interní připomínky" -#: engine/core/models.py:1890 +#: engine/core/models.py:1998 msgid "user notifications" msgstr "Oznámení uživatele" -#: engine/core/models.py:1895 +#: engine/core/models.py:2003 msgid "json representation of this item's attributes" msgstr "JSON reprezentace atributů této položky" -#: engine/core/models.py:1896 +#: engine/core/models.py:2004 msgid "ordered product attributes" msgstr "Objednané atributy produktu" -#: engine/core/models.py:1901 +#: engine/core/models.py:2009 msgid "reference to the parent order that contains this product" msgstr "Odkaz na nadřazenou objednávku, která obsahuje tento produkt" -#: engine/core/models.py:1902 +#: engine/core/models.py:2010 msgid "parent order" msgstr "Objednávka rodičů" -#: engine/core/models.py:1911 +#: engine/core/models.py:2019 msgid "the specific product associated with this order line" msgstr "Konkrétní produkt spojený s touto objednávkou" -#: engine/core/models.py:1918 +#: engine/core/models.py:2026 msgid "quantity of this specific product in the order" msgstr "Množství tohoto konkrétního produktu v objednávce" -#: engine/core/models.py:1919 +#: engine/core/models.py:2027 msgid "product quantity" msgstr "Množství produktu" -#: engine/core/models.py:1926 +#: engine/core/models.py:2034 msgid "current status of this product in the order" msgstr "Aktuální stav tohoto produktu v objednávce" -#: engine/core/models.py:1927 +#: engine/core/models.py:2035 msgid "product line status" msgstr "Stav produktové řady" -#: engine/core/models.py:1998 +#: engine/core/models.py:2106 msgid "order product must have an order" msgstr "Orderproduct musí mít přiřazenou objednávku!" -#: engine/core/models.py:2000 +#: engine/core/models.py:2108 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Špatně zadaná akce pro zpětnou vazbu: {action}!" -#: engine/core/models.py:2017 +#: engine/core/models.py:2125 msgid "you cannot feedback an order which is not received" msgstr "nelze poskytnout zpětnou vazbu na objednávku, která nebyla přijata" -#: engine/core/models.py:2026 +#: engine/core/models.py:2132 engine/core/models.py:2227 msgid "name" msgstr "Název" -#: engine/core/models.py:2028 +#: engine/core/models.py:2134 msgid "URL of the integration" msgstr "Adresa URL integrace" -#: engine/core/models.py:2031 +#: engine/core/models.py:2137 msgid "authentication credentials" msgstr "Ověřovací pověření" -#: engine/core/models.py:2054 +#: engine/core/models.py:2160 msgid "you can only have one default CRM provider" msgstr "Můžete mít pouze jednoho výchozího poskytovatele CRM" -#: engine/core/models.py:2064 +#: engine/core/models.py:2170 msgid "CRM" msgstr "CRM" -#: engine/core/models.py:2065 +#: engine/core/models.py:2171 msgid "CRMs" msgstr "CRM" -#: engine/core/models.py:2081 +#: engine/core/models.py:2187 msgid "order CRM link" msgstr "Odkaz na CRM objednávky" -#: engine/core/models.py:2082 +#: engine/core/models.py:2188 msgid "orders CRM links" msgstr "Odkazy CRM objednávek" -#: engine/core/models.py:2087 +#: engine/core/models.py:2193 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2749,14 +2793,38 @@ 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." -#: engine/core/models.py:2103 +#: engine/core/models.py:2209 msgid "download" msgstr "Stáhnout" -#: engine/core/models.py:2104 +#: engine/core/models.py:2210 msgid "downloads" msgstr "Ke stažení na" +#: engine/core/models.py:2228 +msgid "descriptive name for the image" +msgstr "Popisný název obrázku" + +#: engine/core/models.py:2233 +msgid "image file pasted in the markdown editor" +msgstr "Obrázek vložený do editoru Markdown" + +#: engine/core/models.py:2239 +msgid "alt text" +msgstr "Jiný text" + +#: engine/core/models.py:2240 +msgid "alternative text for accessibility" +msgstr "Alternativní text pro přístupnost" + +#: engine/core/models.py:2244 +msgid "pasted image" +msgstr "Vložený obrázek" + +#: engine/core/models.py:2245 +msgid "pasted images" +msgstr "Vložené obrázky" + #: engine/core/serializers/utility.py:91 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." @@ -2764,6 +2832,16 @@ msgstr "" "pro přidání zpětné vazby musíte uvést komentář, hodnocení a uuid produktu." #: engine/core/sitemaps.py:25 +#: engine/core/templates/admin_doc/bookmarklets.html:8 +#: engine/core/templates/admin_doc/index.html:8 +#: engine/core/templates/admin_doc/missing_docutils.html:8 +#: engine/core/templates/admin_doc/model_detail.html:8 +#: engine/core/templates/admin_doc/model_index.html:8 +#: engine/core/templates/admin_doc/template_detail.html:8 +#: engine/core/templates/admin_doc/template_filter_index.html:8 +#: engine/core/templates/admin_doc/template_tag_index.html:8 +#: engine/core/templates/admin_doc/view_detail.html:8 +#: engine/core/templates/admin_doc/view_index.html:8 msgid "Home" msgstr "Home" @@ -2816,45 +2894,34 @@ msgstr "Hrubý" msgid "Dashboard" msgstr "Přístrojová deska" -#: engine/core/templates/admin/dashboard/_income_overview.html:7 +#: engine/core/templates/admin/dashboard/_income_overview.html:6 msgid "Income overview" msgstr "Přehled příjmů" -#: engine/core/templates/admin/dashboard/_income_overview.html:31 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Net" +#: engine/core/templates/admin/dashboard/_income_overview.html:16 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" msgstr "Čistý příjem" -#: engine/core/templates/admin/dashboard/_income_overview.html:37 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Taxes" -msgstr "Daně" - -#: engine/core/templates/admin/dashboard/_income_overview.html:43 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 +#: engine/core/templates/admin/dashboard/_income_overview.html:21 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 msgid "Returns" msgstr "Vrací se" -#: engine/core/templates/admin/dashboard/_income_overview.html:48 -msgid "Gross (pie total)" -msgstr "Hrubé příjmy" - -#: engine/core/templates/admin/dashboard/_income_overview.html:72 -msgid "No data" -msgstr "Bez data" - +#: engine/core/templates/admin/dashboard/_income_overview.html:26 #: engine/core/templates/admin/dashboard/_kpis.html:6 msgid "GMV" msgstr "GMV" +#: engine/core/templates/admin/dashboard/_income_overview.html:50 +msgid "No data" +msgstr "Bez data" + #: engine/core/templates/admin/dashboard/_kpis.html:34 msgid "AOV" msgstr "AOV" -#: engine/core/templates/admin/dashboard/_kpis.html:48 -msgid "Net revenue" -msgstr "Čistý příjem" - #: engine/core/templates/admin/dashboard/_kpis.html:62 msgid "Refund rate" msgstr "Míra vrácení peněz" @@ -2867,7 +2934,7 @@ msgstr "Vrácené" msgid "Low stock" msgstr "Nízké zásoby" -#: engine/core/templates/admin/dashboard/_low_stock.html:29 +#: engine/core/templates/admin/dashboard/_low_stock.html:33 msgid "No low stock items." msgstr "Žádné nízké skladové zásoby." @@ -2924,6 +2991,300 @@ msgstr "Žádný prodej v kategorii za posledních 30 dní." msgid "Django site admin" msgstr "Správce webu Django" +#: engine/core/templates/admin_doc/bookmarklets.html:4 +#: engine/core/templates/admin_doc/bookmarklets.html:17 +msgid "Documentation bookmarklets" +msgstr "Záložky dokumentace" + +#: engine/core/templates/admin_doc/bookmarklets.html:10 +#: engine/core/templates/admin_doc/index.html:4 +#: engine/core/templates/admin_doc/index.html:10 +#: engine/core/templates/admin_doc/index.html:15 +#: engine/core/templates/admin_doc/missing_docutils.html:10 +#: engine/core/templates/admin_doc/missing_docutils.html:19 +#: engine/core/templates/admin_doc/model_detail.html:10 +#: engine/core/templates/admin_doc/model_index.html:10 +#: engine/core/templates/admin_doc/template_detail.html:10 +#: engine/core/templates/admin_doc/template_filter_index.html:10 +#: engine/core/templates/admin_doc/template_tag_index.html:10 +#: engine/core/templates/admin_doc/view_detail.html:10 +#: engine/core/templates/admin_doc/view_index.html:10 +msgid "Documentation" +msgstr "Dokumentace" + +#: engine/core/templates/admin_doc/bookmarklets.html:12 +#: engine/core/templates/admin_doc/index.html:53 +msgid "Bookmarklets" +msgstr "Záložky" + +#: engine/core/templates/admin_doc/bookmarklets.html:19 +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Chcete-li nainstalovat bookmarklety, přetáhněte odkaz na panel záložek nebo " +"klikněte pravým tlačítkem myši na odkaz a přidejte jej do záložek. Nyní " +"můžete bookmarklet vybrat z jakékoli stránky webu." + +#: engine/core/templates/admin_doc/bookmarklets.html:29 +msgid "Documentation for this page" +msgstr "Dokumentace k této stránce" + +#: engine/core/templates/admin_doc/bookmarklets.html:31 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Přesměruje vás z jakékoli stránky na dokumentaci k zobrazení, které tuto " +"stránku generuje." + +#: engine/core/templates/admin_doc/index.html:21 +#: engine/core/templates/admin_doc/model_detail.html:12 +#: engine/core/templates/admin_doc/model_index.html:4 +#: engine/core/templates/admin_doc/model_index.html:12 +msgid "Models" +msgstr "Modely" + +#: engine/core/templates/admin_doc/index.html:23 +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Modely jsou popisy všech objektů v systému a jejich přidružených polí. Každý" +" model má seznam polí, ke kterým lze přistupovat jako k proměnným šablony." + +#: engine/core/templates/admin_doc/index.html:29 +#: engine/core/templates/admin_doc/view_detail.html:12 +#: engine/core/templates/admin_doc/view_index.html:4 +#: engine/core/templates/admin_doc/view_index.html:12 +msgid "Views" +msgstr "Názory" + +#: engine/core/templates/admin_doc/index.html:31 +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Každá stránka na veřejném webu je generována zobrazením. Zobrazení definuje," +" která šablona se použije k generování stránky a které objekty jsou pro tuto" +" šablonu k dispozici." + +#: engine/core/templates/admin_doc/index.html:39 +msgid "List of all the template tags and their functions." +msgstr "Seznam všech šablonových značek a jejich funkcí." + +#: engine/core/templates/admin_doc/index.html:45 +#: engine/core/templates/admin_doc/template_filter_index.html:12 +msgid "Filters" +msgstr "Filtry" + +#: engine/core/templates/admin_doc/index.html:47 +msgid "" +"Filters are actions which can be applied to variables in a template to alter" +" the output." +msgstr "" +"Filtry jsou akce, které lze použít na proměnné v šabloně za účelem změny " +"výstupu." + +#: engine/core/templates/admin_doc/index.html:55 +msgid "Tools for your browser to quickly access admin functionality." +msgstr "Nástroje pro váš prohlížeč pro rychlý přístup k funkcím správce." + +#: engine/core/templates/admin_doc/missing_docutils.html:4 +msgid "Please install docutils" +msgstr "Nainstalujte prosím docutils." + +#: engine/core/templates/admin_doc/missing_docutils.html:20 +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"Systém dokumentace pro správce vyžaduje knihovnu Pythonu docutils." + +#: engine/core/templates/admin_doc/missing_docutils.html:21 +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Požádejte své správce, aby nainstalovali docutils." + +#: engine/core/templates/admin_doc/model_detail.html:4 +#, python-format +msgid "Model: %(name)s" +msgstr "Model: %(name)s" + +#: engine/core/templates/admin_doc/model_detail.html:29 +msgid "Fields" +msgstr "Pole" + +#: engine/core/templates/admin_doc/model_detail.html:36 +msgid "Field" +msgstr "Oblast" + +#: engine/core/templates/admin_doc/model_detail.html:37 +msgid "Type" +msgstr "Typ" + +#: engine/core/templates/admin_doc/model_detail.html:38 +#: engine/core/templates/admin_doc/model_detail.html:70 +msgid "Description" +msgstr "Popis" + +#: engine/core/templates/admin_doc/model_detail.html:61 +msgid "Methods with arguments" +msgstr "Metody s argumenty" + +#: engine/core/templates/admin_doc/model_detail.html:68 +msgid "Method" +msgstr "Metoda" + +#: engine/core/templates/admin_doc/model_detail.html:69 +msgid "Arguments" +msgstr "Argumenty" + +#: engine/core/templates/admin_doc/model_detail.html:89 +msgid "Back to Model documentation" +msgstr "Zpět k dokumentaci modelu" + +#: engine/core/templates/admin_doc/model_index.html:17 +msgid "Model documentation" +msgstr "Dokumentace modelu" + +#: engine/core/templates/admin_doc/model_index.html:44 +msgid "Model groups" +msgstr "Modelové skupiny" + +#: engine/core/templates/admin_doc/template_detail.html:4 +#, python-format +msgid "Template: %(name)s" +msgstr "Šablona: %(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:12 +msgid "Templates" +msgstr "Šablony" + +#: engine/core/templates/admin_doc/template_detail.html:17 +#, python-format +msgid "" +"Template: %(name)s" +msgstr "" +"Šablona: %(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:21 +#, python-format +msgid "Search path for template %(name)s:" +msgstr "Vyhledávací cesta pro šablonu %(name)s:" + +#: engine/core/templates/admin_doc/template_detail.html:29 +msgid "(does not exist)" +msgstr "(neexistuje)" + +#: engine/core/templates/admin_doc/template_detail.html:40 +msgid "Back to Documentation" +msgstr "Zpět k dokumentaci" + +#: engine/core/templates/admin_doc/template_filter_index.html:4 +msgid "Template filters" +msgstr "Filtry šablon" + +#: engine/core/templates/admin_doc/template_filter_index.html:17 +msgid "Template filter documentation" +msgstr "Dokumentace filtru šablon" + +#: engine/core/templates/admin_doc/template_filter_index.html:26 +#: engine/core/templates/admin_doc/template_filter_index.html:52 +msgid "Built-in filters" +msgstr "Vestavěné filtry" + +#: engine/core/templates/admin_doc/template_filter_index.html:29 +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before using" +" the filter." +msgstr "" +"Chcete-li tyto filtry použít, vložte do šablony před použitím filtru %(code)s." + +#: engine/core/templates/admin_doc/template_tag_index.html:4 +msgid "Template tags" +msgstr "Šablonové tagy" + +#: engine/core/templates/admin_doc/template_tag_index.html:17 +msgid "Template tag documentation" +msgstr "Dokumentace šablonových značek" + +#: engine/core/templates/admin_doc/template_tag_index.html:26 +#: engine/core/templates/admin_doc/template_tag_index.html:52 +msgid "Built-in tags" +msgstr "Vestavěné tagy" + +#: engine/core/templates/admin_doc/template_tag_index.html:29 +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using the tag." +msgstr "" +"Chcete-li tyto tagy použít, vložte do šablony před použitím tagu %(code)s." + +#: engine/core/templates/admin_doc/view_detail.html:4 +#, python-format +msgid "View: %(name)s" +msgstr "Zobrazit: %(name)s" + +#: engine/core/templates/admin_doc/view_detail.html:28 +msgid "Context:" +msgstr "Kontext:" + +#: engine/core/templates/admin_doc/view_detail.html:33 +msgid "Templates:" +msgstr "Šablony:" + +#: engine/core/templates/admin_doc/view_detail.html:41 +msgid "Back to View documentation" +msgstr "Zpět na Zobrazit dokumentaci" + +#: engine/core/templates/admin_doc/view_index.html:17 +msgid "View documentation" +msgstr "Zobrazit dokumentaci" + +#: engine/core/templates/admin_doc/view_index.html:28 +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Zobrazení podle jmenného prostoru %(name)s" + +#: engine/core/templates/admin_doc/view_index.html:30 +msgid "Views by empty namespace" +msgstr "Zobrazení podle prázdného jmenného prostoru" + +#: engine/core/templates/admin_doc/view_index.html:40 +#, python-format +msgid "" +"View function: %(full_name)s. Name: %(url_name)s." +msgstr "" +"Funkce zobrazení: %(full_name)s. Název: " +"%(url_name)s." + +#: engine/core/templates/admin_doc/view_index.html:54 +msgid "Jump to namespace" +msgstr "Přejít na jmenný prostor" + +#: engine/core/templates/admin_doc/view_index.html:59 +msgid "Empty namespace" +msgstr "Prázdný jmenný prostor" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -3024,7 +3385,7 @@ msgstr "" " informace" #: engine/core/templates/digital_order_delivered_email.html:137 -#: engine/core/templates/json_table_widget.html:6 +#: engine/core/templates/json_table_widget.html:26 msgid "value" msgstr "Hodnota" @@ -3044,11 +3405,23 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "S pozdravem,
tým %(project_name)s" -#: engine/core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:7 +msgid "Key" +msgstr "Klíč" + +#: engine/core/templates/json_table_widget.html:8 +msgid "Value" +msgstr "Hodnota" + +#: engine/core/templates/json_table_widget.html:19 msgid "key" msgstr "Klíč" -#: engine/core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:32 +msgid "Delete row" +msgstr "Odstranit řádek" + +#: engine/core/templates/json_table_widget.html:44 msgid "Add Row" msgstr "Přidat řádek" @@ -3135,13 +3508,22 @@ msgstr "K provedení této akce nemáte oprávnění." msgid "NOMINATIM_URL must be configured." msgstr "Parametr NOMINATIM_URL musí být nakonfigurován!" -#: engine/core/validators.py:23 +#: engine/core/validators.py:18 +msgid "could not determine file type" +msgstr "Nelze určit typ souboru" + +#: engine/core/validators.py:24 +#, python-brace-format +msgid "unsupported video format. supported formats: {supported}" +msgstr "Nepodporovaný formát videa. Podporované formáty: {supported}" + +#: engine/core/validators.py:45 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "Rozměry obrázku by neměly přesáhnout w{max_width} x h{max_height} pixelů." -#: engine/core/views.py:104 +#: engine/core/views.py:108 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3149,7 +3531,7 @@ msgstr "" "Zpracuje požadavek na index mapy stránek a vrátí odpověď XML. Zajistí, aby " "odpověď obsahovala odpovídající hlavičku typu obsahu XML." -#: engine/core/views.py:119 +#: engine/core/views.py:123 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3159,16 +3541,16 @@ msgstr "" "požadavek, načte příslušnou podrobnou odpověď mapy stránek a nastaví " "hlavičku Content-Type pro XML." -#: engine/core/views.py:155 +#: engine/core/views.py:174 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "Vrátí seznam podporovaných jazyků a odpovídajících informací." -#: engine/core/views.py:182 +#: engine/core/views.py:201 msgid "Returns the parameters of the website as a JSON object." msgstr "Vrátí parametry webové stránky jako objekt JSON." -#: engine/core/views.py:198 +#: engine/core/views.py:217 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3176,11 +3558,11 @@ msgstr "" "Zpracovává operace mezipaměti, jako je čtení a nastavování dat mezipaměti se" " zadaným klíčem a časovým limitem." -#: engine/core/views.py:220 +#: engine/core/views.py:239 msgid "Handles `contact us` form submissions." msgstr "Zpracovává odeslání formuláře `contact us`." -#: engine/core/views.py:236 +#: engine/core/views.py:255 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3188,15 +3570,15 @@ msgstr "" "Zpracovává požadavky na zpracování a ověřování adres URL z příchozích " "požadavků POST." -#: engine/core/views.py:273 +#: engine/core/views.py:292 msgid "Handles global search queries." msgstr "Zpracovává globální vyhledávací dotazy." -#: engine/core/views.py:289 +#: engine/core/views.py:308 msgid "Handles the logic of buying as a business without registration." msgstr "Řeší logiku nákupu jako firmy bez registrace." -#: engine/core/views.py:337 +#: engine/core/views.py:356 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3204,31 +3586,31 @@ msgstr "" "Zpracovává stahování digitálního aktiva spojeného s objednávkou.\n" "Tato funkce se pokusí obsloužit soubor digitálního aktiva umístěný v adresáři úložiště projektu. Pokud soubor není nalezen, je vyvolána chyba HTTP 404, která označuje, že zdroj není k dispozici." -#: engine/core/views.py:348 +#: engine/core/views.py:367 msgid "order_product_uuid is required" msgstr "order_product_uuid je povinné" -#: engine/core/views.py:355 +#: engine/core/views.py:374 msgid "order product does not exist" msgstr "objednávka produktu neexistuje" -#: engine/core/views.py:358 +#: engine/core/views.py:377 msgid "you can only download the digital asset once" msgstr "Digitální aktivum můžete stáhnout pouze jednou" -#: engine/core/views.py:362 +#: engine/core/views.py:381 msgid "the order must be paid before downloading the digital asset" msgstr "objednávka musí být zaplacena před stažením digitálního aktiva." -#: engine/core/views.py:369 +#: engine/core/views.py:388 msgid "the order product does not have a product" msgstr "Objednaný produkt nemá produkt" -#: engine/core/views.py:412 +#: engine/core/views.py:431 msgid "favicon not found" msgstr "favicon nebyl nalezen" -#: engine/core/views.py:418 +#: engine/core/views.py:437 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3236,7 +3618,7 @@ msgstr "" "Zpracovává požadavky na favicon webové stránky.\n" "Tato funkce se pokusí obsloužit soubor favicon umístěný ve statickém adresáři projektu. Pokud soubor favicon není nalezen, je vyvolána chyba HTTP 404, která označuje, že zdroj není k dispozici." -#: engine/core/views.py:432 +#: engine/core/views.py:451 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3247,16 +3629,20 @@ msgstr "" "administrátorského rozhraní Django. Pro zpracování přesměrování HTTP používá" " funkci `redirect` Djanga." -#: engine/core/views.py:445 +#: engine/core/views.py:464 msgid "Returns current version of the Schon. " msgstr "Vrací aktuální verzi systému Schon." -#: engine/core/views.py:674 engine/core/views.py:689 +#: engine/core/views.py:475 +msgid "no image file provided" +msgstr "Není k dispozici žádný obrazový soubor." + +#: engine/core/views.py:710 engine/core/views.py:725 #, python-format msgid "Revenue & Orders (last %(days)d)" msgstr "Příjmy a objednávky (poslední %(days)d)" -#: engine/core/views.py:870 +#: engine/core/views.py:911 msgid "Returns custom variables for Dashboard. " msgstr "Vrací vlastní proměnné pro Dashboard." @@ -3343,7 +3729,7 @@ msgstr "" "rámec ViewSet Djanga pro zjednodušení implementace koncových bodů API pro " "objekty Brand." -#: engine/core/viewsets.py:458 +#: engine/core/viewsets.py:460 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3361,7 +3747,15 @@ msgstr "" "podrobností o produktu, uplatňování oprávnění a přístup k související zpětné" " vazbě produktu." -#: engine/core/viewsets.py:605 +#: engine/core/viewsets.py:541 +msgid "identificator_type and identificators are required" +msgstr "identificator_type a identificators jsou povinné" + +#: engine/core/viewsets.py:554 +msgid "identificator_type must be one of: uuid, slug, sku" +msgstr "identificator_type musí být jedním z následujících: uuid, slug, sku" + +#: engine/core/viewsets.py:635 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3375,7 +3769,7 @@ msgstr "" "různých akcí. Účelem této třídy je poskytnout zjednodušený přístup ke " "zdrojům souvisejícím s Vendorem prostřednictvím rámce Django REST." -#: engine/core/viewsets.py:625 +#: engine/core/viewsets.py:655 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3391,7 +3785,7 @@ msgstr "" "objekty Zpětné vazby na základě oprávnění. Rozšiřuje základní třídu " "`SchonViewSet` a využívá systém filtrování Djanga pro dotazování na data." -#: engine/core/viewsets.py:652 +#: engine/core/viewsets.py:682 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3409,7 +3803,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." -#: engine/core/viewsets.py:914 +#: engine/core/viewsets.py:944 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3423,11 +3817,11 @@ msgstr "" " požadované akce. Kromě toho poskytuje podrobnou akci pro zpracování zpětné " "vazby na instance OrderProduct" -#: engine/core/viewsets.py:974 +#: engine/core/viewsets.py:1004 msgid "Manages operations related to Product images in the application. " msgstr "Spravuje operace související s obrázky produktů v aplikaci." -#: engine/core/viewsets.py:988 +#: engine/core/viewsets.py:1018 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3435,15 +3829,15 @@ msgstr "" "Spravuje načítání a zpracování instancí PromoCode prostřednictvím různých " "akcí API." -#: engine/core/viewsets.py:1019 +#: engine/core/viewsets.py:1049 msgid "Represents a view set for managing promotions. " msgstr "Představuje sadu zobrazení pro správu povýšení." -#: engine/core/viewsets.py:1032 +#: engine/core/viewsets.py:1062 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." -#: engine/core/viewsets.py:1046 +#: engine/core/viewsets.py:1076 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3461,7 +3855,7 @@ msgstr "" "uživatelé mohou spravovat pouze své vlastní seznamy přání, pokud jim nejsou " "udělena výslovná oprávnění." -#: engine/core/viewsets.py:1183 +#: engine/core/viewsets.py:1213 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3475,12 +3869,12 @@ msgstr "" "přepisování serializátoru a zpracování oprávnění na základě kontextu " "požadavku." -#: engine/core/viewsets.py:1254 +#: engine/core/viewsets.py:1275 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Chyba v zeměpisném kódování: {e}" -#: engine/core/viewsets.py:1262 +#: engine/core/viewsets.py:1283 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/da_DK/LC_MESSAGES/django.mo b/engine/core/locale/da_DK/LC_MESSAGES/django.mo index 68b1d296..eb7478f2 100644 Binary files a/engine/core/locale/da_DK/LC_MESSAGES/django.mo and b/engine/core/locale/da_DK/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/da_DK/LC_MESSAGES/django.po b/engine/core/locale/da_DK/LC_MESSAGES/django.po index 6b094333..16e868cd 100644 --- a/engine/core/locale/da_DK/LC_MESSAGES/django.po +++ b/engine/core/locale/da_DK/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -49,113 +49,133 @@ msgstr "Modificeret" msgid "when the object was last modified" msgstr "Hvornår objektet sidst blev redigeret" -#: engine/core/admin.py:94 +#: engine/core/admin.py:98 msgid "translations" msgstr "Oversættelser" -#: engine/core/admin.py:102 +#: engine/core/admin.py:106 msgid "general" msgstr "Generelt" -#: engine/core/admin.py:106 +#: engine/core/admin.py:110 msgid "relations" msgstr "Relationer" -#: engine/core/admin.py:111 +#: engine/core/admin.py:115 msgid "additional info" msgstr "Yderligere info" -#: engine/core/admin.py:133 +#: engine/core/admin.py:137 msgid "metadata" msgstr "Metadata" -#: engine/core/admin.py:141 +#: engine/core/admin.py:145 msgid "timestamps" msgstr "Tidsstempler" -#: engine/core/admin.py:158 +#: engine/core/admin.py:162 #, python-format msgid "Activate selected %(verbose_name_plural)s" msgstr "Aktiver valgt %(verbose_name_plural)s" -#: engine/core/admin.py:166 +#: engine/core/admin.py:170 msgid "selected items have been activated." msgstr "Udvalgte varer er blevet aktiveret!" -#: engine/core/admin.py:174 +#: engine/core/admin.py:178 #, python-format msgid "Deactivate selected %(verbose_name_plural)s" msgstr "Deaktiver valgt %(verbose_name_plural)s" -#: engine/core/admin.py:184 +#: engine/core/admin.py:188 msgid "selected items have been deactivated." msgstr "Udvalgte varer er blevet deaktiveret!" -#: engine/core/admin.py:196 engine/core/graphene/object_types.py:653 -#: engine/core/graphene/object_types.py:660 engine/core/models.py:832 -#: engine/core/models.py:840 +#: engine/core/admin.py:200 engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:673 engine/core/models.py:918 +#: engine/core/models.py:928 msgid "attribute value" msgstr "Attributværdi" -#: engine/core/admin.py:197 engine/core/graphene/object_types.py:77 -#: engine/core/models.py:841 +#: engine/core/admin.py:201 engine/core/graphene/object_types.py:81 +#: engine/core/models.py:929 msgid "attribute values" msgstr "Attributværdier" -#: engine/core/admin.py:208 +#: engine/core/admin.py:212 engine/core/models.py:2232 msgid "image" msgstr "Billede" -#: engine/core/admin.py:209 engine/core/graphene/object_types.py:530 +#: engine/core/admin.py:213 engine/core/graphene/object_types.py:535 msgid "images" msgstr "Billeder" -#: engine/core/admin.py:220 engine/core/models.py:576 +#: engine/core/admin.py:224 engine/core/models.py:635 msgid "stock" msgstr "Lager" -#: engine/core/admin.py:221 engine/core/graphene/object_types.py:713 +#: engine/core/admin.py:225 engine/core/graphene/object_types.py:735 msgid "stocks" msgstr "Aktier" -#: engine/core/admin.py:232 engine/core/models.py:1938 +#: engine/core/admin.py:236 engine/core/models.py:2046 msgid "order product" msgstr "Bestil produkt" -#: engine/core/admin.py:233 engine/core/graphene/object_types.py:441 -#: engine/core/models.py:1939 +#: engine/core/admin.py:237 engine/core/graphene/object_types.py:446 +#: engine/core/models.py:2047 msgid "order products" msgstr "Bestil produkter" -#: engine/core/admin.py:251 engine/core/admin.py:252 +#: engine/core/admin.py:255 engine/core/admin.py:256 msgid "children" msgstr "Børn" -#: engine/core/admin.py:528 +#: engine/core/admin.py:545 +msgid "video preview" +msgstr "Video-forhåndsvisning" + +#: engine/core/admin.py:551 msgid "has images" msgstr "Har billeder" -#: engine/core/admin.py:531 +#: engine/core/admin.py:554 #, python-format msgid "Export selected %(verbose_name_plural)s to marketplaces' feeds" msgstr "Eksporter valgt %(verbose_name_plural)s til markedspladsers feeds" -#: engine/core/admin.py:542 +#: engine/core/admin.py:565 #, python-format msgid "selected %(verbose_name_plural)s have been marked for export." msgstr "De valgte %(verbose_name_plural)s er markeret til eksport." -#: engine/core/admin.py:553 +#: engine/core/admin.py:576 #, python-format msgid "Ban selected %(verbose_name_plural)s from marketplaces' feeds" msgstr "Udeluk %(verbose_name_plural)s fra markedspladsernes feeds" -#: engine/core/admin.py:564 +#: engine/core/admin.py:587 #, python-format msgid "selected %(verbose_name_plural)s have been banned from export." msgstr "Udvalgte %(verbose_name_plural)s er blevet forbudt at eksportere." -#: engine/core/admin.py:1116 +#: engine/core/admin.py:1030 +msgid "Preview" +msgstr "Forhåndsvisning" + +#: engine/core/admin.py:1031 +msgid "Metadata" +msgstr "Metadata" + +#: engine/core/admin.py:1034 +msgid "preview" +msgstr "Forhåndsvisning" + +#: engine/core/admin.py:1043 +msgid "image preview" +msgstr "Billedforhåndsvisning" + +#: engine/core/admin.py:1166 msgid "Config" msgstr "Konfig" @@ -221,7 +241,7 @@ msgstr "" "OpenApi3-skema for denne API. Format kan vælges via indholdsforhandling. " "Sprog kan vælges med både Accept-Language og query parameter." -#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:36 +#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "Cache-I/O" @@ -245,7 +265,7 @@ msgstr "Hent applikationens eksponerbare parametre" msgid "send a message to the support team" msgstr "Send en besked til supportteamet" -#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:59 msgid "request a CORSed URL" msgstr "Anmod om en CORSed URL. Kun https er tilladt." @@ -386,11 +406,11 @@ msgstr "" "Omskriv nogle felter i en eksisterende kategori og gem ikke-redigerbare " "felter" -#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757 -#: engine/core/docs/drf/viewsets.py:1046 -#: engine/core/graphene/object_types.py:119 -#: engine/core/graphene/object_types.py:239 -#: engine/core/graphene/object_types.py:540 +#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:781 +#: engine/core/docs/drf/viewsets.py:1070 +#: engine/core/graphene/object_types.py:123 +#: engine/core/graphene/object_types.py:247 +#: engine/core/graphene/object_types.py:546 msgid "SEO Meta snapshot" msgstr "SEO-meta-snapshot" @@ -688,7 +708,7 @@ msgstr "Hent et enkelt produkt (detaljeret visning)" #: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683 #: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725 -#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763 +#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:787 msgid "Product UUID or slug" msgstr "Produkt UUID eller Slug" @@ -715,282 +735,296 @@ msgstr "Slet et produkt" msgid "lists all permitted feedbacks for a product" msgstr "viser alle tilladte tilbagemeldinger for et produkt" -#: engine/core/docs/drf/viewsets.py:758 +#: engine/core/docs/drf/viewsets.py:757 +msgid "retrieve exact products by identifier" +msgstr "Find nøjagtige produkter ved hjælp af identifikator" + +#: engine/core/docs/drf/viewsets.py:759 +msgid "" +"retrieve a list of products by identifier type (uuid, slug, or sku). Send a " +"POST request with `identificator_type` and `identificators` (list of " +"values)." +msgstr "" +"Hent en liste over produkter efter identifikator-type (uuid, slug eller " +"sku). Send en POST-anmodning med `identificator_type` og `identificators` " +"(liste over værdier)." + +#: engine/core/docs/drf/viewsets.py:782 msgid "returns a snapshot of the product's SEO meta data" msgstr "Returnerer et øjebliksbillede af produktets SEO-metadata" -#: engine/core/docs/drf/viewsets.py:779 +#: engine/core/docs/drf/viewsets.py:803 msgid "list all addresses" msgstr "Angiv alle adresser" -#: engine/core/docs/drf/viewsets.py:789 +#: engine/core/docs/drf/viewsets.py:813 msgid "retrieve a single address" msgstr "Hent en enkelt adresse" -#: engine/core/docs/drf/viewsets.py:799 +#: engine/core/docs/drf/viewsets.py:823 msgid "create a new address" msgstr "Opret en ny adresse" -#: engine/core/docs/drf/viewsets.py:810 +#: engine/core/docs/drf/viewsets.py:834 msgid "delete an address" msgstr "Slet en adresse" -#: engine/core/docs/drf/viewsets.py:820 +#: engine/core/docs/drf/viewsets.py:844 msgid "update an entire address" msgstr "Opdater en hel adresse" -#: engine/core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:855 msgid "partially update an address" msgstr "Delvis opdatering af en adresse" -#: engine/core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:866 msgid "autocomplete address suggestions" msgstr "Automatisk udfyldning af adresseinput" -#: engine/core/docs/drf/viewsets.py:848 +#: engine/core/docs/drf/viewsets.py:872 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "Rå dataforespørgselsstreng, tilføj venligst data fra geo-IP-slutpunkt" -#: engine/core/docs/drf/viewsets.py:855 +#: engine/core/docs/drf/viewsets.py:879 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "begrænser mængden af resultater, 1 < grænse < 10, standard: 5" -#: engine/core/docs/drf/viewsets.py:871 +#: engine/core/docs/drf/viewsets.py:895 msgid "list all feedbacks (simple view)" msgstr "Vis alle tilbagemeldinger (enkel visning)" -#: engine/core/docs/drf/viewsets.py:881 +#: engine/core/docs/drf/viewsets.py:905 msgid "retrieve a single feedback (detailed view)" msgstr "Hent en enkelt feedback (detaljeret visning)" -#: engine/core/docs/drf/viewsets.py:888 +#: engine/core/docs/drf/viewsets.py:912 msgid "create a feedback" msgstr "skab en feedback" -#: engine/core/docs/drf/viewsets.py:895 +#: engine/core/docs/drf/viewsets.py:919 msgid "delete a feedback" msgstr "Slet en tilbagemelding" -#: engine/core/docs/drf/viewsets.py:902 +#: engine/core/docs/drf/viewsets.py:926 msgid "rewrite an existing feedback saving non-editables" msgstr "omskriv en eksisterende feedback, der gemmer ikke-redigerbare filer" -#: engine/core/docs/drf/viewsets.py:909 +#: engine/core/docs/drf/viewsets.py:933 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" "Omskriv nogle felter i en eksisterende kategori og gem ikke-redigerbare " "felter" -#: engine/core/docs/drf/viewsets.py:919 +#: engine/core/docs/drf/viewsets.py:943 msgid "list all order–product relations (simple view)" msgstr "liste alle ordre-produkt-relationer (simpel visning)" -#: engine/core/docs/drf/viewsets.py:929 +#: engine/core/docs/drf/viewsets.py:953 msgid "retrieve a single order–product relation (detailed view)" msgstr "Hent en enkelt ordre-produkt-relation (detaljeret visning)" -#: engine/core/docs/drf/viewsets.py:939 +#: engine/core/docs/drf/viewsets.py:963 msgid "create a new order–product relation" msgstr "Opret en ny ordre-produkt-relation" -#: engine/core/docs/drf/viewsets.py:949 +#: engine/core/docs/drf/viewsets.py:973 msgid "replace an existing order–product relation" msgstr "erstatte en eksisterende ordre-produkt-relation" -#: engine/core/docs/drf/viewsets.py:959 +#: engine/core/docs/drf/viewsets.py:983 msgid "partially update an existing order–product relation" msgstr "delvist opdatere en eksisterende ordre-produkt-relation" -#: engine/core/docs/drf/viewsets.py:969 +#: engine/core/docs/drf/viewsets.py:993 msgid "delete an order–product relation" msgstr "slette en ordre-produkt-relation" -#: engine/core/docs/drf/viewsets.py:979 +#: engine/core/docs/drf/viewsets.py:1003 msgid "add or remove feedback on an order–product relation" msgstr "tilføje eller fjerne feedback på en ordre-produkt-relation" -#: engine/core/docs/drf/viewsets.py:996 +#: engine/core/docs/drf/viewsets.py:1020 msgid "list all brands (simple view)" msgstr "Liste over alle mærker (enkel visning)" -#: engine/core/docs/drf/viewsets.py:1003 +#: engine/core/docs/drf/viewsets.py:1027 msgid "retrieve a single brand (detailed view)" msgstr "Hent et enkelt mærke (detaljeret visning)" -#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051 +#: engine/core/docs/drf/viewsets.py:1032 engine/core/docs/drf/viewsets.py:1075 msgid "Brand UUID or slug" msgstr "Brand UUID eller slug" -#: engine/core/docs/drf/viewsets.py:1018 +#: engine/core/docs/drf/viewsets.py:1042 msgid "create a brand" msgstr "Skab et brand" -#: engine/core/docs/drf/viewsets.py:1025 +#: engine/core/docs/drf/viewsets.py:1049 msgid "delete a brand" msgstr "Slet et brand" -#: engine/core/docs/drf/viewsets.py:1032 +#: engine/core/docs/drf/viewsets.py:1056 msgid "rewrite an existing brand saving non-editables" msgstr "Omskrivning af et eksisterende brand, der gemmer non-editables" -#: engine/core/docs/drf/viewsets.py:1039 +#: engine/core/docs/drf/viewsets.py:1063 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "" "Omskriv nogle felter i en eksisterende kategori og gem ikke-redigerbare " "felter" -#: engine/core/docs/drf/viewsets.py:1064 +#: engine/core/docs/drf/viewsets.py:1088 msgid "list all vendors (simple view)" msgstr "Liste over alle leverandører (enkel visning)" -#: engine/core/docs/drf/viewsets.py:1074 +#: engine/core/docs/drf/viewsets.py:1098 msgid "retrieve a single vendor (detailed view)" msgstr "Hent en enkelt leverandør (detaljeret visning)" -#: engine/core/docs/drf/viewsets.py:1081 +#: engine/core/docs/drf/viewsets.py:1105 msgid "create a vendor" msgstr "Opret en leverandør" -#: engine/core/docs/drf/viewsets.py:1088 +#: engine/core/docs/drf/viewsets.py:1112 msgid "delete a vendor" msgstr "Slet en leverandør" -#: engine/core/docs/drf/viewsets.py:1095 +#: engine/core/docs/drf/viewsets.py:1119 msgid "rewrite an existing vendor saving non-editables" msgstr "Omskriv en eksisterende leverandør, der gemmer ikke-redigerbare filer" -#: engine/core/docs/drf/viewsets.py:1102 +#: engine/core/docs/drf/viewsets.py:1126 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "" "Omskriv nogle felter i en eksisterende kategori og gem ikke-redigerbare " "felter" -#: engine/core/docs/drf/viewsets.py:1112 +#: engine/core/docs/drf/viewsets.py:1136 msgid "list all product images (simple view)" msgstr "Vis alle produktbilleder (enkel visning)" -#: engine/core/docs/drf/viewsets.py:1122 +#: engine/core/docs/drf/viewsets.py:1146 msgid "retrieve a single product image (detailed view)" msgstr "Hent et enkelt produktbillede (detaljeret visning)" -#: engine/core/docs/drf/viewsets.py:1129 +#: engine/core/docs/drf/viewsets.py:1153 msgid "create a product image" msgstr "Skab et produktbillede" -#: engine/core/docs/drf/viewsets.py:1139 +#: engine/core/docs/drf/viewsets.py:1163 msgid "delete a product image" msgstr "Slet et produktbillede" -#: engine/core/docs/drf/viewsets.py:1146 +#: engine/core/docs/drf/viewsets.py:1170 msgid "rewrite an existing product image saving non-editables" msgstr "" "Omskriv et eksisterende produktbillede og gem ikke-redigerbare elementer" -#: engine/core/docs/drf/viewsets.py:1154 +#: engine/core/docs/drf/viewsets.py:1178 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "" "Omskriv nogle felter i en eksisterende kategori og gem ikke-redigerbare " "felter" -#: engine/core/docs/drf/viewsets.py:1165 +#: engine/core/docs/drf/viewsets.py:1189 msgid "list all promo codes (simple view)" msgstr "Liste over alle kampagnekoder (enkel visning)" -#: engine/core/docs/drf/viewsets.py:1175 +#: engine/core/docs/drf/viewsets.py:1199 msgid "retrieve a single promo code (detailed view)" msgstr "Hent en enkelt kampagnekode (detaljeret visning)" -#: engine/core/docs/drf/viewsets.py:1182 +#: engine/core/docs/drf/viewsets.py:1206 msgid "create a promo code" msgstr "Opret en kampagnekode" -#: engine/core/docs/drf/viewsets.py:1189 +#: engine/core/docs/drf/viewsets.py:1213 msgid "delete a promo code" msgstr "Slet en kampagnekode" -#: engine/core/docs/drf/viewsets.py:1196 +#: engine/core/docs/drf/viewsets.py:1220 msgid "rewrite an existing promo code saving non-editables" msgstr "Omskriv en eksisterende kampagnekode og gem ikke-redigerbare koder" -#: engine/core/docs/drf/viewsets.py:1203 +#: engine/core/docs/drf/viewsets.py:1227 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "" "Omskriv nogle felter i en eksisterende kategori og gem ikke-redigerbare " "felter" -#: engine/core/docs/drf/viewsets.py:1213 +#: engine/core/docs/drf/viewsets.py:1237 msgid "list all promotions (simple view)" msgstr "Liste over alle kampagner (enkel visning)" -#: engine/core/docs/drf/viewsets.py:1223 +#: engine/core/docs/drf/viewsets.py:1247 msgid "retrieve a single promotion (detailed view)" msgstr "Hent en enkelt forfremmelse (detaljeret visning)" -#: engine/core/docs/drf/viewsets.py:1230 +#: engine/core/docs/drf/viewsets.py:1254 msgid "create a promotion" msgstr "Opret en kampagne" -#: engine/core/docs/drf/viewsets.py:1237 +#: engine/core/docs/drf/viewsets.py:1261 msgid "delete a promotion" msgstr "Slet en forfremmelse" -#: engine/core/docs/drf/viewsets.py:1244 +#: engine/core/docs/drf/viewsets.py:1268 msgid "rewrite an existing promotion saving non-editables" msgstr "Omskriv en eksisterende kampagne og gem ikke-redigerbare elementer" -#: engine/core/docs/drf/viewsets.py:1251 +#: engine/core/docs/drf/viewsets.py:1275 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "" "Omskriv nogle felter i en eksisterende kategori og gem ikke-redigerbare " "felter" -#: engine/core/docs/drf/viewsets.py:1261 +#: engine/core/docs/drf/viewsets.py:1285 msgid "list all stocks (simple view)" msgstr "Liste over alle aktier (enkel visning)" -#: engine/core/docs/drf/viewsets.py:1268 +#: engine/core/docs/drf/viewsets.py:1292 msgid "retrieve a single stock (detailed view)" msgstr "Hent et enkelt lager (detaljeret visning)" -#: engine/core/docs/drf/viewsets.py:1275 +#: engine/core/docs/drf/viewsets.py:1299 msgid "create a stock record" msgstr "Opret en lagerpost" -#: engine/core/docs/drf/viewsets.py:1282 +#: engine/core/docs/drf/viewsets.py:1306 msgid "delete a stock record" msgstr "Slet en lagerpost" -#: engine/core/docs/drf/viewsets.py:1289 +#: engine/core/docs/drf/viewsets.py:1313 msgid "rewrite an existing stock record saving non-editables" msgstr "Omskriv en eksisterende lagerpost og gem ikke-redigerbare varer" -#: engine/core/docs/drf/viewsets.py:1297 +#: engine/core/docs/drf/viewsets.py:1321 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "" "Omskriv nogle felter i en eksisterende kategori og gem ikke-redigerbare " "felter" -#: engine/core/docs/drf/viewsets.py:1308 +#: engine/core/docs/drf/viewsets.py:1332 msgid "list all product tags (simple view)" msgstr "Liste over alle produkttags (enkel visning)" -#: engine/core/docs/drf/viewsets.py:1318 +#: engine/core/docs/drf/viewsets.py:1342 msgid "retrieve a single product tag (detailed view)" msgstr "Hent et enkelt produkttag (detaljeret visning)" -#: engine/core/docs/drf/viewsets.py:1325 +#: engine/core/docs/drf/viewsets.py:1349 msgid "create a product tag" msgstr "Opret et produkttag" -#: engine/core/docs/drf/viewsets.py:1335 +#: engine/core/docs/drf/viewsets.py:1359 msgid "delete a product tag" msgstr "Slet et produkttag" -#: engine/core/docs/drf/viewsets.py:1342 +#: engine/core/docs/drf/viewsets.py:1366 msgid "rewrite an existing product tag saving non-editables" msgstr "Omskriv et eksisterende produkttag og gem ikke-redigerbare ting" -#: engine/core/docs/drf/viewsets.py:1350 +#: engine/core/docs/drf/viewsets.py:1374 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "" "Omskriv nogle felter i en eksisterende kategori og gem ikke-redigerbare " @@ -1001,233 +1035,231 @@ msgstr "" msgid "no search term provided." msgstr "Der er ikke angivet noget søgeord." -#: engine/core/filters.py:78 engine/core/filters.py:484 -#: engine/core/filters.py:625 +#: engine/core/filters.py:79 engine/core/filters.py:485 +#: engine/core/filters.py:626 msgid "Search" msgstr "Søg efter" -#: engine/core/filters.py:79 engine/core/filters.py:663 -#: engine/core/filters.py:692 +#: engine/core/filters.py:80 engine/core/filters.py:664 +#: engine/core/filters.py:693 msgid "UUID" msgstr "UUID" -#: engine/core/filters.py:80 engine/core/filters.py:487 -#: engine/core/filters.py:627 +#: engine/core/filters.py:81 engine/core/filters.py:488 +#: engine/core/filters.py:628 msgid "Name" msgstr "Navn" -#: engine/core/filters.py:82 engine/core/filters.py:630 +#: engine/core/filters.py:83 engine/core/filters.py:631 msgid "Categories" msgstr "Kategorier" -#: engine/core/filters.py:86 +#: engine/core/filters.py:87 msgid "Categories Slugs" msgstr "Kategorier Snegle" -#: engine/core/filters.py:88 engine/core/filters.py:495 +#: engine/core/filters.py:89 engine/core/filters.py:496 +#: engine/core/templates/admin_doc/index.html:37 +#: engine/core/templates/admin_doc/template_tag_index.html:12 msgid "Tags" msgstr "Tags" -#: engine/core/filters.py:90 +#: engine/core/filters.py:91 msgid "Min Price" msgstr "Min. pris" -#: engine/core/filters.py:93 +#: engine/core/filters.py:94 msgid "Max Price" msgstr "Maks. pris" -#: engine/core/filters.py:95 +#: engine/core/filters.py:96 msgid "Is Active" msgstr "Er aktiv" -#: engine/core/filters.py:96 +#: engine/core/filters.py:97 msgid "Brand" msgstr "Brand" -#: engine/core/filters.py:97 +#: engine/core/filters.py:98 msgid "Attributes" msgstr "Egenskaber" -#: engine/core/filters.py:99 +#: engine/core/filters.py:100 msgid "Quantity" msgstr "Mængde" -#: engine/core/filters.py:101 engine/core/filters.py:489 -#: engine/core/filters.py:628 engine/core/models.py:316 -#: engine/core/models.py:497 engine/core/models.py:663 +#: engine/core/filters.py:102 engine/core/filters.py:490 +#: engine/core/filters.py:629 engine/core/models.py:339 +#: engine/core/models.py:546 engine/core/models.py:736 msgid "Slug" msgstr "Snegl" -#: engine/core/filters.py:102 +#: engine/core/filters.py:103 msgid "Is Digital" msgstr "Er digital" -#: engine/core/filters.py:104 +#: engine/core/filters.py:105 msgid "Include sub-categories" msgstr "Inkluder underkategorier" -#: engine/core/filters.py:108 +#: engine/core/filters.py:109 msgid "Include personal ordered" msgstr "Inkluder personligt bestilte produkter" -#: engine/core/filters.py:110 engine/core/models.py:667 +#: engine/core/filters.py:111 engine/core/models.py:740 msgid "SKU" msgstr "VARENUMMER" -#: engine/core/filters.py:212 +#: engine/core/filters.py:213 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" -#: engine/core/filters.py:398 +#: engine/core/filters.py:399 msgid "Search (ID, product name or part number)" msgstr "Søg (ID, produktnavn eller reservedelsnummer)" -#: engine/core/filters.py:402 +#: engine/core/filters.py:403 msgid "Bought after (inclusive)" msgstr "Købt efter (inklusive)" -#: engine/core/filters.py:405 +#: engine/core/filters.py:406 msgid "Bought before (inclusive)" msgstr "Købt før (inklusive)" -#: engine/core/filters.py:410 engine/core/filters.py:461 -#: engine/core/filters.py:697 +#: engine/core/filters.py:411 engine/core/filters.py:462 +#: engine/core/filters.py:698 msgid "User email" msgstr "Brugerens e-mail" -#: engine/core/filters.py:413 engine/core/filters.py:464 -#: engine/core/filters.py:672 engine/core/filters.py:694 +#: engine/core/filters.py:414 engine/core/filters.py:465 +#: engine/core/filters.py:673 engine/core/filters.py:695 msgid "User UUID" msgstr "Bruger UUID" -#: engine/core/filters.py:415 +#: engine/core/filters.py:416 msgid "Status" msgstr "Status" -#: engine/core/filters.py:419 +#: engine/core/filters.py:420 msgid "Human Readable ID" msgstr "Menneskeligt læsbart ID" -#: engine/core/filters.py:488 +#: engine/core/filters.py:489 msgid "Parent" msgstr "Forælder" -#: engine/core/filters.py:492 +#: engine/core/filters.py:493 msgid "Whole category(has at least 1 product or not)" msgstr "Hele kategorien (har mindst 1 produkt eller ej)" -#: engine/core/filters.py:496 +#: engine/core/filters.py:497 msgid "Level" msgstr "Niveau" -#: engine/core/filters.py:667 +#: engine/core/filters.py:668 msgid "Product UUID" msgstr "Produkt UUID" -#: engine/core/graphene/mutations.py:40 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Nøgle til at lede efter i eller lægge i cachen" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:43 msgid "data to store in cache" msgstr "Data, der skal gemmes i cachen" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:46 msgid "timeout in seconds to set the data for into the cache" msgstr "Timeout i sekunder for at lægge data i cachen" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:49 msgid "cached data" msgstr "Cachelagrede data" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:64 msgid "camelized JSON data from the requested URL" msgstr "Cameliserede JSON-data fra den ønskede URL" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:248 +#: engine/core/graphene/mutations.py:69 engine/core/views.py:267 msgid "only URLs starting with http(s):// are allowed" msgstr "Kun URL'er, der starter med http(s)://, er tilladt." -#: engine/core/graphene/mutations.py:86 +#: engine/core/graphene/mutations.py:87 msgid "add a product to the order" msgstr "Tilføj et produkt til ordren" -#: engine/core/graphene/mutations.py:109 engine/core/graphene/mutations.py:138 -#: engine/core/graphene/mutations.py:254 engine/core/graphene/mutations.py:306 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139 +#: engine/core/graphene/mutations.py:256 engine/core/graphene/mutations.py:308 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Ordre {order_uuid} ikke fundet!" -#: engine/core/graphene/mutations.py:115 engine/core/graphene/mutations.py:166 +#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167 msgid "remove a product from the order" msgstr "Fjern et produkt fra ordren" -#: engine/core/graphene/mutations.py:144 +#: engine/core/graphene/mutations.py:145 msgid "remove all products from the order" msgstr "Fjern alle produkter fra ordren" -#: engine/core/graphene/mutations.py:189 +#: engine/core/graphene/mutations.py:190 msgid "buy an order" msgstr "Køb en ordre" -#: engine/core/graphene/mutations.py:220 engine/core/graphene/mutations.py:282 +#: engine/core/graphene/mutations.py:222 engine/core/graphene/mutations.py:284 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "Angiv enten order_uuid eller order_hr_id - det udelukker hinanden!" -#: engine/core/graphene/mutations.py:249 engine/core/graphene/mutations.py:524 -#: engine/core/graphene/mutations.py:573 engine/core/viewsets.py:753 +#: engine/core/graphene/mutations.py:251 engine/core/graphene/mutations.py:526 +#: engine/core/graphene/mutations.py:576 engine/core/viewsets.py:783 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Forkert type kom fra metoden order.buy(): {type(instance)!s}" -#: engine/core/graphene/mutations.py:260 +#: engine/core/graphene/mutations.py:262 msgid "perform an action on a list of products in the order" msgstr "Udfør en handling på en liste af produkter i ordren" -#: engine/core/graphene/mutations.py:265 +#: engine/core/graphene/mutations.py:267 msgid "remove/add" msgstr "Fjern/tilføj" -#: engine/core/graphene/mutations.py:301 engine/core/graphene/mutations.py:342 +#: engine/core/graphene/mutations.py:303 engine/core/graphene/mutations.py:342 msgid "action must be either add or remove" msgstr "Handlingen skal være enten \"tilføj\" eller \"fjern\"!" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:314 msgid "perform an action on a list of products in the wishlist" msgstr "Udfør en handling på en liste af produkter i ønskelisten" -#: engine/core/graphene/mutations.py:330 -msgid "please provide wishlist_uuid value" -msgstr "Angiv venligst værdien `wishlist_uuid`." - -#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:423 -#: engine/core/graphene/mutations.py:451 engine/core/graphene/mutations.py:479 -#: engine/core/graphene/mutations.py:529 +#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:424 +#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480 +#: engine/core/graphene/mutations.py:531 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Ønskeliste {wishlist_uuid} ikke fundet!" -#: engine/core/graphene/mutations.py:401 +#: engine/core/graphene/mutations.py:402 msgid "add a product to the wishlist" msgstr "Tilføj et produkt til ordren" -#: engine/core/graphene/mutations.py:429 +#: engine/core/graphene/mutations.py:430 msgid "remove a product from the wishlist" msgstr "Fjern et produkt fra ordren" -#: engine/core/graphene/mutations.py:457 +#: engine/core/graphene/mutations.py:458 msgid "remove all products from the wishlist" msgstr "Fjern et produkt fra ordren" -#: engine/core/graphene/mutations.py:485 +#: engine/core/graphene/mutations.py:486 msgid "buy all products from the wishlist" msgstr "Fjern et produkt fra ordren" -#: engine/core/graphene/mutations.py:535 +#: engine/core/graphene/mutations.py:537 msgid "buy a product" msgstr "Køb en ordre" -#: engine/core/graphene/mutations.py:542 +#: engine/core/graphene/mutations.py:544 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" @@ -1235,143 +1267,147 @@ msgstr "" "Send venligst attributterne som en streng formateret som " "attr1=værdi1,attr2=værdi2" -#: engine/core/graphene/mutations.py:580 +#: engine/core/graphene/mutations.py:583 msgid "add or delete a feedback for orderproduct" msgstr "Tilføj eller slet en feedback til ordreproduktet" -#: engine/core/graphene/mutations.py:606 +#: engine/core/graphene/mutations.py:610 msgid "action must be either `add` or `remove`" msgstr "Handlingen skal være enten `add` eller `remove`!" -#: engine/core/graphene/mutations.py:609 +#: engine/core/graphene/mutations.py:613 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Ordreprodukt {order_product_uuid} ikke fundet!" -#: engine/core/graphene/mutations.py:616 +#: engine/core/graphene/mutations.py:620 msgid "original address string provided by the user" msgstr "Original adressestreng leveret af brugeren" -#: engine/core/graphene/mutations.py:653 engine/core/models.py:986 -#: engine/core/models.py:999 engine/core/models.py:1443 -#: engine/core/models.py:1474 engine/core/models.py:1505 -#: engine/core/viewsets.py:760 +#: engine/core/graphene/mutations.py:662 engine/core/models.py:1079 +#: engine/core/models.py:1092 engine/core/models.py:1544 +#: engine/core/models.py:1575 engine/core/models.py:1606 +#: engine/core/viewsets.py:790 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} findes ikke: {uuid}!" -#: engine/core/graphene/mutations.py:667 +#: engine/core/graphene/mutations.py:676 msgid "limit must be between 1 and 10" msgstr "Grænsen skal være mellem 1 og 10" -#: engine/core/graphene/mutations.py:716 +#: engine/core/graphene/mutations.py:726 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - fungerer som en charme" -#: engine/core/graphene/object_types.py:84 -#: engine/core/graphene/object_types.py:420 -#: engine/core/graphene/object_types.py:471 engine/core/models.py:803 -#: engine/core/models.py:1297 engine/core/models.py:2033 +#: engine/core/graphene/object_types.py:88 +#: engine/core/graphene/object_types.py:425 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:889 +#: engine/core/models.py:1394 engine/core/models.py:2139 msgid "attributes" msgstr "Egenskaber" -#: engine/core/graphene/object_types.py:97 +#: engine/core/graphene/object_types.py:101 msgid "grouped attributes" msgstr "Grupperede attributter" -#: engine/core/graphene/object_types.py:104 +#: engine/core/graphene/object_types.py:108 msgid "groups of attributes" msgstr "Grupper af attributter" -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:217 -#: engine/core/graphene/object_types.py:255 engine/core/models.py:440 +#: engine/core/graphene/object_types.py:122 +#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:264 engine/core/models.py:489 msgid "categories" msgstr "Kategorier" -#: engine/core/graphene/object_types.py:134 engine/core/models.py:511 +#: engine/core/graphene/object_types.py:138 engine/core/models.py:564 msgid "brands" msgstr "Mærker" -#: engine/core/graphene/object_types.py:219 +#: engine/core/graphene/object_types.py:226 msgid "category image url" msgstr "Kategorier" -#: engine/core/graphene/object_types.py:220 -#: engine/core/graphene/object_types.py:365 engine/core/models.py:278 +#: engine/core/graphene/object_types.py:227 +#: engine/core/graphene/object_types.py:369 engine/core/models.py:301 msgid "markup percentage" msgstr "Markup-procentdel" -#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:231 msgid "which attributes and values can be used for filtering this category." msgstr "" "Hvilke attributter og værdier, der kan bruges til at filtrere denne " "kategori." -#: engine/core/graphene/object_types.py:230 +#: engine/core/graphene/object_types.py:237 msgid "" "minimum and maximum prices for products in this category, if available." msgstr "" "Minimums- og maksimumspriser for produkter i denne kategori, hvis de er " "tilgængelige." -#: engine/core/graphene/object_types.py:234 +#: engine/core/graphene/object_types.py:240 +msgid "brands in this category" +msgstr "Mærker i denne kategori" + +#: engine/core/graphene/object_types.py:242 msgid "tags for this category" msgstr "Tags for denne kategori" -#: engine/core/graphene/object_types.py:237 +#: engine/core/graphene/object_types.py:245 msgid "products in this category" msgstr "Produkter i denne kategori" -#: engine/core/graphene/object_types.py:372 engine/core/models.py:183 +#: engine/core/graphene/object_types.py:376 engine/core/models.py:202 msgid "vendors" msgstr "Leverandører" -#: engine/core/graphene/object_types.py:376 +#: engine/core/graphene/object_types.py:380 msgid "Latitude (Y coordinate)" msgstr "Breddegrad (Y-koordinat)" -#: engine/core/graphene/object_types.py:377 +#: engine/core/graphene/object_types.py:381 msgid "Longitude (X coordinate)" msgstr "Længdegrad (X-koordinat)" -#: engine/core/graphene/object_types.py:406 +#: engine/core/graphene/object_types.py:411 msgid "comment" msgstr "Sådan gør du" -#: engine/core/graphene/object_types.py:408 -#: engine/core/graphene/object_types.py:542 +#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:548 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "" "Vurderingsværdi fra 1 til 10, inklusive, eller 0, hvis den ikke er " "indstillet." -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:421 msgid "represents feedback from a user." msgstr "Repræsenterer feedback fra en bruger." -#: engine/core/graphene/object_types.py:421 -#: engine/core/graphene/object_types.py:472 engine/core/models.py:1291 +#: engine/core/graphene/object_types.py:426 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:1388 msgid "notifications" msgstr "Meddelelser" -#: engine/core/graphene/object_types.py:423 +#: engine/core/graphene/object_types.py:428 msgid "download url for this order product if applicable" msgstr "Download url for dette ordreprodukt, hvis det er relevant" -#: engine/core/graphene/object_types.py:425 engine/core/models.py:1856 +#: engine/core/graphene/object_types.py:430 engine/core/models.py:1959 msgid "feedback" msgstr "Feedback" -#: engine/core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:464 msgid "a list of order products in this order" msgstr "En liste over bestillingsprodukter i denne ordre" -#: engine/core/graphene/object_types.py:461 engine/core/models.py:1261 +#: engine/core/graphene/object_types.py:466 engine/core/models.py:1358 msgid "billing address" msgstr "Faktureringsadresse" -#: engine/core/graphene/object_types.py:465 +#: engine/core/graphene/object_types.py:470 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1379,53 +1415,57 @@ msgstr "" "Leveringsadresse for denne ordre, lad den være tom, hvis den er den samme " "som faktureringsadressen, eller hvis den ikke er relevant" -#: engine/core/graphene/object_types.py:468 +#: engine/core/graphene/object_types.py:473 msgid "total price of this order" msgstr "Samlet pris for denne ordre" -#: engine/core/graphene/object_types.py:469 +#: engine/core/graphene/object_types.py:474 msgid "total quantity of products in order" msgstr "Samlet antal produkter i ordren" -#: engine/core/graphene/object_types.py:470 +#: engine/core/graphene/object_types.py:475 msgid "are all products in the order digital" msgstr "Er alle produkterne i ordren digitale?" -#: engine/core/graphene/object_types.py:474 +#: engine/core/graphene/object_types.py:479 msgid "transactions for this order" msgstr "Transaktioner for denne ordre" -#: engine/core/graphene/object_types.py:494 engine/core/models.py:1325 +#: engine/core/graphene/object_types.py:499 engine/core/models.py:1422 msgid "orders" msgstr "Bestillinger" -#: engine/core/graphene/object_types.py:515 +#: engine/core/graphene/object_types.py:520 msgid "image url" msgstr "Billed-URL" -#: engine/core/graphene/object_types.py:522 +#: engine/core/graphene/object_types.py:527 msgid "product's images" msgstr "Produktets billeder" -#: engine/core/graphene/object_types.py:529 engine/core/models.py:439 -#: engine/core/models.py:596 +#: engine/core/graphene/object_types.py:534 engine/core/models.py:488 +#: engine/core/models.py:661 msgid "category" msgstr "Kategori" -#: engine/core/graphene/object_types.py:531 engine/core/models.py:1857 +#: engine/core/graphene/object_types.py:536 engine/core/models.py:1960 msgid "feedbacks" msgstr "Tilbagemeldinger" -#: engine/core/graphene/object_types.py:532 engine/core/models.py:510 -#: engine/core/models.py:605 +#: engine/core/graphene/object_types.py:537 engine/core/models.py:563 +#: engine/core/models.py:670 msgid "brand" msgstr "Brand" -#: engine/core/graphene/object_types.py:534 engine/core/models.py:103 +#: engine/core/graphene/object_types.py:538 +msgid "video url" +msgstr "Video-URL" + +#: engine/core/graphene/object_types.py:540 engine/core/models.py:122 msgid "attribute groups" msgstr "Attributgrupper" -#: engine/core/graphene/object_types.py:536 +#: engine/core/graphene/object_types.py:542 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1433,7 +1473,7 @@ msgstr "Attributgrupper" msgid "price" msgstr "Pris" -#: engine/core/graphene/object_types.py:537 +#: engine/core/graphene/object_types.py:543 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1441,39 +1481,39 @@ msgstr "Pris" msgid "quantity" msgstr "Mængde" -#: engine/core/graphene/object_types.py:538 +#: engine/core/graphene/object_types.py:544 msgid "number of feedbacks" msgstr "Antal tilbagemeldinger" -#: engine/core/graphene/object_types.py:539 +#: engine/core/graphene/object_types.py:545 msgid "only available for personal orders" msgstr "Produkter kun tilgængelige for personlige bestillinger" -#: engine/core/graphene/object_types.py:544 +#: engine/core/graphene/object_types.py:550 msgid "discount price" msgstr "Rabatpris" -#: engine/core/graphene/object_types.py:568 engine/core/models.py:682 +#: engine/core/graphene/object_types.py:575 engine/core/models.py:755 msgid "products" msgstr "Produkter" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:691 msgid "promocodes" msgstr "Promokoder" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:706 msgid "products on sale" msgstr "Produkter til salg" -#: engine/core/graphene/object_types.py:701 engine/core/models.py:935 +#: engine/core/graphene/object_types.py:720 engine/core/models.py:1028 msgid "promotions" msgstr "Kampagner" -#: engine/core/graphene/object_types.py:705 engine/core/models.py:182 +#: engine/core/graphene/object_types.py:727 engine/core/models.py:201 msgid "vendor" msgstr "Leverandør" -#: engine/core/graphene/object_types.py:706 engine/core/models.py:681 +#: engine/core/graphene/object_types.py:728 engine/core/models.py:754 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1481,103 +1521,103 @@ msgstr "Leverandør" msgid "product" msgstr "Produkt" -#: engine/core/graphene/object_types.py:718 engine/core/models.py:958 +#: engine/core/graphene/object_types.py:740 engine/core/models.py:1051 msgid "wishlisted products" msgstr "Produkter på ønskelisten" -#: engine/core/graphene/object_types.py:725 engine/core/models.py:975 +#: engine/core/graphene/object_types.py:747 engine/core/models.py:1068 msgid "wishlists" msgstr "Ønskelister" -#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:752 msgid "tagged products" msgstr "Mærkede produkter" -#: engine/core/graphene/object_types.py:738 engine/core/models.py:219 -#: engine/core/models.py:611 +#: engine/core/graphene/object_types.py:760 engine/core/models.py:238 +#: engine/core/models.py:676 msgid "product tags" msgstr "Produktmærker" -#: engine/core/graphene/object_types.py:743 +#: engine/core/graphene/object_types.py:765 msgid "tagged categories" msgstr "Tagged kategorier" -#: engine/core/graphene/object_types.py:751 +#: engine/core/graphene/object_types.py:773 msgid "categories tags" msgstr "Kategoriernes tags" -#: engine/core/graphene/object_types.py:755 +#: engine/core/graphene/object_types.py:777 msgid "project name" msgstr "Projektets navn" -#: engine/core/graphene/object_types.py:756 +#: engine/core/graphene/object_types.py:778 msgid "company name" msgstr "Virksomhedens navn" -#: engine/core/graphene/object_types.py:757 +#: engine/core/graphene/object_types.py:779 msgid "company address" msgstr "Virksomhedens adresse" -#: engine/core/graphene/object_types.py:758 +#: engine/core/graphene/object_types.py:780 msgid "company phone number" msgstr "Virksomhedens telefonnummer" -#: engine/core/graphene/object_types.py:761 +#: engine/core/graphene/object_types.py:783 msgid "email from, sometimes it must be used instead of host user value" msgstr "" "'e-mail fra', nogle gange skal den bruges i stedet for værtsbrugerværdien" -#: engine/core/graphene/object_types.py:764 +#: engine/core/graphene/object_types.py:786 msgid "email host user" msgstr "E-mail-værtsbruger" -#: engine/core/graphene/object_types.py:765 +#: engine/core/graphene/object_types.py:787 msgid "maximum amount for payment" msgstr "Maksimalt beløb til betaling" -#: engine/core/graphene/object_types.py:766 +#: engine/core/graphene/object_types.py:788 msgid "minimum amount for payment" msgstr "Minimumsbeløb for betaling" -#: engine/core/graphene/object_types.py:767 +#: engine/core/graphene/object_types.py:789 msgid "analytics data" msgstr "Analytiske data" -#: engine/core/graphene/object_types.py:768 +#: engine/core/graphene/object_types.py:790 msgid "advertisement data" msgstr "Data om reklamer" -#: engine/core/graphene/object_types.py:771 +#: engine/core/graphene/object_types.py:793 msgid "company configuration" msgstr "Konfiguration" -#: engine/core/graphene/object_types.py:775 +#: engine/core/graphene/object_types.py:797 msgid "language code" msgstr "Sprogkode" -#: engine/core/graphene/object_types.py:776 +#: engine/core/graphene/object_types.py:798 msgid "language name" msgstr "Sprogets navn" -#: engine/core/graphene/object_types.py:777 +#: engine/core/graphene/object_types.py:799 msgid "language flag, if exists :)" msgstr "Sprogflag, hvis det findes :)" -#: engine/core/graphene/object_types.py:780 +#: engine/core/graphene/object_types.py:802 msgid "supported languages" msgstr "Få en liste over understøttede sprog" -#: engine/core/graphene/object_types.py:812 -#: engine/core/graphene/object_types.py:815 -#: engine/core/graphene/object_types.py:818 +#: engine/core/graphene/object_types.py:834 +#: engine/core/graphene/object_types.py:837 +#: engine/core/graphene/object_types.py:840 msgid "products search results" msgstr "Søgeresultater for produkter" -#: engine/core/graphene/object_types.py:820 +#: engine/core/graphene/object_types.py:842 msgid "posts search results" msgstr "Søgeresultater for produkter" -#: engine/core/models.py:75 +#: engine/core/models.py:91 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 " @@ -1590,23 +1630,23 @@ msgstr "" "struktur. Dette kan være nyttigt til at kategorisere og styre attributter " "mere effektivt i et komplekst system." -#: engine/core/models.py:88 +#: engine/core/models.py:107 msgid "parent of this group" msgstr "Forælder til denne gruppe" -#: engine/core/models.py:89 +#: engine/core/models.py:108 msgid "parent attribute group" msgstr "Overordnet attributgruppe" -#: engine/core/models.py:93 engine/core/models.py:94 +#: engine/core/models.py:112 engine/core/models.py:113 msgid "attribute group's name" msgstr "Attributgruppens navn" -#: engine/core/models.py:102 engine/core/models.py:763 +#: engine/core/models.py:121 engine/core/models.py:849 msgid "attribute group" msgstr "Attributgruppe" -#: engine/core/models.py:108 +#: engine/core/models.py:127 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1625,49 +1665,49 @@ msgstr "" "begrænsninger, hvilket gør den velegnet til brug i systemer, der interagerer" " med tredjepartsleverandører." -#: engine/core/models.py:122 +#: engine/core/models.py:141 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Gemmer legitimationsoplysninger og slutpunkter, der er nødvendige for " "leverandørens API-kommunikation" -#: engine/core/models.py:124 +#: engine/core/models.py:143 msgid "authentication info" msgstr "Oplysninger om godkendelse" -#: engine/core/models.py:129 +#: engine/core/models.py:148 msgid "define the markup for products retrieved from this vendor" msgstr "Definer markeringen for produkter, der hentes fra denne leverandør" -#: engine/core/models.py:130 +#: engine/core/models.py:149 msgid "vendor markup percentage" msgstr "Sælgerens markup-procentdel" -#: engine/core/models.py:134 +#: engine/core/models.py:153 msgid "name of this vendor" msgstr "Navn på denne leverandør" -#: engine/core/models.py:135 +#: engine/core/models.py:154 msgid "vendor name" msgstr "Leverandørens navn" -#: engine/core/models.py:150 +#: engine/core/models.py:169 msgid "response file" msgstr "Svarfil" -#: engine/core/models.py:151 +#: engine/core/models.py:170 msgid "vendor's last processing response" msgstr "leverandørens sidste behandlingssvar" -#: engine/core/models.py:157 +#: engine/core/models.py:176 msgid "vendor's integration file path" msgstr "Leverandørens sti til integrationsfilen" -#: engine/core/models.py:158 +#: engine/core/models.py:177 msgid "integration path" msgstr "Integrationsvej" -#: engine/core/models.py:192 +#: engine/core/models.py:211 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1682,27 +1722,27 @@ msgstr "" "operationer, der eksporteres gennem mixins, og giver mulighed for tilpasning" " af metadata til administrative formål." -#: engine/core/models.py:204 engine/core/models.py:235 +#: engine/core/models.py:223 engine/core/models.py:254 msgid "internal tag identifier for the product tag" msgstr "Intern tag-identifikator for produkttagget" -#: engine/core/models.py:205 engine/core/models.py:236 +#: engine/core/models.py:224 engine/core/models.py:255 msgid "tag name" msgstr "Tag-navn" -#: engine/core/models.py:209 engine/core/models.py:240 +#: engine/core/models.py:228 engine/core/models.py:259 msgid "user-friendly name for the product tag" msgstr "Brugervenligt navn til produktmærket" -#: engine/core/models.py:210 engine/core/models.py:241 +#: engine/core/models.py:229 engine/core/models.py:260 msgid "tag display name" msgstr "Navn på tag-visning" -#: engine/core/models.py:218 +#: engine/core/models.py:237 msgid "product tag" msgstr "Produktmærke" -#: engine/core/models.py:224 +#: engine/core/models.py:243 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 " @@ -1713,15 +1753,15 @@ msgstr "" "produkter. Den indeholder attributter til en intern tag-identifikator og et " "brugervenligt visningsnavn." -#: engine/core/models.py:249 +#: engine/core/models.py:268 msgid "category tag" msgstr "Kategori-tag" -#: engine/core/models.py:250 engine/core/models.py:322 +#: engine/core/models.py:269 engine/core/models.py:345 msgid "category tags" msgstr "Kategori-tags" -#: engine/core/models.py:255 +#: engine/core/models.py:274 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1743,51 +1783,51 @@ msgstr "" " angive navn, beskrivelse og hierarki for kategorier samt tildele " "attributter som billeder, tags eller prioritet." -#: engine/core/models.py:269 +#: engine/core/models.py:292 msgid "upload an image representing this category" msgstr "Upload et billede, der repræsenterer denne kategori" -#: engine/core/models.py:272 +#: engine/core/models.py:295 msgid "category image" msgstr "Kategori billede" -#: engine/core/models.py:277 +#: engine/core/models.py:300 msgid "define a markup percentage for products in this category" msgstr "Definer en markup-procentdel for produkter i denne kategori" -#: engine/core/models.py:286 +#: engine/core/models.py:309 msgid "parent of this category to form a hierarchical structure" msgstr "Forælder til denne kategori for at danne en hierarkisk struktur" -#: engine/core/models.py:287 +#: engine/core/models.py:310 msgid "parent category" msgstr "Overordnet kategori" -#: engine/core/models.py:292 +#: engine/core/models.py:315 msgid "category name" msgstr "Navn på kategori" -#: engine/core/models.py:293 +#: engine/core/models.py:316 msgid "provide a name for this category" msgstr "Giv et navn til denne kategori" -#: engine/core/models.py:300 +#: engine/core/models.py:323 msgid "add a detailed description for this category" msgstr "Tilføj en detaljeret beskrivelse af denne kategori" -#: engine/core/models.py:301 +#: engine/core/models.py:324 msgid "category description" msgstr "Beskrivelse af kategori" -#: engine/core/models.py:321 +#: engine/core/models.py:344 msgid "tags that help describe or group this category" msgstr "tags, der hjælper med at beskrive eller gruppere denne kategori" -#: engine/core/models.py:328 engine/core/models.py:503 +#: engine/core/models.py:351 engine/core/models.py:552 msgid "priority" msgstr "Prioritet" -#: engine/core/models.py:446 +#: engine/core/models.py:495 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1801,47 +1841,43 @@ msgstr "" " Den gør det muligt at organisere og repræsentere brand-relaterede data i " "applikationen." -#: engine/core/models.py:456 +#: engine/core/models.py:505 msgid "name of this brand" msgstr "Navnet på dette mærke" -#: engine/core/models.py:457 +#: engine/core/models.py:506 msgid "brand name" msgstr "Varemærke" -#: engine/core/models.py:464 +#: engine/core/models.py:513 msgid "upload a logo representing this brand" msgstr "Upload et logo, der repræsenterer dette brand" -#: engine/core/models.py:466 +#: engine/core/models.py:515 msgid "brand small image" msgstr "Brandets lille image" -#: engine/core/models.py:472 +#: engine/core/models.py:521 msgid "upload a big logo representing this brand" msgstr "Upload et stort logo, der repræsenterer dette brand" -#: engine/core/models.py:474 +#: engine/core/models.py:523 msgid "brand big image" msgstr "Brandets store image" -#: engine/core/models.py:479 +#: engine/core/models.py:528 msgid "add a detailed description of the brand" msgstr "Tilføj en detaljeret beskrivelse af brandet" -#: engine/core/models.py:480 +#: engine/core/models.py:529 msgid "brand description" msgstr "Varemærkebeskrivelse" -#: engine/core/models.py:485 -msgid "optional categories that this brand is associated with" -msgstr "Valgfrie kategorier, som dette brand er forbundet med" +#: engine/core/models.py:534 engine/core/models.py:535 +msgid "DEPRECATED" +msgstr "FORÆLDET" -#: engine/core/models.py:486 -msgid "associated categories" -msgstr "Kategorier" - -#: engine/core/models.py:516 +#: engine/core/models.py:569 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1857,72 +1893,72 @@ msgstr "" "muliggøre sporing og evaluering af produkter, der er tilgængelige fra " "forskellige leverandører." -#: engine/core/models.py:528 +#: engine/core/models.py:581 msgid "the vendor supplying this product stock" msgstr "Den leverandør, der leverer dette produkt, lagerfører" -#: engine/core/models.py:529 +#: engine/core/models.py:582 msgid "associated vendor" msgstr "Tilknyttet leverandør" -#: engine/core/models.py:533 +#: engine/core/models.py:588 msgid "final price to the customer after markups" msgstr "Endelig pris til kunden efter tillæg" -#: engine/core/models.py:534 +#: engine/core/models.py:589 msgid "selling price" msgstr "Salgspris" -#: engine/core/models.py:539 +#: engine/core/models.py:594 msgid "the product associated with this stock entry" msgstr "Det produkt, der er knyttet til denne lagerpost" -#: engine/core/models.py:540 engine/core/models.py:828 -#: engine/core/models.py:874 engine/core/models.py:1912 +#: engine/core/models.py:595 engine/core/models.py:914 +#: engine/core/models.py:962 engine/core/models.py:2020 msgid "associated product" msgstr "Tilknyttet produkt" -#: engine/core/models.py:547 +#: engine/core/models.py:604 msgid "the price paid to the vendor for this product" msgstr "Den pris, der er betalt til sælgeren for dette produkt" -#: engine/core/models.py:548 +#: engine/core/models.py:605 msgid "vendor purchase price" msgstr "Leverandørens købspris" -#: engine/core/models.py:552 +#: engine/core/models.py:609 msgid "available quantity of the product in stock" msgstr "Tilgængelig mængde af produktet på lager" -#: engine/core/models.py:553 +#: engine/core/models.py:610 msgid "quantity in stock" msgstr "Antal på lager" -#: engine/core/models.py:557 +#: engine/core/models.py:614 msgid "vendor-assigned SKU for identifying the product" msgstr "Leverandørtildelt SKU til identifikation af produktet" -#: engine/core/models.py:558 +#: engine/core/models.py:615 msgid "vendor sku" msgstr "Leverandørens SKU" -#: engine/core/models.py:564 +#: engine/core/models.py:621 msgid "digital file associated with this stock if applicable" msgstr "Digital fil knyttet til dette lager, hvis relevant" -#: engine/core/models.py:565 +#: engine/core/models.py:622 msgid "digital file" msgstr "Digital fil" -#: engine/core/models.py:569 +#: engine/core/models.py:626 msgid "system attributes" msgstr "Systemets egenskaber" -#: engine/core/models.py:577 +#: engine/core/models.py:636 msgid "stock entries" msgstr "Lagerposteringer" -#: engine/core/models.py:582 +#: engine/core/models.py:641 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1942,71 +1978,79 @@ msgstr "" " egenskaber for at forbedre ydeevnen. Den bruges til at definere og " "manipulere produktdata og tilhørende oplysninger i en applikation." -#: engine/core/models.py:595 +#: engine/core/models.py:660 msgid "category this product belongs to" msgstr "Kategori, som dette produkt tilhører" -#: engine/core/models.py:604 +#: engine/core/models.py:669 msgid "optionally associate this product with a brand" msgstr "Tilknyt eventuelt dette produkt til et brand" -#: engine/core/models.py:610 +#: engine/core/models.py:675 msgid "tags that help describe or group this product" msgstr "Tags, der hjælper med at beskrive eller gruppere dette produkt" -#: engine/core/models.py:615 +#: engine/core/models.py:680 msgid "indicates whether this product is digitally delivered" msgstr "Angiver, om dette produkt leveres digitalt" -#: engine/core/models.py:616 +#: engine/core/models.py:681 msgid "is product digital" msgstr "Er produktet digitalt?" -#: engine/core/models.py:623 +#: engine/core/models.py:688 msgid "indicates whether this product should be updated from periodic task" msgstr "angiver, om dette produkt skal opdateres fra periodisk opgave" -#: engine/core/models.py:625 +#: engine/core/models.py:690 msgid "is product updatable" msgstr "kan produktet opdateres" -#: engine/core/models.py:631 +#: engine/core/models.py:696 msgid "provide a clear identifying name for the product" msgstr "Giv produktet et klart identificerende navn" -#: engine/core/models.py:632 +#: engine/core/models.py:697 msgid "product name" msgstr "Produktets navn" -#: engine/core/models.py:638 engine/core/models.py:923 +#: engine/core/models.py:703 engine/core/models.py:1012 msgid "add a detailed description of the product" msgstr "Tilføj en detaljeret beskrivelse af produktet" -#: engine/core/models.py:639 +#: engine/core/models.py:704 msgid "product description" msgstr "Produktbeskrivelse" -#: engine/core/models.py:646 +#: engine/core/models.py:710 +msgid "optional video file for this product" +msgstr "Valgfri videofil til dette produkt" + +#: engine/core/models.py:711 +msgid "product video" +msgstr "Produktvideo" + +#: engine/core/models.py:719 msgid "part number for this product" msgstr "Reservedelsnummer for dette produkt" -#: engine/core/models.py:647 +#: engine/core/models.py:720 msgid "part number" msgstr "Varenummer" -#: engine/core/models.py:666 +#: engine/core/models.py:739 msgid "stock keeping unit for this product" msgstr "Lagerbeholdning for dette produkt" -#: engine/core/models.py:673 +#: engine/core/models.py:746 msgid "whether to export this product to marketplaces" msgstr "Om dette produkt skal eksporteres til markedspladser" -#: engine/core/models.py:674 +#: engine/core/models.py:747 msgid "Export to Marketplaces" msgstr "Eksport til markedspladser" -#: engine/core/models.py:749 +#: engine/core/models.py:835 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 " @@ -2022,66 +2066,66 @@ msgstr "" "string, integer, float, boolean, array og object. Det giver mulighed for " "dynamisk og fleksibel datastrukturering." -#: engine/core/models.py:762 +#: engine/core/models.py:848 msgid "group of this attribute" msgstr "Gruppe af denne attribut" -#: engine/core/models.py:768 +#: engine/core/models.py:854 msgid "string" msgstr "Streng" -#: engine/core/models.py:769 +#: engine/core/models.py:855 msgid "integer" msgstr "Heltal" -#: engine/core/models.py:770 +#: engine/core/models.py:856 msgid "float" msgstr "Flyder" -#: engine/core/models.py:771 +#: engine/core/models.py:857 msgid "boolean" msgstr "Boolsk" -#: engine/core/models.py:772 +#: engine/core/models.py:858 msgid "array" msgstr "Array" -#: engine/core/models.py:773 +#: engine/core/models.py:859 msgid "object" msgstr "Objekt" -#: engine/core/models.py:775 +#: engine/core/models.py:861 msgid "type of the attribute's value" msgstr "Type af attributtens værdi" -#: engine/core/models.py:776 +#: engine/core/models.py:862 msgid "value type" msgstr "Værditype" -#: engine/core/models.py:781 +#: engine/core/models.py:867 msgid "name of this attribute" msgstr "Navn på denne attribut" -#: engine/core/models.py:782 +#: engine/core/models.py:868 msgid "attribute's name" msgstr "Attributtens navn" -#: engine/core/models.py:787 +#: engine/core/models.py:873 msgid "is filterable" msgstr "er filtrerbar" -#: engine/core/models.py:789 +#: engine/core/models.py:875 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." -#: engine/core/models.py:802 engine/core/models.py:820 +#: engine/core/models.py:888 engine/core/models.py:906 #: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Attribut" -#: engine/core/models.py:808 +#: engine/core/models.py:894 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" @@ -2092,19 +2136,19 @@ msgstr "" "mulighed for bedre organisering og dynamisk repræsentation af " "produktegenskaber." -#: engine/core/models.py:819 +#: engine/core/models.py:905 msgid "attribute of this value" msgstr "Attribut for denne værdi" -#: engine/core/models.py:827 +#: engine/core/models.py:913 msgid "the specific product associated with this attribute's value" msgstr "Det specifikke produkt, der er knyttet til denne attributs værdi" -#: engine/core/models.py:833 +#: engine/core/models.py:919 msgid "the specific value for this attribute" msgstr "Den specifikke værdi for denne attribut" -#: engine/core/models.py:846 +#: engine/core/models.py:934 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -2118,39 +2162,39 @@ msgstr "" "specifikke produkter og bestemme deres visningsrækkefølge. Den indeholder " "også en tilgængelighedsfunktion med alternativ tekst til billederne." -#: engine/core/models.py:857 +#: engine/core/models.py:945 msgid "provide alternative text for the image for accessibility" msgstr "Giv alternativ tekst til billedet af hensyn til tilgængeligheden" -#: engine/core/models.py:858 +#: engine/core/models.py:946 msgid "image alt text" msgstr "Billedets alt-tekst" -#: engine/core/models.py:861 +#: engine/core/models.py:949 msgid "upload the image file for this product" msgstr "Upload billedfilen til dette produkt" -#: engine/core/models.py:862 engine/core/models.py:893 +#: engine/core/models.py:950 engine/core/models.py:982 msgid "product image" msgstr "Produktbillede" -#: engine/core/models.py:867 +#: engine/core/models.py:955 msgid "determines the order in which images are displayed" msgstr "Bestemmer den rækkefølge, billederne vises i" -#: engine/core/models.py:868 +#: engine/core/models.py:956 msgid "display priority" msgstr "Skærm-prioritet" -#: engine/core/models.py:873 +#: engine/core/models.py:961 msgid "the product that this image represents" msgstr "Det produkt, som dette billede repræsenterer" -#: engine/core/models.py:894 +#: engine/core/models.py:983 msgid "product images" msgstr "Produktbilleder" -#: engine/core/models.py:899 +#: engine/core/models.py:988 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -2166,39 +2210,39 @@ msgstr "" "relevante produkter. Den integreres med produktkataloget for at bestemme de " "berørte varer i kampagnen." -#: engine/core/models.py:911 +#: engine/core/models.py:1000 msgid "percentage discount for the selected products" msgstr "Procentvis rabat for de valgte produkter" -#: engine/core/models.py:912 +#: engine/core/models.py:1001 msgid "discount percentage" msgstr "Rabatprocent" -#: engine/core/models.py:917 +#: engine/core/models.py:1006 msgid "provide a unique name for this promotion" msgstr "Giv et unikt navn til denne kampagne" -#: engine/core/models.py:918 +#: engine/core/models.py:1007 msgid "promotion name" msgstr "Navn på kampagne" -#: engine/core/models.py:924 +#: engine/core/models.py:1013 msgid "promotion description" msgstr "Beskrivelse af kampagnen" -#: engine/core/models.py:929 +#: engine/core/models.py:1018 msgid "select which products are included in this promotion" msgstr "Vælg, hvilke produkter der er inkluderet i denne kampagne" -#: engine/core/models.py:930 +#: engine/core/models.py:1019 msgid "included products" msgstr "Inkluderede produkter" -#: engine/core/models.py:934 +#: engine/core/models.py:1027 msgid "promotion" msgstr "Forfremmelse" -#: engine/core/models.py:945 +#: engine/core/models.py:1038 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2211,23 +2255,23 @@ msgstr "" "produkter samt operationer til at tilføje og fjerne flere produkter på én " "gang." -#: engine/core/models.py:957 +#: engine/core/models.py:1050 msgid "products that the user has marked as wanted" msgstr "Produkter, som brugeren har markeret som ønskede" -#: engine/core/models.py:965 +#: engine/core/models.py:1058 msgid "user who owns this wishlist" msgstr "Bruger, der ejer denne ønskeliste" -#: engine/core/models.py:966 +#: engine/core/models.py:1059 msgid "wishlist owner" msgstr "Ønskelistens ejer" -#: engine/core/models.py:974 +#: engine/core/models.py:1067 msgid "wishlist" msgstr "Ønskeliste" -#: engine/core/models.py:1016 +#: engine/core/models.py:1109 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2243,19 +2287,19 @@ msgstr "" "dokumentarfilerne. Den udvider funktionaliteten fra specifikke mixins og " "giver yderligere brugerdefinerede funktioner." -#: engine/core/models.py:1031 +#: engine/core/models.py:1124 msgid "documentary" msgstr "Dokumentarfilm" -#: engine/core/models.py:1032 +#: engine/core/models.py:1125 msgid "documentaries" msgstr "Dokumentarfilm" -#: engine/core/models.py:1042 +#: engine/core/models.py:1135 msgid "unresolved" msgstr "Uafklaret" -#: engine/core/models.py:1047 +#: engine/core/models.py:1140 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2276,59 +2320,59 @@ msgstr "" "Klassen gør det også muligt at knytte en adresse til en bruger, hvilket " "letter personlig datahåndtering." -#: engine/core/models.py:1062 +#: engine/core/models.py:1155 msgid "address line for the customer" msgstr "Adresselinje til kunden" -#: engine/core/models.py:1063 +#: engine/core/models.py:1156 msgid "address line" msgstr "Adresselinje" -#: engine/core/models.py:1065 +#: engine/core/models.py:1158 msgid "street" msgstr "Gade" -#: engine/core/models.py:1066 +#: engine/core/models.py:1159 msgid "district" msgstr "Distrikt" -#: engine/core/models.py:1067 +#: engine/core/models.py:1160 msgid "city" msgstr "By" -#: engine/core/models.py:1068 +#: engine/core/models.py:1161 msgid "region" msgstr "Region" -#: engine/core/models.py:1069 +#: engine/core/models.py:1162 msgid "postal code" msgstr "Postnummer" -#: engine/core/models.py:1070 +#: engine/core/models.py:1163 msgid "country" msgstr "Land" -#: engine/core/models.py:1077 +#: engine/core/models.py:1170 msgid "geolocation point: (longitude, latitude)" msgstr "Geolokaliseringspunkt (længdegrad, breddegrad)" -#: engine/core/models.py:1083 +#: engine/core/models.py:1176 msgid "full JSON response from geocoder for this address" msgstr "Fuldt JSON-svar fra geokoderen for denne adresse" -#: engine/core/models.py:1089 +#: engine/core/models.py:1182 msgid "stored JSON response from the geocoding service" msgstr "Gemt JSON-svar fra geokodningstjenesten" -#: engine/core/models.py:1099 +#: engine/core/models.py:1192 msgid "address" msgstr "Adresse" -#: engine/core/models.py:1100 +#: engine/core/models.py:1193 msgid "addresses" msgstr "Adresser" -#: engine/core/models.py:1112 +#: engine/core/models.py:1205 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2344,72 +2388,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." -#: engine/core/models.py:1126 +#: engine/core/models.py:1219 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" -#: engine/core/models.py:1127 +#: engine/core/models.py:1220 msgid "promo code identifier" msgstr "Identifikator for kampagnekode" -#: engine/core/models.py:1134 +#: engine/core/models.py:1227 msgid "fixed discount amount applied if percent is not used" msgstr "Fast rabatbeløb anvendes, hvis procent ikke bruges" -#: engine/core/models.py:1135 +#: engine/core/models.py:1228 msgid "fixed discount amount" msgstr "Fast rabatbeløb" -#: engine/core/models.py:1141 +#: engine/core/models.py:1234 msgid "percentage discount applied if fixed amount is not used" msgstr "Procentvis rabat, hvis det faste beløb ikke bruges" -#: engine/core/models.py:1142 +#: engine/core/models.py:1235 msgid "percentage discount" msgstr "Procentvis rabat" -#: engine/core/models.py:1147 +#: engine/core/models.py:1240 msgid "timestamp when the promocode expires" msgstr "Tidsstempel, når promokoden udløber" -#: engine/core/models.py:1148 +#: engine/core/models.py:1241 msgid "end validity time" msgstr "Slut gyldighedstid" -#: engine/core/models.py:1153 +#: engine/core/models.py:1246 msgid "timestamp from which this promocode is valid" msgstr "Tidsstempel, hvorfra denne promokode er gyldig" -#: engine/core/models.py:1154 +#: engine/core/models.py:1247 msgid "start validity time" msgstr "Start gyldighedstid" -#: engine/core/models.py:1159 +#: engine/core/models.py:1252 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" -#: engine/core/models.py:1160 +#: engine/core/models.py:1253 msgid "usage timestamp" msgstr "Tidsstempel for brug" -#: engine/core/models.py:1165 +#: engine/core/models.py:1258 msgid "user assigned to this promocode if applicable" msgstr "Bruger tildelt denne promokode, hvis relevant" -#: engine/core/models.py:1166 +#: engine/core/models.py:1259 msgid "assigned user" msgstr "Tildelt bruger" -#: engine/core/models.py:1173 +#: engine/core/models.py:1266 msgid "promo code" msgstr "Kampagnekode" -#: engine/core/models.py:1174 +#: engine/core/models.py:1267 msgid "promo codes" msgstr "Kampagnekoder" -#: engine/core/models.py:1190 +#: engine/core/models.py:1283 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2417,16 +2461,16 @@ msgstr "" "Der skal kun defineres én type rabat (beløb eller procent), men ikke begge " "eller ingen af dem." -#: engine/core/models.py:1212 +#: engine/core/models.py:1305 msgid "promocode already used" msgstr "Promokoden er allerede blevet brugt" -#: engine/core/models.py:1234 +#: engine/core/models.py:1327 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Ugyldig rabattype for promokode {self.uuid}!" -#: engine/core/models.py:1243 +#: engine/core/models.py:1336 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 " @@ -2443,139 +2487,139 @@ msgstr "" " eller faktureringsoplysninger kan opdateres. Ligeledes understøtter " "funktionaliteten håndtering af produkterne i ordrens livscyklus." -#: engine/core/models.py:1260 +#: engine/core/models.py:1357 msgid "the billing address used for this order" msgstr "Den faktureringsadresse, der bruges til denne ordre" -#: engine/core/models.py:1268 +#: engine/core/models.py:1365 msgid "optional promo code applied to this order" msgstr "Valgfri kampagnekode anvendt på denne ordre" -#: engine/core/models.py:1269 +#: engine/core/models.py:1366 msgid "applied promo code" msgstr "Anvendt kampagnekode" -#: engine/core/models.py:1277 +#: engine/core/models.py:1374 msgid "the shipping address used for this order" msgstr "Den leveringsadresse, der er brugt til denne ordre" -#: engine/core/models.py:1278 +#: engine/core/models.py:1375 msgid "shipping address" msgstr "Leveringsadresse" -#: engine/core/models.py:1284 +#: engine/core/models.py:1381 msgid "current status of the order in its lifecycle" msgstr "Ordrens aktuelle status i dens livscyklus" -#: engine/core/models.py:1285 +#: engine/core/models.py:1382 msgid "order status" msgstr "Bestillingsstatus" -#: engine/core/models.py:1290 engine/core/models.py:1889 +#: engine/core/models.py:1387 engine/core/models.py:1997 msgid "json structure of notifications to display to users" msgstr "" "JSON-struktur af meddelelser, der skal vises til brugerne, i admin UI bruges" " tabelvisningen" -#: engine/core/models.py:1296 +#: engine/core/models.py:1393 msgid "json representation of order attributes for this order" msgstr "JSON-repræsentation af ordreattributter for denne ordre" -#: engine/core/models.py:1302 +#: engine/core/models.py:1399 msgid "the user who placed the order" msgstr "Den bruger, der har afgivet ordren" -#: engine/core/models.py:1303 +#: engine/core/models.py:1400 msgid "user" msgstr "Bruger" -#: engine/core/models.py:1309 +#: engine/core/models.py:1406 msgid "the timestamp when the order was finalized" msgstr "Tidsstemplet for, hvornår ordren blev afsluttet" -#: engine/core/models.py:1310 +#: engine/core/models.py:1407 msgid "buy time" msgstr "Køb tid" -#: engine/core/models.py:1317 +#: engine/core/models.py:1414 msgid "a human-readable identifier for the order" msgstr "En menneskeligt læsbar identifikator for ordren" -#: engine/core/models.py:1318 +#: engine/core/models.py:1415 msgid "human readable id" msgstr "menneskeligt læsbart ID" -#: engine/core/models.py:1324 +#: engine/core/models.py:1421 msgid "order" msgstr "Bestil" -#: engine/core/models.py:1371 +#: engine/core/models.py:1468 msgid "a user must have only one pending order at a time" msgstr "En bruger må kun have én afventende ordre ad gangen!" -#: engine/core/models.py:1404 +#: engine/core/models.py:1504 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." -#: engine/core/models.py:1410 +#: engine/core/models.py:1510 msgid "you cannot add inactive products to order" msgstr "Du kan ikke tilføje inaktive produkter til en ordre" -#: engine/core/models.py:1432 +#: engine/core/models.py:1533 msgid "you cannot add more products than available in stock" msgstr "Du kan ikke tilføje flere produkter, end der er på lager" -#: engine/core/models.py:1456 engine/core/models.py:1485 -#: engine/core/models.py:1495 +#: engine/core/models.py:1557 engine/core/models.py:1586 +#: engine/core/models.py:1596 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." -#: engine/core/models.py:1480 +#: engine/core/models.py:1581 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} findes ikke med forespørgslen <{query}>!" -#: engine/core/models.py:1519 +#: engine/core/models.py:1620 msgid "promocode does not exist" msgstr "Promokode findes ikke" -#: engine/core/models.py:1534 +#: engine/core/models.py:1635 msgid "you can only buy physical products with shipping address specified" msgstr "Du kan kun købe fysiske produkter med angivet leveringsadresse!" -#: engine/core/models.py:1555 +#: engine/core/models.py:1656 msgid "address does not exist" msgstr "Adressen findes ikke" -#: engine/core/models.py:1577 engine/core/models.py:1656 +#: engine/core/models.py:1678 engine/core/models.py:1757 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." -#: engine/core/models.py:1583 engine/core/models.py:1649 +#: engine/core/models.py:1684 engine/core/models.py:1750 msgid "invalid force value" msgstr "Ugyldig kraftværdi" -#: engine/core/models.py:1589 engine/core/models.py:1660 +#: engine/core/models.py:1690 engine/core/models.py:1761 msgid "you cannot purchase an empty order!" msgstr "Du kan ikke købe en tom ordre!" -#: engine/core/models.py:1610 +#: engine/core/models.py:1711 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." -#: engine/core/models.py:1624 +#: engine/core/models.py:1725 msgid "a user without a balance cannot buy with balance" msgstr "En bruger uden saldo kan ikke købe med saldo!" -#: engine/core/models.py:1630 +#: engine/core/models.py:1731 msgid "insufficient funds to complete the order" msgstr "Utilstrækkelige midler til at gennemføre ordren" -#: engine/core/models.py:1671 +#: engine/core/models.py:1772 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2583,14 +2627,14 @@ msgstr "" "du kan ikke købe uden registrering, angiv venligst følgende oplysninger: " "kundens navn, kundens e-mail, kundens telefonnummer" -#: engine/core/models.py:1682 +#: engine/core/models.py:1783 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "Ugyldig betalingsmetode: {payment_method} fra {available_payment_methods}!" -#: engine/core/models.py:1813 +#: engine/core/models.py:1916 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2605,34 +2649,34 @@ msgstr "" "bruger databasefelter til effektivt at modellere og administrere " "feedbackdata." -#: engine/core/models.py:1825 +#: engine/core/models.py:1928 msgid "user-provided comments about their experience with the product" msgstr "Brugernes kommentarer om deres oplevelse med produktet" -#: engine/core/models.py:1826 +#: engine/core/models.py:1929 msgid "feedback comments" msgstr "Kommentarer til feedback" -#: engine/core/models.py:1834 +#: engine/core/models.py:1937 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" -#: engine/core/models.py:1836 +#: engine/core/models.py:1939 msgid "related order product" msgstr "Relateret ordreprodukt" -#: engine/core/models.py:1841 +#: engine/core/models.py:1944 msgid "user-assigned rating for the product" msgstr "Brugertildelt vurdering af produktet" -#: engine/core/models.py:1842 +#: engine/core/models.py:1945 msgid "product rating" msgstr "Produktvurdering" -#: engine/core/models.py:1862 +#: engine/core/models.py:1965 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2654,110 +2698,110 @@ msgstr "" "en download-URL for digitale produkter. Modellen integreres med Order- og " "Product-modellerne og gemmer en reference til dem." -#: engine/core/models.py:1877 +#: engine/core/models.py:1985 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" -#: engine/core/models.py:1878 +#: engine/core/models.py:1986 msgid "purchase price at order time" msgstr "Købspris på bestillingstidspunktet" -#: engine/core/models.py:1883 +#: engine/core/models.py:1991 msgid "internal comments for admins about this ordered product" msgstr "Interne kommentarer til administratorer om dette bestilte produkt" -#: engine/core/models.py:1884 +#: engine/core/models.py:1992 msgid "internal comments" msgstr "Interne kommentarer" -#: engine/core/models.py:1890 +#: engine/core/models.py:1998 msgid "user notifications" msgstr "Notifikationer til brugere" -#: engine/core/models.py:1895 +#: engine/core/models.py:2003 msgid "json representation of this item's attributes" msgstr "JSON-repræsentation af dette elements attributter" -#: engine/core/models.py:1896 +#: engine/core/models.py:2004 msgid "ordered product attributes" msgstr "Bestilte produktattributter" -#: engine/core/models.py:1901 +#: engine/core/models.py:2009 msgid "reference to the parent order that contains this product" msgstr "Henvisning til den overordnede ordre, der indeholder dette produkt" -#: engine/core/models.py:1902 +#: engine/core/models.py:2010 msgid "parent order" msgstr "Forældreordre" -#: engine/core/models.py:1911 +#: engine/core/models.py:2019 msgid "the specific product associated with this order line" msgstr "Det specifikke produkt, der er knyttet til denne ordrelinje" -#: engine/core/models.py:1918 +#: engine/core/models.py:2026 msgid "quantity of this specific product in the order" msgstr "Mængde af dette specifikke produkt i ordren" -#: engine/core/models.py:1919 +#: engine/core/models.py:2027 msgid "product quantity" msgstr "Produktmængde" -#: engine/core/models.py:1926 +#: engine/core/models.py:2034 msgid "current status of this product in the order" msgstr "Aktuel status for dette produkt i bestillingen" -#: engine/core/models.py:1927 +#: engine/core/models.py:2035 msgid "product line status" msgstr "Status for produktlinje" -#: engine/core/models.py:1998 +#: engine/core/models.py:2106 msgid "order product must have an order" msgstr "Orderproduct skal have en tilknyttet ordre!" -#: engine/core/models.py:2000 +#: engine/core/models.py:2108 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Forkert handling angivet for feedback: {action}!" -#: engine/core/models.py:2017 +#: engine/core/models.py:2125 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." -#: engine/core/models.py:2026 +#: engine/core/models.py:2132 engine/core/models.py:2227 msgid "name" msgstr "Navn" -#: engine/core/models.py:2028 +#: engine/core/models.py:2134 msgid "URL of the integration" msgstr "URL til integrationen" -#: engine/core/models.py:2031 +#: engine/core/models.py:2137 msgid "authentication credentials" msgstr "Legitimationsoplysninger til godkendelse" -#: engine/core/models.py:2054 +#: engine/core/models.py:2160 msgid "you can only have one default CRM provider" msgstr "Du kan kun have én standard CRM-udbyder" -#: engine/core/models.py:2064 +#: engine/core/models.py:2170 msgid "CRM" msgstr "CRM" -#: engine/core/models.py:2065 +#: engine/core/models.py:2171 msgid "CRMs" msgstr "CRM'er" -#: engine/core/models.py:2081 +#: engine/core/models.py:2187 msgid "order CRM link" msgstr "Ordrens CRM-link" -#: engine/core/models.py:2082 +#: engine/core/models.py:2188 msgid "orders CRM links" msgstr "Bestillingernes CRM-links" -#: engine/core/models.py:2087 +#: engine/core/models.py:2193 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2774,14 +2818,38 @@ msgstr "" "URL til download af aktivet, når den tilknyttede ordre har status som " "afsluttet." -#: engine/core/models.py:2103 +#: engine/core/models.py:2209 msgid "download" msgstr "Download" -#: engine/core/models.py:2104 +#: engine/core/models.py:2210 msgid "downloads" msgstr "Downloads" +#: engine/core/models.py:2228 +msgid "descriptive name for the image" +msgstr "Beskrivende navn for billedet" + +#: engine/core/models.py:2233 +msgid "image file pasted in the markdown editor" +msgstr "Billedfil indsat i markdown-editoren" + +#: engine/core/models.py:2239 +msgid "alt text" +msgstr "Anden tekst" + +#: engine/core/models.py:2240 +msgid "alternative text for accessibility" +msgstr "Alternativ tekst for tilgængelighed" + +#: engine/core/models.py:2244 +msgid "pasted image" +msgstr "Indsat billede" + +#: engine/core/models.py:2245 +msgid "pasted images" +msgstr "Indsatte billeder" + #: engine/core/serializers/utility.py:91 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." @@ -2790,6 +2858,16 @@ msgstr "" "feedback." #: engine/core/sitemaps.py:25 +#: engine/core/templates/admin_doc/bookmarklets.html:8 +#: engine/core/templates/admin_doc/index.html:8 +#: engine/core/templates/admin_doc/missing_docutils.html:8 +#: engine/core/templates/admin_doc/model_detail.html:8 +#: engine/core/templates/admin_doc/model_index.html:8 +#: engine/core/templates/admin_doc/template_detail.html:8 +#: engine/core/templates/admin_doc/template_filter_index.html:8 +#: engine/core/templates/admin_doc/template_tag_index.html:8 +#: engine/core/templates/admin_doc/view_detail.html:8 +#: engine/core/templates/admin_doc/view_index.html:8 msgid "Home" msgstr "Hjem" @@ -2842,45 +2920,34 @@ msgstr "Brutto" msgid "Dashboard" msgstr "Dashboard" -#: engine/core/templates/admin/dashboard/_income_overview.html:7 +#: engine/core/templates/admin/dashboard/_income_overview.html:6 msgid "Income overview" msgstr "Oversigt over indtægter" -#: engine/core/templates/admin/dashboard/_income_overview.html:31 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Net" +#: engine/core/templates/admin/dashboard/_income_overview.html:16 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" msgstr "Nettoomsætning" -#: engine/core/templates/admin/dashboard/_income_overview.html:37 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Taxes" -msgstr "Skatter og afgifter" - -#: engine/core/templates/admin/dashboard/_income_overview.html:43 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 +#: engine/core/templates/admin/dashboard/_income_overview.html:21 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 msgid "Returns" msgstr "Returnerer" -#: engine/core/templates/admin/dashboard/_income_overview.html:48 -msgid "Gross (pie total)" -msgstr "Bruttoindtægter" - -#: engine/core/templates/admin/dashboard/_income_overview.html:72 -msgid "No data" -msgstr "Ingen dato" - +#: engine/core/templates/admin/dashboard/_income_overview.html:26 #: engine/core/templates/admin/dashboard/_kpis.html:6 msgid "GMV" msgstr "GMV" +#: engine/core/templates/admin/dashboard/_income_overview.html:50 +msgid "No data" +msgstr "Ingen dato" + #: engine/core/templates/admin/dashboard/_kpis.html:34 msgid "AOV" msgstr "AOV" -#: engine/core/templates/admin/dashboard/_kpis.html:48 -msgid "Net revenue" -msgstr "Nettoomsætning" - #: engine/core/templates/admin/dashboard/_kpis.html:62 msgid "Refund rate" msgstr "Tilbagebetalingssats" @@ -2893,7 +2960,7 @@ msgstr "Returneret" msgid "Low stock" msgstr "Lavt lager" -#: engine/core/templates/admin/dashboard/_low_stock.html:29 +#: engine/core/templates/admin/dashboard/_low_stock.html:33 msgid "No low stock items." msgstr "Ingen varer på lavt lager." @@ -2950,6 +3017,302 @@ msgstr "Ingen kategorisalg inden for de sidste 30 dage." msgid "Django site admin" msgstr "Django site-administrator" +#: engine/core/templates/admin_doc/bookmarklets.html:4 +#: engine/core/templates/admin_doc/bookmarklets.html:17 +msgid "Documentation bookmarklets" +msgstr "Dokumentationsbogmærker" + +#: engine/core/templates/admin_doc/bookmarklets.html:10 +#: engine/core/templates/admin_doc/index.html:4 +#: engine/core/templates/admin_doc/index.html:10 +#: engine/core/templates/admin_doc/index.html:15 +#: engine/core/templates/admin_doc/missing_docutils.html:10 +#: engine/core/templates/admin_doc/missing_docutils.html:19 +#: engine/core/templates/admin_doc/model_detail.html:10 +#: engine/core/templates/admin_doc/model_index.html:10 +#: engine/core/templates/admin_doc/template_detail.html:10 +#: engine/core/templates/admin_doc/template_filter_index.html:10 +#: engine/core/templates/admin_doc/template_tag_index.html:10 +#: engine/core/templates/admin_doc/view_detail.html:10 +#: engine/core/templates/admin_doc/view_index.html:10 +msgid "Documentation" +msgstr "Dokumentation" + +#: engine/core/templates/admin_doc/bookmarklets.html:12 +#: engine/core/templates/admin_doc/index.html:53 +msgid "Bookmarklets" +msgstr "Bogmærker" + +#: engine/core/templates/admin_doc/bookmarklets.html:19 +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"For at installere bogmærker skal du trække linket til din bogmærkebjælke " +"eller højreklikke på linket og tilføje det til dine bogmærker. Nu kan du " +"vælge bogmærket fra enhver side på webstedet." + +#: engine/core/templates/admin_doc/bookmarklets.html:29 +msgid "Documentation for this page" +msgstr "Dokumentation til denne side" + +#: engine/core/templates/admin_doc/bookmarklets.html:31 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Flytter dig fra enhver side til dokumentationen for den visning, der " +"genererer den pågældende side." + +#: engine/core/templates/admin_doc/index.html:21 +#: engine/core/templates/admin_doc/model_detail.html:12 +#: engine/core/templates/admin_doc/model_index.html:4 +#: engine/core/templates/admin_doc/model_index.html:12 +msgid "Models" +msgstr "Modeller" + +#: engine/core/templates/admin_doc/index.html:23 +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Modeller er beskrivelser af alle objekter i systemet og deres tilknyttede " +"felter. Hver model har en liste over felter, som kan tilgås som " +"skabelonvariabler." + +#: engine/core/templates/admin_doc/index.html:29 +#: engine/core/templates/admin_doc/view_detail.html:12 +#: engine/core/templates/admin_doc/view_index.html:4 +#: engine/core/templates/admin_doc/view_index.html:12 +msgid "Views" +msgstr "Visninger" + +#: engine/core/templates/admin_doc/index.html:31 +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Hver side på det offentlige websted genereres af en visning. Visningen " +"definerer, hvilken skabelon der bruges til at generere siden, og hvilke " +"objekter der er tilgængelige for den pågældende skabelon." + +#: engine/core/templates/admin_doc/index.html:39 +msgid "List of all the template tags and their functions." +msgstr "Liste over alle skabelontags og deres funktioner." + +#: engine/core/templates/admin_doc/index.html:45 +#: engine/core/templates/admin_doc/template_filter_index.html:12 +msgid "Filters" +msgstr "Filtre" + +#: engine/core/templates/admin_doc/index.html:47 +msgid "" +"Filters are actions which can be applied to variables in a template to alter" +" the output." +msgstr "" +"Filtre er handlinger, der kan anvendes på variabler i en skabelon for at " +"ændre outputtet." + +#: engine/core/templates/admin_doc/index.html:55 +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Værktøjer til din browser, så du hurtigt kan få adgang til " +"administratorfunktioner." + +#: engine/core/templates/admin_doc/missing_docutils.html:4 +msgid "Please install docutils" +msgstr "Installer venligst docutils" + +#: engine/core/templates/admin_doc/missing_docutils.html:20 +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"Administrationsdokumentationssystemet kræver Pythons docutils-bibliotek." + +#: engine/core/templates/admin_doc/missing_docutils.html:21 +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Bed dine administratorer om at installere docutils." + +#: engine/core/templates/admin_doc/model_detail.html:4 +#, python-format +msgid "Model: %(name)s" +msgstr "Model: %(name)s" + +#: engine/core/templates/admin_doc/model_detail.html:29 +msgid "Fields" +msgstr "Felter" + +#: engine/core/templates/admin_doc/model_detail.html:36 +msgid "Field" +msgstr "Felt" + +#: engine/core/templates/admin_doc/model_detail.html:37 +msgid "Type" +msgstr "Type" + +#: engine/core/templates/admin_doc/model_detail.html:38 +#: engine/core/templates/admin_doc/model_detail.html:70 +msgid "Description" +msgstr "Beskrivelse" + +#: engine/core/templates/admin_doc/model_detail.html:61 +msgid "Methods with arguments" +msgstr "Metoder med argumenter" + +#: engine/core/templates/admin_doc/model_detail.html:68 +msgid "Method" +msgstr "Metode" + +#: engine/core/templates/admin_doc/model_detail.html:69 +msgid "Arguments" +msgstr "Argumenter" + +#: engine/core/templates/admin_doc/model_detail.html:89 +msgid "Back to Model documentation" +msgstr "Tilbage til model dokumentation" + +#: engine/core/templates/admin_doc/model_index.html:17 +msgid "Model documentation" +msgstr "Modeldokumentation" + +#: engine/core/templates/admin_doc/model_index.html:44 +msgid "Model groups" +msgstr "Modelgrupper" + +#: engine/core/templates/admin_doc/template_detail.html:4 +#, python-format +msgid "Template: %(name)s" +msgstr "Skabelon: %(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:12 +msgid "Templates" +msgstr "Skabeloner" + +#: engine/core/templates/admin_doc/template_detail.html:17 +#, python-format +msgid "" +"Template: %(name)s" +msgstr "" +"Skabelon: %(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:21 +#, python-format +msgid "Search path for template %(name)s:" +msgstr "Søgesti for skabelon %(name)s:" + +#: engine/core/templates/admin_doc/template_detail.html:29 +msgid "(does not exist)" +msgstr "(findes ikke)" + +#: engine/core/templates/admin_doc/template_detail.html:40 +msgid "Back to Documentation" +msgstr "Tilbage til dokumentation" + +#: engine/core/templates/admin_doc/template_filter_index.html:4 +msgid "Template filters" +msgstr "Skabelonfiltre" + +#: engine/core/templates/admin_doc/template_filter_index.html:17 +msgid "Template filter documentation" +msgstr "Dokumentation til skabelonfilter" + +#: engine/core/templates/admin_doc/template_filter_index.html:26 +#: engine/core/templates/admin_doc/template_filter_index.html:52 +msgid "Built-in filters" +msgstr "Indbyggede filtre" + +#: engine/core/templates/admin_doc/template_filter_index.html:29 +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before using" +" the filter." +msgstr "" +"For at bruge disse filtre skal du indsætte %(code)s i din " +"skabelon, før du bruger filteret." + +#: engine/core/templates/admin_doc/template_tag_index.html:4 +msgid "Template tags" +msgstr "Skabelontags" + +#: engine/core/templates/admin_doc/template_tag_index.html:17 +msgid "Template tag documentation" +msgstr "Dokumentation af skabelontags" + +#: engine/core/templates/admin_doc/template_tag_index.html:26 +#: engine/core/templates/admin_doc/template_tag_index.html:52 +msgid "Built-in tags" +msgstr "Indbyggede tags" + +#: engine/core/templates/admin_doc/template_tag_index.html:29 +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using the tag." +msgstr "" +"For at bruge disse tags skal du indsætte %(code)s i din skabelon, før " +"du bruger tagget." + +#: engine/core/templates/admin_doc/view_detail.html:4 +#, python-format +msgid "View: %(name)s" +msgstr "Vis: %(name)s" + +#: engine/core/templates/admin_doc/view_detail.html:28 +msgid "Context:" +msgstr "Kontekst:" + +#: engine/core/templates/admin_doc/view_detail.html:33 +msgid "Templates:" +msgstr "Skabeloner:" + +#: engine/core/templates/admin_doc/view_detail.html:41 +msgid "Back to View documentation" +msgstr "Tilbage til Vis dokumentation" + +#: engine/core/templates/admin_doc/view_index.html:17 +msgid "View documentation" +msgstr "Se dokumentation" + +#: engine/core/templates/admin_doc/view_index.html:28 +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Visninger efter navneområde %(name)s" + +#: engine/core/templates/admin_doc/view_index.html:30 +msgid "Views by empty namespace" +msgstr "Visninger efter tomt navnerum" + +#: engine/core/templates/admin_doc/view_index.html:40 +#, python-format +msgid "" +"View function: %(full_name)s. Name: %(url_name)s." +msgstr "" +"Vis funktion: %(full_name)s. Navn: %(url_name)s." + +#: engine/core/templates/admin_doc/view_index.html:54 +msgid "Jump to namespace" +msgstr "Gå til navneområde" + +#: engine/core/templates/admin_doc/view_index.html:59 +msgid "Empty namespace" +msgstr "Tomt navnerum" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -3049,7 +3412,7 @@ msgstr "" " oplysninger" #: engine/core/templates/digital_order_delivered_email.html:137 -#: engine/core/templates/json_table_widget.html:6 +#: engine/core/templates/json_table_widget.html:26 msgid "value" msgstr "Værdi" @@ -3069,11 +3432,23 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "Med venlig hilsen,
teamet %(project_name)s." -#: engine/core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:7 +msgid "Key" +msgstr "Nøgle" + +#: engine/core/templates/json_table_widget.html:8 +msgid "Value" +msgstr "Værdi" + +#: engine/core/templates/json_table_widget.html:19 msgid "key" msgstr "Nøgle" -#: engine/core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:32 +msgid "Delete row" +msgstr "Slet række" + +#: engine/core/templates/json_table_widget.html:44 msgid "Add Row" msgstr "Tilføj række" @@ -3160,14 +3535,23 @@ msgstr "Du har ikke tilladelse til at udføre denne handling." msgid "NOMINATIM_URL must be configured." msgstr "Parameteren NOMINATIM_URL skal være konfigureret!" -#: engine/core/validators.py:23 +#: engine/core/validators.py:18 +msgid "could not determine file type" +msgstr "Kunne ikke bestemme filtype" + +#: engine/core/validators.py:24 +#, python-brace-format +msgid "unsupported video format. supported formats: {supported}" +msgstr "Ikke-understøttet videoformat. Understøttede formater: {supported}" + +#: engine/core/validators.py:45 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "Billedets dimensioner bør ikke overstige w{max_width} x h{max_height} " "pixels." -#: engine/core/views.py:104 +#: engine/core/views.py:108 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3175,7 +3559,7 @@ msgstr "" "Håndterer anmodningen om sitemap-indekset og returnerer et XML-svar. Den " "sikrer, at svaret indeholder den passende indholdstypeheader for XML." -#: engine/core/views.py:119 +#: engine/core/views.py:123 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3185,17 +3569,17 @@ msgstr "" "behandler anmodningen, henter det relevante sitemap-detaljesvar og " "indstiller Content-Type-headeren til XML." -#: engine/core/views.py:155 +#: engine/core/views.py:174 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Returnerer en liste over understøttede sprog og de tilhørende oplysninger." -#: engine/core/views.py:182 +#: engine/core/views.py:201 msgid "Returns the parameters of the website as a JSON object." msgstr "Returnerer hjemmesidens parametre som et JSON-objekt." -#: engine/core/views.py:198 +#: engine/core/views.py:217 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3203,11 +3587,11 @@ msgstr "" "Håndterer cache-operationer som f.eks. læsning og indstilling af cachedata " "med en specificeret nøgle og timeout." -#: engine/core/views.py:220 +#: engine/core/views.py:239 msgid "Handles `contact us` form submissions." msgstr "Håndterer indsendelser af `kontakt os`-formularer." -#: engine/core/views.py:236 +#: engine/core/views.py:255 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3215,15 +3599,15 @@ msgstr "" "Håndterer anmodninger om behandling og validering af URL'er fra indgående " "POST-anmodninger." -#: engine/core/views.py:273 +#: engine/core/views.py:292 msgid "Handles global search queries." msgstr "Håndterer globale søgeforespørgsler." -#: engine/core/views.py:289 +#: engine/core/views.py:308 msgid "Handles the logic of buying as a business without registration." msgstr "Håndterer logikken i at købe som en virksomhed uden registrering." -#: engine/core/views.py:337 +#: engine/core/views.py:356 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3231,31 +3615,31 @@ msgstr "" "Håndterer download af et digitalt aktiv, der er knyttet til en ordre.\n" "Denne funktion forsøger at betjene den digitale aktivfil, der ligger i projektets lagermappe. Hvis filen ikke findes, udløses en HTTP 404-fejl som tegn på, at ressourcen ikke er tilgængelig." -#: engine/core/views.py:348 +#: engine/core/views.py:367 msgid "order_product_uuid is required" msgstr "order_product_uuid er påkrævet" -#: engine/core/views.py:355 +#: engine/core/views.py:374 msgid "order product does not exist" msgstr "Bestil produkt findes ikke" -#: engine/core/views.py:358 +#: engine/core/views.py:377 msgid "you can only download the digital asset once" msgstr "Du kan kun downloade det digitale aktiv én gang" -#: engine/core/views.py:362 +#: engine/core/views.py:381 msgid "the order must be paid before downloading the digital asset" msgstr "Ordren skal betales, før det digitale aktiv downloades." -#: engine/core/views.py:369 +#: engine/core/views.py:388 msgid "the order product does not have a product" msgstr "Ordreproduktet har ikke et produkt" -#: engine/core/views.py:412 +#: engine/core/views.py:431 msgid "favicon not found" msgstr "Favicon ikke fundet" -#: engine/core/views.py:418 +#: engine/core/views.py:437 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3263,7 +3647,7 @@ msgstr "" "Håndterer anmodninger om et websteds favicon.\n" "Denne funktion forsøger at servere favicon-filen, der ligger i projektets statiske mappe. Hvis favicon-filen ikke findes, udløses en HTTP 404-fejl for at angive, at ressourcen ikke er tilgængelig." -#: engine/core/views.py:432 +#: engine/core/views.py:451 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3274,16 +3658,20 @@ msgstr "" "administratorinterfacets indeksside. Den bruger Djangos `redirect`-funktion " "til at håndtere HTTP-omdirigeringen." -#: engine/core/views.py:445 +#: engine/core/views.py:464 msgid "Returns current version of the Schon. " msgstr "Returnerer den aktuelle version af Schon." -#: engine/core/views.py:674 engine/core/views.py:689 +#: engine/core/views.py:475 +msgid "no image file provided" +msgstr "Ingen billedfil angivet" + +#: engine/core/views.py:710 engine/core/views.py:725 #, python-format msgid "Revenue & Orders (last %(days)d)" msgstr "Indtægter og ordrer (sidste %(days)d)" -#: engine/core/views.py:870 +#: engine/core/views.py:911 msgid "Returns custom variables for Dashboard. " msgstr "Returnerer brugerdefinerede variabler til Dashboard." @@ -3371,7 +3759,7 @@ msgstr "" "objekter. Den bruger Djangos ViewSet-rammeværk til at forenkle " "implementeringen af API-slutpunkter for Brand-objekter." -#: engine/core/viewsets.py:458 +#: engine/core/viewsets.py:460 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3389,7 +3777,15 @@ msgstr "" "til at hente produktoplysninger, anvende tilladelser og få adgang til " "relateret feedback om et produkt." -#: engine/core/viewsets.py:605 +#: engine/core/viewsets.py:541 +msgid "identificator_type and identificators are required" +msgstr "identificator_type og identificators er påkrævet" + +#: engine/core/viewsets.py:554 +msgid "identificator_type must be one of: uuid, slug, sku" +msgstr "identificator_type skal være en af følgende: uuid, slug, sku" + +#: engine/core/viewsets.py:635 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3404,7 +3800,7 @@ msgstr "" "strømlinet adgang til Vendor-relaterede ressourcer gennem Django REST-" "frameworket." -#: engine/core/viewsets.py:625 +#: engine/core/viewsets.py:655 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3421,7 +3817,7 @@ msgstr "" " basen `SchonViewSet` og gør brug af Djangos filtreringssystem til at " "forespørge på data." -#: engine/core/viewsets.py:652 +#: engine/core/viewsets.py:682 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3440,7 +3836,7 @@ msgstr "" "baseret på den specifikke handling, der udføres, og håndhæver tilladelser i " "overensstemmelse hermed, mens der interageres med ordredata." -#: engine/core/viewsets.py:914 +#: engine/core/viewsets.py:944 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3455,11 +3851,11 @@ msgstr "" "Derudover indeholder det en detaljeret handling til håndtering af feedback " "på OrderProduct-instanser." -#: engine/core/viewsets.py:974 +#: engine/core/viewsets.py:1004 msgid "Manages operations related to Product images in the application. " msgstr "Håndterer operationer relateret til produktbilleder i applikationen." -#: engine/core/viewsets.py:988 +#: engine/core/viewsets.py:1018 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3467,15 +3863,15 @@ msgstr "" "Administrerer hentning og håndtering af PromoCode-instanser gennem " "forskellige API-handlinger." -#: engine/core/viewsets.py:1019 +#: engine/core/viewsets.py:1049 msgid "Represents a view set for managing promotions. " msgstr "Repræsenterer et visningssæt til håndtering af kampagner." -#: engine/core/viewsets.py:1032 +#: engine/core/viewsets.py:1062 msgid "Handles operations related to Stock data in the system." msgstr "Håndterer operationer relateret til lagerdata i systemet." -#: engine/core/viewsets.py:1046 +#: engine/core/viewsets.py:1076 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3493,7 +3889,7 @@ msgstr "" "integreret for at sikre, at brugere kun kan administrere deres egne " "ønskelister, medmindre der er givet eksplicitte tilladelser." -#: engine/core/viewsets.py:1183 +#: engine/core/viewsets.py:1213 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3507,12 +3903,12 @@ msgstr "" "omfatter specialiseret adfærd for forskellige HTTP-metoder, tilsidesættelse " "af serializer og håndtering af tilladelser baseret på anmodningskonteksten." -#: engine/core/viewsets.py:1254 +#: engine/core/viewsets.py:1275 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Fejl i geokodning: {e}" -#: engine/core/viewsets.py:1262 +#: engine/core/viewsets.py:1283 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/de_DE/LC_MESSAGES/django.mo b/engine/core/locale/de_DE/LC_MESSAGES/django.mo index f98b62dc..716e1cb1 100644 Binary files a/engine/core/locale/de_DE/LC_MESSAGES/django.mo and b/engine/core/locale/de_DE/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/de_DE/LC_MESSAGES/django.po b/engine/core/locale/de_DE/LC_MESSAGES/django.po index aa0c0557..b2fb17f3 100644 --- a/engine/core/locale/de_DE/LC_MESSAGES/django.po +++ b/engine/core/locale/de_DE/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -51,114 +51,134 @@ msgstr "Geändert" msgid "when the object was last modified" msgstr "Wann das Objekt zuletzt bearbeitet wurde" -#: engine/core/admin.py:94 +#: engine/core/admin.py:98 msgid "translations" msgstr "Übersetzungen" -#: engine/core/admin.py:102 +#: engine/core/admin.py:106 msgid "general" msgstr "Allgemein" -#: engine/core/admin.py:106 +#: engine/core/admin.py:110 msgid "relations" msgstr "Beziehungen" -#: engine/core/admin.py:111 +#: engine/core/admin.py:115 msgid "additional info" msgstr "Zusatzinfo" -#: engine/core/admin.py:133 +#: engine/core/admin.py:137 msgid "metadata" msgstr "Metadaten" -#: engine/core/admin.py:141 +#: engine/core/admin.py:145 msgid "timestamps" msgstr "Zeitstempel" -#: engine/core/admin.py:158 +#: engine/core/admin.py:162 #, python-format msgid "Activate selected %(verbose_name_plural)s" msgstr "Ausgewähltes %(verbose_name_plural)s aktivieren" -#: engine/core/admin.py:166 +#: engine/core/admin.py:170 msgid "selected items have been activated." msgstr "Ausgewählte Artikel wurden aktiviert!" -#: engine/core/admin.py:174 +#: engine/core/admin.py:178 #, python-format msgid "Deactivate selected %(verbose_name_plural)s" msgstr "Ausgewählte %(verbose_name_plural)s deaktivieren" -#: engine/core/admin.py:184 +#: engine/core/admin.py:188 msgid "selected items have been deactivated." msgstr "Ausgewählte Artikel wurden deaktiviert!" -#: engine/core/admin.py:196 engine/core/graphene/object_types.py:653 -#: engine/core/graphene/object_types.py:660 engine/core/models.py:832 -#: engine/core/models.py:840 +#: engine/core/admin.py:200 engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:673 engine/core/models.py:918 +#: engine/core/models.py:928 msgid "attribute value" msgstr "Attribut Wert" -#: engine/core/admin.py:197 engine/core/graphene/object_types.py:77 -#: engine/core/models.py:841 +#: engine/core/admin.py:201 engine/core/graphene/object_types.py:81 +#: engine/core/models.py:929 msgid "attribute values" msgstr "Attribut Werte" -#: engine/core/admin.py:208 +#: engine/core/admin.py:212 engine/core/models.py:2232 msgid "image" msgstr "Bild" -#: engine/core/admin.py:209 engine/core/graphene/object_types.py:530 +#: engine/core/admin.py:213 engine/core/graphene/object_types.py:535 msgid "images" msgstr "Bilder" -#: engine/core/admin.py:220 engine/core/models.py:576 +#: engine/core/admin.py:224 engine/core/models.py:635 msgid "stock" msgstr "Lagerbestand" -#: engine/core/admin.py:221 engine/core/graphene/object_types.py:713 +#: engine/core/admin.py:225 engine/core/graphene/object_types.py:735 msgid "stocks" msgstr "Bestände" -#: engine/core/admin.py:232 engine/core/models.py:1938 +#: engine/core/admin.py:236 engine/core/models.py:2046 msgid "order product" msgstr "Produkt bestellen" -#: engine/core/admin.py:233 engine/core/graphene/object_types.py:441 -#: engine/core/models.py:1939 +#: engine/core/admin.py:237 engine/core/graphene/object_types.py:446 +#: engine/core/models.py:2047 msgid "order products" msgstr "Produkte bestellen" -#: engine/core/admin.py:251 engine/core/admin.py:252 +#: engine/core/admin.py:255 engine/core/admin.py:256 msgid "children" msgstr "Kinder" -#: engine/core/admin.py:528 +#: engine/core/admin.py:545 +msgid "video preview" +msgstr "Videovorschau" + +#: engine/core/admin.py:551 msgid "has images" msgstr "Hat Bilder" -#: engine/core/admin.py:531 +#: engine/core/admin.py:554 #, python-format msgid "Export selected %(verbose_name_plural)s to marketplaces' feeds" msgstr "" "Ausgewählte %(verbose_name_plural)s in die Feeds der Marktplätze exportieren" -#: engine/core/admin.py:542 +#: engine/core/admin.py:565 #, python-format msgid "selected %(verbose_name_plural)s have been marked for export." msgstr "Ausgewählte %(verbose_name_plural)s wurden für den Export markiert." -#: engine/core/admin.py:553 +#: engine/core/admin.py:576 #, python-format msgid "Ban selected %(verbose_name_plural)s from marketplaces' feeds" msgstr "%(verbose_name_plural)s aus den Feeds der Marktplätze verbannen" -#: engine/core/admin.py:564 +#: engine/core/admin.py:587 #, python-format msgid "selected %(verbose_name_plural)s have been banned from export." msgstr "Ausgewählte %(verbose_name_plural)s wurden für den Export gesperrt." -#: engine/core/admin.py:1116 +#: engine/core/admin.py:1030 +msgid "Preview" +msgstr "Vorschau" + +#: engine/core/admin.py:1031 +msgid "Metadata" +msgstr "Metadaten" + +#: engine/core/admin.py:1034 +msgid "preview" +msgstr "Vorschau" + +#: engine/core/admin.py:1043 +msgid "image preview" +msgstr "Bildvorschau" + +#: engine/core/admin.py:1166 msgid "Config" msgstr "Konfigurieren Sie" @@ -225,7 +245,7 @@ msgstr "" "ausgewählt werden. Die Sprache kann sowohl mit Accept-Language als auch mit " "Query-Parameter ausgewählt werden." -#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:36 +#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "Cache I/O" @@ -249,7 +269,7 @@ msgstr "Abrufen der exponierbaren Parameter der Anwendung" msgid "send a message to the support team" msgstr "Senden Sie eine Nachricht an das Support-Team" -#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:59 msgid "request a CORSed URL" msgstr "Fordern Sie eine CORS-gesicherte URL an. Nur https erlaubt." @@ -395,11 +415,11 @@ msgstr "" "Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare" " Daten zu speichern" -#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757 -#: engine/core/docs/drf/viewsets.py:1046 -#: engine/core/graphene/object_types.py:119 -#: engine/core/graphene/object_types.py:239 -#: engine/core/graphene/object_types.py:540 +#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:781 +#: engine/core/docs/drf/viewsets.py:1070 +#: engine/core/graphene/object_types.py:123 +#: engine/core/graphene/object_types.py:247 +#: engine/core/graphene/object_types.py:546 msgid "SEO Meta snapshot" msgstr "SEO-Meta-Schnappschuss" @@ -713,7 +733,7 @@ msgstr "Ein einzelnes Produkt abrufen (Detailansicht)" #: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683 #: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725 -#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763 +#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:787 msgid "Product UUID or slug" msgstr "Produkt UUID oder Slug" @@ -742,39 +762,53 @@ msgstr "Ein Produkt löschen" msgid "lists all permitted feedbacks for a product" msgstr "listet alle zulässigen Rückmeldungen für ein Produkt auf" -#: engine/core/docs/drf/viewsets.py:758 +#: engine/core/docs/drf/viewsets.py:757 +msgid "retrieve exact products by identifier" +msgstr "Genaue Produkte anhand der Kennung abrufen" + +#: engine/core/docs/drf/viewsets.py:759 +msgid "" +"retrieve a list of products by identifier type (uuid, slug, or sku). Send a " +"POST request with `identificator_type` and `identificators` (list of " +"values)." +msgstr "" +"Rufen Sie eine Liste von Produkten nach Identifikator-Typ (uuid, slug oder " +"sku) ab. Senden Sie eine POST-Anfrage mit `identificator_type` und " +"`identificators` (Liste der Werte)." + +#: engine/core/docs/drf/viewsets.py:782 msgid "returns a snapshot of the product's SEO meta data" msgstr "Gibt einen Schnappschuss der SEO-Metadaten des Produkts zurück" -#: engine/core/docs/drf/viewsets.py:779 +#: engine/core/docs/drf/viewsets.py:803 msgid "list all addresses" msgstr "Alle Adressen auflisten" -#: engine/core/docs/drf/viewsets.py:789 +#: engine/core/docs/drf/viewsets.py:813 msgid "retrieve a single address" msgstr "Eine einzelne Adresse abrufen" -#: engine/core/docs/drf/viewsets.py:799 +#: engine/core/docs/drf/viewsets.py:823 msgid "create a new address" msgstr "Eine neue Adresse erstellen" -#: engine/core/docs/drf/viewsets.py:810 +#: engine/core/docs/drf/viewsets.py:834 msgid "delete an address" msgstr "Eine Adresse löschen" -#: engine/core/docs/drf/viewsets.py:820 +#: engine/core/docs/drf/viewsets.py:844 msgid "update an entire address" msgstr "Eine ganze Adresse aktualisieren" -#: engine/core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:855 msgid "partially update an address" msgstr "Teilweise Aktualisierung einer Adresse" -#: engine/core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:866 msgid "autocomplete address suggestions" msgstr "Autovervollständigung der Adresseingabe" -#: engine/core/docs/drf/viewsets.py:848 +#: engine/core/docs/drf/viewsets.py:872 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" "docker compose exec app poetry run python manage.py deepl_translate -l en-gb" @@ -782,254 +816,254 @@ msgstr "" "it-it -l ja-jp -l kk-kz -l nl-nl -l pl -l pt-br -l ro-ro -l ru-ru -l zh-hans" " -a core -a geo -a payments -a vibes_auth -a blog" -#: engine/core/docs/drf/viewsets.py:855 +#: engine/core/docs/drf/viewsets.py:879 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "begrenzt die Anzahl der Ergebnisse, 1 < Limit < 10, Standard: 5" -#: engine/core/docs/drf/viewsets.py:871 +#: engine/core/docs/drf/viewsets.py:895 msgid "list all feedbacks (simple view)" msgstr "alle Rückmeldungen auflisten (einfache Ansicht)" -#: engine/core/docs/drf/viewsets.py:881 +#: engine/core/docs/drf/viewsets.py:905 msgid "retrieve a single feedback (detailed view)" msgstr "eine einzelne Rückmeldung abrufen (detaillierte Ansicht)" -#: engine/core/docs/drf/viewsets.py:888 +#: engine/core/docs/drf/viewsets.py:912 msgid "create a feedback" msgstr "ein Feedback erstellen" -#: engine/core/docs/drf/viewsets.py:895 +#: engine/core/docs/drf/viewsets.py:919 msgid "delete a feedback" msgstr "eine Rückmeldung löschen" -#: engine/core/docs/drf/viewsets.py:902 +#: engine/core/docs/drf/viewsets.py:926 msgid "rewrite an existing feedback saving non-editables" msgstr "" "Eine bestehende Kategorie umschreiben und dabei Nicht-Editierbares speichern" -#: engine/core/docs/drf/viewsets.py:909 +#: engine/core/docs/drf/viewsets.py:933 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" "Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare" " Daten zu speichern" -#: engine/core/docs/drf/viewsets.py:919 +#: engine/core/docs/drf/viewsets.py:943 msgid "list all order–product relations (simple view)" msgstr "alle Bestell-Produkt-Beziehungen auflisten (einfache Ansicht)" -#: engine/core/docs/drf/viewsets.py:929 +#: engine/core/docs/drf/viewsets.py:953 msgid "retrieve a single order–product relation (detailed view)" msgstr "eine einzelne Auftrag-Produkt-Relation abrufen (Detailansicht)" -#: engine/core/docs/drf/viewsets.py:939 +#: engine/core/docs/drf/viewsets.py:963 msgid "create a new order–product relation" msgstr "eine neue Auftrag-Produkt-Beziehung erstellen" -#: engine/core/docs/drf/viewsets.py:949 +#: engine/core/docs/drf/viewsets.py:973 msgid "replace an existing order–product relation" msgstr "eine bestehende Auftrag-Produkt-Relation ersetzen" -#: engine/core/docs/drf/viewsets.py:959 +#: engine/core/docs/drf/viewsets.py:983 msgid "partially update an existing order–product relation" msgstr "eine bestehende Auftrag-Produkt-Beziehung teilweise aktualisieren" -#: engine/core/docs/drf/viewsets.py:969 +#: engine/core/docs/drf/viewsets.py:993 msgid "delete an order–product relation" msgstr "eine Auftrag-Produkt-Beziehung löschen" -#: engine/core/docs/drf/viewsets.py:979 +#: engine/core/docs/drf/viewsets.py:1003 msgid "add or remove feedback on an order–product relation" msgstr "" "Feedback zu einer Bestellung-Produkt-Beziehung hinzufügen oder entfernen" -#: engine/core/docs/drf/viewsets.py:996 +#: engine/core/docs/drf/viewsets.py:1020 msgid "list all brands (simple view)" msgstr "Alle Marken auflisten (einfache Ansicht)" -#: engine/core/docs/drf/viewsets.py:1003 +#: engine/core/docs/drf/viewsets.py:1027 msgid "retrieve a single brand (detailed view)" msgstr "Abrufen einer einzelnen Marke (detaillierte Ansicht)" -#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051 +#: engine/core/docs/drf/viewsets.py:1032 engine/core/docs/drf/viewsets.py:1075 msgid "Brand UUID or slug" msgstr "Marke UUID oder Slug" -#: engine/core/docs/drf/viewsets.py:1018 +#: engine/core/docs/drf/viewsets.py:1042 msgid "create a brand" msgstr "Eine Marke schaffen" -#: engine/core/docs/drf/viewsets.py:1025 +#: engine/core/docs/drf/viewsets.py:1049 msgid "delete a brand" msgstr "Eine Marke löschen" -#: engine/core/docs/drf/viewsets.py:1032 +#: engine/core/docs/drf/viewsets.py:1056 msgid "rewrite an existing brand saving non-editables" msgstr "" "Eine bestehende Kategorie umschreiben und dabei Nicht-Editierbares speichern" -#: engine/core/docs/drf/viewsets.py:1039 +#: engine/core/docs/drf/viewsets.py:1063 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "" "Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare" " Daten zu speichern" -#: engine/core/docs/drf/viewsets.py:1064 +#: engine/core/docs/drf/viewsets.py:1088 msgid "list all vendors (simple view)" msgstr "Alle Lieferanten auflisten (einfache Ansicht)" -#: engine/core/docs/drf/viewsets.py:1074 +#: engine/core/docs/drf/viewsets.py:1098 msgid "retrieve a single vendor (detailed view)" msgstr "Abruf eines einzelnen Lieferanten (Detailansicht)" -#: engine/core/docs/drf/viewsets.py:1081 +#: engine/core/docs/drf/viewsets.py:1105 msgid "create a vendor" msgstr "Einen Verkäufer erstellen" -#: engine/core/docs/drf/viewsets.py:1088 +#: engine/core/docs/drf/viewsets.py:1112 msgid "delete a vendor" msgstr "Einen Lieferanten löschen" -#: engine/core/docs/drf/viewsets.py:1095 +#: engine/core/docs/drf/viewsets.py:1119 msgid "rewrite an existing vendor saving non-editables" msgstr "" "Eine bestehende Kategorie umschreiben und dabei Nicht-Editierbares speichern" -#: engine/core/docs/drf/viewsets.py:1102 +#: engine/core/docs/drf/viewsets.py:1126 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "" "Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare" " Daten zu speichern" -#: engine/core/docs/drf/viewsets.py:1112 +#: engine/core/docs/drf/viewsets.py:1136 msgid "list all product images (simple view)" msgstr "Alle Produktbilder auflisten (einfache Ansicht)" -#: engine/core/docs/drf/viewsets.py:1122 +#: engine/core/docs/drf/viewsets.py:1146 msgid "retrieve a single product image (detailed view)" msgstr "Abrufen eines einzelnen Produktbildes (Detailansicht)" -#: engine/core/docs/drf/viewsets.py:1129 +#: engine/core/docs/drf/viewsets.py:1153 msgid "create a product image" msgstr "Ein Produktbild erstellen" -#: engine/core/docs/drf/viewsets.py:1139 +#: engine/core/docs/drf/viewsets.py:1163 msgid "delete a product image" msgstr "Ein Produktbild löschen" -#: engine/core/docs/drf/viewsets.py:1146 +#: engine/core/docs/drf/viewsets.py:1170 msgid "rewrite an existing product image saving non-editables" msgstr "" "Eine bestehende Kategorie umschreiben und dabei Nicht-Editierbares speichern" -#: engine/core/docs/drf/viewsets.py:1154 +#: engine/core/docs/drf/viewsets.py:1178 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "" "Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare" " Daten zu speichern" -#: engine/core/docs/drf/viewsets.py:1165 +#: engine/core/docs/drf/viewsets.py:1189 msgid "list all promo codes (simple view)" msgstr "Alle Promo-Codes auflisten (einfache Ansicht)" -#: engine/core/docs/drf/viewsets.py:1175 +#: engine/core/docs/drf/viewsets.py:1199 msgid "retrieve a single promo code (detailed view)" msgstr "Einen einzelnen Promo-Code abrufen (Detailansicht)" -#: engine/core/docs/drf/viewsets.py:1182 +#: engine/core/docs/drf/viewsets.py:1206 msgid "create a promo code" msgstr "Einen Promo-Code erstellen" -#: engine/core/docs/drf/viewsets.py:1189 +#: engine/core/docs/drf/viewsets.py:1213 msgid "delete a promo code" msgstr "Einen Promo-Code löschen" -#: engine/core/docs/drf/viewsets.py:1196 +#: engine/core/docs/drf/viewsets.py:1220 msgid "rewrite an existing promo code saving non-editables" msgstr "" "Eine bestehende Kategorie umschreiben und dabei Nicht-Editierbares speichern" -#: engine/core/docs/drf/viewsets.py:1203 +#: engine/core/docs/drf/viewsets.py:1227 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "" "Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare" " Daten zu speichern" -#: engine/core/docs/drf/viewsets.py:1213 +#: engine/core/docs/drf/viewsets.py:1237 msgid "list all promotions (simple view)" msgstr "Alle Aktionen auflisten (einfache Ansicht)" -#: engine/core/docs/drf/viewsets.py:1223 +#: engine/core/docs/drf/viewsets.py:1247 msgid "retrieve a single promotion (detailed view)" msgstr "Abrufen einer einzelnen Aktion (Detailansicht)" -#: engine/core/docs/drf/viewsets.py:1230 +#: engine/core/docs/drf/viewsets.py:1254 msgid "create a promotion" msgstr "Eine Werbeaktion erstellen" -#: engine/core/docs/drf/viewsets.py:1237 +#: engine/core/docs/drf/viewsets.py:1261 msgid "delete a promotion" msgstr "Eine Aktion löschen" -#: engine/core/docs/drf/viewsets.py:1244 +#: engine/core/docs/drf/viewsets.py:1268 msgid "rewrite an existing promotion saving non-editables" msgstr "" "Eine bestehende Kategorie umschreiben und dabei Nicht-Editierbares speichern" -#: engine/core/docs/drf/viewsets.py:1251 +#: engine/core/docs/drf/viewsets.py:1275 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "" "Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare" " Daten zu speichern" -#: engine/core/docs/drf/viewsets.py:1261 +#: engine/core/docs/drf/viewsets.py:1285 msgid "list all stocks (simple view)" msgstr "Alle Bestände auflisten (einfache Ansicht)" -#: engine/core/docs/drf/viewsets.py:1268 +#: engine/core/docs/drf/viewsets.py:1292 msgid "retrieve a single stock (detailed view)" msgstr "Abruf einer einzelnen Aktie (Detailansicht)" -#: engine/core/docs/drf/viewsets.py:1275 +#: engine/core/docs/drf/viewsets.py:1299 msgid "create a stock record" msgstr "Einen Bestandssatz erstellen" -#: engine/core/docs/drf/viewsets.py:1282 +#: engine/core/docs/drf/viewsets.py:1306 msgid "delete a stock record" msgstr "Löschen eines Bestandsdatensatzes" -#: engine/core/docs/drf/viewsets.py:1289 +#: engine/core/docs/drf/viewsets.py:1313 msgid "rewrite an existing stock record saving non-editables" msgstr "" "Eine bestehende Kategorie umschreiben und dabei Nicht-Editierbares speichern" -#: engine/core/docs/drf/viewsets.py:1297 +#: engine/core/docs/drf/viewsets.py:1321 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "" "Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare" " Daten zu speichern" -#: engine/core/docs/drf/viewsets.py:1308 +#: engine/core/docs/drf/viewsets.py:1332 msgid "list all product tags (simple view)" msgstr "Alle Produkt-Tags auflisten (einfache Ansicht)" -#: engine/core/docs/drf/viewsets.py:1318 +#: engine/core/docs/drf/viewsets.py:1342 msgid "retrieve a single product tag (detailed view)" msgstr "Ein einzelnes Produkt-Tag abrufen (detaillierte Ansicht)" -#: engine/core/docs/drf/viewsets.py:1325 +#: engine/core/docs/drf/viewsets.py:1349 msgid "create a product tag" msgstr "Ein Produkt-Tag erstellen" -#: engine/core/docs/drf/viewsets.py:1335 +#: engine/core/docs/drf/viewsets.py:1359 msgid "delete a product tag" msgstr "Ein Produkt-Tag löschen" -#: engine/core/docs/drf/viewsets.py:1342 +#: engine/core/docs/drf/viewsets.py:1366 msgid "rewrite an existing product tag saving non-editables" msgstr "" "Eine bestehende Kategorie umschreiben und dabei Nicht-Editierbares speichern" -#: engine/core/docs/drf/viewsets.py:1350 +#: engine/core/docs/drf/viewsets.py:1374 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "" "Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare" @@ -1040,380 +1074,382 @@ msgstr "" msgid "no search term provided." msgstr "Kein Suchbegriff angegeben." -#: engine/core/filters.py:78 engine/core/filters.py:484 -#: engine/core/filters.py:625 +#: engine/core/filters.py:79 engine/core/filters.py:485 +#: engine/core/filters.py:626 msgid "Search" msgstr "Suche" -#: engine/core/filters.py:79 engine/core/filters.py:663 -#: engine/core/filters.py:692 +#: engine/core/filters.py:80 engine/core/filters.py:664 +#: engine/core/filters.py:693 msgid "UUID" msgstr "UUID" -#: engine/core/filters.py:80 engine/core/filters.py:487 -#: engine/core/filters.py:627 +#: engine/core/filters.py:81 engine/core/filters.py:488 +#: engine/core/filters.py:628 msgid "Name" msgstr "Name" -#: engine/core/filters.py:82 engine/core/filters.py:630 +#: engine/core/filters.py:83 engine/core/filters.py:631 msgid "Categories" msgstr "Kategorien" -#: engine/core/filters.py:86 +#: engine/core/filters.py:87 msgid "Categories Slugs" msgstr "Kategorien Schnecken" -#: engine/core/filters.py:88 engine/core/filters.py:495 +#: engine/core/filters.py:89 engine/core/filters.py:496 +#: engine/core/templates/admin_doc/index.html:37 +#: engine/core/templates/admin_doc/template_tag_index.html:12 msgid "Tags" msgstr "Tags" -#: engine/core/filters.py:90 +#: engine/core/filters.py:91 msgid "Min Price" msgstr "Mindestpreis" -#: engine/core/filters.py:93 +#: engine/core/filters.py:94 msgid "Max Price" msgstr "Maximaler Preis" -#: engine/core/filters.py:95 +#: engine/core/filters.py:96 msgid "Is Active" msgstr "Ist aktiv" -#: engine/core/filters.py:96 +#: engine/core/filters.py:97 msgid "Brand" msgstr "Marke" -#: engine/core/filters.py:97 +#: engine/core/filters.py:98 msgid "Attributes" msgstr "Attribute" -#: engine/core/filters.py:99 +#: engine/core/filters.py:100 msgid "Quantity" msgstr "Menge" -#: engine/core/filters.py:101 engine/core/filters.py:489 -#: engine/core/filters.py:628 engine/core/models.py:316 -#: engine/core/models.py:497 engine/core/models.py:663 +#: engine/core/filters.py:102 engine/core/filters.py:490 +#: engine/core/filters.py:629 engine/core/models.py:339 +#: engine/core/models.py:546 engine/core/models.py:736 msgid "Slug" msgstr "Schnecke" -#: engine/core/filters.py:102 +#: engine/core/filters.py:103 msgid "Is Digital" msgstr "Is Digital" -#: engine/core/filters.py:104 +#: engine/core/filters.py:105 msgid "Include sub-categories" msgstr "Unterkategorien einbeziehen" -#: engine/core/filters.py:108 +#: engine/core/filters.py:109 msgid "Include personal ordered" msgstr "Persönlich bestellte Produkte einbeziehen" -#: engine/core/filters.py:110 engine/core/models.py:667 +#: engine/core/filters.py:111 engine/core/models.py:740 msgid "SKU" msgstr "SKU" -#: engine/core/filters.py:212 +#: engine/core/filters.py:213 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" "Es muss eine category_uuid vorhanden sein, um das Flag include_subcategories" " zu verwenden" -#: engine/core/filters.py:398 +#: engine/core/filters.py:399 msgid "Search (ID, product name or part number)" msgstr "Suche (ID, Produktname oder Teilenummer)" -#: engine/core/filters.py:402 +#: engine/core/filters.py:403 msgid "Bought after (inclusive)" msgstr "Gekauft nach (einschließlich)" -#: engine/core/filters.py:405 +#: engine/core/filters.py:406 msgid "Bought before (inclusive)" msgstr "Gekauft vor (einschließlich)" -#: engine/core/filters.py:410 engine/core/filters.py:461 -#: engine/core/filters.py:697 +#: engine/core/filters.py:411 engine/core/filters.py:462 +#: engine/core/filters.py:698 msgid "User email" msgstr "Benutzer-E-Mail" -#: engine/core/filters.py:413 engine/core/filters.py:464 -#: engine/core/filters.py:672 engine/core/filters.py:694 +#: engine/core/filters.py:414 engine/core/filters.py:465 +#: engine/core/filters.py:673 engine/core/filters.py:695 msgid "User UUID" msgstr "User UUID" -#: engine/core/filters.py:415 +#: engine/core/filters.py:416 msgid "Status" msgstr "Status" -#: engine/core/filters.py:419 +#: engine/core/filters.py:420 msgid "Human Readable ID" msgstr "Human Readable ID" -#: engine/core/filters.py:488 +#: engine/core/filters.py:489 msgid "Parent" msgstr "Elternteil" -#: engine/core/filters.py:492 +#: engine/core/filters.py:493 msgid "Whole category(has at least 1 product or not)" msgstr "Gesamte Kategorie (mit oder ohne mindestens 1 Produkt)" -#: engine/core/filters.py:496 +#: engine/core/filters.py:497 msgid "Level" msgstr "Ebene" -#: engine/core/filters.py:667 +#: engine/core/filters.py:668 msgid "Product UUID" msgstr "Produkt UUID" -#: engine/core/graphene/mutations.py:40 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Schlüssel, der im Cache zu suchen oder in den Cache zu legen ist" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:43 msgid "data to store in cache" msgstr "Im Cache zu speichernde Daten" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:46 msgid "timeout in seconds to set the data for into the cache" msgstr "Timeout in Sekunden, um die Daten in den Cache zu stellen" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:49 msgid "cached data" msgstr "Zwischengespeicherte Daten" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:64 msgid "camelized JSON data from the requested URL" msgstr "Camelized JSON-Daten aus der angeforderten URL" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:248 +#: engine/core/graphene/mutations.py:69 engine/core/views.py:267 msgid "only URLs starting with http(s):// are allowed" msgstr "Nur URLs, die mit http(s):// beginnen, sind zulässig" -#: engine/core/graphene/mutations.py:86 +#: engine/core/graphene/mutations.py:87 msgid "add a product to the order" msgstr "Ein Produkt zur Bestellung hinzufügen" -#: engine/core/graphene/mutations.py:109 engine/core/graphene/mutations.py:138 -#: engine/core/graphene/mutations.py:254 engine/core/graphene/mutations.py:306 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139 +#: engine/core/graphene/mutations.py:256 engine/core/graphene/mutations.py:308 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Auftrag {order_uuid} nicht gefunden!" -#: engine/core/graphene/mutations.py:115 engine/core/graphene/mutations.py:166 +#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167 msgid "remove a product from the order" msgstr "Ein Produkt aus der Bestellung entfernen" -#: engine/core/graphene/mutations.py:144 +#: engine/core/graphene/mutations.py:145 msgid "remove all products from the order" msgstr "Alle Produkte aus der Bestellung entfernen" -#: engine/core/graphene/mutations.py:189 +#: engine/core/graphene/mutations.py:190 msgid "buy an order" msgstr "Eine Bestellung kaufen" -#: engine/core/graphene/mutations.py:220 engine/core/graphene/mutations.py:282 +#: engine/core/graphene/mutations.py:222 engine/core/graphene/mutations.py:284 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" "Bitte geben Sie entweder order_uuid oder order_hr_id an - beide schließen " "sich gegenseitig aus!" -#: engine/core/graphene/mutations.py:249 engine/core/graphene/mutations.py:524 -#: engine/core/graphene/mutations.py:573 engine/core/viewsets.py:753 +#: engine/core/graphene/mutations.py:251 engine/core/graphene/mutations.py:526 +#: engine/core/graphene/mutations.py:576 engine/core/viewsets.py:783 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Von der Methode order.buy() kam der falsche Typ: {type(instance)!s}" -#: engine/core/graphene/mutations.py:260 +#: engine/core/graphene/mutations.py:262 msgid "perform an action on a list of products in the order" msgstr "Eine Aktion für eine Liste von Produkten in der Bestellung ausführen" -#: engine/core/graphene/mutations.py:265 +#: engine/core/graphene/mutations.py:267 msgid "remove/add" msgstr "Entfernen/Hinzufügen" -#: engine/core/graphene/mutations.py:301 engine/core/graphene/mutations.py:342 +#: engine/core/graphene/mutations.py:303 engine/core/graphene/mutations.py:342 msgid "action must be either add or remove" msgstr "Aktion muss entweder \"Hinzufügen\" oder \"Entfernen\" sein!" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:314 msgid "perform an action on a list of products in the wishlist" msgstr "" "Ausführen einer Aktion für eine Liste von Produkten in der Wunschliste" -#: engine/core/graphene/mutations.py:330 -msgid "please provide wishlist_uuid value" -msgstr "Bitte geben Sie den Wert `wishlist_uuid` an." - -#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:423 -#: engine/core/graphene/mutations.py:451 engine/core/graphene/mutations.py:479 -#: engine/core/graphene/mutations.py:529 +#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:424 +#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480 +#: engine/core/graphene/mutations.py:531 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Wishlist {wishlist_uuid} nicht gefunden!" -#: engine/core/graphene/mutations.py:401 +#: engine/core/graphene/mutations.py:402 msgid "add a product to the wishlist" msgstr "Ein Produkt zur Bestellung hinzufügen" -#: engine/core/graphene/mutations.py:429 +#: engine/core/graphene/mutations.py:430 msgid "remove a product from the wishlist" msgstr "Ein Produkt aus der Bestellung entfernen" -#: engine/core/graphene/mutations.py:457 +#: engine/core/graphene/mutations.py:458 msgid "remove all products from the wishlist" msgstr "Ein Produkt aus der Bestellung entfernen" -#: engine/core/graphene/mutations.py:485 +#: engine/core/graphene/mutations.py:486 msgid "buy all products from the wishlist" msgstr "Ein Produkt aus der Bestellung entfernen" -#: engine/core/graphene/mutations.py:535 +#: engine/core/graphene/mutations.py:537 msgid "buy a product" msgstr "Eine Bestellung kaufen" -#: engine/core/graphene/mutations.py:542 +#: engine/core/graphene/mutations.py:544 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" msgstr "" "Bitte senden Sie die Attribute als String im Format attr1=wert1,attr2=wert2" -#: engine/core/graphene/mutations.py:580 +#: engine/core/graphene/mutations.py:583 msgid "add or delete a feedback for orderproduct" msgstr "" "Feedback zu einer Bestellung-Produkt-Beziehung hinzufügen oder entfernen" -#: engine/core/graphene/mutations.py:606 +#: engine/core/graphene/mutations.py:610 msgid "action must be either `add` or `remove`" msgstr "Aktion muss entweder `Add` oder `remove` sein!" -#: engine/core/graphene/mutations.py:609 +#: engine/core/graphene/mutations.py:613 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Bestellprodukt {order_product_uuid} nicht gefunden!" -#: engine/core/graphene/mutations.py:616 +#: engine/core/graphene/mutations.py:620 msgid "original address string provided by the user" msgstr "Vom Benutzer angegebene Originaladresse" -#: engine/core/graphene/mutations.py:653 engine/core/models.py:986 -#: engine/core/models.py:999 engine/core/models.py:1443 -#: engine/core/models.py:1474 engine/core/models.py:1505 -#: engine/core/viewsets.py:760 +#: engine/core/graphene/mutations.py:662 engine/core/models.py:1079 +#: engine/core/models.py:1092 engine/core/models.py:1544 +#: engine/core/models.py:1575 engine/core/models.py:1606 +#: engine/core/viewsets.py:790 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} existiert nicht: {uuid}!" -#: engine/core/graphene/mutations.py:667 +#: engine/core/graphene/mutations.py:676 msgid "limit must be between 1 and 10" msgstr "Der Grenzwert muss zwischen 1 und 10 liegen." -#: engine/core/graphene/mutations.py:716 +#: engine/core/graphene/mutations.py:726 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - funktioniert wie ein Zauber" -#: engine/core/graphene/object_types.py:84 -#: engine/core/graphene/object_types.py:420 -#: engine/core/graphene/object_types.py:471 engine/core/models.py:803 -#: engine/core/models.py:1297 engine/core/models.py:2033 +#: engine/core/graphene/object_types.py:88 +#: engine/core/graphene/object_types.py:425 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:889 +#: engine/core/models.py:1394 engine/core/models.py:2139 msgid "attributes" msgstr "Attribute" -#: engine/core/graphene/object_types.py:97 +#: engine/core/graphene/object_types.py:101 msgid "grouped attributes" msgstr "Gruppierte Attribute" -#: engine/core/graphene/object_types.py:104 +#: engine/core/graphene/object_types.py:108 msgid "groups of attributes" msgstr "Gruppen von Attributen" -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:217 -#: engine/core/graphene/object_types.py:255 engine/core/models.py:440 +#: engine/core/graphene/object_types.py:122 +#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:264 engine/core/models.py:489 msgid "categories" msgstr "Kategorien" -#: engine/core/graphene/object_types.py:134 engine/core/models.py:511 +#: engine/core/graphene/object_types.py:138 engine/core/models.py:564 msgid "brands" msgstr "Marken" -#: engine/core/graphene/object_types.py:219 +#: engine/core/graphene/object_types.py:226 msgid "category image url" msgstr "Kategorien" -#: engine/core/graphene/object_types.py:220 -#: engine/core/graphene/object_types.py:365 engine/core/models.py:278 +#: engine/core/graphene/object_types.py:227 +#: engine/core/graphene/object_types.py:369 engine/core/models.py:301 msgid "markup percentage" msgstr "Markup Percentage" -#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:231 msgid "which attributes and values can be used for filtering this category." msgstr "" "Welche Attribute und Werte können für die Filterung dieser Kategorie " "verwendet werden." -#: engine/core/graphene/object_types.py:230 +#: engine/core/graphene/object_types.py:237 msgid "" "minimum and maximum prices for products in this category, if available." msgstr "" "Mindest- und Höchstpreise für Produkte in dieser Kategorie, sofern " "verfügbar." -#: engine/core/graphene/object_types.py:234 +#: engine/core/graphene/object_types.py:240 +msgid "brands in this category" +msgstr "Marken in dieser Kategorie" + +#: engine/core/graphene/object_types.py:242 msgid "tags for this category" msgstr "Tags für diese Kategorie" -#: engine/core/graphene/object_types.py:237 +#: engine/core/graphene/object_types.py:245 msgid "products in this category" msgstr "Produkte in dieser Kategorie" -#: engine/core/graphene/object_types.py:372 engine/core/models.py:183 +#: engine/core/graphene/object_types.py:376 engine/core/models.py:202 msgid "vendors" msgstr "Anbieter" -#: engine/core/graphene/object_types.py:376 +#: engine/core/graphene/object_types.py:380 msgid "Latitude (Y coordinate)" msgstr "Breitengrad (Y-Koordinate)" -#: engine/core/graphene/object_types.py:377 +#: engine/core/graphene/object_types.py:381 msgid "Longitude (X coordinate)" msgstr "Längengrad (X-Koordinate)" -#: engine/core/graphene/object_types.py:406 +#: engine/core/graphene/object_types.py:411 msgid "comment" msgstr "Wie" -#: engine/core/graphene/object_types.py:408 -#: engine/core/graphene/object_types.py:542 +#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:548 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "" "Bewertungswert von 1 bis einschließlich 10 oder 0, wenn nicht festgelegt." -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:421 msgid "represents feedback from a user." msgstr "Stellt das Feedback eines Benutzers dar." -#: engine/core/graphene/object_types.py:421 -#: engine/core/graphene/object_types.py:472 engine/core/models.py:1291 +#: engine/core/graphene/object_types.py:426 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:1388 msgid "notifications" msgstr "Benachrichtigungen" -#: engine/core/graphene/object_types.py:423 +#: engine/core/graphene/object_types.py:428 msgid "download url for this order product if applicable" msgstr "Download-Url für dieses Bestellprodukt, falls zutreffend" -#: engine/core/graphene/object_types.py:425 engine/core/models.py:1856 +#: engine/core/graphene/object_types.py:430 engine/core/models.py:1959 msgid "feedback" msgstr "Rückmeldung" -#: engine/core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:464 msgid "a list of order products in this order" msgstr "Eine Liste der bestellten Produkte in dieser Reihenfolge" -#: engine/core/graphene/object_types.py:461 engine/core/models.py:1261 +#: engine/core/graphene/object_types.py:466 engine/core/models.py:1358 msgid "billing address" msgstr "Rechnungsadresse" -#: engine/core/graphene/object_types.py:465 +#: engine/core/graphene/object_types.py:470 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1421,53 +1457,57 @@ msgstr "" "Lieferadresse für diese Bestellung, leer lassen, wenn sie mit der " "Rechnungsadresse übereinstimmt oder nicht zutrifft" -#: engine/core/graphene/object_types.py:468 +#: engine/core/graphene/object_types.py:473 msgid "total price of this order" msgstr "Gesamtpreis für diese Bestellung" -#: engine/core/graphene/object_types.py:469 +#: engine/core/graphene/object_types.py:474 msgid "total quantity of products in order" msgstr "Gesamtmenge der bestellten Produkte" -#: engine/core/graphene/object_types.py:470 +#: engine/core/graphene/object_types.py:475 msgid "are all products in the order digital" msgstr "Sind alle Produkte in der Bestellung digital" -#: engine/core/graphene/object_types.py:474 +#: engine/core/graphene/object_types.py:479 msgid "transactions for this order" msgstr "Vorgänge für diesen Auftrag" -#: engine/core/graphene/object_types.py:494 engine/core/models.py:1325 +#: engine/core/graphene/object_types.py:499 engine/core/models.py:1422 msgid "orders" msgstr "Bestellungen" -#: engine/core/graphene/object_types.py:515 +#: engine/core/graphene/object_types.py:520 msgid "image url" msgstr "Bild URL" -#: engine/core/graphene/object_types.py:522 +#: engine/core/graphene/object_types.py:527 msgid "product's images" msgstr "Bilder des Produkts" -#: engine/core/graphene/object_types.py:529 engine/core/models.py:439 -#: engine/core/models.py:596 +#: engine/core/graphene/object_types.py:534 engine/core/models.py:488 +#: engine/core/models.py:661 msgid "category" msgstr "Kategorie" -#: engine/core/graphene/object_types.py:531 engine/core/models.py:1857 +#: engine/core/graphene/object_types.py:536 engine/core/models.py:1960 msgid "feedbacks" msgstr "Rückmeldungen" -#: engine/core/graphene/object_types.py:532 engine/core/models.py:510 -#: engine/core/models.py:605 +#: engine/core/graphene/object_types.py:537 engine/core/models.py:563 +#: engine/core/models.py:670 msgid "brand" msgstr "Marke" -#: engine/core/graphene/object_types.py:534 engine/core/models.py:103 +#: engine/core/graphene/object_types.py:538 +msgid "video url" +msgstr "Video-URL" + +#: engine/core/graphene/object_types.py:540 engine/core/models.py:122 msgid "attribute groups" msgstr "Attribut-Gruppen" -#: engine/core/graphene/object_types.py:536 +#: engine/core/graphene/object_types.py:542 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1475,7 +1515,7 @@ msgstr "Attribut-Gruppen" msgid "price" msgstr "Preis" -#: engine/core/graphene/object_types.py:537 +#: engine/core/graphene/object_types.py:543 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1483,39 +1523,39 @@ msgstr "Preis" msgid "quantity" msgstr "Menge" -#: engine/core/graphene/object_types.py:538 +#: engine/core/graphene/object_types.py:544 msgid "number of feedbacks" msgstr "Anzahl der Rückmeldungen" -#: engine/core/graphene/object_types.py:539 +#: engine/core/graphene/object_types.py:545 msgid "only available for personal orders" msgstr "Produkte nur für persönliche Bestellungen verfügbar" -#: engine/core/graphene/object_types.py:544 +#: engine/core/graphene/object_types.py:550 msgid "discount price" msgstr "Rabattierter Preis" -#: engine/core/graphene/object_types.py:568 engine/core/models.py:682 +#: engine/core/graphene/object_types.py:575 engine/core/models.py:755 msgid "products" msgstr "Produkte" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:691 msgid "promocodes" msgstr "Promocodes" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:706 msgid "products on sale" msgstr "Zum Verkauf stehende Produkte" -#: engine/core/graphene/object_types.py:701 engine/core/models.py:935 +#: engine/core/graphene/object_types.py:720 engine/core/models.py:1028 msgid "promotions" msgstr "Werbeaktionen" -#: engine/core/graphene/object_types.py:705 engine/core/models.py:182 +#: engine/core/graphene/object_types.py:727 engine/core/models.py:201 msgid "vendor" msgstr "Anbieter" -#: engine/core/graphene/object_types.py:706 engine/core/models.py:681 +#: engine/core/graphene/object_types.py:728 engine/core/models.py:754 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1523,103 +1563,103 @@ msgstr "Anbieter" msgid "product" msgstr "Produkt" -#: engine/core/graphene/object_types.py:718 engine/core/models.py:958 +#: engine/core/graphene/object_types.py:740 engine/core/models.py:1051 msgid "wishlisted products" msgstr "Auf dem Wunschzettel stehende Produkte" -#: engine/core/graphene/object_types.py:725 engine/core/models.py:975 +#: engine/core/graphene/object_types.py:747 engine/core/models.py:1068 msgid "wishlists" msgstr "Wunschzettel" -#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:752 msgid "tagged products" msgstr "Markierte Produkte" -#: engine/core/graphene/object_types.py:738 engine/core/models.py:219 -#: engine/core/models.py:611 +#: engine/core/graphene/object_types.py:760 engine/core/models.py:238 +#: engine/core/models.py:676 msgid "product tags" msgstr "Produkt-Tags" -#: engine/core/graphene/object_types.py:743 +#: engine/core/graphene/object_types.py:765 msgid "tagged categories" msgstr "Markierte Kategorien" -#: engine/core/graphene/object_types.py:751 +#: engine/core/graphene/object_types.py:773 msgid "categories tags" msgstr "Kategorien'-Tags" -#: engine/core/graphene/object_types.py:755 +#: engine/core/graphene/object_types.py:777 msgid "project name" msgstr "Name des Projekts" -#: engine/core/graphene/object_types.py:756 +#: engine/core/graphene/object_types.py:778 msgid "company name" msgstr "Name des Unternehmens" -#: engine/core/graphene/object_types.py:757 +#: engine/core/graphene/object_types.py:779 msgid "company address" msgstr "Adresse des Unternehmens" -#: engine/core/graphene/object_types.py:758 +#: engine/core/graphene/object_types.py:780 msgid "company phone number" msgstr "Telefonnummer des Unternehmens" -#: engine/core/graphene/object_types.py:761 +#: engine/core/graphene/object_types.py:783 msgid "email from, sometimes it must be used instead of host user value" msgstr "" "E-Mail von\", muss manchmal anstelle des Host-Benutzerwerts verwendet werden" -#: engine/core/graphene/object_types.py:764 +#: engine/core/graphene/object_types.py:786 msgid "email host user" msgstr "E-Mail-Host-Benutzer" -#: engine/core/graphene/object_types.py:765 +#: engine/core/graphene/object_types.py:787 msgid "maximum amount for payment" msgstr "Höchstbetrag für die Zahlung" -#: engine/core/graphene/object_types.py:766 +#: engine/core/graphene/object_types.py:788 msgid "minimum amount for payment" msgstr "Mindestbetrag für die Zahlung" -#: engine/core/graphene/object_types.py:767 +#: engine/core/graphene/object_types.py:789 msgid "analytics data" msgstr "Analytische Daten" -#: engine/core/graphene/object_types.py:768 +#: engine/core/graphene/object_types.py:790 msgid "advertisement data" msgstr "Advertisement data" -#: engine/core/graphene/object_types.py:771 +#: engine/core/graphene/object_types.py:793 msgid "company configuration" msgstr "Konfiguration" -#: engine/core/graphene/object_types.py:775 +#: engine/core/graphene/object_types.py:797 msgid "language code" msgstr "Sprachcode" -#: engine/core/graphene/object_types.py:776 +#: engine/core/graphene/object_types.py:798 msgid "language name" msgstr "Name der Sprache" -#: engine/core/graphene/object_types.py:777 +#: engine/core/graphene/object_types.py:799 msgid "language flag, if exists :)" msgstr "Sprachflagge, falls vorhanden :)" -#: engine/core/graphene/object_types.py:780 +#: engine/core/graphene/object_types.py:802 msgid "supported languages" msgstr "Eine Liste der unterstützten Sprachen abrufen" -#: engine/core/graphene/object_types.py:812 -#: engine/core/graphene/object_types.py:815 -#: engine/core/graphene/object_types.py:818 +#: engine/core/graphene/object_types.py:834 +#: engine/core/graphene/object_types.py:837 +#: engine/core/graphene/object_types.py:840 msgid "products search results" msgstr "Suchergebnisse für Produkte" -#: engine/core/graphene/object_types.py:820 +#: engine/core/graphene/object_types.py:842 msgid "posts search results" msgstr "Suchergebnisse für Produkte" -#: engine/core/models.py:75 +#: engine/core/models.py:91 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 " @@ -1632,23 +1672,23 @@ msgstr "" "eine hierarchische Struktur bildet. Dies kann nützlich sein, um Attribute in" " einem komplexen System effektiver zu kategorisieren und zu verwalten." -#: engine/core/models.py:88 +#: engine/core/models.py:107 msgid "parent of this group" msgstr "Elternteil dieser Gruppe" -#: engine/core/models.py:89 +#: engine/core/models.py:108 msgid "parent attribute group" msgstr "Übergeordnete Attributgruppe" -#: engine/core/models.py:93 engine/core/models.py:94 +#: engine/core/models.py:112 engine/core/models.py:113 msgid "attribute group's name" msgstr "Name der Attributgruppe" -#: engine/core/models.py:102 engine/core/models.py:763 +#: engine/core/models.py:121 engine/core/models.py:849 msgid "attribute group" msgstr "Attribut-Gruppe" -#: engine/core/models.py:108 +#: engine/core/models.py:127 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1667,51 +1707,51 @@ msgstr "" "verwaltet auch zusätzliche Metadaten und Einschränkungen, wodurch es sich " "für die Verwendung in Systemen eignet, die mit Drittanbietern interagieren." -#: engine/core/models.py:122 +#: engine/core/models.py:141 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Speichert Anmeldeinformationen und Endpunkte, die für die API-Kommunikation " "des Anbieters erforderlich sind" -#: engine/core/models.py:124 +#: engine/core/models.py:143 msgid "authentication info" msgstr "Informationen zur Authentifizierung" -#: engine/core/models.py:129 +#: engine/core/models.py:148 msgid "define the markup for products retrieved from this vendor" msgstr "" "Definieren Sie den Aufschlag für Produkte, die von diesem Lieferanten " "bezogen werden" -#: engine/core/models.py:130 +#: engine/core/models.py:149 msgid "vendor markup percentage" msgstr "Prozentualer Aufschlag des Lieferanten" -#: engine/core/models.py:134 +#: engine/core/models.py:153 msgid "name of this vendor" msgstr "Name dieses Anbieters" -#: engine/core/models.py:135 +#: engine/core/models.py:154 msgid "vendor name" msgstr "Name des Anbieters" -#: engine/core/models.py:150 +#: engine/core/models.py:169 msgid "response file" msgstr "Antwortdatei" -#: engine/core/models.py:151 +#: engine/core/models.py:170 msgid "vendor's last processing response" msgstr "die letzte Verarbeitungsantwort des Lieferanten" -#: engine/core/models.py:157 +#: engine/core/models.py:176 msgid "vendor's integration file path" msgstr "Pfad der Integrationsdatei des Anbieters" -#: engine/core/models.py:158 +#: engine/core/models.py:177 msgid "integration path" msgstr "Integrationspfad" -#: engine/core/models.py:192 +#: engine/core/models.py:211 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1726,27 +1766,27 @@ msgstr "" "Sie unterstützt Operationen, die über Mixins exportiert werden, und " "ermöglicht die Anpassung von Metadaten für Verwaltungszwecke." -#: engine/core/models.py:204 engine/core/models.py:235 +#: engine/core/models.py:223 engine/core/models.py:254 msgid "internal tag identifier for the product tag" msgstr "Interner Tag-Identifikator für das Produkt-Tag" -#: engine/core/models.py:205 engine/core/models.py:236 +#: engine/core/models.py:224 engine/core/models.py:255 msgid "tag name" msgstr "Tag name" -#: engine/core/models.py:209 engine/core/models.py:240 +#: engine/core/models.py:228 engine/core/models.py:259 msgid "user-friendly name for the product tag" msgstr "Benutzerfreundlicher Name für den Produktanhänger" -#: engine/core/models.py:210 engine/core/models.py:241 +#: engine/core/models.py:229 engine/core/models.py:260 msgid "tag display name" msgstr "Tag-Anzeigename" -#: engine/core/models.py:218 +#: engine/core/models.py:237 msgid "product tag" msgstr "Produkt-Tag" -#: engine/core/models.py:224 +#: engine/core/models.py:243 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 " @@ -1757,15 +1797,15 @@ msgstr "" "zuzuordnen und zu klassifizieren. Sie enthält Attribute für einen internen " "Tag-Bezeichner und einen benutzerfreundlichen Anzeigenamen." -#: engine/core/models.py:249 +#: engine/core/models.py:268 msgid "category tag" msgstr "Kategorie-Tag" -#: engine/core/models.py:250 engine/core/models.py:322 +#: engine/core/models.py:269 engine/core/models.py:345 msgid "category tags" msgstr "Kategorie-Tags" -#: engine/core/models.py:255 +#: engine/core/models.py:274 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1788,53 +1828,53 @@ msgstr "" " Beschreibung und die Hierarchie von Kategorien festzulegen sowie Attribute " "wie Bilder, Tags oder Priorität zuzuweisen." -#: engine/core/models.py:269 +#: engine/core/models.py:292 msgid "upload an image representing this category" msgstr "Laden Sie ein Bild hoch, das diese Kategorie repräsentiert" -#: engine/core/models.py:272 +#: engine/core/models.py:295 msgid "category image" msgstr "Kategorie Bild" -#: engine/core/models.py:277 +#: engine/core/models.py:300 msgid "define a markup percentage for products in this category" msgstr "" "Definieren Sie einen prozentualen Aufschlag für Produkte in dieser Kategorie" -#: engine/core/models.py:286 +#: engine/core/models.py:309 msgid "parent of this category to form a hierarchical structure" msgstr "" "Übergeordneter dieser Kategorie, um eine hierarchische Struktur zu bilden" -#: engine/core/models.py:287 +#: engine/core/models.py:310 msgid "parent category" msgstr "Übergeordnete Kategorie" -#: engine/core/models.py:292 +#: engine/core/models.py:315 msgid "category name" msgstr "Name der Kategorie" -#: engine/core/models.py:293 +#: engine/core/models.py:316 msgid "provide a name for this category" msgstr "Geben Sie einen Namen für diese Kategorie an" -#: engine/core/models.py:300 +#: engine/core/models.py:323 msgid "add a detailed description for this category" msgstr "Fügen Sie eine detaillierte Beschreibung für diese Kategorie hinzu" -#: engine/core/models.py:301 +#: engine/core/models.py:324 msgid "category description" msgstr "Beschreibung der Kategorie" -#: engine/core/models.py:321 +#: engine/core/models.py:344 msgid "tags that help describe or group this category" msgstr "Tags, die helfen, diese Kategorie zu beschreiben oder zu gruppieren" -#: engine/core/models.py:328 engine/core/models.py:503 +#: engine/core/models.py:351 engine/core/models.py:552 msgid "priority" msgstr "Priorität" -#: engine/core/models.py:446 +#: engine/core/models.py:495 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1848,48 +1888,43 @@ msgstr "" "der Prioritätsreihenfolge. Sie ermöglicht die Organisation und Darstellung " "von markenbezogenen Daten innerhalb der Anwendung." -#: engine/core/models.py:456 +#: engine/core/models.py:505 msgid "name of this brand" msgstr "Name dieser Marke" -#: engine/core/models.py:457 +#: engine/core/models.py:506 msgid "brand name" msgstr "Markenname" -#: engine/core/models.py:464 +#: engine/core/models.py:513 msgid "upload a logo representing this brand" msgstr "Laden Sie ein Logo hoch, das diese Marke repräsentiert" -#: engine/core/models.py:466 +#: engine/core/models.py:515 msgid "brand small image" msgstr "Marke kleines Bild" -#: engine/core/models.py:472 +#: engine/core/models.py:521 msgid "upload a big logo representing this brand" msgstr "Laden Sie ein großes Logo hoch, das diese Marke repräsentiert" -#: engine/core/models.py:474 +#: engine/core/models.py:523 msgid "brand big image" msgstr "Großes Image der Marke" -#: engine/core/models.py:479 +#: engine/core/models.py:528 msgid "add a detailed description of the brand" msgstr "Fügen Sie eine detaillierte Beschreibung der Marke hinzu" -#: engine/core/models.py:480 +#: engine/core/models.py:529 msgid "brand description" msgstr "Beschreibung der Marke" -#: engine/core/models.py:485 -msgid "optional categories that this brand is associated with" -msgstr "" -"Optionale Kategorien, mit denen diese Marke in Verbindung gebracht wird" +#: engine/core/models.py:534 engine/core/models.py:535 +msgid "DEPRECATED" +msgstr "VERALTET" -#: engine/core/models.py:486 -msgid "associated categories" -msgstr "Kategorien" - -#: engine/core/models.py:516 +#: engine/core/models.py:569 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1905,73 +1940,73 @@ msgstr "" "Bestandsverwaltungssystems, um die Nachverfolgung und Bewertung der von " "verschiedenen Anbietern verfügbaren Produkte zu ermöglichen." -#: engine/core/models.py:528 +#: engine/core/models.py:581 msgid "the vendor supplying this product stock" msgstr "Der Verkäufer, der dieses Produkt liefert, hat folgende Bestände" -#: engine/core/models.py:529 +#: engine/core/models.py:582 msgid "associated vendor" msgstr "Zugehöriger Anbieter" -#: engine/core/models.py:533 +#: engine/core/models.py:588 msgid "final price to the customer after markups" msgstr "Endpreis für den Kunden nach Aufschlägen" -#: engine/core/models.py:534 +#: engine/core/models.py:589 msgid "selling price" msgstr "Verkaufspreis" -#: engine/core/models.py:539 +#: engine/core/models.py:594 msgid "the product associated with this stock entry" msgstr "Das mit diesem Bestandseintrag verbundene Produkt" -#: engine/core/models.py:540 engine/core/models.py:828 -#: engine/core/models.py:874 engine/core/models.py:1912 +#: engine/core/models.py:595 engine/core/models.py:914 +#: engine/core/models.py:962 engine/core/models.py:2020 msgid "associated product" msgstr "Zugehöriges Produkt" -#: engine/core/models.py:547 +#: engine/core/models.py:604 msgid "the price paid to the vendor for this product" msgstr "Der an den Verkäufer gezahlte Preis für dieses Produkt" -#: engine/core/models.py:548 +#: engine/core/models.py:605 msgid "vendor purchase price" msgstr "Einkaufspreis des Verkäufers" -#: engine/core/models.py:552 +#: engine/core/models.py:609 msgid "available quantity of the product in stock" msgstr "Verfügbare Menge des Produkts auf Lager" -#: engine/core/models.py:553 +#: engine/core/models.py:610 msgid "quantity in stock" msgstr "Vorrätige Menge" -#: engine/core/models.py:557 +#: engine/core/models.py:614 msgid "vendor-assigned SKU for identifying the product" msgstr "Vom Hersteller zugewiesene SKU zur Identifizierung des Produkts" -#: engine/core/models.py:558 +#: engine/core/models.py:615 msgid "vendor sku" msgstr "SKU des Verkäufers" -#: engine/core/models.py:564 +#: engine/core/models.py:621 msgid "digital file associated with this stock if applicable" msgstr "" "Digitale Datei, die mit diesem Bestand verbunden ist, falls zutreffend" -#: engine/core/models.py:565 +#: engine/core/models.py:622 msgid "digital file" msgstr "Digitale Datei" -#: engine/core/models.py:569 +#: engine/core/models.py:626 msgid "system attributes" msgstr "System-Attribute" -#: engine/core/models.py:577 +#: engine/core/models.py:636 msgid "stock entries" msgstr "Bestandseinträge" -#: engine/core/models.py:582 +#: engine/core/models.py:641 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1993,74 +2028,82 @@ msgstr "" " um Produktdaten und die damit verbundenen Informationen innerhalb einer " "Anwendung zu definieren und zu manipulieren." -#: engine/core/models.py:595 +#: engine/core/models.py:660 msgid "category this product belongs to" msgstr "Kategorie, zu der dieses Produkt gehört" -#: engine/core/models.py:604 +#: engine/core/models.py:669 msgid "optionally associate this product with a brand" msgstr "Optional können Sie dieses Produkt mit einer Marke verknüpfen" -#: engine/core/models.py:610 +#: engine/core/models.py:675 msgid "tags that help describe or group this product" msgstr "Tags, die helfen, dieses Produkt zu beschreiben oder zu gruppieren" -#: engine/core/models.py:615 +#: engine/core/models.py:680 msgid "indicates whether this product is digitally delivered" msgstr "Gibt an, ob dieses Produkt digital geliefert wird" -#: engine/core/models.py:616 +#: engine/core/models.py:681 msgid "is product digital" msgstr "Ist das Produkt digital" -#: engine/core/models.py:623 +#: engine/core/models.py:688 msgid "indicates whether this product should be updated from periodic task" msgstr "" "gibt an, ob dieses Produkt von der periodischen Aufgabe aktualisiert werden " "soll" -#: engine/core/models.py:625 +#: engine/core/models.py:690 msgid "is product updatable" msgstr "ist das Produkt aktualisierbar" -#: engine/core/models.py:631 +#: engine/core/models.py:696 msgid "provide a clear identifying name for the product" msgstr "" "Geben Sie einen eindeutigen Namen zur Identifizierung des Produkts an." -#: engine/core/models.py:632 +#: engine/core/models.py:697 msgid "product name" msgstr "Name des Produkts" -#: engine/core/models.py:638 engine/core/models.py:923 +#: engine/core/models.py:703 engine/core/models.py:1012 msgid "add a detailed description of the product" msgstr "Fügen Sie eine detaillierte Beschreibung des Produkts hinzu" -#: engine/core/models.py:639 +#: engine/core/models.py:704 msgid "product description" msgstr "Beschreibung des Produkts" -#: engine/core/models.py:646 +#: engine/core/models.py:710 +msgid "optional video file for this product" +msgstr "Optionale Videodatei für dieses Produkt" + +#: engine/core/models.py:711 +msgid "product video" +msgstr "Produktvideo" + +#: engine/core/models.py:719 msgid "part number for this product" msgstr "Teilenummer für dieses Produkt" -#: engine/core/models.py:647 +#: engine/core/models.py:720 msgid "part number" msgstr "Teilnummer" -#: engine/core/models.py:666 +#: engine/core/models.py:739 msgid "stock keeping unit for this product" msgstr "Lagerhaltende Einheit für dieses Produkt" -#: engine/core/models.py:673 +#: engine/core/models.py:746 msgid "whether to export this product to marketplaces" msgstr "Ob dieses Produkt auf Marktplätze exportiert werden soll" -#: engine/core/models.py:674 +#: engine/core/models.py:747 msgid "Export to Marketplaces" msgstr "Exportieren zu Marktplätzen" -#: engine/core/models.py:749 +#: engine/core/models.py:835 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 " @@ -2077,66 +2120,66 @@ msgstr "" "Array und Object. Dies ermöglicht eine dynamische und flexible " "Datenstrukturierung." -#: engine/core/models.py:762 +#: engine/core/models.py:848 msgid "group of this attribute" msgstr "Gruppe dieses Attributs" -#: engine/core/models.py:768 +#: engine/core/models.py:854 msgid "string" msgstr "Zeichenfolge" -#: engine/core/models.py:769 +#: engine/core/models.py:855 msgid "integer" msgstr "Integer" -#: engine/core/models.py:770 +#: engine/core/models.py:856 msgid "float" msgstr "Schwimmer" -#: engine/core/models.py:771 +#: engine/core/models.py:857 msgid "boolean" msgstr "Boolesche" -#: engine/core/models.py:772 +#: engine/core/models.py:858 msgid "array" msgstr "Array" -#: engine/core/models.py:773 +#: engine/core/models.py:859 msgid "object" msgstr "Objekt" -#: engine/core/models.py:775 +#: engine/core/models.py:861 msgid "type of the attribute's value" msgstr "Typ des Attributwerts" -#: engine/core/models.py:776 +#: engine/core/models.py:862 msgid "value type" msgstr "Werttyp" -#: engine/core/models.py:781 +#: engine/core/models.py:867 msgid "name of this attribute" msgstr "Name dieses Attributs" -#: engine/core/models.py:782 +#: engine/core/models.py:868 msgid "attribute's name" msgstr "Name des Attributs" -#: engine/core/models.py:787 +#: engine/core/models.py:873 msgid "is filterable" msgstr "ist filterbar" -#: engine/core/models.py:789 +#: engine/core/models.py:875 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." -#: engine/core/models.py:802 engine/core/models.py:820 +#: engine/core/models.py:888 engine/core/models.py:906 #: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Attribut" -#: engine/core/models.py:808 +#: engine/core/models.py:894 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" @@ -2147,20 +2190,20 @@ msgstr "" "und ermöglicht so eine bessere Organisation und dynamische Darstellung der " "Produktmerkmale." -#: engine/core/models.py:819 +#: engine/core/models.py:905 msgid "attribute of this value" msgstr "Attribut dieses Wertes" -#: engine/core/models.py:827 +#: engine/core/models.py:913 msgid "the specific product associated with this attribute's value" msgstr "" "Das spezifische Produkt, das mit dem Wert dieses Attributs verbunden ist" -#: engine/core/models.py:833 +#: engine/core/models.py:919 msgid "the specific value for this attribute" msgstr "Der spezifische Wert für dieses Attribut" -#: engine/core/models.py:846 +#: engine/core/models.py:934 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -2174,41 +2217,41 @@ msgstr "" "Produkten und der Festlegung ihrer Anzeigereihenfolge. Sie enthält auch eine" " Funktion zur Barrierefreiheit mit alternativem Text für die Bilder." -#: engine/core/models.py:857 +#: engine/core/models.py:945 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." -#: engine/core/models.py:858 +#: engine/core/models.py:946 msgid "image alt text" msgstr "Bild-Alt-Text" -#: engine/core/models.py:861 +#: engine/core/models.py:949 msgid "upload the image file for this product" msgstr "Laden Sie die Bilddatei für dieses Produkt hoch" -#: engine/core/models.py:862 engine/core/models.py:893 +#: engine/core/models.py:950 engine/core/models.py:982 msgid "product image" msgstr "Produktbild" -#: engine/core/models.py:867 +#: engine/core/models.py:955 msgid "determines the order in which images are displayed" msgstr "Legt die Reihenfolge fest, in der die Bilder angezeigt werden" -#: engine/core/models.py:868 +#: engine/core/models.py:956 msgid "display priority" msgstr "Priorität anzeigen" -#: engine/core/models.py:873 +#: engine/core/models.py:961 msgid "the product that this image represents" msgstr "Das Produkt, das dieses Bild darstellt" -#: engine/core/models.py:894 +#: engine/core/models.py:983 msgid "product images" msgstr "Produktbilder" -#: engine/core/models.py:899 +#: engine/core/models.py:988 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -2225,39 +2268,39 @@ msgstr "" "Sie ist mit dem Produktkatalog integriert, um die betroffenen Artikel in der" " Kampagne zu bestimmen." -#: engine/core/models.py:911 +#: engine/core/models.py:1000 msgid "percentage discount for the selected products" msgstr "Prozentualer Rabatt für die ausgewählten Produkte" -#: engine/core/models.py:912 +#: engine/core/models.py:1001 msgid "discount percentage" msgstr "Prozentsatz der Ermäßigung" -#: engine/core/models.py:917 +#: engine/core/models.py:1006 msgid "provide a unique name for this promotion" msgstr "Geben Sie einen eindeutigen Namen für diese Aktion an" -#: engine/core/models.py:918 +#: engine/core/models.py:1007 msgid "promotion name" msgstr "Name der Aktion" -#: engine/core/models.py:924 +#: engine/core/models.py:1013 msgid "promotion description" msgstr "Promotion description" -#: engine/core/models.py:929 +#: engine/core/models.py:1018 msgid "select which products are included in this promotion" msgstr "Wählen Sie aus, welche Produkte in dieser Aktion enthalten sind" -#: engine/core/models.py:930 +#: engine/core/models.py:1019 msgid "included products" msgstr "Enthaltene Produkte" -#: engine/core/models.py:934 +#: engine/core/models.py:1027 msgid "promotion" msgstr "Förderung" -#: engine/core/models.py:945 +#: engine/core/models.py:1038 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2270,23 +2313,23 @@ msgstr "" "Entfernen von Produkten sowie das Hinzufügen und Entfernen mehrerer Produkte" " gleichzeitig." -#: engine/core/models.py:957 +#: engine/core/models.py:1050 msgid "products that the user has marked as wanted" msgstr "Produkte, die der Benutzer als gewünscht markiert hat" -#: engine/core/models.py:965 +#: engine/core/models.py:1058 msgid "user who owns this wishlist" msgstr "Benutzer, dem diese Wunschliste gehört" -#: engine/core/models.py:966 +#: engine/core/models.py:1059 msgid "wishlist owner" msgstr "Besitzer der Wishlist" -#: engine/core/models.py:974 +#: engine/core/models.py:1067 msgid "wishlist" msgstr "Wunschzettel" -#: engine/core/models.py:1016 +#: engine/core/models.py:1109 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2303,19 +2346,19 @@ msgstr "" " die Funktionalität von bestimmten Mixins und bietet zusätzliche " "benutzerdefinierte Funktionen." -#: engine/core/models.py:1031 +#: engine/core/models.py:1124 msgid "documentary" msgstr "Dokumentarfilm" -#: engine/core/models.py:1032 +#: engine/core/models.py:1125 msgid "documentaries" msgstr "Dokumentarfilme" -#: engine/core/models.py:1042 +#: engine/core/models.py:1135 msgid "unresolved" msgstr "Ungelöst" -#: engine/core/models.py:1047 +#: engine/core/models.py:1140 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2337,59 +2380,59 @@ msgstr "" "ermöglicht es auch, eine Adresse mit einem Benutzer zu verknüpfen, was die " "personalisierte Datenverarbeitung erleichtert." -#: engine/core/models.py:1062 +#: engine/core/models.py:1155 msgid "address line for the customer" msgstr "Adresszeile für den Kunden" -#: engine/core/models.py:1063 +#: engine/core/models.py:1156 msgid "address line" msgstr "Adresszeile" -#: engine/core/models.py:1065 +#: engine/core/models.py:1158 msgid "street" msgstr "Straße" -#: engine/core/models.py:1066 +#: engine/core/models.py:1159 msgid "district" msgstr "Bezirk" -#: engine/core/models.py:1067 +#: engine/core/models.py:1160 msgid "city" msgstr "Stadt" -#: engine/core/models.py:1068 +#: engine/core/models.py:1161 msgid "region" msgstr "Region" -#: engine/core/models.py:1069 +#: engine/core/models.py:1162 msgid "postal code" msgstr "Postleitzahl" -#: engine/core/models.py:1070 +#: engine/core/models.py:1163 msgid "country" msgstr "Land" -#: engine/core/models.py:1077 +#: engine/core/models.py:1170 msgid "geolocation point: (longitude, latitude)" msgstr "Geolocation Point(Längengrad, Breitengrad)" -#: engine/core/models.py:1083 +#: engine/core/models.py:1176 msgid "full JSON response from geocoder for this address" msgstr "Vollständige JSON-Antwort vom Geocoder für diese Adresse" -#: engine/core/models.py:1089 +#: engine/core/models.py:1182 msgid "stored JSON response from the geocoding service" msgstr "Gespeicherte JSON-Antwort vom Geokodierungsdienst" -#: engine/core/models.py:1099 +#: engine/core/models.py:1192 msgid "address" msgstr "Adresse" -#: engine/core/models.py:1100 +#: engine/core/models.py:1193 msgid "addresses" msgstr "Adressen" -#: engine/core/models.py:1112 +#: engine/core/models.py:1205 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2407,76 +2450,76 @@ msgstr "" "Validierung und Anwendung des Promo-Codes auf eine Bestellung, wobei " "sichergestellt wird, dass die Einschränkungen eingehalten werden." -#: engine/core/models.py:1126 +#: engine/core/models.py:1219 msgid "unique code used by a user to redeem a discount" msgstr "" "Einzigartiger Code, den ein Nutzer zum Einlösen eines Rabatts verwendet" -#: engine/core/models.py:1127 +#: engine/core/models.py:1220 msgid "promo code identifier" msgstr "Kennung des Promo-Codes" -#: engine/core/models.py:1134 +#: engine/core/models.py:1227 msgid "fixed discount amount applied if percent is not used" msgstr "" "Fester Rabattbetrag, der angewandt wird, wenn kein Prozentsatz verwendet " "wird" -#: engine/core/models.py:1135 +#: engine/core/models.py:1228 msgid "fixed discount amount" msgstr "Fester Rabattbetrag" -#: engine/core/models.py:1141 +#: engine/core/models.py:1234 msgid "percentage discount applied if fixed amount is not used" msgstr "Prozentualer Rabatt, wenn der Festbetrag nicht verwendet wird" -#: engine/core/models.py:1142 +#: engine/core/models.py:1235 msgid "percentage discount" msgstr "Prozentualer Rabatt" -#: engine/core/models.py:1147 +#: engine/core/models.py:1240 msgid "timestamp when the promocode expires" msgstr "Zeitstempel, wann der Promocode abläuft" -#: engine/core/models.py:1148 +#: engine/core/models.py:1241 msgid "end validity time" msgstr "Ende der Gültigkeitsdauer" -#: engine/core/models.py:1153 +#: engine/core/models.py:1246 msgid "timestamp from which this promocode is valid" msgstr "Zeitstempel, ab dem dieser Promocode gültig ist" -#: engine/core/models.py:1154 +#: engine/core/models.py:1247 msgid "start validity time" msgstr "Beginn der Gültigkeitsdauer" -#: engine/core/models.py:1159 +#: engine/core/models.py:1252 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "Zeitstempel, wann der Promocode verwendet wurde, leer, wenn noch nicht " "verwendet" -#: engine/core/models.py:1160 +#: engine/core/models.py:1253 msgid "usage timestamp" msgstr "Zeitstempel der Verwendung" -#: engine/core/models.py:1165 +#: engine/core/models.py:1258 msgid "user assigned to this promocode if applicable" msgstr "Diesem Promocode zugewiesener Benutzer, falls zutreffend" -#: engine/core/models.py:1166 +#: engine/core/models.py:1259 msgid "assigned user" msgstr "Zugewiesener Benutzer" -#: engine/core/models.py:1173 +#: engine/core/models.py:1266 msgid "promo code" msgstr "Promo-Code" -#: engine/core/models.py:1174 +#: engine/core/models.py:1267 msgid "promo codes" msgstr "Promo-Codes" -#: engine/core/models.py:1190 +#: engine/core/models.py:1283 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2484,16 +2527,16 @@ msgstr "" "Es sollte nur eine Art von Rabatt definiert werden (Betrag oder " "Prozentsatz), aber nicht beides oder keines von beiden." -#: engine/core/models.py:1212 +#: engine/core/models.py:1305 msgid "promocode already used" msgstr "Promocode wurde bereits verwendet" -#: engine/core/models.py:1234 +#: engine/core/models.py:1327 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Ungültiger Rabatttyp für den Promocode {self.uuid}!" -#: engine/core/models.py:1243 +#: engine/core/models.py:1336 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 " @@ -2511,144 +2554,144 @@ msgstr "" "aktualisiert werden. Ebenso unterstützt die Funktionalität die Verwaltung " "der Produkte im Lebenszyklus der Bestellung." -#: engine/core/models.py:1260 +#: engine/core/models.py:1357 msgid "the billing address used for this order" msgstr "Die für diese Bestellung verwendete Rechnungsadresse" -#: engine/core/models.py:1268 +#: engine/core/models.py:1365 msgid "optional promo code applied to this order" msgstr "Optionaler Promo-Code für diese Bestellung" -#: engine/core/models.py:1269 +#: engine/core/models.py:1366 msgid "applied promo code" msgstr "Angewandter Promo-Code" -#: engine/core/models.py:1277 +#: engine/core/models.py:1374 msgid "the shipping address used for this order" msgstr "Die für diese Bestellung verwendete Lieferadresse" -#: engine/core/models.py:1278 +#: engine/core/models.py:1375 msgid "shipping address" msgstr "Lieferadresse" -#: engine/core/models.py:1284 +#: engine/core/models.py:1381 msgid "current status of the order in its lifecycle" msgstr "Aktueller Status des Auftrags in seinem Lebenszyklus" -#: engine/core/models.py:1285 +#: engine/core/models.py:1382 msgid "order status" msgstr "Status der Bestellung" -#: engine/core/models.py:1290 engine/core/models.py:1889 +#: engine/core/models.py:1387 engine/core/models.py:1997 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" -#: engine/core/models.py:1296 +#: engine/core/models.py:1393 msgid "json representation of order attributes for this order" msgstr "JSON-Darstellung der Auftragsattribute für diesen Auftrag" -#: engine/core/models.py:1302 +#: engine/core/models.py:1399 msgid "the user who placed the order" msgstr "Der Benutzer, der die Bestellung aufgegeben hat" -#: engine/core/models.py:1303 +#: engine/core/models.py:1400 msgid "user" msgstr "Benutzer" -#: engine/core/models.py:1309 +#: engine/core/models.py:1406 msgid "the timestamp when the order was finalized" msgstr "Der Zeitstempel, zu dem der Auftrag abgeschlossen wurde" -#: engine/core/models.py:1310 +#: engine/core/models.py:1407 msgid "buy time" msgstr "Zeit kaufen" -#: engine/core/models.py:1317 +#: engine/core/models.py:1414 msgid "a human-readable identifier for the order" msgstr "Ein von Menschen lesbarer Identifikator für den Auftrag" -#: engine/core/models.py:1318 +#: engine/core/models.py:1415 msgid "human readable id" msgstr "menschenlesbare ID" -#: engine/core/models.py:1324 +#: engine/core/models.py:1421 msgid "order" msgstr "Bestellung" -#: engine/core/models.py:1371 +#: engine/core/models.py:1468 msgid "a user must have only one pending order at a time" msgstr "Ein Benutzer darf immer nur einen schwebenden Auftrag haben!" -#: engine/core/models.py:1404 +#: engine/core/models.py:1504 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." -#: engine/core/models.py:1410 +#: engine/core/models.py:1510 msgid "you cannot add inactive products to order" msgstr "Sie können keine inaktiven Produkte zur Bestellung hinzufügen" -#: engine/core/models.py:1432 +#: engine/core/models.py:1533 msgid "you cannot add more products than available in stock" msgstr "Sie können nicht mehr Produkte hinzufügen, als auf Lager sind" -#: engine/core/models.py:1456 engine/core/models.py:1485 -#: engine/core/models.py:1495 +#: engine/core/models.py:1557 engine/core/models.py:1586 +#: engine/core/models.py:1596 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." -#: engine/core/models.py:1480 +#: engine/core/models.py:1581 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} existiert nicht mit Abfrage <{query}>!" -#: engine/core/models.py:1519 +#: engine/core/models.py:1620 msgid "promocode does not exist" msgstr "Promocode existiert nicht" -#: engine/core/models.py:1534 +#: engine/core/models.py:1635 msgid "you can only buy physical products with shipping address specified" msgstr "" "Sie können nur physische Produkte mit angegebener Lieferadresse kaufen!" -#: engine/core/models.py:1555 +#: engine/core/models.py:1656 msgid "address does not exist" msgstr "Adresse ist nicht vorhanden" -#: engine/core/models.py:1577 engine/core/models.py:1656 +#: engine/core/models.py:1678 engine/core/models.py:1757 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." -#: engine/core/models.py:1583 engine/core/models.py:1649 +#: engine/core/models.py:1684 engine/core/models.py:1750 msgid "invalid force value" msgstr "Ungültiger Force-Wert" -#: engine/core/models.py:1589 engine/core/models.py:1660 +#: engine/core/models.py:1690 engine/core/models.py:1761 msgid "you cannot purchase an empty order!" msgstr "Sie können keine leere Bestellung kaufen!" -#: engine/core/models.py:1610 +#: engine/core/models.py:1711 msgid "you cannot buy an order without a user" msgstr "" "Sie können keine Produkte aus einer Bestellung entfernen, die nicht in " "Bearbeitung ist." -#: engine/core/models.py:1624 +#: engine/core/models.py:1725 msgid "a user without a balance cannot buy with balance" msgstr "Ein Benutzer ohne Guthaben kann nicht mit Guthaben kaufen!" -#: engine/core/models.py:1630 +#: engine/core/models.py:1731 msgid "insufficient funds to complete the order" msgstr "Unzureichende Mittel für die Ausführung des Auftrags" -#: engine/core/models.py:1671 +#: engine/core/models.py:1772 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2656,14 +2699,14 @@ msgstr "" "Sie können nicht ohne Registrierung kaufen, bitte geben Sie die folgenden " "Informationen an: Kundenname, Kunden-E-Mail, Kunden-Telefonnummer" -#: engine/core/models.py:1682 +#: engine/core/models.py:1783 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "Ungültige Zahlungsmethode: {payment_method} von {available_payment_methods}!" -#: engine/core/models.py:1813 +#: engine/core/models.py:1916 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2678,34 +2721,34 @@ msgstr "" "Benutzer zugewiesene Bewertung. Die Klasse verwendet Datenbankfelder, um " "Feedbackdaten effektiv zu modellieren und zu verwalten." -#: engine/core/models.py:1825 +#: engine/core/models.py:1928 msgid "user-provided comments about their experience with the product" msgstr "Kommentare der Nutzer über ihre Erfahrungen mit dem Produkt" -#: engine/core/models.py:1826 +#: engine/core/models.py:1929 msgid "feedback comments" msgstr "Kommentare zum Feedback" -#: engine/core/models.py:1834 +#: engine/core/models.py:1937 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" -#: engine/core/models.py:1836 +#: engine/core/models.py:1939 msgid "related order product" msgstr "Produkt zur Bestellung" -#: engine/core/models.py:1841 +#: engine/core/models.py:1944 msgid "user-assigned rating for the product" msgstr "Vom Benutzer zugewiesene Bewertung für das Produkt" -#: engine/core/models.py:1842 +#: engine/core/models.py:1945 msgid "product rating" msgstr "Produktbewertung" -#: engine/core/models.py:1862 +#: engine/core/models.py:1965 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2728,112 +2771,112 @@ msgstr "" "Produkte. Das Modell ist mit den Modellen \"Order\" und \"Product\" " "integriert und speichert einen Verweis auf diese." -#: engine/core/models.py:1877 +#: engine/core/models.py:1985 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" -#: engine/core/models.py:1878 +#: engine/core/models.py:1986 msgid "purchase price at order time" msgstr "Einkaufspreis zum Zeitpunkt der Bestellung" -#: engine/core/models.py:1883 +#: engine/core/models.py:1991 msgid "internal comments for admins about this ordered product" msgstr "Interne Kommentare für Administratoren zu diesem bestellten Produkt" -#: engine/core/models.py:1884 +#: engine/core/models.py:1992 msgid "internal comments" msgstr "Interne Kommentare" -#: engine/core/models.py:1890 +#: engine/core/models.py:1998 msgid "user notifications" msgstr "Benutzerbenachrichtigungen" -#: engine/core/models.py:1895 +#: engine/core/models.py:2003 msgid "json representation of this item's attributes" msgstr "JSON-Darstellung der Attribute dieses Artikels" -#: engine/core/models.py:1896 +#: engine/core/models.py:2004 msgid "ordered product attributes" msgstr "Bestellte Produktattribute" -#: engine/core/models.py:1901 +#: engine/core/models.py:2009 msgid "reference to the parent order that contains this product" msgstr "Verweis auf den übergeordneten Auftrag, der dieses Produkt enthält" -#: engine/core/models.py:1902 +#: engine/core/models.py:2010 msgid "parent order" msgstr "Übergeordneter Auftrag" -#: engine/core/models.py:1911 +#: engine/core/models.py:2019 msgid "the specific product associated with this order line" msgstr "Das spezifische Produkt, das mit dieser Auftragszeile verbunden ist" -#: engine/core/models.py:1918 +#: engine/core/models.py:2026 msgid "quantity of this specific product in the order" msgstr "Menge dieses spezifischen Produkts in der Bestellung" -#: engine/core/models.py:1919 +#: engine/core/models.py:2027 msgid "product quantity" msgstr "Produktmenge" -#: engine/core/models.py:1926 +#: engine/core/models.py:2034 msgid "current status of this product in the order" msgstr "Aktueller Status dieses Produkts im Auftrag" -#: engine/core/models.py:1927 +#: engine/core/models.py:2035 msgid "product line status" msgstr "Status der Produktlinie" -#: engine/core/models.py:1998 +#: engine/core/models.py:2106 msgid "order product must have an order" msgstr "Das Bestellprodukt muss eine zugehörige Bestellung haben!" -#: engine/core/models.py:2000 +#: engine/core/models.py:2108 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Falsche Aktion für Feedback angegeben: {action}!" -#: engine/core/models.py:2017 +#: engine/core/models.py:2125 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." -#: engine/core/models.py:2026 +#: engine/core/models.py:2132 engine/core/models.py:2227 msgid "name" msgstr "Name" -#: engine/core/models.py:2028 +#: engine/core/models.py:2134 msgid "URL of the integration" msgstr "URL der Integration" -#: engine/core/models.py:2031 +#: engine/core/models.py:2137 msgid "authentication credentials" msgstr "Anmeldeinformationen zur Authentifizierung" -#: engine/core/models.py:2054 +#: engine/core/models.py:2160 msgid "you can only have one default CRM provider" msgstr "Sie können nur einen Standard-CRM-Anbieter haben" -#: engine/core/models.py:2064 +#: engine/core/models.py:2170 msgid "CRM" msgstr "CRM" -#: engine/core/models.py:2065 +#: engine/core/models.py:2171 msgid "CRMs" msgstr "CRMs" -#: engine/core/models.py:2081 +#: engine/core/models.py:2187 msgid "order CRM link" msgstr "CRM-Link der Bestellung" -#: engine/core/models.py:2082 +#: engine/core/models.py:2188 msgid "orders CRM links" msgstr "CRM-Links der Bestellungen" -#: engine/core/models.py:2087 +#: engine/core/models.py:2193 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2850,14 +2893,40 @@ msgstr "" " zur Generierung einer URL für das Herunterladen des Assets, wenn sich die " "zugehörige Bestellung in einem abgeschlossenen Status befindet." -#: engine/core/models.py:2103 +#: engine/core/models.py:2209 msgid "download" msgstr "Herunterladen" -#: engine/core/models.py:2104 +#: engine/core/models.py:2210 msgid "downloads" msgstr "Herunterladen" +#: engine/core/models.py:2228 +msgid "descriptive name for the image" +msgstr "Beschreibender Name für das Bild" + +#: engine/core/models.py:2233 +msgid "image file pasted in the markdown editor" +msgstr "Im Markdown-Editor eingefügte Bilddatei" + +#: engine/core/models.py:2239 +msgid "alt text" +msgstr "Anderer Text" + +#: engine/core/models.py:2240 +msgid "alternative text for accessibility" +msgstr "" +"Geben Sie einen alternativen Text für das Bild an, um die Barrierefreiheit " +"zu gewährleisten." + +#: engine/core/models.py:2244 +msgid "pasted image" +msgstr "Eingefügtes Bild" + +#: engine/core/models.py:2245 +msgid "pasted images" +msgstr "Eingefügte Bilder" + #: engine/core/serializers/utility.py:91 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." @@ -2866,6 +2935,16 @@ msgstr "" "um eine Bewertung abzugeben." #: engine/core/sitemaps.py:25 +#: engine/core/templates/admin_doc/bookmarklets.html:8 +#: engine/core/templates/admin_doc/index.html:8 +#: engine/core/templates/admin_doc/missing_docutils.html:8 +#: engine/core/templates/admin_doc/model_detail.html:8 +#: engine/core/templates/admin_doc/model_index.html:8 +#: engine/core/templates/admin_doc/template_detail.html:8 +#: engine/core/templates/admin_doc/template_filter_index.html:8 +#: engine/core/templates/admin_doc/template_tag_index.html:8 +#: engine/core/templates/admin_doc/view_detail.html:8 +#: engine/core/templates/admin_doc/view_index.html:8 msgid "Home" msgstr "Startseite" @@ -2918,45 +2997,34 @@ msgstr "Brutto" msgid "Dashboard" msgstr "Dashboard" -#: engine/core/templates/admin/dashboard/_income_overview.html:7 +#: engine/core/templates/admin/dashboard/_income_overview.html:6 msgid "Income overview" msgstr "Einkommensübersicht" -#: engine/core/templates/admin/dashboard/_income_overview.html:31 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Net" +#: engine/core/templates/admin/dashboard/_income_overview.html:16 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" msgstr "Nettoeinkommen" -#: engine/core/templates/admin/dashboard/_income_overview.html:37 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Taxes" -msgstr "Steuern" - -#: engine/core/templates/admin/dashboard/_income_overview.html:43 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 +#: engine/core/templates/admin/dashboard/_income_overview.html:21 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 msgid "Returns" msgstr "Rückgabe" -#: engine/core/templates/admin/dashboard/_income_overview.html:48 -msgid "Gross (pie total)" -msgstr "Bruttoeinnahmen" - -#: engine/core/templates/admin/dashboard/_income_overview.html:72 -msgid "No data" -msgstr "Kein Datum" - +#: engine/core/templates/admin/dashboard/_income_overview.html:26 #: engine/core/templates/admin/dashboard/_kpis.html:6 msgid "GMV" msgstr "GMV" +#: engine/core/templates/admin/dashboard/_income_overview.html:50 +msgid "No data" +msgstr "Kein Datum" + #: engine/core/templates/admin/dashboard/_kpis.html:34 msgid "AOV" msgstr "AOV" -#: engine/core/templates/admin/dashboard/_kpis.html:48 -msgid "Net revenue" -msgstr "Nettoeinkommen" - #: engine/core/templates/admin/dashboard/_kpis.html:62 msgid "Refund rate" msgstr "Erstattungssatz" @@ -2969,7 +3037,7 @@ msgstr "Zurückgeschickt" msgid "Low stock" msgstr "Niedriger Bestand" -#: engine/core/templates/admin/dashboard/_low_stock.html:29 +#: engine/core/templates/admin/dashboard/_low_stock.html:33 msgid "No low stock items." msgstr "Keine Artikel mit geringem Lagerbestand." @@ -3026,6 +3094,303 @@ msgstr "Keine Kategorieverkäufe in den letzten 30 Tagen." msgid "Django site admin" msgstr "Django-Website-Administrator" +#: engine/core/templates/admin_doc/bookmarklets.html:4 +#: engine/core/templates/admin_doc/bookmarklets.html:17 +msgid "Documentation bookmarklets" +msgstr "Dokumentations-Bookmarklets" + +#: engine/core/templates/admin_doc/bookmarklets.html:10 +#: engine/core/templates/admin_doc/index.html:4 +#: engine/core/templates/admin_doc/index.html:10 +#: engine/core/templates/admin_doc/index.html:15 +#: engine/core/templates/admin_doc/missing_docutils.html:10 +#: engine/core/templates/admin_doc/missing_docutils.html:19 +#: engine/core/templates/admin_doc/model_detail.html:10 +#: engine/core/templates/admin_doc/model_index.html:10 +#: engine/core/templates/admin_doc/template_detail.html:10 +#: engine/core/templates/admin_doc/template_filter_index.html:10 +#: engine/core/templates/admin_doc/template_tag_index.html:10 +#: engine/core/templates/admin_doc/view_detail.html:10 +#: engine/core/templates/admin_doc/view_index.html:10 +msgid "Documentation" +msgstr "Dokumentation" + +#: engine/core/templates/admin_doc/bookmarklets.html:12 +#: engine/core/templates/admin_doc/index.html:53 +msgid "Bookmarklets" +msgstr "Lesezeichen" + +#: engine/core/templates/admin_doc/bookmarklets.html:19 +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Um Bookmarklets zu installieren, ziehen Sie den Link in Ihre Lesezeichen-" +"Symbolleiste oder klicken Sie mit der rechten Maustaste auf den Link und " +"fügen Sie ihn Ihren Lesezeichen hinzu. Jetzt können Sie das Bookmarklet von " +"jeder Seite der Website aus auswählen." + +#: engine/core/templates/admin_doc/bookmarklets.html:29 +msgid "Documentation for this page" +msgstr "Dokumentation für diese Seite" + +#: engine/core/templates/admin_doc/bookmarklets.html:31 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Springt von jeder Seite zur Dokumentation für die Ansicht, die diese Seite " +"generiert." + +#: engine/core/templates/admin_doc/index.html:21 +#: engine/core/templates/admin_doc/model_detail.html:12 +#: engine/core/templates/admin_doc/model_index.html:4 +#: engine/core/templates/admin_doc/model_index.html:12 +msgid "Models" +msgstr "Modelle" + +#: engine/core/templates/admin_doc/index.html:23 +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Modelle sind Beschreibungen aller Objekte im System und der zugehörigen " +"Felder. Jedes Modell verfügt über eine Liste von Feldern, auf die als " +"Vorlagenvariablen zugegriffen werden kann." + +#: engine/core/templates/admin_doc/index.html:29 +#: engine/core/templates/admin_doc/view_detail.html:12 +#: engine/core/templates/admin_doc/view_index.html:4 +#: engine/core/templates/admin_doc/view_index.html:12 +msgid "Views" +msgstr "Ansichten" + +#: engine/core/templates/admin_doc/index.html:31 +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Jede Seite auf der öffentlichen Website wird durch eine Ansicht generiert. " +"Die Ansicht legt fest, welche Vorlage zur Generierung der Seite verwendet " +"wird und welche Objekte für diese Vorlage verfügbar sind." + +#: engine/core/templates/admin_doc/index.html:39 +msgid "List of all the template tags and their functions." +msgstr "Liste aller Template-Tags und ihrer Funktionen." + +#: engine/core/templates/admin_doc/index.html:45 +#: engine/core/templates/admin_doc/template_filter_index.html:12 +msgid "Filters" +msgstr "Filter" + +#: engine/core/templates/admin_doc/index.html:47 +msgid "" +"Filters are actions which can be applied to variables in a template to alter" +" the output." +msgstr "" +"Filter sind Aktionen, die auf Variablen in einer Vorlage angewendet werden " +"können, um die Ausgabe zu ändern." + +#: engine/core/templates/admin_doc/index.html:55 +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Tools für Ihren Browser, um schnell auf Verwaltungsfunktionen zuzugreifen." + +#: engine/core/templates/admin_doc/missing_docutils.html:4 +msgid "Please install docutils" +msgstr "Bitte installieren Sie docutils." + +#: engine/core/templates/admin_doc/missing_docutils.html:20 +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"Das Admin-Dokumentationssystem benötigt die Python-Bibliothek docutils." + +#: engine/core/templates/admin_doc/missing_docutils.html:21 +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Bitte bitten Sie Ihre Administratoren, docutils zu installieren." + +#: engine/core/templates/admin_doc/model_detail.html:4 +#, python-format +msgid "Model: %(name)s" +msgstr "Modell: %(name)s" + +#: engine/core/templates/admin_doc/model_detail.html:29 +msgid "Fields" +msgstr "Felder" + +#: engine/core/templates/admin_doc/model_detail.html:36 +msgid "Field" +msgstr "Feld" + +#: engine/core/templates/admin_doc/model_detail.html:37 +msgid "Type" +msgstr "Typ" + +#: engine/core/templates/admin_doc/model_detail.html:38 +#: engine/core/templates/admin_doc/model_detail.html:70 +msgid "Description" +msgstr "Beschreibung" + +#: engine/core/templates/admin_doc/model_detail.html:61 +msgid "Methods with arguments" +msgstr "Methoden mit Argumenten" + +#: engine/core/templates/admin_doc/model_detail.html:68 +msgid "Method" +msgstr "Verfahren" + +#: engine/core/templates/admin_doc/model_detail.html:69 +msgid "Arguments" +msgstr "Argumente" + +#: engine/core/templates/admin_doc/model_detail.html:89 +msgid "Back to Model documentation" +msgstr "Zurück zur Modelldokumentation" + +#: engine/core/templates/admin_doc/model_index.html:17 +msgid "Model documentation" +msgstr "Modell-Dokumentation" + +#: engine/core/templates/admin_doc/model_index.html:44 +msgid "Model groups" +msgstr "Modellgruppen" + +#: engine/core/templates/admin_doc/template_detail.html:4 +#, python-format +msgid "Template: %(name)s" +msgstr "Vorlage: %(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:12 +msgid "Templates" +msgstr "Vorlagen" + +#: engine/core/templates/admin_doc/template_detail.html:17 +#, python-format +msgid "" +"Template: %(name)s" +msgstr "" +"Vorlage: %(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:21 +#, python-format +msgid "Search path for template %(name)s:" +msgstr "Suchpfad für Vorlage %(name)s:" + +#: engine/core/templates/admin_doc/template_detail.html:29 +msgid "(does not exist)" +msgstr "(existiert nicht)" + +#: engine/core/templates/admin_doc/template_detail.html:40 +msgid "Back to Documentation" +msgstr "Zurück zur Dokumentation" + +#: engine/core/templates/admin_doc/template_filter_index.html:4 +msgid "Template filters" +msgstr "Vorlagenfilter" + +#: engine/core/templates/admin_doc/template_filter_index.html:17 +msgid "Template filter documentation" +msgstr "Dokumentation zum Vorlagenfilter" + +#: engine/core/templates/admin_doc/template_filter_index.html:26 +#: engine/core/templates/admin_doc/template_filter_index.html:52 +msgid "Built-in filters" +msgstr "Integrierte Filter" + +#: engine/core/templates/admin_doc/template_filter_index.html:29 +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before using" +" the filter." +msgstr "" +"Um diese Filter zu verwenden, fügen Sie %(code)s in Ihre Vorlage ein, " +"bevor Sie den Filter verwenden." + +#: engine/core/templates/admin_doc/template_tag_index.html:4 +msgid "Template tags" +msgstr "Vorlagen-Tags" + +#: engine/core/templates/admin_doc/template_tag_index.html:17 +msgid "Template tag documentation" +msgstr "Dokumentation zu Template-Tags" + +#: engine/core/templates/admin_doc/template_tag_index.html:26 +#: engine/core/templates/admin_doc/template_tag_index.html:52 +msgid "Built-in tags" +msgstr "Integrierte Tags" + +#: engine/core/templates/admin_doc/template_tag_index.html:29 +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using the tag." +msgstr "" +"Um diese Tags zu verwenden, fügen Sie %(code)s in Ihre Vorlage ein, " +"bevor Sie das Tag verwenden." + +#: engine/core/templates/admin_doc/view_detail.html:4 +#, python-format +msgid "View: %(name)s" +msgstr "Ansicht: %(name)s" + +#: engine/core/templates/admin_doc/view_detail.html:28 +msgid "Context:" +msgstr "Kontext:" + +#: engine/core/templates/admin_doc/view_detail.html:33 +msgid "Templates:" +msgstr "Vorlagen:" + +#: engine/core/templates/admin_doc/view_detail.html:41 +msgid "Back to View documentation" +msgstr "Zurück zu „Dokumentation anzeigen“" + +#: engine/core/templates/admin_doc/view_index.html:17 +msgid "View documentation" +msgstr "Dokumentation anzeigen" + +#: engine/core/templates/admin_doc/view_index.html:28 +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Ansichten nach Namensraum %(name)s" + +#: engine/core/templates/admin_doc/view_index.html:30 +msgid "Views by empty namespace" +msgstr "Ansichten nach leerem Namensraum" + +#: engine/core/templates/admin_doc/view_index.html:40 +#, python-format +msgid "" +"View function: %(full_name)s. Name: %(url_name)s." +msgstr "" +"Anzeigefunktion: %(full_name)s. Name: " +"%(url_name)s." + +#: engine/core/templates/admin_doc/view_index.html:54 +msgid "Jump to namespace" +msgstr "Zum Namensraum springen" + +#: engine/core/templates/admin_doc/view_index.html:59 +msgid "Empty namespace" +msgstr "Leerer Namensraum" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -3126,7 +3491,7 @@ msgstr "" " Informationen" #: engine/core/templates/digital_order_delivered_email.html:137 -#: engine/core/templates/json_table_widget.html:6 +#: engine/core/templates/json_table_widget.html:26 msgid "value" msgstr "Wert" @@ -3146,11 +3511,23 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "Mit freundlichen Grüßen,
das %(project_name)s-Team" -#: engine/core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:7 +msgid "Key" +msgstr "Schlüssel" + +#: engine/core/templates/json_table_widget.html:8 +msgid "Value" +msgstr "Wert" + +#: engine/core/templates/json_table_widget.html:19 msgid "key" msgstr "Schlüssel" -#: engine/core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:32 +msgid "Delete row" +msgstr "Zeile löschen" + +#: engine/core/templates/json_table_widget.html:44 msgid "Add Row" msgstr "Zeile hinzufügen" @@ -3238,14 +3615,23 @@ msgstr "Sie haben nicht die Erlaubnis, diese Aktion durchzuführen." msgid "NOMINATIM_URL must be configured." msgstr "Der Parameter NOMINATIM_URL muss konfiguriert werden!" -#: engine/core/validators.py:23 +#: engine/core/validators.py:18 +msgid "could not determine file type" +msgstr "Dateityp konnte nicht ermittelt werden" + +#: engine/core/validators.py:24 +#, python-brace-format +msgid "unsupported video format. supported formats: {supported}" +msgstr "Nicht unterstütztes Videoformat. Unterstützte Formate: {supported}" + +#: engine/core/validators.py:45 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "Die Bildabmessungen sollten w{max_width} x h{max_height} Pixel nicht " "überschreiten" -#: engine/core/views.py:104 +#: engine/core/views.py:108 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3254,7 +3640,7 @@ msgstr "" "zurück. Sie stellt sicher, dass die Antwort den entsprechenden Content-Type-" "Header für XML enthält." -#: engine/core/views.py:119 +#: engine/core/views.py:123 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3264,18 +3650,18 @@ msgstr "" "Funktion verarbeitet die Anfrage, holt die entsprechende Sitemap-" "Detailantwort ab und setzt den Content-Type-Header für XML." -#: engine/core/views.py:155 +#: engine/core/views.py:174 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Gibt eine Liste der unterstützten Sprachen und der entsprechenden " "Informationen zurück." -#: engine/core/views.py:182 +#: engine/core/views.py:201 msgid "Returns the parameters of the website as a JSON object." msgstr "Gibt die Parameter der Website als JSON-Objekt zurück." -#: engine/core/views.py:198 +#: engine/core/views.py:217 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3283,11 +3669,11 @@ msgstr "" "Erledigt Cache-Operationen wie das Lesen und Setzen von Cache-Daten mit " "einem bestimmten Schlüssel und Timeout." -#: engine/core/views.py:220 +#: engine/core/views.py:239 msgid "Handles `contact us` form submissions." msgstr "Verarbeitet Übermittlungen des Formulars \"Kontaktieren Sie uns\"." -#: engine/core/views.py:236 +#: engine/core/views.py:255 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3295,15 +3681,15 @@ msgstr "" "Bearbeitet Anfragen zur Verarbeitung und Validierung von URLs aus " "eingehenden POST-Anfragen." -#: engine/core/views.py:273 +#: engine/core/views.py:292 msgid "Handles global search queries." msgstr "Bearbeitet globale Suchanfragen." -#: engine/core/views.py:289 +#: engine/core/views.py:308 msgid "Handles the logic of buying as a business without registration." msgstr "Behandelt die Logik des Kaufs als Unternehmen ohne Registrierung." -#: engine/core/views.py:337 +#: engine/core/views.py:356 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3311,33 +3697,33 @@ msgstr "" "Bearbeitet das Herunterladen eines digitalen Assets, das mit einem Auftrag verbunden ist.\n" "Diese Funktion versucht, die Datei des digitalen Assets, die sich im Speicherverzeichnis des Projekts befindet, bereitzustellen. Wenn die Datei nicht gefunden wird, wird ein HTTP 404-Fehler ausgelöst, um anzuzeigen, dass die Ressource nicht verfügbar ist." -#: engine/core/views.py:348 +#: engine/core/views.py:367 msgid "order_product_uuid is required" msgstr "order_product_uuid ist erforderlich" -#: engine/core/views.py:355 +#: engine/core/views.py:374 msgid "order product does not exist" msgstr "Produkt bestellen existiert nicht" -#: engine/core/views.py:358 +#: engine/core/views.py:377 msgid "you can only download the digital asset once" msgstr "Sie können das digitale Asset nur einmal herunterladen" -#: engine/core/views.py:362 +#: engine/core/views.py:381 msgid "the order must be paid before downloading the digital asset" msgstr "" "die Bestellung muss vor dem Herunterladen des digitalen Assets bezahlt " "werden" -#: engine/core/views.py:369 +#: engine/core/views.py:388 msgid "the order product does not have a product" msgstr "Das Bestellprodukt hat kein Produkt" -#: engine/core/views.py:412 +#: engine/core/views.py:431 msgid "favicon not found" msgstr "Favicon nicht gefunden" -#: engine/core/views.py:418 +#: engine/core/views.py:437 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3345,7 +3731,7 @@ msgstr "" "Bearbeitet Anfragen nach dem Favicon einer Website.\n" "Diese Funktion versucht, die Favicon-Datei, die sich im statischen Verzeichnis des Projekts befindet, bereitzustellen. Wenn die Favicon-Datei nicht gefunden wird, wird ein HTTP 404-Fehler ausgegeben, um anzuzeigen, dass die Ressource nicht verfügbar ist." -#: engine/core/views.py:432 +#: engine/core/views.py:451 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3356,16 +3742,20 @@ msgstr "" "Administrationsoberfläche um. Sie verwendet die Funktion `redirect` von " "Django für die Bearbeitung der HTTP-Umleitung." -#: engine/core/views.py:445 +#: engine/core/views.py:464 msgid "Returns current version of the Schon. " msgstr "Gibt die aktuelle Version von Schon zurück." -#: engine/core/views.py:674 engine/core/views.py:689 +#: engine/core/views.py:475 +msgid "no image file provided" +msgstr "Keine Bilddatei vorhanden" + +#: engine/core/views.py:710 engine/core/views.py:725 #, python-format msgid "Revenue & Orders (last %(days)d)" msgstr "Einnahmen und Aufträge (zuletzt %(days)d)" -#: engine/core/views.py:870 +#: engine/core/views.py:911 msgid "Returns custom variables for Dashboard. " msgstr "Gibt benutzerdefinierte Variablen für das Dashboard zurück." @@ -3456,7 +3846,7 @@ msgstr "" "Objekten. Sie verwendet das ViewSet-Framework von Django, um die " "Implementierung von API-Endpunkten für Brand-Objekte zu vereinfachen." -#: engine/core/viewsets.py:458 +#: engine/core/viewsets.py:460 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3475,7 +3865,16 @@ msgstr "" "zur Anwendung von Berechtigungen und zum Zugriff auf zugehörige " "Rückmeldungen zu einem Produkt." -#: engine/core/viewsets.py:605 +#: engine/core/viewsets.py:541 +msgid "identificator_type and identificators are required" +msgstr "identificator_type und identificators sind erforderlich" + +#: engine/core/viewsets.py:554 +msgid "identificator_type must be one of: uuid, slug, sku" +msgstr "" +"identificator_type muss einer der folgenden Werte sein: uuid, slug, sku" + +#: engine/core/viewsets.py:635 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3490,7 +3889,7 @@ msgstr "" "dieser Klasse ist die Bereitstellung eines optimierten Zugriffs auf Vendor-" "Ressourcen über das Django REST-Framework." -#: engine/core/viewsets.py:625 +#: engine/core/viewsets.py:655 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3507,7 +3906,7 @@ msgstr "" "implementieren. Es erweitert das Basis `SchonViewSet` und nutzt das " "Filtersystem von Django zur Abfrage von Daten." -#: engine/core/viewsets.py:652 +#: engine/core/viewsets.py:682 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3527,7 +3926,7 @@ msgstr "" "basieren, die durchgeführt wird, und erzwingt die entsprechenden " "Berechtigungen, während es mit den Bestelldaten interagiert." -#: engine/core/viewsets.py:914 +#: engine/core/viewsets.py:944 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3542,12 +3941,12 @@ msgstr "" "Außerdem bietet es eine detaillierte Aktion für die Bearbeitung von Feedback" " zu OrderProduct-Instanzen" -#: engine/core/viewsets.py:974 +#: engine/core/viewsets.py:1004 msgid "Manages operations related to Product images in the application. " msgstr "" "Verwaltet Vorgänge im Zusammenhang mit Produktbildern in der Anwendung." -#: engine/core/viewsets.py:988 +#: engine/core/viewsets.py:1018 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3555,15 +3954,15 @@ msgstr "" "Verwaltet den Abruf und die Handhabung von PromoCode-Instanzen durch " "verschiedene API-Aktionen." -#: engine/core/viewsets.py:1019 +#: engine/core/viewsets.py:1049 msgid "Represents a view set for managing promotions. " msgstr "Stellt ein Ansichtsset für die Verwaltung von Werbeaktionen dar." -#: engine/core/viewsets.py:1032 +#: engine/core/viewsets.py:1062 msgid "Handles operations related to Stock data in the system." msgstr "Erledigt Vorgänge im Zusammenhang mit Bestandsdaten im System." -#: engine/core/viewsets.py:1046 +#: engine/core/viewsets.py:1076 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3582,7 +3981,7 @@ msgstr "" "nur ihre eigenen Wunschlisten verwalten können, sofern keine expliziten " "Berechtigungen erteilt wurden." -#: engine/core/viewsets.py:1183 +#: engine/core/viewsets.py:1213 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3597,12 +3996,12 @@ msgstr "" "HTTP-Methoden, Serialisierungsüberschreibungen und die Behandlung von " "Berechtigungen auf der Grundlage des Anfragekontexts." -#: engine/core/viewsets.py:1254 +#: engine/core/viewsets.py:1275 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Geocodierungsfehler: {e}" -#: engine/core/viewsets.py:1262 +#: engine/core/viewsets.py:1283 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/en_GB/LC_MESSAGES/django.mo b/engine/core/locale/en_GB/LC_MESSAGES/django.mo index a045f96a..69bd03c6 100644 Binary files a/engine/core/locale/en_GB/LC_MESSAGES/django.mo and b/engine/core/locale/en_GB/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/en_GB/LC_MESSAGES/django.po b/engine/core/locale/en_GB/LC_MESSAGES/django.po index 99e3c91b..3a5e26e1 100644 --- a/engine/core/locale/en_GB/LC_MESSAGES/django.po +++ b/engine/core/locale/en_GB/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -53,113 +53,133 @@ msgstr "Modified" msgid "when the object was last modified" msgstr "When the object was last edited" -#: engine/core/admin.py:94 +#: engine/core/admin.py:98 msgid "translations" msgstr "Translations" -#: engine/core/admin.py:102 +#: engine/core/admin.py:106 msgid "general" msgstr "General" -#: engine/core/admin.py:106 +#: engine/core/admin.py:110 msgid "relations" msgstr "Relations" -#: engine/core/admin.py:111 +#: engine/core/admin.py:115 msgid "additional info" msgstr "additional info" -#: engine/core/admin.py:133 +#: engine/core/admin.py:137 msgid "metadata" msgstr "Metadata" -#: engine/core/admin.py:141 +#: engine/core/admin.py:145 msgid "timestamps" msgstr "Timestamps" -#: engine/core/admin.py:158 +#: engine/core/admin.py:162 #, python-format msgid "Activate selected %(verbose_name_plural)s" msgstr "Activate selected %(verbose_name_plural)s" -#: engine/core/admin.py:166 +#: engine/core/admin.py:170 msgid "selected items have been activated." msgstr "Selected items have been activated!" -#: engine/core/admin.py:174 +#: engine/core/admin.py:178 #, python-format msgid "Deactivate selected %(verbose_name_plural)s" msgstr "Deactivate selected %(verbose_name_plural)s" -#: engine/core/admin.py:184 +#: engine/core/admin.py:188 msgid "selected items have been deactivated." msgstr "Selected items have been deactivated!" -#: engine/core/admin.py:196 engine/core/graphene/object_types.py:653 -#: engine/core/graphene/object_types.py:660 engine/core/models.py:832 -#: engine/core/models.py:840 +#: engine/core/admin.py:200 engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:673 engine/core/models.py:918 +#: engine/core/models.py:928 msgid "attribute value" msgstr "Attribute Value" -#: engine/core/admin.py:197 engine/core/graphene/object_types.py:77 -#: engine/core/models.py:841 +#: engine/core/admin.py:201 engine/core/graphene/object_types.py:81 +#: engine/core/models.py:929 msgid "attribute values" msgstr "Attribute Values" -#: engine/core/admin.py:208 +#: engine/core/admin.py:212 engine/core/models.py:2232 msgid "image" msgstr "Image" -#: engine/core/admin.py:209 engine/core/graphene/object_types.py:530 +#: engine/core/admin.py:213 engine/core/graphene/object_types.py:535 msgid "images" msgstr "Images" -#: engine/core/admin.py:220 engine/core/models.py:576 +#: engine/core/admin.py:224 engine/core/models.py:635 msgid "stock" msgstr "Stock" -#: engine/core/admin.py:221 engine/core/graphene/object_types.py:713 +#: engine/core/admin.py:225 engine/core/graphene/object_types.py:735 msgid "stocks" msgstr "Stocks" -#: engine/core/admin.py:232 engine/core/models.py:1938 +#: engine/core/admin.py:236 engine/core/models.py:2046 msgid "order product" msgstr "Order Product" -#: engine/core/admin.py:233 engine/core/graphene/object_types.py:441 -#: engine/core/models.py:1939 +#: engine/core/admin.py:237 engine/core/graphene/object_types.py:446 +#: engine/core/models.py:2047 msgid "order products" msgstr "Order Products" -#: engine/core/admin.py:251 engine/core/admin.py:252 +#: engine/core/admin.py:255 engine/core/admin.py:256 msgid "children" msgstr "Children" -#: engine/core/admin.py:528 +#: engine/core/admin.py:545 +msgid "video preview" +msgstr "Video preview" + +#: engine/core/admin.py:551 msgid "has images" msgstr "Has images" -#: engine/core/admin.py:531 +#: engine/core/admin.py:554 #, python-format msgid "Export selected %(verbose_name_plural)s to marketplaces' feeds" msgstr "Export selected %(verbose_name_plural)s to marketplaces' feeds" -#: engine/core/admin.py:542 +#: engine/core/admin.py:565 #, python-format msgid "selected %(verbose_name_plural)s have been marked for export." msgstr "Selected %(verbose_name_plural)s have been marked for export." -#: engine/core/admin.py:553 +#: engine/core/admin.py:576 #, python-format msgid "Ban selected %(verbose_name_plural)s from marketplaces' feeds" msgstr "Ban selected %(verbose_name_plural)s from marketplaces' feeds" -#: engine/core/admin.py:564 +#: engine/core/admin.py:587 #, python-format msgid "selected %(verbose_name_plural)s have been banned from export." msgstr "Selected %(verbose_name_plural)s have been banned from export." -#: engine/core/admin.py:1116 +#: engine/core/admin.py:1030 +msgid "Preview" +msgstr "Preview" + +#: engine/core/admin.py:1031 +msgid "Metadata" +msgstr "Metadata" + +#: engine/core/admin.py:1034 +msgid "preview" +msgstr "Preview" + +#: engine/core/admin.py:1043 +msgid "image preview" +msgstr "Image preview" + +#: engine/core/admin.py:1166 msgid "Config" msgstr "Config" @@ -226,7 +246,7 @@ msgstr "" "negotiation. Language can be selected with Accept-Language and query " "parameter both." -#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:36 +#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "Cache I/O" @@ -250,7 +270,7 @@ msgstr "Get application's exposable parameters" msgid "send a message to the support team" msgstr "Send a message to the support team" -#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:59 msgid "request a CORSed URL" msgstr "Request a CORSed URL. Only https allowed." @@ -382,11 +402,11 @@ msgstr "Rewrite an existing category saving non-editables" msgid "rewrite some fields of an existing category saving non-editables" msgstr "Rewrite some fields of an existing category saving non-editables" -#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757 -#: engine/core/docs/drf/viewsets.py:1046 -#: engine/core/graphene/object_types.py:119 -#: engine/core/graphene/object_types.py:239 -#: engine/core/graphene/object_types.py:540 +#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:781 +#: engine/core/docs/drf/viewsets.py:1070 +#: engine/core/graphene/object_types.py:123 +#: engine/core/graphene/object_types.py:247 +#: engine/core/graphene/object_types.py:546 msgid "SEO Meta snapshot" msgstr "SEO Meta snapshot" @@ -670,7 +690,7 @@ msgstr "Retrieve a single product (detailed view)" #: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683 #: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725 -#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763 +#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:787 msgid "Product UUID or slug" msgstr "Product UUID or Slug" @@ -696,267 +716,281 @@ msgstr "Delete a product" msgid "lists all permitted feedbacks for a product" msgstr "lists all permitted feedbacks for a product" -#: engine/core/docs/drf/viewsets.py:758 +#: engine/core/docs/drf/viewsets.py:757 +msgid "retrieve exact products by identifier" +msgstr "Retrieve exact products by identifier" + +#: engine/core/docs/drf/viewsets.py:759 +msgid "" +"retrieve a list of products by identifier type (uuid, slug, or sku). Send a " +"POST request with `identificator_type` and `identificators` (list of " +"values)." +msgstr "" +"retrieve a list of products by identifier type (uuid, slug, or sku). Send a " +"POST request with `identificator_type` and `identificators` (list of " +"values)." + +#: engine/core/docs/drf/viewsets.py:782 msgid "returns a snapshot of the product's SEO meta data" msgstr "Returns a snapshot of the product's SEO meta data" -#: engine/core/docs/drf/viewsets.py:779 +#: engine/core/docs/drf/viewsets.py:803 msgid "list all addresses" msgstr "List all addresses" -#: engine/core/docs/drf/viewsets.py:789 +#: engine/core/docs/drf/viewsets.py:813 msgid "retrieve a single address" msgstr "Retrieve a single address" -#: engine/core/docs/drf/viewsets.py:799 +#: engine/core/docs/drf/viewsets.py:823 msgid "create a new address" msgstr "Create a new address" -#: engine/core/docs/drf/viewsets.py:810 +#: engine/core/docs/drf/viewsets.py:834 msgid "delete an address" msgstr "Delete an address" -#: engine/core/docs/drf/viewsets.py:820 +#: engine/core/docs/drf/viewsets.py:844 msgid "update an entire address" msgstr "Update an entire address" -#: engine/core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:855 msgid "partially update an address" msgstr "Partially update an address" -#: engine/core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:866 msgid "autocomplete address suggestions" msgstr "Autocomplete address input" -#: engine/core/docs/drf/viewsets.py:848 +#: engine/core/docs/drf/viewsets.py:872 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "Raw data query string, please append with data from geo-IP endpoint" -#: engine/core/docs/drf/viewsets.py:855 +#: engine/core/docs/drf/viewsets.py:879 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "limits the results amount, 1 < limit < 10, default: 5" -#: engine/core/docs/drf/viewsets.py:871 +#: engine/core/docs/drf/viewsets.py:895 msgid "list all feedbacks (simple view)" msgstr "list all feedbacks (simple view)" -#: engine/core/docs/drf/viewsets.py:881 +#: engine/core/docs/drf/viewsets.py:905 msgid "retrieve a single feedback (detailed view)" msgstr "retrieve a single feedback (detailed view)" -#: engine/core/docs/drf/viewsets.py:888 +#: engine/core/docs/drf/viewsets.py:912 msgid "create a feedback" msgstr "create a feedback" -#: engine/core/docs/drf/viewsets.py:895 +#: engine/core/docs/drf/viewsets.py:919 msgid "delete a feedback" msgstr "delete a feedback" -#: engine/core/docs/drf/viewsets.py:902 +#: engine/core/docs/drf/viewsets.py:926 msgid "rewrite an existing feedback saving non-editables" msgstr "rewrite an existing feedback saving non-editables" -#: engine/core/docs/drf/viewsets.py:909 +#: engine/core/docs/drf/viewsets.py:933 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "rewrite some fields of an existing feedback saving non-editables" -#: engine/core/docs/drf/viewsets.py:919 +#: engine/core/docs/drf/viewsets.py:943 msgid "list all order–product relations (simple view)" msgstr "list all order–product relations (simple view)" -#: engine/core/docs/drf/viewsets.py:929 +#: engine/core/docs/drf/viewsets.py:953 msgid "retrieve a single order–product relation (detailed view)" msgstr "retrieve a single order–product relation (detailed view)" -#: engine/core/docs/drf/viewsets.py:939 +#: engine/core/docs/drf/viewsets.py:963 msgid "create a new order–product relation" msgstr "create a new order–product relation" -#: engine/core/docs/drf/viewsets.py:949 +#: engine/core/docs/drf/viewsets.py:973 msgid "replace an existing order–product relation" msgstr "replace an existing order–product relation" -#: engine/core/docs/drf/viewsets.py:959 +#: engine/core/docs/drf/viewsets.py:983 msgid "partially update an existing order–product relation" msgstr "partially update an existing order–product relation" -#: engine/core/docs/drf/viewsets.py:969 +#: engine/core/docs/drf/viewsets.py:993 msgid "delete an order–product relation" msgstr "delete an order–product relation" -#: engine/core/docs/drf/viewsets.py:979 +#: engine/core/docs/drf/viewsets.py:1003 msgid "add or remove feedback on an order–product relation" msgstr "add or remove feedback on an order–product relation" -#: engine/core/docs/drf/viewsets.py:996 +#: engine/core/docs/drf/viewsets.py:1020 msgid "list all brands (simple view)" msgstr "List all brands (simple view)" -#: engine/core/docs/drf/viewsets.py:1003 +#: engine/core/docs/drf/viewsets.py:1027 msgid "retrieve a single brand (detailed view)" msgstr "Retrieve a single brand (detailed view)" -#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051 +#: engine/core/docs/drf/viewsets.py:1032 engine/core/docs/drf/viewsets.py:1075 msgid "Brand UUID or slug" msgstr "Brand UUID or slug" -#: engine/core/docs/drf/viewsets.py:1018 +#: engine/core/docs/drf/viewsets.py:1042 msgid "create a brand" msgstr "Create a brand" -#: engine/core/docs/drf/viewsets.py:1025 +#: engine/core/docs/drf/viewsets.py:1049 msgid "delete a brand" msgstr "Delete a brand" -#: engine/core/docs/drf/viewsets.py:1032 +#: engine/core/docs/drf/viewsets.py:1056 msgid "rewrite an existing brand saving non-editables" msgstr "Rewrite an existing brand saving non-editables" -#: engine/core/docs/drf/viewsets.py:1039 +#: engine/core/docs/drf/viewsets.py:1063 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "Rewrite some fields of an existing brand saving non-editables" -#: engine/core/docs/drf/viewsets.py:1064 +#: engine/core/docs/drf/viewsets.py:1088 msgid "list all vendors (simple view)" msgstr "List all vendors (simple view)" -#: engine/core/docs/drf/viewsets.py:1074 +#: engine/core/docs/drf/viewsets.py:1098 msgid "retrieve a single vendor (detailed view)" msgstr "Retrieve a single vendor (detailed view)" -#: engine/core/docs/drf/viewsets.py:1081 +#: engine/core/docs/drf/viewsets.py:1105 msgid "create a vendor" msgstr "Create a vendor" -#: engine/core/docs/drf/viewsets.py:1088 +#: engine/core/docs/drf/viewsets.py:1112 msgid "delete a vendor" msgstr "Delete a vendor" -#: engine/core/docs/drf/viewsets.py:1095 +#: engine/core/docs/drf/viewsets.py:1119 msgid "rewrite an existing vendor saving non-editables" msgstr "Rewrite an existing vendor saving non-editables" -#: engine/core/docs/drf/viewsets.py:1102 +#: engine/core/docs/drf/viewsets.py:1126 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "Rewrite some fields of an existing vendor saving non-editables" -#: engine/core/docs/drf/viewsets.py:1112 +#: engine/core/docs/drf/viewsets.py:1136 msgid "list all product images (simple view)" msgstr "List all product images (simple view)" -#: engine/core/docs/drf/viewsets.py:1122 +#: engine/core/docs/drf/viewsets.py:1146 msgid "retrieve a single product image (detailed view)" msgstr "Retrieve a single product image (detailed view)" -#: engine/core/docs/drf/viewsets.py:1129 +#: engine/core/docs/drf/viewsets.py:1153 msgid "create a product image" msgstr "Create a product image" -#: engine/core/docs/drf/viewsets.py:1139 +#: engine/core/docs/drf/viewsets.py:1163 msgid "delete a product image" msgstr "Delete a product image" -#: engine/core/docs/drf/viewsets.py:1146 +#: engine/core/docs/drf/viewsets.py:1170 msgid "rewrite an existing product image saving non-editables" msgstr "Rewrite an existing product image saving non-editables" -#: engine/core/docs/drf/viewsets.py:1154 +#: engine/core/docs/drf/viewsets.py:1178 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "Rewrite some fields of an existing product image saving non-editables" -#: engine/core/docs/drf/viewsets.py:1165 +#: engine/core/docs/drf/viewsets.py:1189 msgid "list all promo codes (simple view)" msgstr "List all promo codes (simple view)" -#: engine/core/docs/drf/viewsets.py:1175 +#: engine/core/docs/drf/viewsets.py:1199 msgid "retrieve a single promo code (detailed view)" msgstr "Retrieve a single promo code (detailed view)" -#: engine/core/docs/drf/viewsets.py:1182 +#: engine/core/docs/drf/viewsets.py:1206 msgid "create a promo code" msgstr "Create a promo code" -#: engine/core/docs/drf/viewsets.py:1189 +#: engine/core/docs/drf/viewsets.py:1213 msgid "delete a promo code" msgstr "Delete a promo code" -#: engine/core/docs/drf/viewsets.py:1196 +#: engine/core/docs/drf/viewsets.py:1220 msgid "rewrite an existing promo code saving non-editables" msgstr "Rewrite an existing promo code saving non-editables" -#: engine/core/docs/drf/viewsets.py:1203 +#: engine/core/docs/drf/viewsets.py:1227 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "Rewrite some fields of an existing promo code saving non-editables" -#: engine/core/docs/drf/viewsets.py:1213 +#: engine/core/docs/drf/viewsets.py:1237 msgid "list all promotions (simple view)" msgstr "List all promotions (simple view)" -#: engine/core/docs/drf/viewsets.py:1223 +#: engine/core/docs/drf/viewsets.py:1247 msgid "retrieve a single promotion (detailed view)" msgstr "Retrieve a single promotion (detailed view)" -#: engine/core/docs/drf/viewsets.py:1230 +#: engine/core/docs/drf/viewsets.py:1254 msgid "create a promotion" msgstr "Create a promotion" -#: engine/core/docs/drf/viewsets.py:1237 +#: engine/core/docs/drf/viewsets.py:1261 msgid "delete a promotion" msgstr "Delete a promotion" -#: engine/core/docs/drf/viewsets.py:1244 +#: engine/core/docs/drf/viewsets.py:1268 msgid "rewrite an existing promotion saving non-editables" msgstr "Rewrite an existing promotion saving non-editables" -#: engine/core/docs/drf/viewsets.py:1251 +#: engine/core/docs/drf/viewsets.py:1275 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "Rewrite some fields of an existing promotion saving non-editables" -#: engine/core/docs/drf/viewsets.py:1261 +#: engine/core/docs/drf/viewsets.py:1285 msgid "list all stocks (simple view)" msgstr "List all stocks (simple view)" -#: engine/core/docs/drf/viewsets.py:1268 +#: engine/core/docs/drf/viewsets.py:1292 msgid "retrieve a single stock (detailed view)" msgstr "Retrieve a single stock (detailed view)" -#: engine/core/docs/drf/viewsets.py:1275 +#: engine/core/docs/drf/viewsets.py:1299 msgid "create a stock record" msgstr "Create a stock record" -#: engine/core/docs/drf/viewsets.py:1282 +#: engine/core/docs/drf/viewsets.py:1306 msgid "delete a stock record" msgstr "Delete a stock record" -#: engine/core/docs/drf/viewsets.py:1289 +#: engine/core/docs/drf/viewsets.py:1313 msgid "rewrite an existing stock record saving non-editables" msgstr "Rewrite an existing stock record saving non-editables" -#: engine/core/docs/drf/viewsets.py:1297 +#: engine/core/docs/drf/viewsets.py:1321 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "Rewrite some fields of an existing stock record saving non-editables" -#: engine/core/docs/drf/viewsets.py:1308 +#: engine/core/docs/drf/viewsets.py:1332 msgid "list all product tags (simple view)" msgstr "List all product tags (simple view)" -#: engine/core/docs/drf/viewsets.py:1318 +#: engine/core/docs/drf/viewsets.py:1342 msgid "retrieve a single product tag (detailed view)" msgstr "Retrieve a single product tag (detailed view)" -#: engine/core/docs/drf/viewsets.py:1325 +#: engine/core/docs/drf/viewsets.py:1349 msgid "create a product tag" msgstr "Create a product tag" -#: engine/core/docs/drf/viewsets.py:1335 +#: engine/core/docs/drf/viewsets.py:1359 msgid "delete a product tag" msgstr "Delete a product tag" -#: engine/core/docs/drf/viewsets.py:1342 +#: engine/core/docs/drf/viewsets.py:1366 msgid "rewrite an existing product tag saving non-editables" msgstr "Rewrite an existing product tag saving non-editables" -#: engine/core/docs/drf/viewsets.py:1350 +#: engine/core/docs/drf/viewsets.py:1374 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "Rewrite some fields of an existing product tag saving non-editables" @@ -965,232 +999,230 @@ msgstr "Rewrite some fields of an existing product tag saving non-editables" msgid "no search term provided." msgstr "No search term provided." -#: engine/core/filters.py:78 engine/core/filters.py:484 -#: engine/core/filters.py:625 +#: engine/core/filters.py:79 engine/core/filters.py:485 +#: engine/core/filters.py:626 msgid "Search" msgstr "Search" -#: engine/core/filters.py:79 engine/core/filters.py:663 -#: engine/core/filters.py:692 +#: engine/core/filters.py:80 engine/core/filters.py:664 +#: engine/core/filters.py:693 msgid "UUID" msgstr "UUID" -#: engine/core/filters.py:80 engine/core/filters.py:487 -#: engine/core/filters.py:627 +#: engine/core/filters.py:81 engine/core/filters.py:488 +#: engine/core/filters.py:628 msgid "Name" msgstr "Name" -#: engine/core/filters.py:82 engine/core/filters.py:630 +#: engine/core/filters.py:83 engine/core/filters.py:631 msgid "Categories" msgstr "Categories" -#: engine/core/filters.py:86 +#: engine/core/filters.py:87 msgid "Categories Slugs" msgstr "Categories Slugs" -#: engine/core/filters.py:88 engine/core/filters.py:495 +#: engine/core/filters.py:89 engine/core/filters.py:496 +#: engine/core/templates/admin_doc/index.html:37 +#: engine/core/templates/admin_doc/template_tag_index.html:12 msgid "Tags" msgstr "Tags" -#: engine/core/filters.py:90 +#: engine/core/filters.py:91 msgid "Min Price" msgstr "Min Price" -#: engine/core/filters.py:93 +#: engine/core/filters.py:94 msgid "Max Price" msgstr "Max Price" -#: engine/core/filters.py:95 +#: engine/core/filters.py:96 msgid "Is Active" msgstr "Is Active" -#: engine/core/filters.py:96 +#: engine/core/filters.py:97 msgid "Brand" msgstr "Brand" -#: engine/core/filters.py:97 +#: engine/core/filters.py:98 msgid "Attributes" msgstr "Attributes" -#: engine/core/filters.py:99 +#: engine/core/filters.py:100 msgid "Quantity" msgstr "Quantity" -#: engine/core/filters.py:101 engine/core/filters.py:489 -#: engine/core/filters.py:628 engine/core/models.py:316 -#: engine/core/models.py:497 engine/core/models.py:663 +#: engine/core/filters.py:102 engine/core/filters.py:490 +#: engine/core/filters.py:629 engine/core/models.py:339 +#: engine/core/models.py:546 engine/core/models.py:736 msgid "Slug" msgstr "Slug" -#: engine/core/filters.py:102 +#: engine/core/filters.py:103 msgid "Is Digital" msgstr "Is Digital" -#: engine/core/filters.py:104 +#: engine/core/filters.py:105 msgid "Include sub-categories" msgstr "Include sub-categories" -#: engine/core/filters.py:108 +#: engine/core/filters.py:109 msgid "Include personal ordered" msgstr "Include personal ordered products" -#: engine/core/filters.py:110 engine/core/models.py:667 +#: engine/core/filters.py:111 engine/core/models.py:740 msgid "SKU" msgstr "SKU" -#: engine/core/filters.py:212 +#: engine/core/filters.py:213 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "There must be a category_uuid to use include_subcategories flag" -#: engine/core/filters.py:398 +#: engine/core/filters.py:399 msgid "Search (ID, product name or part number)" msgstr "Search (ID, product name or part number)" -#: engine/core/filters.py:402 +#: engine/core/filters.py:403 msgid "Bought after (inclusive)" msgstr "Bought after (inclusive)" -#: engine/core/filters.py:405 +#: engine/core/filters.py:406 msgid "Bought before (inclusive)" msgstr "Bought before (inclusive)" -#: engine/core/filters.py:410 engine/core/filters.py:461 -#: engine/core/filters.py:697 +#: engine/core/filters.py:411 engine/core/filters.py:462 +#: engine/core/filters.py:698 msgid "User email" msgstr "User email" -#: engine/core/filters.py:413 engine/core/filters.py:464 -#: engine/core/filters.py:672 engine/core/filters.py:694 +#: engine/core/filters.py:414 engine/core/filters.py:465 +#: engine/core/filters.py:673 engine/core/filters.py:695 msgid "User UUID" msgstr "User UUID" -#: engine/core/filters.py:415 +#: engine/core/filters.py:416 msgid "Status" msgstr "Status" -#: engine/core/filters.py:419 +#: engine/core/filters.py:420 msgid "Human Readable ID" msgstr "Human Readable ID" -#: engine/core/filters.py:488 +#: engine/core/filters.py:489 msgid "Parent" msgstr "Parent" -#: engine/core/filters.py:492 +#: engine/core/filters.py:493 msgid "Whole category(has at least 1 product or not)" msgstr "Whole category(has at least 1 product or not)" -#: engine/core/filters.py:496 +#: engine/core/filters.py:497 msgid "Level" msgstr "Level" -#: engine/core/filters.py:667 +#: engine/core/filters.py:668 msgid "Product UUID" msgstr "Product UUID" -#: engine/core/graphene/mutations.py:40 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Key to look for in or set into the cache" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:43 msgid "data to store in cache" msgstr "Data to store in cache" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:46 msgid "timeout in seconds to set the data for into the cache" msgstr "Timeout in seconds to set the data for into the cache" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:49 msgid "cached data" msgstr "Cached data" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:64 msgid "camelized JSON data from the requested URL" msgstr "Camelized JSON data from the requested URL" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:248 +#: engine/core/graphene/mutations.py:69 engine/core/views.py:267 msgid "only URLs starting with http(s):// are allowed" msgstr "Only URLs starting with http(s):// are allowed" -#: engine/core/graphene/mutations.py:86 +#: engine/core/graphene/mutations.py:87 msgid "add a product to the order" msgstr "Add a product to the order" -#: engine/core/graphene/mutations.py:109 engine/core/graphene/mutations.py:138 -#: engine/core/graphene/mutations.py:254 engine/core/graphene/mutations.py:306 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139 +#: engine/core/graphene/mutations.py:256 engine/core/graphene/mutations.py:308 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Order {order_uuid} not found!" -#: engine/core/graphene/mutations.py:115 engine/core/graphene/mutations.py:166 +#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167 msgid "remove a product from the order" msgstr "Remove a product from the order" -#: engine/core/graphene/mutations.py:144 +#: engine/core/graphene/mutations.py:145 msgid "remove all products from the order" msgstr "Remove all products from the order" -#: engine/core/graphene/mutations.py:189 +#: engine/core/graphene/mutations.py:190 msgid "buy an order" msgstr "Buy an order" -#: engine/core/graphene/mutations.py:220 engine/core/graphene/mutations.py:282 +#: engine/core/graphene/mutations.py:222 engine/core/graphene/mutations.py:284 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "Please provide either order_uuid or order_hr_id - mutually exclusive!" -#: engine/core/graphene/mutations.py:249 engine/core/graphene/mutations.py:524 -#: engine/core/graphene/mutations.py:573 engine/core/viewsets.py:753 +#: engine/core/graphene/mutations.py:251 engine/core/graphene/mutations.py:526 +#: engine/core/graphene/mutations.py:576 engine/core/viewsets.py:783 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Wrong type came from order.buy() method: {type(instance)!s}" -#: engine/core/graphene/mutations.py:260 +#: engine/core/graphene/mutations.py:262 msgid "perform an action on a list of products in the order" msgstr "Perform an action on a list of products in the order" -#: engine/core/graphene/mutations.py:265 +#: engine/core/graphene/mutations.py:267 msgid "remove/add" msgstr "Remove/Add" -#: engine/core/graphene/mutations.py:301 engine/core/graphene/mutations.py:342 +#: engine/core/graphene/mutations.py:303 engine/core/graphene/mutations.py:342 msgid "action must be either add or remove" msgstr "Action must be either \"add\" or \"remove\"!" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:314 msgid "perform an action on a list of products in the wishlist" msgstr "Perform an action on a list of products in the wishlist" -#: engine/core/graphene/mutations.py:330 -msgid "please provide wishlist_uuid value" -msgstr "Please provide `wishlist_uuid` value." - -#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:423 -#: engine/core/graphene/mutations.py:451 engine/core/graphene/mutations.py:479 -#: engine/core/graphene/mutations.py:529 +#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:424 +#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480 +#: engine/core/graphene/mutations.py:531 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Wishlist {wishlist_uuid} not found!" -#: engine/core/graphene/mutations.py:401 +#: engine/core/graphene/mutations.py:402 msgid "add a product to the wishlist" msgstr "Add a product to the order" -#: engine/core/graphene/mutations.py:429 +#: engine/core/graphene/mutations.py:430 msgid "remove a product from the wishlist" msgstr "Remove a product from the order" -#: engine/core/graphene/mutations.py:457 +#: engine/core/graphene/mutations.py:458 msgid "remove all products from the wishlist" msgstr "Remove a product from the order" -#: engine/core/graphene/mutations.py:485 +#: engine/core/graphene/mutations.py:486 msgid "buy all products from the wishlist" msgstr "Remove a product from the order" -#: engine/core/graphene/mutations.py:535 +#: engine/core/graphene/mutations.py:537 msgid "buy a product" msgstr "Buy an order" -#: engine/core/graphene/mutations.py:542 +#: engine/core/graphene/mutations.py:544 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" @@ -1198,138 +1230,142 @@ msgstr "" "Please send the attributes as the string formatted like " "attr1=value1,attr2=value2" -#: engine/core/graphene/mutations.py:580 +#: engine/core/graphene/mutations.py:583 msgid "add or delete a feedback for orderproduct" msgstr "Add or delete a feedback for the orderproduct" -#: engine/core/graphene/mutations.py:606 +#: engine/core/graphene/mutations.py:610 msgid "action must be either `add` or `remove`" msgstr "Action must be either `add` or `remove`!" -#: engine/core/graphene/mutations.py:609 +#: engine/core/graphene/mutations.py:613 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderproduct {order_product_uuid} not found!" -#: engine/core/graphene/mutations.py:616 +#: engine/core/graphene/mutations.py:620 msgid "original address string provided by the user" msgstr "Original address string provided by the user" -#: engine/core/graphene/mutations.py:653 engine/core/models.py:986 -#: engine/core/models.py:999 engine/core/models.py:1443 -#: engine/core/models.py:1474 engine/core/models.py:1505 -#: engine/core/viewsets.py:760 +#: engine/core/graphene/mutations.py:662 engine/core/models.py:1079 +#: engine/core/models.py:1092 engine/core/models.py:1544 +#: engine/core/models.py:1575 engine/core/models.py:1606 +#: engine/core/viewsets.py:790 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} does not exist: {uuid}!" -#: engine/core/graphene/mutations.py:667 +#: engine/core/graphene/mutations.py:676 msgid "limit must be between 1 and 10" msgstr "Limit must be between 1 and 10" -#: engine/core/graphene/mutations.py:716 +#: engine/core/graphene/mutations.py:726 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - works like a charm" -#: engine/core/graphene/object_types.py:84 -#: engine/core/graphene/object_types.py:420 -#: engine/core/graphene/object_types.py:471 engine/core/models.py:803 -#: engine/core/models.py:1297 engine/core/models.py:2033 +#: engine/core/graphene/object_types.py:88 +#: engine/core/graphene/object_types.py:425 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:889 +#: engine/core/models.py:1394 engine/core/models.py:2139 msgid "attributes" msgstr "Attributes" -#: engine/core/graphene/object_types.py:97 +#: engine/core/graphene/object_types.py:101 msgid "grouped attributes" msgstr "Grouped attributes" -#: engine/core/graphene/object_types.py:104 +#: engine/core/graphene/object_types.py:108 msgid "groups of attributes" msgstr "Groups of attributes" -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:217 -#: engine/core/graphene/object_types.py:255 engine/core/models.py:440 +#: engine/core/graphene/object_types.py:122 +#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:264 engine/core/models.py:489 msgid "categories" msgstr "Categories" -#: engine/core/graphene/object_types.py:134 engine/core/models.py:511 +#: engine/core/graphene/object_types.py:138 engine/core/models.py:564 msgid "brands" msgstr "Brands" -#: engine/core/graphene/object_types.py:219 +#: engine/core/graphene/object_types.py:226 msgid "category image url" msgstr "Categories" -#: engine/core/graphene/object_types.py:220 -#: engine/core/graphene/object_types.py:365 engine/core/models.py:278 +#: engine/core/graphene/object_types.py:227 +#: engine/core/graphene/object_types.py:369 engine/core/models.py:301 msgid "markup percentage" msgstr "Markup Percentage" -#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:231 msgid "which attributes and values can be used for filtering this category." msgstr "Which attributes and values can be used for filtering this category." -#: engine/core/graphene/object_types.py:230 +#: engine/core/graphene/object_types.py:237 msgid "" "minimum and maximum prices for products in this category, if available." msgstr "" "Minimum and maximum prices for products in this category, if available." -#: engine/core/graphene/object_types.py:234 +#: engine/core/graphene/object_types.py:240 +msgid "brands in this category" +msgstr "Brands in this category" + +#: engine/core/graphene/object_types.py:242 msgid "tags for this category" msgstr "Tags for this category" -#: engine/core/graphene/object_types.py:237 +#: engine/core/graphene/object_types.py:245 msgid "products in this category" msgstr "Products in this category" -#: engine/core/graphene/object_types.py:372 engine/core/models.py:183 +#: engine/core/graphene/object_types.py:376 engine/core/models.py:202 msgid "vendors" msgstr "Vendors" -#: engine/core/graphene/object_types.py:376 +#: engine/core/graphene/object_types.py:380 msgid "Latitude (Y coordinate)" msgstr "Latitude (Y coordinate)" -#: engine/core/graphene/object_types.py:377 +#: engine/core/graphene/object_types.py:381 msgid "Longitude (X coordinate)" msgstr "Longitude (X coordinate)" -#: engine/core/graphene/object_types.py:406 +#: engine/core/graphene/object_types.py:411 msgid "comment" msgstr "Comment" -#: engine/core/graphene/object_types.py:408 -#: engine/core/graphene/object_types.py:542 +#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:548 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "Rating value from 1 to 10, inclusive, or 0 if not set." -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:421 msgid "represents feedback from a user." msgstr "Represents feedback from a user." -#: engine/core/graphene/object_types.py:421 -#: engine/core/graphene/object_types.py:472 engine/core/models.py:1291 +#: engine/core/graphene/object_types.py:426 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:1388 msgid "notifications" msgstr "Notifications" -#: engine/core/graphene/object_types.py:423 +#: engine/core/graphene/object_types.py:428 msgid "download url for this order product if applicable" msgstr "Download url for this order product if applicable" -#: engine/core/graphene/object_types.py:425 engine/core/models.py:1856 +#: engine/core/graphene/object_types.py:430 engine/core/models.py:1959 msgid "feedback" msgstr "Feedback" -#: engine/core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:464 msgid "a list of order products in this order" msgstr "A list of order products in this order" -#: engine/core/graphene/object_types.py:461 engine/core/models.py:1261 +#: engine/core/graphene/object_types.py:466 engine/core/models.py:1358 msgid "billing address" msgstr "Billing address" -#: engine/core/graphene/object_types.py:465 +#: engine/core/graphene/object_types.py:470 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1337,53 +1373,57 @@ msgstr "" "Shipping address for this order, leave blank if same as billing address or " "if not applicable" -#: engine/core/graphene/object_types.py:468 +#: engine/core/graphene/object_types.py:473 msgid "total price of this order" msgstr "Total price of this order" -#: engine/core/graphene/object_types.py:469 +#: engine/core/graphene/object_types.py:474 msgid "total quantity of products in order" msgstr "Total quantity of products in order" -#: engine/core/graphene/object_types.py:470 +#: engine/core/graphene/object_types.py:475 msgid "are all products in the order digital" msgstr "Are all of the products in the order digital" -#: engine/core/graphene/object_types.py:474 +#: engine/core/graphene/object_types.py:479 msgid "transactions for this order" msgstr "Transactions for this order" -#: engine/core/graphene/object_types.py:494 engine/core/models.py:1325 +#: engine/core/graphene/object_types.py:499 engine/core/models.py:1422 msgid "orders" msgstr "Orders" -#: engine/core/graphene/object_types.py:515 +#: engine/core/graphene/object_types.py:520 msgid "image url" msgstr "Image URL" -#: engine/core/graphene/object_types.py:522 +#: engine/core/graphene/object_types.py:527 msgid "product's images" msgstr "Product's images" -#: engine/core/graphene/object_types.py:529 engine/core/models.py:439 -#: engine/core/models.py:596 +#: engine/core/graphene/object_types.py:534 engine/core/models.py:488 +#: engine/core/models.py:661 msgid "category" msgstr "Category" -#: engine/core/graphene/object_types.py:531 engine/core/models.py:1857 +#: engine/core/graphene/object_types.py:536 engine/core/models.py:1960 msgid "feedbacks" msgstr "Feedbacks" -#: engine/core/graphene/object_types.py:532 engine/core/models.py:510 -#: engine/core/models.py:605 +#: engine/core/graphene/object_types.py:537 engine/core/models.py:563 +#: engine/core/models.py:670 msgid "brand" msgstr "Brand" -#: engine/core/graphene/object_types.py:534 engine/core/models.py:103 +#: engine/core/graphene/object_types.py:538 +msgid "video url" +msgstr "Video URL" + +#: engine/core/graphene/object_types.py:540 engine/core/models.py:122 msgid "attribute groups" msgstr "Attribute groups" -#: engine/core/graphene/object_types.py:536 +#: engine/core/graphene/object_types.py:542 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1391,7 +1431,7 @@ msgstr "Attribute groups" msgid "price" msgstr "Price" -#: engine/core/graphene/object_types.py:537 +#: engine/core/graphene/object_types.py:543 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1399,39 +1439,39 @@ msgstr "Price" msgid "quantity" msgstr "Quantity" -#: engine/core/graphene/object_types.py:538 +#: engine/core/graphene/object_types.py:544 msgid "number of feedbacks" msgstr "Number of feedbacks" -#: engine/core/graphene/object_types.py:539 +#: engine/core/graphene/object_types.py:545 msgid "only available for personal orders" msgstr "Products only available for personal orders" -#: engine/core/graphene/object_types.py:544 +#: engine/core/graphene/object_types.py:550 msgid "discount price" msgstr "Discount price" -#: engine/core/graphene/object_types.py:568 engine/core/models.py:682 +#: engine/core/graphene/object_types.py:575 engine/core/models.py:755 msgid "products" msgstr "Products" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:691 msgid "promocodes" msgstr "Promocodes" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:706 msgid "products on sale" msgstr "Products on sale" -#: engine/core/graphene/object_types.py:701 engine/core/models.py:935 +#: engine/core/graphene/object_types.py:720 engine/core/models.py:1028 msgid "promotions" msgstr "Promotions" -#: engine/core/graphene/object_types.py:705 engine/core/models.py:182 +#: engine/core/graphene/object_types.py:727 engine/core/models.py:201 msgid "vendor" msgstr "Vendor" -#: engine/core/graphene/object_types.py:706 engine/core/models.py:681 +#: engine/core/graphene/object_types.py:728 engine/core/models.py:754 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1439,102 +1479,102 @@ msgstr "Vendor" msgid "product" msgstr "Product" -#: engine/core/graphene/object_types.py:718 engine/core/models.py:958 +#: engine/core/graphene/object_types.py:740 engine/core/models.py:1051 msgid "wishlisted products" msgstr "Wishlisted products" -#: engine/core/graphene/object_types.py:725 engine/core/models.py:975 +#: engine/core/graphene/object_types.py:747 engine/core/models.py:1068 msgid "wishlists" msgstr "Wishlists" -#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:752 msgid "tagged products" msgstr "Tagged products" -#: engine/core/graphene/object_types.py:738 engine/core/models.py:219 -#: engine/core/models.py:611 +#: engine/core/graphene/object_types.py:760 engine/core/models.py:238 +#: engine/core/models.py:676 msgid "product tags" msgstr "Product tags" -#: engine/core/graphene/object_types.py:743 +#: engine/core/graphene/object_types.py:765 msgid "tagged categories" msgstr "Tagged categories" -#: engine/core/graphene/object_types.py:751 +#: engine/core/graphene/object_types.py:773 msgid "categories tags" msgstr "Categories' tags" -#: engine/core/graphene/object_types.py:755 +#: engine/core/graphene/object_types.py:777 msgid "project name" msgstr "Project name" -#: engine/core/graphene/object_types.py:756 +#: engine/core/graphene/object_types.py:778 msgid "company name" msgstr "Company Name" -#: engine/core/graphene/object_types.py:757 +#: engine/core/graphene/object_types.py:779 msgid "company address" msgstr "Company Address" -#: engine/core/graphene/object_types.py:758 +#: engine/core/graphene/object_types.py:780 msgid "company phone number" msgstr "Company Phone Number" -#: engine/core/graphene/object_types.py:761 +#: engine/core/graphene/object_types.py:783 msgid "email from, sometimes it must be used instead of host user value" msgstr "'email from', sometimes it must be used instead of host user value" -#: engine/core/graphene/object_types.py:764 +#: engine/core/graphene/object_types.py:786 msgid "email host user" msgstr "Email host user" -#: engine/core/graphene/object_types.py:765 +#: engine/core/graphene/object_types.py:787 msgid "maximum amount for payment" msgstr "Maximum amount for payment" -#: engine/core/graphene/object_types.py:766 +#: engine/core/graphene/object_types.py:788 msgid "minimum amount for payment" msgstr "Minimum amount for payment" -#: engine/core/graphene/object_types.py:767 +#: engine/core/graphene/object_types.py:789 msgid "analytics data" msgstr "Analytics data" -#: engine/core/graphene/object_types.py:768 +#: engine/core/graphene/object_types.py:790 msgid "advertisement data" msgstr "Advertisement data" -#: engine/core/graphene/object_types.py:771 +#: engine/core/graphene/object_types.py:793 msgid "company configuration" msgstr "Configuration" -#: engine/core/graphene/object_types.py:775 +#: engine/core/graphene/object_types.py:797 msgid "language code" msgstr "Language code" -#: engine/core/graphene/object_types.py:776 +#: engine/core/graphene/object_types.py:798 msgid "language name" msgstr "Language name" -#: engine/core/graphene/object_types.py:777 +#: engine/core/graphene/object_types.py:799 msgid "language flag, if exists :)" msgstr "Language flag, if exists :)" -#: engine/core/graphene/object_types.py:780 +#: engine/core/graphene/object_types.py:802 msgid "supported languages" msgstr "Get a list of supported languages" -#: engine/core/graphene/object_types.py:812 -#: engine/core/graphene/object_types.py:815 -#: engine/core/graphene/object_types.py:818 +#: engine/core/graphene/object_types.py:834 +#: engine/core/graphene/object_types.py:837 +#: engine/core/graphene/object_types.py:840 msgid "products search results" msgstr "Products search results" -#: engine/core/graphene/object_types.py:820 +#: engine/core/graphene/object_types.py:842 msgid "posts search results" msgstr "Products search results" -#: engine/core/models.py:75 +#: engine/core/models.py:91 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 " @@ -1546,23 +1586,23 @@ msgstr "" "parent group, forming a hierarchical structure. This can be useful for " "categorizing and managing attributes more effectively in acomplex system." -#: engine/core/models.py:88 +#: engine/core/models.py:107 msgid "parent of this group" msgstr "Parent of this group" -#: engine/core/models.py:89 +#: engine/core/models.py:108 msgid "parent attribute group" msgstr "Parent attribute group" -#: engine/core/models.py:93 engine/core/models.py:94 +#: engine/core/models.py:112 engine/core/models.py:113 msgid "attribute group's name" msgstr "Attribute group's name" -#: engine/core/models.py:102 engine/core/models.py:763 +#: engine/core/models.py:121 engine/core/models.py:849 msgid "attribute group" msgstr "Attribute group" -#: engine/core/models.py:108 +#: engine/core/models.py:127 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1580,48 +1620,48 @@ msgstr "" "also maintains additional metadata and constraints, making it suitable for " "use in systems that interact with third-party vendors." -#: engine/core/models.py:122 +#: engine/core/models.py:141 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Stores credentials and endpoints required for vendor's API communication" -#: engine/core/models.py:124 +#: engine/core/models.py:143 msgid "authentication info" msgstr "Authentication info" -#: engine/core/models.py:129 +#: engine/core/models.py:148 msgid "define the markup for products retrieved from this vendor" msgstr "Define the markup for products retrieved from this vendor" -#: engine/core/models.py:130 +#: engine/core/models.py:149 msgid "vendor markup percentage" msgstr "Vendor markup percentage" -#: engine/core/models.py:134 +#: engine/core/models.py:153 msgid "name of this vendor" msgstr "Name of this vendor" -#: engine/core/models.py:135 +#: engine/core/models.py:154 msgid "vendor name" msgstr "Vendor name" -#: engine/core/models.py:150 +#: engine/core/models.py:169 msgid "response file" msgstr "response file" -#: engine/core/models.py:151 +#: engine/core/models.py:170 msgid "vendor's last processing response" msgstr "vendor's last processing response" -#: engine/core/models.py:157 +#: engine/core/models.py:176 msgid "vendor's integration file path" msgstr "Vendor's integration file path" -#: engine/core/models.py:158 +#: engine/core/models.py:177 msgid "integration path" msgstr "Integration path" -#: engine/core/models.py:192 +#: engine/core/models.py:211 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1635,27 +1675,27 @@ msgstr "" "display name. It supports operations exported through mixins and provides " "metadata customization for administrative purposes." -#: engine/core/models.py:204 engine/core/models.py:235 +#: engine/core/models.py:223 engine/core/models.py:254 msgid "internal tag identifier for the product tag" msgstr "Internal tag identifier for the product tag" -#: engine/core/models.py:205 engine/core/models.py:236 +#: engine/core/models.py:224 engine/core/models.py:255 msgid "tag name" msgstr "Tag name" -#: engine/core/models.py:209 engine/core/models.py:240 +#: engine/core/models.py:228 engine/core/models.py:259 msgid "user-friendly name for the product tag" msgstr "User-friendly name for the product tag" -#: engine/core/models.py:210 engine/core/models.py:241 +#: engine/core/models.py:229 engine/core/models.py:260 msgid "tag display name" msgstr "Tag display name" -#: engine/core/models.py:218 +#: engine/core/models.py:237 msgid "product tag" msgstr "Product tag" -#: engine/core/models.py:224 +#: engine/core/models.py:243 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1665,15 +1705,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." -#: engine/core/models.py:249 +#: engine/core/models.py:268 msgid "category tag" msgstr "category tag" -#: engine/core/models.py:250 engine/core/models.py:322 +#: engine/core/models.py:269 engine/core/models.py:345 msgid "category tags" msgstr "category tags" -#: engine/core/models.py:255 +#: engine/core/models.py:274 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1695,51 +1735,51 @@ msgstr "" "hierarchy of categories, as well as assign attributes like images, tags, or " "priority." -#: engine/core/models.py:269 +#: engine/core/models.py:292 msgid "upload an image representing this category" msgstr "Upload an image representing this category" -#: engine/core/models.py:272 +#: engine/core/models.py:295 msgid "category image" msgstr "Category image" -#: engine/core/models.py:277 +#: engine/core/models.py:300 msgid "define a markup percentage for products in this category" msgstr "Define a markup percentage for products in this category" -#: engine/core/models.py:286 +#: engine/core/models.py:309 msgid "parent of this category to form a hierarchical structure" msgstr "Parent of this category to form a hierarchical structure" -#: engine/core/models.py:287 +#: engine/core/models.py:310 msgid "parent category" msgstr "Parent category" -#: engine/core/models.py:292 +#: engine/core/models.py:315 msgid "category name" msgstr "Category name" -#: engine/core/models.py:293 +#: engine/core/models.py:316 msgid "provide a name for this category" msgstr "Provide a name for this category" -#: engine/core/models.py:300 +#: engine/core/models.py:323 msgid "add a detailed description for this category" msgstr "Add a detailed description for this category" -#: engine/core/models.py:301 +#: engine/core/models.py:324 msgid "category description" msgstr "Category description" -#: engine/core/models.py:321 +#: engine/core/models.py:344 msgid "tags that help describe or group this category" msgstr "tags that help describe or group this category" -#: engine/core/models.py:328 engine/core/models.py:503 +#: engine/core/models.py:351 engine/core/models.py:552 msgid "priority" msgstr "Priority" -#: engine/core/models.py:446 +#: engine/core/models.py:495 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1753,47 +1793,43 @@ msgstr "" "organization and representation of brand-related data within the " "application." -#: engine/core/models.py:456 +#: engine/core/models.py:505 msgid "name of this brand" msgstr "Name of this brand" -#: engine/core/models.py:457 +#: engine/core/models.py:506 msgid "brand name" msgstr "Brand name" -#: engine/core/models.py:464 +#: engine/core/models.py:513 msgid "upload a logo representing this brand" msgstr "Upload a logo representing this brand" -#: engine/core/models.py:466 +#: engine/core/models.py:515 msgid "brand small image" msgstr "Brand small image" -#: engine/core/models.py:472 +#: engine/core/models.py:521 msgid "upload a big logo representing this brand" msgstr "Upload a big logo representing this brand" -#: engine/core/models.py:474 +#: engine/core/models.py:523 msgid "brand big image" msgstr "Brand big image" -#: engine/core/models.py:479 +#: engine/core/models.py:528 msgid "add a detailed description of the brand" msgstr "Add a detailed description of the brand" -#: engine/core/models.py:480 +#: engine/core/models.py:529 msgid "brand description" msgstr "Brand description" -#: engine/core/models.py:485 -msgid "optional categories that this brand is associated with" -msgstr "Optional categories that this brand is associated with" +#: engine/core/models.py:534 engine/core/models.py:535 +msgid "DEPRECATED" +msgstr "DEPRECATED" -#: engine/core/models.py:486 -msgid "associated categories" -msgstr "Categories" - -#: engine/core/models.py:516 +#: engine/core/models.py:569 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1809,72 +1845,72 @@ msgstr "" "management system to allow tracking and evaluation of products available " "from various vendors." -#: engine/core/models.py:528 +#: engine/core/models.py:581 msgid "the vendor supplying this product stock" msgstr "The vendor supplying this product stock" -#: engine/core/models.py:529 +#: engine/core/models.py:582 msgid "associated vendor" msgstr "Associated vendor" -#: engine/core/models.py:533 +#: engine/core/models.py:588 msgid "final price to the customer after markups" msgstr "Final price to the customer after markups" -#: engine/core/models.py:534 +#: engine/core/models.py:589 msgid "selling price" msgstr "Selling price" -#: engine/core/models.py:539 +#: engine/core/models.py:594 msgid "the product associated with this stock entry" msgstr "The product associated with this stock entry" -#: engine/core/models.py:540 engine/core/models.py:828 -#: engine/core/models.py:874 engine/core/models.py:1912 +#: engine/core/models.py:595 engine/core/models.py:914 +#: engine/core/models.py:962 engine/core/models.py:2020 msgid "associated product" msgstr "Associated product" -#: engine/core/models.py:547 +#: engine/core/models.py:604 msgid "the price paid to the vendor for this product" msgstr "The price paid to the vendor for this product" -#: engine/core/models.py:548 +#: engine/core/models.py:605 msgid "vendor purchase price" msgstr "Vendor purchase price" -#: engine/core/models.py:552 +#: engine/core/models.py:609 msgid "available quantity of the product in stock" msgstr "Available quantity of the product in stock" -#: engine/core/models.py:553 +#: engine/core/models.py:610 msgid "quantity in stock" msgstr "Quantity in stock" -#: engine/core/models.py:557 +#: engine/core/models.py:614 msgid "vendor-assigned SKU for identifying the product" msgstr "Vendor-assigned SKU for identifying the product" -#: engine/core/models.py:558 +#: engine/core/models.py:615 msgid "vendor sku" msgstr "Vendor's SKU" -#: engine/core/models.py:564 +#: engine/core/models.py:621 msgid "digital file associated with this stock if applicable" msgstr "Digital file associated with this stock if applicable" -#: engine/core/models.py:565 +#: engine/core/models.py:622 msgid "digital file" msgstr "Digital file" -#: engine/core/models.py:569 +#: engine/core/models.py:626 msgid "system attributes" msgstr "System attributes" -#: engine/core/models.py:577 +#: engine/core/models.py:636 msgid "stock entries" msgstr "Stock entries" -#: engine/core/models.py:582 +#: engine/core/models.py:641 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1894,71 +1930,79 @@ msgstr "" "properties to improve performance. It is used to define and manipulate " "product data and its associated information within an application." -#: engine/core/models.py:595 +#: engine/core/models.py:660 msgid "category this product belongs to" msgstr "Category this product belongs to" -#: engine/core/models.py:604 +#: engine/core/models.py:669 msgid "optionally associate this product with a brand" msgstr "Optionally associate this product with a brand" -#: engine/core/models.py:610 +#: engine/core/models.py:675 msgid "tags that help describe or group this product" msgstr "Tags that help describe or group this product" -#: engine/core/models.py:615 +#: engine/core/models.py:680 msgid "indicates whether this product is digitally delivered" msgstr "Indicates whether this product is digitally delivered" -#: engine/core/models.py:616 +#: engine/core/models.py:681 msgid "is product digital" msgstr "Is product digital" -#: engine/core/models.py:623 +#: engine/core/models.py:688 msgid "indicates whether this product should be updated from periodic task" msgstr "indicates whether this product should be updated from periodic task" -#: engine/core/models.py:625 +#: engine/core/models.py:690 msgid "is product updatable" msgstr "is product updatable" -#: engine/core/models.py:631 +#: engine/core/models.py:696 msgid "provide a clear identifying name for the product" msgstr "Provide a clear identifying name for the product" -#: engine/core/models.py:632 +#: engine/core/models.py:697 msgid "product name" msgstr "Product name" -#: engine/core/models.py:638 engine/core/models.py:923 +#: engine/core/models.py:703 engine/core/models.py:1012 msgid "add a detailed description of the product" msgstr "Add a detailed description of the product" -#: engine/core/models.py:639 +#: engine/core/models.py:704 msgid "product description" msgstr "Product description" -#: engine/core/models.py:646 +#: engine/core/models.py:710 +msgid "optional video file for this product" +msgstr "Optional video file for this product" + +#: engine/core/models.py:711 +msgid "product video" +msgstr "Product video" + +#: engine/core/models.py:719 msgid "part number for this product" msgstr "Part number for this product" -#: engine/core/models.py:647 +#: engine/core/models.py:720 msgid "part number" msgstr "Part number" -#: engine/core/models.py:666 +#: engine/core/models.py:739 msgid "stock keeping unit for this product" msgstr "Stock Keeping Unit for this product" -#: engine/core/models.py:673 +#: engine/core/models.py:746 msgid "whether to export this product to marketplaces" msgstr "Whether to export this product to marketplaces" -#: engine/core/models.py:674 +#: engine/core/models.py:747 msgid "Export to Marketplaces" msgstr "Export to Marketplaces" -#: engine/core/models.py:749 +#: engine/core/models.py:835 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 " @@ -1974,64 +2018,64 @@ msgstr "" " including string, integer, float, boolean, array, and object. This allows " "for dynamic and flexible data structuring." -#: engine/core/models.py:762 +#: engine/core/models.py:848 msgid "group of this attribute" msgstr "Group of this attribute" -#: engine/core/models.py:768 +#: engine/core/models.py:854 msgid "string" msgstr "String" -#: engine/core/models.py:769 +#: engine/core/models.py:855 msgid "integer" msgstr "Integer" -#: engine/core/models.py:770 +#: engine/core/models.py:856 msgid "float" msgstr "Float" -#: engine/core/models.py:771 +#: engine/core/models.py:857 msgid "boolean" msgstr "Boolean" -#: engine/core/models.py:772 +#: engine/core/models.py:858 msgid "array" msgstr "Array" -#: engine/core/models.py:773 +#: engine/core/models.py:859 msgid "object" msgstr "Object" -#: engine/core/models.py:775 +#: engine/core/models.py:861 msgid "type of the attribute's value" msgstr "Type of the attribute's value" -#: engine/core/models.py:776 +#: engine/core/models.py:862 msgid "value type" msgstr "Value type" -#: engine/core/models.py:781 +#: engine/core/models.py:867 msgid "name of this attribute" msgstr "Name of this attribute" -#: engine/core/models.py:782 +#: engine/core/models.py:868 msgid "attribute's name" msgstr "Attribute's name" -#: engine/core/models.py:787 +#: engine/core/models.py:873 msgid "is filterable" msgstr "is filterable" -#: engine/core/models.py:789 +#: engine/core/models.py:875 msgid "designates whether this attribute can be used for filtering or not" msgstr "designates whether this attribute can be used for filtering or not" -#: engine/core/models.py:802 engine/core/models.py:820 +#: engine/core/models.py:888 engine/core/models.py:906 #: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Attribute" -#: engine/core/models.py:808 +#: engine/core/models.py:894 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" @@ -2041,19 +2085,19 @@ msgstr "" " links the 'attribute' to a unique 'value', allowing better organization and" " dynamic representation of product characteristics." -#: engine/core/models.py:819 +#: engine/core/models.py:905 msgid "attribute of this value" msgstr "Attribute of this value" -#: engine/core/models.py:827 +#: engine/core/models.py:913 msgid "the specific product associated with this attribute's value" msgstr "The specific product associated with this attribute's value" -#: engine/core/models.py:833 +#: engine/core/models.py:919 msgid "the specific value for this attribute" msgstr "The specific value for this attribute" -#: engine/core/models.py:846 +#: engine/core/models.py:934 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -2067,39 +2111,39 @@ msgstr "" "determining their display order. It also includes an accessibility feature " "with alternative text for the images." -#: engine/core/models.py:857 +#: engine/core/models.py:945 msgid "provide alternative text for the image for accessibility" msgstr "Provide alternative text for the image for accessibility" -#: engine/core/models.py:858 +#: engine/core/models.py:946 msgid "image alt text" msgstr "Image alt text" -#: engine/core/models.py:861 +#: engine/core/models.py:949 msgid "upload the image file for this product" msgstr "Upload the image file for this product" -#: engine/core/models.py:862 engine/core/models.py:893 +#: engine/core/models.py:950 engine/core/models.py:982 msgid "product image" msgstr "Product image" -#: engine/core/models.py:867 +#: engine/core/models.py:955 msgid "determines the order in which images are displayed" msgstr "Determines the order in which images are displayed" -#: engine/core/models.py:868 +#: engine/core/models.py:956 msgid "display priority" msgstr "Display priority" -#: engine/core/models.py:873 +#: engine/core/models.py:961 msgid "the product that this image represents" msgstr "The product that this image represents" -#: engine/core/models.py:894 +#: engine/core/models.py:983 msgid "product images" msgstr "Product images" -#: engine/core/models.py:899 +#: engine/core/models.py:988 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -2115,39 +2159,39 @@ msgstr "" "applicable products. It integrates with the product catalog to determine the" " affected items in the campaign." -#: engine/core/models.py:911 +#: engine/core/models.py:1000 msgid "percentage discount for the selected products" msgstr "Percentage discount for the selected products" -#: engine/core/models.py:912 +#: engine/core/models.py:1001 msgid "discount percentage" msgstr "Discount percentage" -#: engine/core/models.py:917 +#: engine/core/models.py:1006 msgid "provide a unique name for this promotion" msgstr "Provide a unique name for this promotion" -#: engine/core/models.py:918 +#: engine/core/models.py:1007 msgid "promotion name" msgstr "Promotion name" -#: engine/core/models.py:924 +#: engine/core/models.py:1013 msgid "promotion description" msgstr "Promotion description" -#: engine/core/models.py:929 +#: engine/core/models.py:1018 msgid "select which products are included in this promotion" msgstr "Select which products are included in this promotion" -#: engine/core/models.py:930 +#: engine/core/models.py:1019 msgid "included products" msgstr "Included products" -#: engine/core/models.py:934 +#: engine/core/models.py:1027 msgid "promotion" msgstr "Promotion" -#: engine/core/models.py:945 +#: engine/core/models.py:1038 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2159,23 +2203,23 @@ msgstr "" "operations such as adding and removing products, as well as supporting " "operations for adding and removing multiple products at once." -#: engine/core/models.py:957 +#: engine/core/models.py:1050 msgid "products that the user has marked as wanted" msgstr "Products that the user has marked as wanted" -#: engine/core/models.py:965 +#: engine/core/models.py:1058 msgid "user who owns this wishlist" msgstr "User who owns this wishlist" -#: engine/core/models.py:966 +#: engine/core/models.py:1059 msgid "wishlist owner" msgstr "Wishlist's Owner" -#: engine/core/models.py:974 +#: engine/core/models.py:1067 msgid "wishlist" msgstr "Wishlist" -#: engine/core/models.py:1016 +#: engine/core/models.py:1109 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2191,19 +2235,19 @@ msgstr "" "files. It extends functionality from specific mixins and provides additional" " custom features." -#: engine/core/models.py:1031 +#: engine/core/models.py:1124 msgid "documentary" msgstr "Documentary" -#: engine/core/models.py:1032 +#: engine/core/models.py:1125 msgid "documentaries" msgstr "Documentaries" -#: engine/core/models.py:1042 +#: engine/core/models.py:1135 msgid "unresolved" msgstr "Unresolved" -#: engine/core/models.py:1047 +#: engine/core/models.py:1140 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2223,59 +2267,59 @@ msgstr "" "responses for further processing or inspection. The class also allows " "associating an address with a user, facilitating personalized data handling." -#: engine/core/models.py:1062 +#: engine/core/models.py:1155 msgid "address line for the customer" msgstr "Address line for the customer" -#: engine/core/models.py:1063 +#: engine/core/models.py:1156 msgid "address line" msgstr "Address line" -#: engine/core/models.py:1065 +#: engine/core/models.py:1158 msgid "street" msgstr "Street" -#: engine/core/models.py:1066 +#: engine/core/models.py:1159 msgid "district" msgstr "District" -#: engine/core/models.py:1067 +#: engine/core/models.py:1160 msgid "city" msgstr "City" -#: engine/core/models.py:1068 +#: engine/core/models.py:1161 msgid "region" msgstr "Region" -#: engine/core/models.py:1069 +#: engine/core/models.py:1162 msgid "postal code" msgstr "Postal code" -#: engine/core/models.py:1070 +#: engine/core/models.py:1163 msgid "country" msgstr "Country" -#: engine/core/models.py:1077 +#: engine/core/models.py:1170 msgid "geolocation point: (longitude, latitude)" msgstr "Geolocation Point(Longitude, Latitude)" -#: engine/core/models.py:1083 +#: engine/core/models.py:1176 msgid "full JSON response from geocoder for this address" msgstr "Full JSON response from geocoder for this address" -#: engine/core/models.py:1089 +#: engine/core/models.py:1182 msgid "stored JSON response from the geocoding service" msgstr "Stored JSON response from the geocoding service" -#: engine/core/models.py:1099 +#: engine/core/models.py:1192 msgid "address" msgstr "Address" -#: engine/core/models.py:1100 +#: engine/core/models.py:1193 msgid "addresses" msgstr "Adresses" -#: engine/core/models.py:1112 +#: engine/core/models.py:1205 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2291,71 +2335,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." -#: engine/core/models.py:1126 +#: engine/core/models.py:1219 msgid "unique code used by a user to redeem a discount" msgstr "Unique code used by a user to redeem a discount" -#: engine/core/models.py:1127 +#: engine/core/models.py:1220 msgid "promo code identifier" msgstr "Promo code identifier" -#: engine/core/models.py:1134 +#: engine/core/models.py:1227 msgid "fixed discount amount applied if percent is not used" msgstr "Fixed discount amount applied if percent is not used" -#: engine/core/models.py:1135 +#: engine/core/models.py:1228 msgid "fixed discount amount" msgstr "Fixed discount amount" -#: engine/core/models.py:1141 +#: engine/core/models.py:1234 msgid "percentage discount applied if fixed amount is not used" msgstr "Percentage discount applied if fixed amount is not used" -#: engine/core/models.py:1142 +#: engine/core/models.py:1235 msgid "percentage discount" msgstr "Percentage discount" -#: engine/core/models.py:1147 +#: engine/core/models.py:1240 msgid "timestamp when the promocode expires" msgstr "Timestamp when the promocode expires" -#: engine/core/models.py:1148 +#: engine/core/models.py:1241 msgid "end validity time" msgstr "End validity time" -#: engine/core/models.py:1153 +#: engine/core/models.py:1246 msgid "timestamp from which this promocode is valid" msgstr "Timestamp from which this promocode is valid" -#: engine/core/models.py:1154 +#: engine/core/models.py:1247 msgid "start validity time" msgstr "Start validity time" -#: engine/core/models.py:1159 +#: engine/core/models.py:1252 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "Timestamp when the promocode was used, blank if not used yet" -#: engine/core/models.py:1160 +#: engine/core/models.py:1253 msgid "usage timestamp" msgstr "Usage timestamp" -#: engine/core/models.py:1165 +#: engine/core/models.py:1258 msgid "user assigned to this promocode if applicable" msgstr "User assigned to this promocode if applicable" -#: engine/core/models.py:1166 +#: engine/core/models.py:1259 msgid "assigned user" msgstr "Assigned user" -#: engine/core/models.py:1173 +#: engine/core/models.py:1266 msgid "promo code" msgstr "Promo code" -#: engine/core/models.py:1174 +#: engine/core/models.py:1267 msgid "promo codes" msgstr "Promo codes" -#: engine/core/models.py:1190 +#: engine/core/models.py:1283 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2363,16 +2407,16 @@ msgstr "" "Only one type of discount should be defined (amount or percent), but not " "both or neither." -#: engine/core/models.py:1212 +#: engine/core/models.py:1305 msgid "promocode already used" msgstr "Promocode has been used already" -#: engine/core/models.py:1234 +#: engine/core/models.py:1327 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Invalid discount type for promocode {self.uuid}!" -#: engine/core/models.py:1243 +#: engine/core/models.py:1336 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 " @@ -2388,136 +2432,136 @@ msgstr "" "set, and shipping or billing details updated. Equally, functionality " "supports managing the products in the order lifecycle." -#: engine/core/models.py:1260 +#: engine/core/models.py:1357 msgid "the billing address used for this order" msgstr "The billing address used for this order" -#: engine/core/models.py:1268 +#: engine/core/models.py:1365 msgid "optional promo code applied to this order" msgstr "Optional promo code applied to this order" -#: engine/core/models.py:1269 +#: engine/core/models.py:1366 msgid "applied promo code" msgstr "Applied promo code" -#: engine/core/models.py:1277 +#: engine/core/models.py:1374 msgid "the shipping address used for this order" msgstr "The shipping address used for this order" -#: engine/core/models.py:1278 +#: engine/core/models.py:1375 msgid "shipping address" msgstr "Shipping address" -#: engine/core/models.py:1284 +#: engine/core/models.py:1381 msgid "current status of the order in its lifecycle" msgstr "Current status of the order in its lifecycle" -#: engine/core/models.py:1285 +#: engine/core/models.py:1382 msgid "order status" msgstr "Order status" -#: engine/core/models.py:1290 engine/core/models.py:1889 +#: engine/core/models.py:1387 engine/core/models.py:1997 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" -#: engine/core/models.py:1296 +#: engine/core/models.py:1393 msgid "json representation of order attributes for this order" msgstr "JSON representation of order attributes for this order" -#: engine/core/models.py:1302 +#: engine/core/models.py:1399 msgid "the user who placed the order" msgstr "The user who placed the order" -#: engine/core/models.py:1303 +#: engine/core/models.py:1400 msgid "user" msgstr "User" -#: engine/core/models.py:1309 +#: engine/core/models.py:1406 msgid "the timestamp when the order was finalized" msgstr "The timestamp when the order was finalized" -#: engine/core/models.py:1310 +#: engine/core/models.py:1407 msgid "buy time" msgstr "Buy time" -#: engine/core/models.py:1317 +#: engine/core/models.py:1414 msgid "a human-readable identifier for the order" msgstr "A human-readable identifier for the order" -#: engine/core/models.py:1318 +#: engine/core/models.py:1415 msgid "human readable id" msgstr "human-readable ID" -#: engine/core/models.py:1324 +#: engine/core/models.py:1421 msgid "order" msgstr "Order" -#: engine/core/models.py:1371 +#: engine/core/models.py:1468 msgid "a user must have only one pending order at a time" msgstr "A user must have only one pending order at a time!" -#: engine/core/models.py:1404 +#: engine/core/models.py:1504 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" -#: engine/core/models.py:1410 +#: engine/core/models.py:1510 msgid "you cannot add inactive products to order" msgstr "You cannot add inactive products to order" -#: engine/core/models.py:1432 +#: engine/core/models.py:1533 msgid "you cannot add more products than available in stock" msgstr "You cannot add more products than available in stock" -#: engine/core/models.py:1456 engine/core/models.py:1485 -#: engine/core/models.py:1495 +#: engine/core/models.py:1557 engine/core/models.py:1586 +#: engine/core/models.py:1596 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" -#: engine/core/models.py:1480 +#: engine/core/models.py:1581 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} does not exist with query <{query}>!" -#: engine/core/models.py:1519 +#: engine/core/models.py:1620 msgid "promocode does not exist" msgstr "Promocode does not exist" -#: engine/core/models.py:1534 +#: engine/core/models.py:1635 msgid "you can only buy physical products with shipping address specified" msgstr "You can only buy physical products with shipping address specified!" -#: engine/core/models.py:1555 +#: engine/core/models.py:1656 msgid "address does not exist" msgstr "Address does not exist" -#: engine/core/models.py:1577 engine/core/models.py:1656 +#: engine/core/models.py:1678 engine/core/models.py:1757 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." -#: engine/core/models.py:1583 engine/core/models.py:1649 +#: engine/core/models.py:1684 engine/core/models.py:1750 msgid "invalid force value" msgstr "Invalid force value" -#: engine/core/models.py:1589 engine/core/models.py:1660 +#: engine/core/models.py:1690 engine/core/models.py:1761 msgid "you cannot purchase an empty order!" msgstr "You cannot purchase an empty order!" -#: engine/core/models.py:1610 +#: engine/core/models.py:1711 msgid "you cannot buy an order without a user" msgstr "You cannot buy an order without a user!" -#: engine/core/models.py:1624 +#: engine/core/models.py:1725 msgid "a user without a balance cannot buy with balance" msgstr "A user without a balance cannot buy with balance!" -#: engine/core/models.py:1630 +#: engine/core/models.py:1731 msgid "insufficient funds to complete the order" msgstr "Insufficient funds to complete the order" -#: engine/core/models.py:1671 +#: engine/core/models.py:1772 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2525,14 +2569,14 @@ msgstr "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" -#: engine/core/models.py:1682 +#: engine/core/models.py:1783 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "Invalid payment method: {payment_method} from {available_payment_methods}!" -#: engine/core/models.py:1813 +#: engine/core/models.py:1916 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2546,33 +2590,33 @@ msgstr "" "product in the order, and a user-assigned rating. The class uses database " "fields to effectively model and manage feedback data." -#: engine/core/models.py:1825 +#: engine/core/models.py:1928 msgid "user-provided comments about their experience with the product" msgstr "User-provided comments about their experience with the product" -#: engine/core/models.py:1826 +#: engine/core/models.py:1929 msgid "feedback comments" msgstr "Feedback comments" -#: engine/core/models.py:1834 +#: engine/core/models.py:1937 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" -#: engine/core/models.py:1836 +#: engine/core/models.py:1939 msgid "related order product" msgstr "Related order product" -#: engine/core/models.py:1841 +#: engine/core/models.py:1944 msgid "user-assigned rating for the product" msgstr "User-assigned rating for the product" -#: engine/core/models.py:1842 +#: engine/core/models.py:1945 msgid "product rating" msgstr "Product rating" -#: engine/core/models.py:1862 +#: engine/core/models.py:1965 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2594,108 +2638,108 @@ msgstr "" "download URL for digital products. The model integrates with the Order and " "Product models and stores a reference to them." -#: engine/core/models.py:1877 +#: engine/core/models.py:1985 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" -#: engine/core/models.py:1878 +#: engine/core/models.py:1986 msgid "purchase price at order time" msgstr "Purchase price at order time" -#: engine/core/models.py:1883 +#: engine/core/models.py:1991 msgid "internal comments for admins about this ordered product" msgstr "Internal comments for admins about this ordered product" -#: engine/core/models.py:1884 +#: engine/core/models.py:1992 msgid "internal comments" msgstr "Internal comments" -#: engine/core/models.py:1890 +#: engine/core/models.py:1998 msgid "user notifications" msgstr "User notifications" -#: engine/core/models.py:1895 +#: engine/core/models.py:2003 msgid "json representation of this item's attributes" msgstr "JSON representation of this item's attributes" -#: engine/core/models.py:1896 +#: engine/core/models.py:2004 msgid "ordered product attributes" msgstr "Ordered product attributes" -#: engine/core/models.py:1901 +#: engine/core/models.py:2009 msgid "reference to the parent order that contains this product" msgstr "Reference to the parent order that contains this product" -#: engine/core/models.py:1902 +#: engine/core/models.py:2010 msgid "parent order" msgstr "Parent order" -#: engine/core/models.py:1911 +#: engine/core/models.py:2019 msgid "the specific product associated with this order line" msgstr "The specific product associated with this order line" -#: engine/core/models.py:1918 +#: engine/core/models.py:2026 msgid "quantity of this specific product in the order" msgstr "Quantity of this specific product in the order" -#: engine/core/models.py:1919 +#: engine/core/models.py:2027 msgid "product quantity" msgstr "Product quantity" -#: engine/core/models.py:1926 +#: engine/core/models.py:2034 msgid "current status of this product in the order" msgstr "Current status of this product in the order" -#: engine/core/models.py:1927 +#: engine/core/models.py:2035 msgid "product line status" msgstr "Product line status" -#: engine/core/models.py:1998 +#: engine/core/models.py:2106 msgid "order product must have an order" msgstr "Orderproduct must have an associated order!" -#: engine/core/models.py:2000 +#: engine/core/models.py:2108 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Wrong action specified for feedback: {action}!" -#: engine/core/models.py:2017 +#: engine/core/models.py:2125 msgid "you cannot feedback an order which is not received" msgstr "you cannot feedback an order which is not received" -#: engine/core/models.py:2026 +#: engine/core/models.py:2132 engine/core/models.py:2227 msgid "name" msgstr "Name" -#: engine/core/models.py:2028 +#: engine/core/models.py:2134 msgid "URL of the integration" msgstr "URL of the integration" -#: engine/core/models.py:2031 +#: engine/core/models.py:2137 msgid "authentication credentials" msgstr "Authentication credentials" -#: engine/core/models.py:2054 +#: engine/core/models.py:2160 msgid "you can only have one default CRM provider" msgstr "You can only have one default CRM provider" -#: engine/core/models.py:2064 +#: engine/core/models.py:2170 msgid "CRM" msgstr "CRM" -#: engine/core/models.py:2065 +#: engine/core/models.py:2171 msgid "CRMs" msgstr "CRMs" -#: engine/core/models.py:2081 +#: engine/core/models.py:2187 msgid "order CRM link" msgstr "Order's CRM link" -#: engine/core/models.py:2082 +#: engine/core/models.py:2188 msgid "orders CRM links" msgstr "Orders' CRM links" -#: engine/core/models.py:2087 +#: engine/core/models.py:2193 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2711,14 +2755,38 @@ 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." -#: engine/core/models.py:2103 +#: engine/core/models.py:2209 msgid "download" msgstr "Download" -#: engine/core/models.py:2104 +#: engine/core/models.py:2210 msgid "downloads" msgstr "Downloads" +#: engine/core/models.py:2228 +msgid "descriptive name for the image" +msgstr "Descriptive name for the image" + +#: engine/core/models.py:2233 +msgid "image file pasted in the markdown editor" +msgstr "Image file pasted in the markdown editor" + +#: engine/core/models.py:2239 +msgid "alt text" +msgstr "Alt text" + +#: engine/core/models.py:2240 +msgid "alternative text for accessibility" +msgstr "Alternative text for accessibility" + +#: engine/core/models.py:2244 +msgid "pasted image" +msgstr "Pasted image" + +#: engine/core/models.py:2245 +msgid "pasted images" +msgstr "Pasted images" + #: engine/core/serializers/utility.py:91 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." @@ -2726,6 +2794,16 @@ msgstr "" "you must provide a comment, rating, and order product uuid to add feedback." #: engine/core/sitemaps.py:25 +#: engine/core/templates/admin_doc/bookmarklets.html:8 +#: engine/core/templates/admin_doc/index.html:8 +#: engine/core/templates/admin_doc/missing_docutils.html:8 +#: engine/core/templates/admin_doc/model_detail.html:8 +#: engine/core/templates/admin_doc/model_index.html:8 +#: engine/core/templates/admin_doc/template_detail.html:8 +#: engine/core/templates/admin_doc/template_filter_index.html:8 +#: engine/core/templates/admin_doc/template_tag_index.html:8 +#: engine/core/templates/admin_doc/view_detail.html:8 +#: engine/core/templates/admin_doc/view_index.html:8 msgid "Home" msgstr "Home" @@ -2778,45 +2856,34 @@ msgstr "Gross" msgid "Dashboard" msgstr "Dashboard" -#: engine/core/templates/admin/dashboard/_income_overview.html:7 +#: engine/core/templates/admin/dashboard/_income_overview.html:6 msgid "Income overview" msgstr "Income overview" -#: engine/core/templates/admin/dashboard/_income_overview.html:31 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Net" +#: engine/core/templates/admin/dashboard/_income_overview.html:16 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" msgstr "Net revenue" -#: engine/core/templates/admin/dashboard/_income_overview.html:37 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Taxes" -msgstr "Taxes" - -#: engine/core/templates/admin/dashboard/_income_overview.html:43 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 +#: engine/core/templates/admin/dashboard/_income_overview.html:21 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 msgid "Returns" msgstr "Returns" -#: engine/core/templates/admin/dashboard/_income_overview.html:48 -msgid "Gross (pie total)" -msgstr "Gross revenue" - -#: engine/core/templates/admin/dashboard/_income_overview.html:72 -msgid "No data" -msgstr "No data" - +#: engine/core/templates/admin/dashboard/_income_overview.html:26 #: engine/core/templates/admin/dashboard/_kpis.html:6 msgid "GMV" msgstr "GMV" +#: engine/core/templates/admin/dashboard/_income_overview.html:50 +msgid "No data" +msgstr "No data" + #: engine/core/templates/admin/dashboard/_kpis.html:34 msgid "AOV" msgstr "AOV" -#: engine/core/templates/admin/dashboard/_kpis.html:48 -msgid "Net revenue" -msgstr "Net revenue" - #: engine/core/templates/admin/dashboard/_kpis.html:62 msgid "Refund rate" msgstr "Refund rate" @@ -2829,7 +2896,7 @@ msgstr "Returned" msgid "Low stock" msgstr "Low stock" -#: engine/core/templates/admin/dashboard/_low_stock.html:29 +#: engine/core/templates/admin/dashboard/_low_stock.html:33 msgid "No low stock items." msgstr "No low stock items." @@ -2886,6 +2953,299 @@ msgstr "No category sales in the last 30 days." msgid "Django site admin" msgstr "Django site admin" +#: engine/core/templates/admin_doc/bookmarklets.html:4 +#: engine/core/templates/admin_doc/bookmarklets.html:17 +msgid "Documentation bookmarklets" +msgstr "Documentation bookmarklets" + +#: engine/core/templates/admin_doc/bookmarklets.html:10 +#: engine/core/templates/admin_doc/index.html:4 +#: engine/core/templates/admin_doc/index.html:10 +#: engine/core/templates/admin_doc/index.html:15 +#: engine/core/templates/admin_doc/missing_docutils.html:10 +#: engine/core/templates/admin_doc/missing_docutils.html:19 +#: engine/core/templates/admin_doc/model_detail.html:10 +#: engine/core/templates/admin_doc/model_index.html:10 +#: engine/core/templates/admin_doc/template_detail.html:10 +#: engine/core/templates/admin_doc/template_filter_index.html:10 +#: engine/core/templates/admin_doc/template_tag_index.html:10 +#: engine/core/templates/admin_doc/view_detail.html:10 +#: engine/core/templates/admin_doc/view_index.html:10 +msgid "Documentation" +msgstr "Documentation" + +#: engine/core/templates/admin_doc/bookmarklets.html:12 +#: engine/core/templates/admin_doc/index.html:53 +msgid "Bookmarklets" +msgstr "Bookmarklets" + +#: engine/core/templates/admin_doc/bookmarklets.html:19 +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." + +#: engine/core/templates/admin_doc/bookmarklets.html:29 +msgid "Documentation for this page" +msgstr "Documentation for this page" + +#: engine/core/templates/admin_doc/bookmarklets.html:31 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Jumps you from any page to the documentation for the view that generates " +"that page." + +#: engine/core/templates/admin_doc/index.html:21 +#: engine/core/templates/admin_doc/model_detail.html:12 +#: engine/core/templates/admin_doc/model_index.html:4 +#: engine/core/templates/admin_doc/model_index.html:12 +msgid "Models" +msgstr "Models" + +#: engine/core/templates/admin_doc/index.html:23 +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" + +#: engine/core/templates/admin_doc/index.html:29 +#: engine/core/templates/admin_doc/view_detail.html:12 +#: engine/core/templates/admin_doc/view_index.html:4 +#: engine/core/templates/admin_doc/view_index.html:12 +msgid "Views" +msgstr "Views" + +#: engine/core/templates/admin_doc/index.html:31 +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." + +#: engine/core/templates/admin_doc/index.html:39 +msgid "List of all the template tags and their functions." +msgstr "List of all the template tags and their functions." + +#: engine/core/templates/admin_doc/index.html:45 +#: engine/core/templates/admin_doc/template_filter_index.html:12 +msgid "Filters" +msgstr "Filters" + +#: engine/core/templates/admin_doc/index.html:47 +msgid "" +"Filters are actions which can be applied to variables in a template to alter" +" the output." +msgstr "" +"Filters are actions which can be applied to variables in a template to alter" +" the output." + +#: engine/core/templates/admin_doc/index.html:55 +msgid "Tools for your browser to quickly access admin functionality." +msgstr "Tools for your browser to quickly access admin functionality." + +#: engine/core/templates/admin_doc/missing_docutils.html:4 +msgid "Please install docutils" +msgstr "Please install docutils" + +#: engine/core/templates/admin_doc/missing_docutils.html:20 +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"The admin documentation system requires Python's docutils library." + +#: engine/core/templates/admin_doc/missing_docutils.html:21 +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Please ask your administrators to install docutils." + +#: engine/core/templates/admin_doc/model_detail.html:4 +#, python-format +msgid "Model: %(name)s" +msgstr "Model: %(name)s" + +#: engine/core/templates/admin_doc/model_detail.html:29 +msgid "Fields" +msgstr "Fields" + +#: engine/core/templates/admin_doc/model_detail.html:36 +msgid "Field" +msgstr "Field" + +#: engine/core/templates/admin_doc/model_detail.html:37 +msgid "Type" +msgstr "Type" + +#: engine/core/templates/admin_doc/model_detail.html:38 +#: engine/core/templates/admin_doc/model_detail.html:70 +msgid "Description" +msgstr "Description" + +#: engine/core/templates/admin_doc/model_detail.html:61 +msgid "Methods with arguments" +msgstr "Methods with arguments" + +#: engine/core/templates/admin_doc/model_detail.html:68 +msgid "Method" +msgstr "Method" + +#: engine/core/templates/admin_doc/model_detail.html:69 +msgid "Arguments" +msgstr "Arguments" + +#: engine/core/templates/admin_doc/model_detail.html:89 +msgid "Back to Model documentation" +msgstr "Back to Model documentation" + +#: engine/core/templates/admin_doc/model_index.html:17 +msgid "Model documentation" +msgstr "Model documentation" + +#: engine/core/templates/admin_doc/model_index.html:44 +msgid "Model groups" +msgstr "Model groups" + +#: engine/core/templates/admin_doc/template_detail.html:4 +#, python-format +msgid "Template: %(name)s" +msgstr "Template: %(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:12 +msgid "Templates" +msgstr "Templates" + +#: engine/core/templates/admin_doc/template_detail.html:17 +#, python-format +msgid "" +"Template: %(name)s" +msgstr "" +"Template: %(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:21 +#, python-format +msgid "Search path for template %(name)s:" +msgstr "Search path for template %(name)s:" + +#: engine/core/templates/admin_doc/template_detail.html:29 +msgid "(does not exist)" +msgstr "(does not exist)" + +#: engine/core/templates/admin_doc/template_detail.html:40 +msgid "Back to Documentation" +msgstr "Back to Documentation" + +#: engine/core/templates/admin_doc/template_filter_index.html:4 +msgid "Template filters" +msgstr "Template filters" + +#: engine/core/templates/admin_doc/template_filter_index.html:17 +msgid "Template filter documentation" +msgstr "Template filter documentation" + +#: engine/core/templates/admin_doc/template_filter_index.html:26 +#: engine/core/templates/admin_doc/template_filter_index.html:52 +msgid "Built-in filters" +msgstr "Built-in filters" + +#: engine/core/templates/admin_doc/template_filter_index.html:29 +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before using" +" the filter." +msgstr "" +"To use these filters, put %(code)s in your template before using" +" the filter." + +#: engine/core/templates/admin_doc/template_tag_index.html:4 +msgid "Template tags" +msgstr "Template tags" + +#: engine/core/templates/admin_doc/template_tag_index.html:17 +msgid "Template tag documentation" +msgstr "Template tag documentation" + +#: engine/core/templates/admin_doc/template_tag_index.html:26 +#: engine/core/templates/admin_doc/template_tag_index.html:52 +msgid "Built-in tags" +msgstr "Built-in tags" + +#: engine/core/templates/admin_doc/template_tag_index.html:29 +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using the tag." +msgstr "" +"To use these tags, put %(code)s in your template before using the tag." + +#: engine/core/templates/admin_doc/view_detail.html:4 +#, python-format +msgid "View: %(name)s" +msgstr "View: %(name)s" + +#: engine/core/templates/admin_doc/view_detail.html:28 +msgid "Context:" +msgstr "Context:" + +#: engine/core/templates/admin_doc/view_detail.html:33 +msgid "Templates:" +msgstr "Templates:" + +#: engine/core/templates/admin_doc/view_detail.html:41 +msgid "Back to View documentation" +msgstr "Back to View documentation" + +#: engine/core/templates/admin_doc/view_index.html:17 +msgid "View documentation" +msgstr "View documentation" + +#: engine/core/templates/admin_doc/view_index.html:28 +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Views by namespace %(name)s" + +#: engine/core/templates/admin_doc/view_index.html:30 +msgid "Views by empty namespace" +msgstr "Views by empty namespace" + +#: engine/core/templates/admin_doc/view_index.html:40 +#, python-format +msgid "" +"View function: %(full_name)s. Name: %(url_name)s." +msgstr "" +"View function: %(full_name)s. Name: %(url_name)s." + +#: engine/core/templates/admin_doc/view_index.html:54 +msgid "Jump to namespace" +msgstr "Jump to namespace" + +#: engine/core/templates/admin_doc/view_index.html:59 +msgid "Empty namespace" +msgstr "Empty namespace" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -2985,7 +3345,7 @@ msgstr "" " information" #: engine/core/templates/digital_order_delivered_email.html:137 -#: engine/core/templates/json_table_widget.html:6 +#: engine/core/templates/json_table_widget.html:26 msgid "value" msgstr "Value" @@ -3005,11 +3365,23 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "Best regards,
the %(project_name)s team" -#: engine/core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:7 +msgid "Key" +msgstr "Key" + +#: engine/core/templates/json_table_widget.html:8 +msgid "Value" +msgstr "Value" + +#: engine/core/templates/json_table_widget.html:19 msgid "key" msgstr "Key" -#: engine/core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:32 +msgid "Delete row" +msgstr "Delete row" + +#: engine/core/templates/json_table_widget.html:44 msgid "Add Row" msgstr "Add Row" @@ -3096,13 +3468,22 @@ msgstr "You do not have permission to perform this action." msgid "NOMINATIM_URL must be configured." msgstr "NOMINATIM_URL parameter must be configured!" -#: engine/core/validators.py:23 +#: engine/core/validators.py:18 +msgid "could not determine file type" +msgstr "Could not determine file type" + +#: engine/core/validators.py:24 +#, python-brace-format +msgid "unsupported video format. supported formats: {supported}" +msgstr "Unsupported video format. Supported formats: {supported}" + +#: engine/core/validators.py:45 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "Image dimensions should not exceed w{max_width} x h{max_height} pixels!" -#: engine/core/views.py:104 +#: engine/core/views.py:108 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3110,7 +3491,7 @@ msgstr "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." -#: engine/core/views.py:119 +#: engine/core/views.py:123 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3120,17 +3501,17 @@ msgstr "" "the request, fetches the appropriate sitemap detail response, and sets the " "Content-Type header for XML." -#: engine/core/views.py:155 +#: engine/core/views.py:174 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Returns a list of supported languages and their corresponding information." -#: engine/core/views.py:182 +#: engine/core/views.py:201 msgid "Returns the parameters of the website as a JSON object." msgstr "Returns the parameters of the website as a JSON object." -#: engine/core/views.py:198 +#: engine/core/views.py:217 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3138,11 +3519,11 @@ msgstr "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." -#: engine/core/views.py:220 +#: engine/core/views.py:239 msgid "Handles `contact us` form submissions." msgstr "Handles `contact us` form submissions." -#: engine/core/views.py:236 +#: engine/core/views.py:255 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3150,15 +3531,15 @@ msgstr "" "Handles requests for processing and validating URLs from incoming POST " "requests." -#: engine/core/views.py:273 +#: engine/core/views.py:292 msgid "Handles global search queries." msgstr "Handles global search queries." -#: engine/core/views.py:289 +#: engine/core/views.py:308 msgid "Handles the logic of buying as a business without registration." msgstr "Handles the logic of buying as a business without registration." -#: engine/core/views.py:337 +#: engine/core/views.py:356 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3166,31 +3547,31 @@ msgstr "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." -#: engine/core/views.py:348 +#: engine/core/views.py:367 msgid "order_product_uuid is required" msgstr "order_product_uuid is required" -#: engine/core/views.py:355 +#: engine/core/views.py:374 msgid "order product does not exist" msgstr "order product does not exist" -#: engine/core/views.py:358 +#: engine/core/views.py:377 msgid "you can only download the digital asset once" msgstr "You can only download the digital asset once" -#: engine/core/views.py:362 +#: engine/core/views.py:381 msgid "the order must be paid before downloading the digital asset" msgstr "the order must be paid before downloading the digital asset" -#: engine/core/views.py:369 +#: engine/core/views.py:388 msgid "the order product does not have a product" msgstr "The order product does not have a product" -#: engine/core/views.py:412 +#: engine/core/views.py:431 msgid "favicon not found" msgstr "favicon not found" -#: engine/core/views.py:418 +#: engine/core/views.py:437 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3198,7 +3579,7 @@ msgstr "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." -#: engine/core/views.py:432 +#: engine/core/views.py:451 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3208,16 +3589,20 @@ msgstr "" " HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." -#: engine/core/views.py:445 +#: engine/core/views.py:464 msgid "Returns current version of the Schon. " msgstr "Returns current version of the Schon." -#: engine/core/views.py:674 engine/core/views.py:689 +#: engine/core/views.py:475 +msgid "no image file provided" +msgstr "No image file provided" + +#: engine/core/views.py:710 engine/core/views.py:725 #, python-format msgid "Revenue & Orders (last %(days)d)" msgstr "Revenue & Orders (last %(days)d)" -#: engine/core/views.py:870 +#: engine/core/views.py:911 msgid "Returns custom variables for Dashboard. " msgstr "Returns custom variables for Dashboard." @@ -3305,7 +3690,7 @@ msgstr "" "uses Django's ViewSet framework to simplify the implementation of API " "endpoints for Brand objects." -#: engine/core/viewsets.py:458 +#: engine/core/viewsets.py:460 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3323,7 +3708,15 @@ msgstr "" "product details, applying permissions, and accessing related feedback of a " "product." -#: engine/core/viewsets.py:605 +#: engine/core/viewsets.py:541 +msgid "identificator_type and identificators are required" +msgstr "identificator_type and identificators are required" + +#: engine/core/viewsets.py:554 +msgid "identificator_type must be one of: uuid, slug, sku" +msgstr "identificator_type must be one of: uuid, slug, sku" + +#: engine/core/viewsets.py:635 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3337,7 +3730,7 @@ msgstr "" "actions. The purpose of this class is to provide streamlined access to " "Vendor-related resources through the Django REST framework." -#: engine/core/viewsets.py:625 +#: engine/core/viewsets.py:655 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3353,7 +3746,7 @@ msgstr "" " accessible Feedback objects. It extends the base `SchonViewSet` and makes " "use of Django's filtering system for querying data." -#: engine/core/viewsets.py:652 +#: engine/core/viewsets.py:682 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3371,7 +3764,7 @@ msgstr "" " uses multiple serializers based on the specific action being performed and " "enforces permissions accordingly while interacting with order data." -#: engine/core/viewsets.py:914 +#: engine/core/viewsets.py:944 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3385,11 +3778,11 @@ msgstr "" " requested action. Additionally, it provides a detailed action for handling " "feedback on OrderProduct instances" -#: engine/core/viewsets.py:974 +#: engine/core/viewsets.py:1004 msgid "Manages operations related to Product images in the application. " msgstr "Manages operations related to Product images in the application." -#: engine/core/viewsets.py:988 +#: engine/core/viewsets.py:1018 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3397,15 +3790,15 @@ msgstr "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." -#: engine/core/viewsets.py:1019 +#: engine/core/viewsets.py:1049 msgid "Represents a view set for managing promotions. " msgstr "Represents a view set for managing promotions." -#: engine/core/viewsets.py:1032 +#: engine/core/viewsets.py:1062 msgid "Handles operations related to Stock data in the system." msgstr "Handles operations related to Stock data in the system." -#: engine/core/viewsets.py:1046 +#: engine/core/viewsets.py:1076 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3423,7 +3816,7 @@ msgstr "" "that users can only manage their own wishlists unless explicit permissions " "are granted." -#: engine/core/viewsets.py:1183 +#: engine/core/viewsets.py:1213 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3437,12 +3830,12 @@ msgstr "" "different HTTP methods, serializer overrides, and permission handling based " "on the request context." -#: engine/core/viewsets.py:1254 +#: engine/core/viewsets.py:1275 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Geocoding error: {e}" -#: engine/core/viewsets.py:1262 +#: engine/core/viewsets.py:1283 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/en_US/LC_MESSAGES/django.mo b/engine/core/locale/en_US/LC_MESSAGES/django.mo index a517bc39..9fe2d627 100644 Binary files a/engine/core/locale/en_US/LC_MESSAGES/django.mo and b/engine/core/locale/en_US/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/en_US/LC_MESSAGES/django.po b/engine/core/locale/en_US/LC_MESSAGES/django.po index 765824d6..a1eb5180 100644 --- a/engine/core/locale/en_US/LC_MESSAGES/django.po +++ b/engine/core/locale/en_US/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -49,113 +49,133 @@ msgstr "Modified" msgid "when the object was last modified" msgstr "When the object was last edited" -#: engine/core/admin.py:94 +#: engine/core/admin.py:98 msgid "translations" msgstr "Translations" -#: engine/core/admin.py:102 +#: engine/core/admin.py:106 msgid "general" msgstr "General" -#: engine/core/admin.py:106 +#: engine/core/admin.py:110 msgid "relations" msgstr "Relations" -#: engine/core/admin.py:111 +#: engine/core/admin.py:115 msgid "additional info" msgstr "additional info" -#: engine/core/admin.py:133 +#: engine/core/admin.py:137 msgid "metadata" msgstr "Metadata" -#: engine/core/admin.py:141 +#: engine/core/admin.py:145 msgid "timestamps" msgstr "Timestamps" -#: engine/core/admin.py:158 +#: engine/core/admin.py:162 #, python-format msgid "Activate selected %(verbose_name_plural)s" msgstr "Activate selected %(verbose_name_plural)s" -#: engine/core/admin.py:166 +#: engine/core/admin.py:170 msgid "selected items have been activated." msgstr "Selected items have been activated!" -#: engine/core/admin.py:174 +#: engine/core/admin.py:178 #, python-format msgid "Deactivate selected %(verbose_name_plural)s" msgstr "Deactivate selected %(verbose_name_plural)s" -#: engine/core/admin.py:184 +#: engine/core/admin.py:188 msgid "selected items have been deactivated." msgstr "Selected items have been deactivated!" -#: engine/core/admin.py:196 engine/core/graphene/object_types.py:653 -#: engine/core/graphene/object_types.py:660 engine/core/models.py:832 -#: engine/core/models.py:840 +#: engine/core/admin.py:200 engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:673 engine/core/models.py:918 +#: engine/core/models.py:928 msgid "attribute value" msgstr "Attribute Value" -#: engine/core/admin.py:197 engine/core/graphene/object_types.py:77 -#: engine/core/models.py:841 +#: engine/core/admin.py:201 engine/core/graphene/object_types.py:81 +#: engine/core/models.py:929 msgid "attribute values" msgstr "Attribute Values" -#: engine/core/admin.py:208 +#: engine/core/admin.py:212 engine/core/models.py:2232 msgid "image" msgstr "Image" -#: engine/core/admin.py:209 engine/core/graphene/object_types.py:530 +#: engine/core/admin.py:213 engine/core/graphene/object_types.py:535 msgid "images" msgstr "Images" -#: engine/core/admin.py:220 engine/core/models.py:576 +#: engine/core/admin.py:224 engine/core/models.py:635 msgid "stock" msgstr "Stock" -#: engine/core/admin.py:221 engine/core/graphene/object_types.py:713 +#: engine/core/admin.py:225 engine/core/graphene/object_types.py:735 msgid "stocks" msgstr "Stocks" -#: engine/core/admin.py:232 engine/core/models.py:1938 +#: engine/core/admin.py:236 engine/core/models.py:2046 msgid "order product" msgstr "Order Product" -#: engine/core/admin.py:233 engine/core/graphene/object_types.py:441 -#: engine/core/models.py:1939 +#: engine/core/admin.py:237 engine/core/graphene/object_types.py:446 +#: engine/core/models.py:2047 msgid "order products" msgstr "Order Products" -#: engine/core/admin.py:251 engine/core/admin.py:252 +#: engine/core/admin.py:255 engine/core/admin.py:256 msgid "children" msgstr "Children" -#: engine/core/admin.py:528 +#: engine/core/admin.py:545 +msgid "video preview" +msgstr "Video preview" + +#: engine/core/admin.py:551 msgid "has images" msgstr "Has images" -#: engine/core/admin.py:531 +#: engine/core/admin.py:554 #, python-format msgid "Export selected %(verbose_name_plural)s to marketplaces' feeds" msgstr "Export selected %(verbose_name_plural)s to marketplaces' feeds" -#: engine/core/admin.py:542 +#: engine/core/admin.py:565 #, python-format msgid "selected %(verbose_name_plural)s have been marked for export." msgstr "Selected %(verbose_name_plural)s have been marked for export." -#: engine/core/admin.py:553 +#: engine/core/admin.py:576 #, python-format msgid "Ban selected %(verbose_name_plural)s from marketplaces' feeds" msgstr "Ban selected %(verbose_name_plural)s from marketplaces' feeds" -#: engine/core/admin.py:564 +#: engine/core/admin.py:587 #, python-format msgid "selected %(verbose_name_plural)s have been banned from export." msgstr "Selected %(verbose_name_plural)s have been banned from export." -#: engine/core/admin.py:1116 +#: engine/core/admin.py:1030 +msgid "Preview" +msgstr "Preview" + +#: engine/core/admin.py:1031 +msgid "Metadata" +msgstr "Metadata" + +#: engine/core/admin.py:1034 +msgid "preview" +msgstr "Preview" + +#: engine/core/admin.py:1043 +msgid "image preview" +msgstr "Image preview" + +#: engine/core/admin.py:1166 msgid "Config" msgstr "Config" @@ -222,7 +242,7 @@ msgstr "" "negotiation. Language can be selected with Accept-Language and query " "parameter both." -#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:36 +#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "Cache I/O" @@ -246,7 +266,7 @@ msgstr "Get application's exposable parameters" msgid "send a message to the support team" msgstr "Send a message to the support team" -#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:59 msgid "request a CORSed URL" msgstr "Request a CORSed URL. Only https allowed." @@ -378,11 +398,11 @@ msgstr "Rewrite an existing category saving non-editables" msgid "rewrite some fields of an existing category saving non-editables" msgstr "Rewrite some fields of an existing category saving non-editables" -#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757 -#: engine/core/docs/drf/viewsets.py:1046 -#: engine/core/graphene/object_types.py:119 -#: engine/core/graphene/object_types.py:239 -#: engine/core/graphene/object_types.py:540 +#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:781 +#: engine/core/docs/drf/viewsets.py:1070 +#: engine/core/graphene/object_types.py:123 +#: engine/core/graphene/object_types.py:247 +#: engine/core/graphene/object_types.py:546 msgid "SEO Meta snapshot" msgstr "SEO Meta snapshot" @@ -666,7 +686,7 @@ msgstr "Retrieve a single product (detailed view)" #: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683 #: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725 -#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763 +#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:787 msgid "Product UUID or slug" msgstr "Product UUID or Slug" @@ -692,267 +712,281 @@ msgstr "Delete a product" msgid "lists all permitted feedbacks for a product" msgstr "lists all permitted feedbacks for a product" -#: engine/core/docs/drf/viewsets.py:758 +#: engine/core/docs/drf/viewsets.py:757 +msgid "retrieve exact products by identifier" +msgstr "Retrieve exact products by identifier" + +#: engine/core/docs/drf/viewsets.py:759 +msgid "" +"retrieve a list of products by identifier type (uuid, slug, or sku). Send a " +"POST request with `identificator_type` and `identificators` (list of " +"values)." +msgstr "" +"retrieve a list of products by identifier type (uuid, slug, or sku). Send a " +"POST request with `identificator_type` and `identificators` (list of " +"values)." + +#: engine/core/docs/drf/viewsets.py:782 msgid "returns a snapshot of the product's SEO meta data" msgstr "Returns a snapshot of the product's SEO meta data" -#: engine/core/docs/drf/viewsets.py:779 +#: engine/core/docs/drf/viewsets.py:803 msgid "list all addresses" msgstr "List all addresses" -#: engine/core/docs/drf/viewsets.py:789 +#: engine/core/docs/drf/viewsets.py:813 msgid "retrieve a single address" msgstr "Retrieve a single address" -#: engine/core/docs/drf/viewsets.py:799 +#: engine/core/docs/drf/viewsets.py:823 msgid "create a new address" msgstr "Create a new address" -#: engine/core/docs/drf/viewsets.py:810 +#: engine/core/docs/drf/viewsets.py:834 msgid "delete an address" msgstr "Delete an address" -#: engine/core/docs/drf/viewsets.py:820 +#: engine/core/docs/drf/viewsets.py:844 msgid "update an entire address" msgstr "Update an entire address" -#: engine/core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:855 msgid "partially update an address" msgstr "Partially update an address" -#: engine/core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:866 msgid "autocomplete address suggestions" msgstr "Autocomplete address input" -#: engine/core/docs/drf/viewsets.py:848 +#: engine/core/docs/drf/viewsets.py:872 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "Raw data query string, please append with data from geo-IP endpoint" -#: engine/core/docs/drf/viewsets.py:855 +#: engine/core/docs/drf/viewsets.py:879 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "limits the results amount, 1 < limit < 10, default: 5" -#: engine/core/docs/drf/viewsets.py:871 +#: engine/core/docs/drf/viewsets.py:895 msgid "list all feedbacks (simple view)" msgstr "list all feedbacks (simple view)" -#: engine/core/docs/drf/viewsets.py:881 +#: engine/core/docs/drf/viewsets.py:905 msgid "retrieve a single feedback (detailed view)" msgstr "retrieve a single feedback (detailed view)" -#: engine/core/docs/drf/viewsets.py:888 +#: engine/core/docs/drf/viewsets.py:912 msgid "create a feedback" msgstr "create a feedback" -#: engine/core/docs/drf/viewsets.py:895 +#: engine/core/docs/drf/viewsets.py:919 msgid "delete a feedback" msgstr "delete a feedback" -#: engine/core/docs/drf/viewsets.py:902 +#: engine/core/docs/drf/viewsets.py:926 msgid "rewrite an existing feedback saving non-editables" msgstr "rewrite an existing feedback saving non-editables" -#: engine/core/docs/drf/viewsets.py:909 +#: engine/core/docs/drf/viewsets.py:933 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "rewrite some fields of an existing feedback saving non-editables" -#: engine/core/docs/drf/viewsets.py:919 +#: engine/core/docs/drf/viewsets.py:943 msgid "list all order–product relations (simple view)" msgstr "list all order–product relations (simple view)" -#: engine/core/docs/drf/viewsets.py:929 +#: engine/core/docs/drf/viewsets.py:953 msgid "retrieve a single order–product relation (detailed view)" msgstr "retrieve a single order–product relation (detailed view)" -#: engine/core/docs/drf/viewsets.py:939 +#: engine/core/docs/drf/viewsets.py:963 msgid "create a new order–product relation" msgstr "create a new order–product relation" -#: engine/core/docs/drf/viewsets.py:949 +#: engine/core/docs/drf/viewsets.py:973 msgid "replace an existing order–product relation" msgstr "replace an existing order–product relation" -#: engine/core/docs/drf/viewsets.py:959 +#: engine/core/docs/drf/viewsets.py:983 msgid "partially update an existing order–product relation" msgstr "partially update an existing order–product relation" -#: engine/core/docs/drf/viewsets.py:969 +#: engine/core/docs/drf/viewsets.py:993 msgid "delete an order–product relation" msgstr "delete an order–product relation" -#: engine/core/docs/drf/viewsets.py:979 +#: engine/core/docs/drf/viewsets.py:1003 msgid "add or remove feedback on an order–product relation" msgstr "add or remove feedback on an order–product relation" -#: engine/core/docs/drf/viewsets.py:996 +#: engine/core/docs/drf/viewsets.py:1020 msgid "list all brands (simple view)" msgstr "List all brands (simple view)" -#: engine/core/docs/drf/viewsets.py:1003 +#: engine/core/docs/drf/viewsets.py:1027 msgid "retrieve a single brand (detailed view)" msgstr "Retrieve a single brand (detailed view)" -#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051 +#: engine/core/docs/drf/viewsets.py:1032 engine/core/docs/drf/viewsets.py:1075 msgid "Brand UUID or slug" msgstr "Brand UUID or slug" -#: engine/core/docs/drf/viewsets.py:1018 +#: engine/core/docs/drf/viewsets.py:1042 msgid "create a brand" msgstr "Create a brand" -#: engine/core/docs/drf/viewsets.py:1025 +#: engine/core/docs/drf/viewsets.py:1049 msgid "delete a brand" msgstr "Delete a brand" -#: engine/core/docs/drf/viewsets.py:1032 +#: engine/core/docs/drf/viewsets.py:1056 msgid "rewrite an existing brand saving non-editables" msgstr "Rewrite an existing brand saving non-editables" -#: engine/core/docs/drf/viewsets.py:1039 +#: engine/core/docs/drf/viewsets.py:1063 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "Rewrite some fields of an existing brand saving non-editables" -#: engine/core/docs/drf/viewsets.py:1064 +#: engine/core/docs/drf/viewsets.py:1088 msgid "list all vendors (simple view)" msgstr "List all vendors (simple view)" -#: engine/core/docs/drf/viewsets.py:1074 +#: engine/core/docs/drf/viewsets.py:1098 msgid "retrieve a single vendor (detailed view)" msgstr "Retrieve a single vendor (detailed view)" -#: engine/core/docs/drf/viewsets.py:1081 +#: engine/core/docs/drf/viewsets.py:1105 msgid "create a vendor" msgstr "Create a vendor" -#: engine/core/docs/drf/viewsets.py:1088 +#: engine/core/docs/drf/viewsets.py:1112 msgid "delete a vendor" msgstr "Delete a vendor" -#: engine/core/docs/drf/viewsets.py:1095 +#: engine/core/docs/drf/viewsets.py:1119 msgid "rewrite an existing vendor saving non-editables" msgstr "Rewrite an existing vendor saving non-editables" -#: engine/core/docs/drf/viewsets.py:1102 +#: engine/core/docs/drf/viewsets.py:1126 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "Rewrite some fields of an existing vendor saving non-editables" -#: engine/core/docs/drf/viewsets.py:1112 +#: engine/core/docs/drf/viewsets.py:1136 msgid "list all product images (simple view)" msgstr "List all product images (simple view)" -#: engine/core/docs/drf/viewsets.py:1122 +#: engine/core/docs/drf/viewsets.py:1146 msgid "retrieve a single product image (detailed view)" msgstr "Retrieve a single product image (detailed view)" -#: engine/core/docs/drf/viewsets.py:1129 +#: engine/core/docs/drf/viewsets.py:1153 msgid "create a product image" msgstr "Create a product image" -#: engine/core/docs/drf/viewsets.py:1139 +#: engine/core/docs/drf/viewsets.py:1163 msgid "delete a product image" msgstr "Delete a product image" -#: engine/core/docs/drf/viewsets.py:1146 +#: engine/core/docs/drf/viewsets.py:1170 msgid "rewrite an existing product image saving non-editables" msgstr "Rewrite an existing product image saving non-editables" -#: engine/core/docs/drf/viewsets.py:1154 +#: engine/core/docs/drf/viewsets.py:1178 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "Rewrite some fields of an existing product image saving non-editables" -#: engine/core/docs/drf/viewsets.py:1165 +#: engine/core/docs/drf/viewsets.py:1189 msgid "list all promo codes (simple view)" msgstr "List all promo codes (simple view)" -#: engine/core/docs/drf/viewsets.py:1175 +#: engine/core/docs/drf/viewsets.py:1199 msgid "retrieve a single promo code (detailed view)" msgstr "Retrieve a single promo code (detailed view)" -#: engine/core/docs/drf/viewsets.py:1182 +#: engine/core/docs/drf/viewsets.py:1206 msgid "create a promo code" msgstr "Create a promo code" -#: engine/core/docs/drf/viewsets.py:1189 +#: engine/core/docs/drf/viewsets.py:1213 msgid "delete a promo code" msgstr "Delete a promo code" -#: engine/core/docs/drf/viewsets.py:1196 +#: engine/core/docs/drf/viewsets.py:1220 msgid "rewrite an existing promo code saving non-editables" msgstr "Rewrite an existing promo code saving non-editables" -#: engine/core/docs/drf/viewsets.py:1203 +#: engine/core/docs/drf/viewsets.py:1227 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "Rewrite some fields of an existing promo code saving non-editables" -#: engine/core/docs/drf/viewsets.py:1213 +#: engine/core/docs/drf/viewsets.py:1237 msgid "list all promotions (simple view)" msgstr "List all promotions (simple view)" -#: engine/core/docs/drf/viewsets.py:1223 +#: engine/core/docs/drf/viewsets.py:1247 msgid "retrieve a single promotion (detailed view)" msgstr "Retrieve a single promotion (detailed view)" -#: engine/core/docs/drf/viewsets.py:1230 +#: engine/core/docs/drf/viewsets.py:1254 msgid "create a promotion" msgstr "Create a promotion" -#: engine/core/docs/drf/viewsets.py:1237 +#: engine/core/docs/drf/viewsets.py:1261 msgid "delete a promotion" msgstr "Delete a promotion" -#: engine/core/docs/drf/viewsets.py:1244 +#: engine/core/docs/drf/viewsets.py:1268 msgid "rewrite an existing promotion saving non-editables" msgstr "Rewrite an existing promotion saving non-editables" -#: engine/core/docs/drf/viewsets.py:1251 +#: engine/core/docs/drf/viewsets.py:1275 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "Rewrite some fields of an existing promotion saving non-editables" -#: engine/core/docs/drf/viewsets.py:1261 +#: engine/core/docs/drf/viewsets.py:1285 msgid "list all stocks (simple view)" msgstr "List all stocks (simple view)" -#: engine/core/docs/drf/viewsets.py:1268 +#: engine/core/docs/drf/viewsets.py:1292 msgid "retrieve a single stock (detailed view)" msgstr "Retrieve a single stock (detailed view)" -#: engine/core/docs/drf/viewsets.py:1275 +#: engine/core/docs/drf/viewsets.py:1299 msgid "create a stock record" msgstr "Create a stock record" -#: engine/core/docs/drf/viewsets.py:1282 +#: engine/core/docs/drf/viewsets.py:1306 msgid "delete a stock record" msgstr "Delete a stock record" -#: engine/core/docs/drf/viewsets.py:1289 +#: engine/core/docs/drf/viewsets.py:1313 msgid "rewrite an existing stock record saving non-editables" msgstr "Rewrite an existing stock record saving non-editables" -#: engine/core/docs/drf/viewsets.py:1297 +#: engine/core/docs/drf/viewsets.py:1321 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "Rewrite some fields of an existing stock record saving non-editables" -#: engine/core/docs/drf/viewsets.py:1308 +#: engine/core/docs/drf/viewsets.py:1332 msgid "list all product tags (simple view)" msgstr "List all product tags (simple view)" -#: engine/core/docs/drf/viewsets.py:1318 +#: engine/core/docs/drf/viewsets.py:1342 msgid "retrieve a single product tag (detailed view)" msgstr "Retrieve a single product tag (detailed view)" -#: engine/core/docs/drf/viewsets.py:1325 +#: engine/core/docs/drf/viewsets.py:1349 msgid "create a product tag" msgstr "Create a product tag" -#: engine/core/docs/drf/viewsets.py:1335 +#: engine/core/docs/drf/viewsets.py:1359 msgid "delete a product tag" msgstr "Delete a product tag" -#: engine/core/docs/drf/viewsets.py:1342 +#: engine/core/docs/drf/viewsets.py:1366 msgid "rewrite an existing product tag saving non-editables" msgstr "Rewrite an existing product tag saving non-editables" -#: engine/core/docs/drf/viewsets.py:1350 +#: engine/core/docs/drf/viewsets.py:1374 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "Rewrite some fields of an existing product tag saving non-editables" @@ -961,232 +995,230 @@ msgstr "Rewrite some fields of an existing product tag saving non-editables" msgid "no search term provided." msgstr "No search term provided." -#: engine/core/filters.py:78 engine/core/filters.py:484 -#: engine/core/filters.py:625 +#: engine/core/filters.py:79 engine/core/filters.py:485 +#: engine/core/filters.py:626 msgid "Search" msgstr "Search" -#: engine/core/filters.py:79 engine/core/filters.py:663 -#: engine/core/filters.py:692 +#: engine/core/filters.py:80 engine/core/filters.py:664 +#: engine/core/filters.py:693 msgid "UUID" msgstr "UUID" -#: engine/core/filters.py:80 engine/core/filters.py:487 -#: engine/core/filters.py:627 +#: engine/core/filters.py:81 engine/core/filters.py:488 +#: engine/core/filters.py:628 msgid "Name" msgstr "Name" -#: engine/core/filters.py:82 engine/core/filters.py:630 +#: engine/core/filters.py:83 engine/core/filters.py:631 msgid "Categories" msgstr "Categories" -#: engine/core/filters.py:86 +#: engine/core/filters.py:87 msgid "Categories Slugs" msgstr "Categories Slugs" -#: engine/core/filters.py:88 engine/core/filters.py:495 +#: engine/core/filters.py:89 engine/core/filters.py:496 +#: engine/core/templates/admin_doc/index.html:37 +#: engine/core/templates/admin_doc/template_tag_index.html:12 msgid "Tags" msgstr "Tags" -#: engine/core/filters.py:90 +#: engine/core/filters.py:91 msgid "Min Price" msgstr "Min Price" -#: engine/core/filters.py:93 +#: engine/core/filters.py:94 msgid "Max Price" msgstr "Max Price" -#: engine/core/filters.py:95 +#: engine/core/filters.py:96 msgid "Is Active" msgstr "Is Active" -#: engine/core/filters.py:96 +#: engine/core/filters.py:97 msgid "Brand" msgstr "Brand" -#: engine/core/filters.py:97 +#: engine/core/filters.py:98 msgid "Attributes" msgstr "Attributes" -#: engine/core/filters.py:99 +#: engine/core/filters.py:100 msgid "Quantity" msgstr "Quantity" -#: engine/core/filters.py:101 engine/core/filters.py:489 -#: engine/core/filters.py:628 engine/core/models.py:316 -#: engine/core/models.py:497 engine/core/models.py:663 +#: engine/core/filters.py:102 engine/core/filters.py:490 +#: engine/core/filters.py:629 engine/core/models.py:339 +#: engine/core/models.py:546 engine/core/models.py:736 msgid "Slug" msgstr "Slug" -#: engine/core/filters.py:102 +#: engine/core/filters.py:103 msgid "Is Digital" msgstr "Is Digital" -#: engine/core/filters.py:104 +#: engine/core/filters.py:105 msgid "Include sub-categories" msgstr "Include sub-categories" -#: engine/core/filters.py:108 +#: engine/core/filters.py:109 msgid "Include personal ordered" msgstr "Include personal ordered products" -#: engine/core/filters.py:110 engine/core/models.py:667 +#: engine/core/filters.py:111 engine/core/models.py:740 msgid "SKU" msgstr "SKU" -#: engine/core/filters.py:212 +#: engine/core/filters.py:213 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "There must be a category_uuid to use include_subcategories flag" -#: engine/core/filters.py:398 +#: engine/core/filters.py:399 msgid "Search (ID, product name or part number)" msgstr "Search (ID, product name or part number)" -#: engine/core/filters.py:402 +#: engine/core/filters.py:403 msgid "Bought after (inclusive)" msgstr "Bought after (inclusive)" -#: engine/core/filters.py:405 +#: engine/core/filters.py:406 msgid "Bought before (inclusive)" msgstr "Bought before (inclusive)" -#: engine/core/filters.py:410 engine/core/filters.py:461 -#: engine/core/filters.py:697 +#: engine/core/filters.py:411 engine/core/filters.py:462 +#: engine/core/filters.py:698 msgid "User email" msgstr "User email" -#: engine/core/filters.py:413 engine/core/filters.py:464 -#: engine/core/filters.py:672 engine/core/filters.py:694 +#: engine/core/filters.py:414 engine/core/filters.py:465 +#: engine/core/filters.py:673 engine/core/filters.py:695 msgid "User UUID" msgstr "User UUID" -#: engine/core/filters.py:415 +#: engine/core/filters.py:416 msgid "Status" msgstr "Status" -#: engine/core/filters.py:419 +#: engine/core/filters.py:420 msgid "Human Readable ID" msgstr "Human Readable ID" -#: engine/core/filters.py:488 +#: engine/core/filters.py:489 msgid "Parent" msgstr "Parent" -#: engine/core/filters.py:492 +#: engine/core/filters.py:493 msgid "Whole category(has at least 1 product or not)" msgstr "Whole category(has at least 1 product or not)" -#: engine/core/filters.py:496 +#: engine/core/filters.py:497 msgid "Level" msgstr "Level" -#: engine/core/filters.py:667 +#: engine/core/filters.py:668 msgid "Product UUID" msgstr "Product UUID" -#: engine/core/graphene/mutations.py:40 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Key to look for in or set into the cache" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:43 msgid "data to store in cache" msgstr "Data to store in cache" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:46 msgid "timeout in seconds to set the data for into the cache" msgstr "Timeout in seconds to set the data for into the cache" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:49 msgid "cached data" msgstr "Cached data" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:64 msgid "camelized JSON data from the requested URL" msgstr "Camelized JSON data from the requested URL" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:248 +#: engine/core/graphene/mutations.py:69 engine/core/views.py:267 msgid "only URLs starting with http(s):// are allowed" msgstr "Only URLs starting with http(s):// are allowed" -#: engine/core/graphene/mutations.py:86 +#: engine/core/graphene/mutations.py:87 msgid "add a product to the order" msgstr "Add a product to the order" -#: engine/core/graphene/mutations.py:109 engine/core/graphene/mutations.py:138 -#: engine/core/graphene/mutations.py:254 engine/core/graphene/mutations.py:306 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139 +#: engine/core/graphene/mutations.py:256 engine/core/graphene/mutations.py:308 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Order {order_uuid} not found!" -#: engine/core/graphene/mutations.py:115 engine/core/graphene/mutations.py:166 +#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167 msgid "remove a product from the order" msgstr "Remove a product from the order" -#: engine/core/graphene/mutations.py:144 +#: engine/core/graphene/mutations.py:145 msgid "remove all products from the order" msgstr "Remove all products from the order" -#: engine/core/graphene/mutations.py:189 +#: engine/core/graphene/mutations.py:190 msgid "buy an order" msgstr "Buy an order" -#: engine/core/graphene/mutations.py:220 engine/core/graphene/mutations.py:282 +#: engine/core/graphene/mutations.py:222 engine/core/graphene/mutations.py:284 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "Please provide either order_uuid or order_hr_id - mutually exclusive!" -#: engine/core/graphene/mutations.py:249 engine/core/graphene/mutations.py:524 -#: engine/core/graphene/mutations.py:573 engine/core/viewsets.py:753 +#: engine/core/graphene/mutations.py:251 engine/core/graphene/mutations.py:526 +#: engine/core/graphene/mutations.py:576 engine/core/viewsets.py:783 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Wrong type came from order.buy() method: {type(instance)!s}" -#: engine/core/graphene/mutations.py:260 +#: engine/core/graphene/mutations.py:262 msgid "perform an action on a list of products in the order" msgstr "Perform an action on a list of products in the order" -#: engine/core/graphene/mutations.py:265 +#: engine/core/graphene/mutations.py:267 msgid "remove/add" msgstr "Remove/Add" -#: engine/core/graphene/mutations.py:301 engine/core/graphene/mutations.py:342 +#: engine/core/graphene/mutations.py:303 engine/core/graphene/mutations.py:342 msgid "action must be either add or remove" msgstr "Action must be either \"add\" or \"remove\"!" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:314 msgid "perform an action on a list of products in the wishlist" msgstr "Perform an action on a list of products in the wishlist" -#: engine/core/graphene/mutations.py:330 -msgid "please provide wishlist_uuid value" -msgstr "Please provide `wishlist_uuid` value." - -#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:423 -#: engine/core/graphene/mutations.py:451 engine/core/graphene/mutations.py:479 -#: engine/core/graphene/mutations.py:529 +#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:424 +#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480 +#: engine/core/graphene/mutations.py:531 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Wishlist {wishlist_uuid} not found!" -#: engine/core/graphene/mutations.py:401 +#: engine/core/graphene/mutations.py:402 msgid "add a product to the wishlist" msgstr "Add a product to the order" -#: engine/core/graphene/mutations.py:429 +#: engine/core/graphene/mutations.py:430 msgid "remove a product from the wishlist" msgstr "Remove a product from the order" -#: engine/core/graphene/mutations.py:457 +#: engine/core/graphene/mutations.py:458 msgid "remove all products from the wishlist" msgstr "Remove a product from the order" -#: engine/core/graphene/mutations.py:485 +#: engine/core/graphene/mutations.py:486 msgid "buy all products from the wishlist" msgstr "Remove a product from the order" -#: engine/core/graphene/mutations.py:535 +#: engine/core/graphene/mutations.py:537 msgid "buy a product" msgstr "Buy an order" -#: engine/core/graphene/mutations.py:542 +#: engine/core/graphene/mutations.py:544 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" @@ -1194,138 +1226,142 @@ msgstr "" "Please send the attributes as the string formatted like " "attr1=value1,attr2=value2" -#: engine/core/graphene/mutations.py:580 +#: engine/core/graphene/mutations.py:583 msgid "add or delete a feedback for orderproduct" msgstr "Add or delete a feedback for the orderproduct" -#: engine/core/graphene/mutations.py:606 +#: engine/core/graphene/mutations.py:610 msgid "action must be either `add` or `remove`" msgstr "Action must be either `add` or `remove`!" -#: engine/core/graphene/mutations.py:609 +#: engine/core/graphene/mutations.py:613 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderproduct {order_product_uuid} not found!" -#: engine/core/graphene/mutations.py:616 +#: engine/core/graphene/mutations.py:620 msgid "original address string provided by the user" msgstr "Original address string provided by the user" -#: engine/core/graphene/mutations.py:653 engine/core/models.py:986 -#: engine/core/models.py:999 engine/core/models.py:1443 -#: engine/core/models.py:1474 engine/core/models.py:1505 -#: engine/core/viewsets.py:760 +#: engine/core/graphene/mutations.py:662 engine/core/models.py:1079 +#: engine/core/models.py:1092 engine/core/models.py:1544 +#: engine/core/models.py:1575 engine/core/models.py:1606 +#: engine/core/viewsets.py:790 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} does not exist: {uuid}!" -#: engine/core/graphene/mutations.py:667 +#: engine/core/graphene/mutations.py:676 msgid "limit must be between 1 and 10" msgstr "Limit must be between 1 and 10" -#: engine/core/graphene/mutations.py:716 +#: engine/core/graphene/mutations.py:726 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - works like a charm" -#: engine/core/graphene/object_types.py:84 -#: engine/core/graphene/object_types.py:420 -#: engine/core/graphene/object_types.py:471 engine/core/models.py:803 -#: engine/core/models.py:1297 engine/core/models.py:2033 +#: engine/core/graphene/object_types.py:88 +#: engine/core/graphene/object_types.py:425 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:889 +#: engine/core/models.py:1394 engine/core/models.py:2139 msgid "attributes" msgstr "Attributes" -#: engine/core/graphene/object_types.py:97 +#: engine/core/graphene/object_types.py:101 msgid "grouped attributes" msgstr "Grouped attributes" -#: engine/core/graphene/object_types.py:104 +#: engine/core/graphene/object_types.py:108 msgid "groups of attributes" msgstr "Groups of attributes" -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:217 -#: engine/core/graphene/object_types.py:255 engine/core/models.py:440 +#: engine/core/graphene/object_types.py:122 +#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:264 engine/core/models.py:489 msgid "categories" msgstr "Categories" -#: engine/core/graphene/object_types.py:134 engine/core/models.py:511 +#: engine/core/graphene/object_types.py:138 engine/core/models.py:564 msgid "brands" msgstr "Brands" -#: engine/core/graphene/object_types.py:219 +#: engine/core/graphene/object_types.py:226 msgid "category image url" msgstr "Categories" -#: engine/core/graphene/object_types.py:220 -#: engine/core/graphene/object_types.py:365 engine/core/models.py:278 +#: engine/core/graphene/object_types.py:227 +#: engine/core/graphene/object_types.py:369 engine/core/models.py:301 msgid "markup percentage" msgstr "Markup Percentage" -#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:231 msgid "which attributes and values can be used for filtering this category." msgstr "Which attributes and values can be used for filtering this category." -#: engine/core/graphene/object_types.py:230 +#: engine/core/graphene/object_types.py:237 msgid "" "minimum and maximum prices for products in this category, if available." msgstr "" "Minimum and maximum prices for products in this category, if available." -#: engine/core/graphene/object_types.py:234 +#: engine/core/graphene/object_types.py:240 +msgid "brands in this category" +msgstr "Brands in this category" + +#: engine/core/graphene/object_types.py:242 msgid "tags for this category" msgstr "Tags for this category" -#: engine/core/graphene/object_types.py:237 +#: engine/core/graphene/object_types.py:245 msgid "products in this category" msgstr "Products in this category" -#: engine/core/graphene/object_types.py:372 engine/core/models.py:183 +#: engine/core/graphene/object_types.py:376 engine/core/models.py:202 msgid "vendors" msgstr "Vendors" -#: engine/core/graphene/object_types.py:376 +#: engine/core/graphene/object_types.py:380 msgid "Latitude (Y coordinate)" msgstr "Latitude (Y coordinate)" -#: engine/core/graphene/object_types.py:377 +#: engine/core/graphene/object_types.py:381 msgid "Longitude (X coordinate)" msgstr "Longitude (X coordinate)" -#: engine/core/graphene/object_types.py:406 +#: engine/core/graphene/object_types.py:411 msgid "comment" msgstr "How to" -#: engine/core/graphene/object_types.py:408 -#: engine/core/graphene/object_types.py:542 +#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:548 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "Rating value from 1 to 10, inclusive, or 0 if not set." -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:421 msgid "represents feedback from a user." msgstr "Represents feedback from a user." -#: engine/core/graphene/object_types.py:421 -#: engine/core/graphene/object_types.py:472 engine/core/models.py:1291 +#: engine/core/graphene/object_types.py:426 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:1388 msgid "notifications" msgstr "Notifications" -#: engine/core/graphene/object_types.py:423 +#: engine/core/graphene/object_types.py:428 msgid "download url for this order product if applicable" msgstr "Download url for this order product if applicable" -#: engine/core/graphene/object_types.py:425 engine/core/models.py:1856 +#: engine/core/graphene/object_types.py:430 engine/core/models.py:1959 msgid "feedback" msgstr "Feedback" -#: engine/core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:464 msgid "a list of order products in this order" msgstr "A list of order products in this order" -#: engine/core/graphene/object_types.py:461 engine/core/models.py:1261 +#: engine/core/graphene/object_types.py:466 engine/core/models.py:1358 msgid "billing address" msgstr "Billing address" -#: engine/core/graphene/object_types.py:465 +#: engine/core/graphene/object_types.py:470 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1333,53 +1369,57 @@ msgstr "" "Shipping address for this order, leave blank if same as billing address or " "if not applicable" -#: engine/core/graphene/object_types.py:468 +#: engine/core/graphene/object_types.py:473 msgid "total price of this order" msgstr "Total price of this order" -#: engine/core/graphene/object_types.py:469 +#: engine/core/graphene/object_types.py:474 msgid "total quantity of products in order" msgstr "Total quantity of products in order" -#: engine/core/graphene/object_types.py:470 +#: engine/core/graphene/object_types.py:475 msgid "are all products in the order digital" msgstr "Are all of the products in the order digital" -#: engine/core/graphene/object_types.py:474 +#: engine/core/graphene/object_types.py:479 msgid "transactions for this order" msgstr "Transactions for this order" -#: engine/core/graphene/object_types.py:494 engine/core/models.py:1325 +#: engine/core/graphene/object_types.py:499 engine/core/models.py:1422 msgid "orders" msgstr "Orders" -#: engine/core/graphene/object_types.py:515 +#: engine/core/graphene/object_types.py:520 msgid "image url" msgstr "Image URL" -#: engine/core/graphene/object_types.py:522 +#: engine/core/graphene/object_types.py:527 msgid "product's images" msgstr "Product's images" -#: engine/core/graphene/object_types.py:529 engine/core/models.py:439 -#: engine/core/models.py:596 +#: engine/core/graphene/object_types.py:534 engine/core/models.py:488 +#: engine/core/models.py:661 msgid "category" msgstr "Category" -#: engine/core/graphene/object_types.py:531 engine/core/models.py:1857 +#: engine/core/graphene/object_types.py:536 engine/core/models.py:1960 msgid "feedbacks" msgstr "Feedbacks" -#: engine/core/graphene/object_types.py:532 engine/core/models.py:510 -#: engine/core/models.py:605 +#: engine/core/graphene/object_types.py:537 engine/core/models.py:563 +#: engine/core/models.py:670 msgid "brand" msgstr "Brand" -#: engine/core/graphene/object_types.py:534 engine/core/models.py:103 +#: engine/core/graphene/object_types.py:538 +msgid "video url" +msgstr "Video URL" + +#: engine/core/graphene/object_types.py:540 engine/core/models.py:122 msgid "attribute groups" msgstr "Attribute groups" -#: engine/core/graphene/object_types.py:536 +#: engine/core/graphene/object_types.py:542 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1387,7 +1427,7 @@ msgstr "Attribute groups" msgid "price" msgstr "Price" -#: engine/core/graphene/object_types.py:537 +#: engine/core/graphene/object_types.py:543 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1395,39 +1435,39 @@ msgstr "Price" msgid "quantity" msgstr "Quantity" -#: engine/core/graphene/object_types.py:538 +#: engine/core/graphene/object_types.py:544 msgid "number of feedbacks" msgstr "Number of feedbacks" -#: engine/core/graphene/object_types.py:539 +#: engine/core/graphene/object_types.py:545 msgid "only available for personal orders" msgstr "Products only available for personal orders" -#: engine/core/graphene/object_types.py:544 +#: engine/core/graphene/object_types.py:550 msgid "discount price" msgstr "Discount price" -#: engine/core/graphene/object_types.py:568 engine/core/models.py:682 +#: engine/core/graphene/object_types.py:575 engine/core/models.py:755 msgid "products" msgstr "Products" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:691 msgid "promocodes" msgstr "Promocodes" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:706 msgid "products on sale" msgstr "Products on sale" -#: engine/core/graphene/object_types.py:701 engine/core/models.py:935 +#: engine/core/graphene/object_types.py:720 engine/core/models.py:1028 msgid "promotions" msgstr "Promotions" -#: engine/core/graphene/object_types.py:705 engine/core/models.py:182 +#: engine/core/graphene/object_types.py:727 engine/core/models.py:201 msgid "vendor" msgstr "Vendor" -#: engine/core/graphene/object_types.py:706 engine/core/models.py:681 +#: engine/core/graphene/object_types.py:728 engine/core/models.py:754 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1435,102 +1475,102 @@ msgstr "Vendor" msgid "product" msgstr "Product" -#: engine/core/graphene/object_types.py:718 engine/core/models.py:958 +#: engine/core/graphene/object_types.py:740 engine/core/models.py:1051 msgid "wishlisted products" msgstr "Wishlisted products" -#: engine/core/graphene/object_types.py:725 engine/core/models.py:975 +#: engine/core/graphene/object_types.py:747 engine/core/models.py:1068 msgid "wishlists" msgstr "Wishlists" -#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:752 msgid "tagged products" msgstr "Tagged products" -#: engine/core/graphene/object_types.py:738 engine/core/models.py:219 -#: engine/core/models.py:611 +#: engine/core/graphene/object_types.py:760 engine/core/models.py:238 +#: engine/core/models.py:676 msgid "product tags" msgstr "Product tags" -#: engine/core/graphene/object_types.py:743 +#: engine/core/graphene/object_types.py:765 msgid "tagged categories" msgstr "Tagged categories" -#: engine/core/graphene/object_types.py:751 +#: engine/core/graphene/object_types.py:773 msgid "categories tags" msgstr "Categories' tags" -#: engine/core/graphene/object_types.py:755 +#: engine/core/graphene/object_types.py:777 msgid "project name" msgstr "Project name" -#: engine/core/graphene/object_types.py:756 +#: engine/core/graphene/object_types.py:778 msgid "company name" msgstr "Company Name" -#: engine/core/graphene/object_types.py:757 +#: engine/core/graphene/object_types.py:779 msgid "company address" msgstr "Company Address" -#: engine/core/graphene/object_types.py:758 +#: engine/core/graphene/object_types.py:780 msgid "company phone number" msgstr "Company Phone Number" -#: engine/core/graphene/object_types.py:761 +#: engine/core/graphene/object_types.py:783 msgid "email from, sometimes it must be used instead of host user value" msgstr "'email from', sometimes it must be used instead of host user value" -#: engine/core/graphene/object_types.py:764 +#: engine/core/graphene/object_types.py:786 msgid "email host user" msgstr "Email host user" -#: engine/core/graphene/object_types.py:765 +#: engine/core/graphene/object_types.py:787 msgid "maximum amount for payment" msgstr "Maximum amount for payment" -#: engine/core/graphene/object_types.py:766 +#: engine/core/graphene/object_types.py:788 msgid "minimum amount for payment" msgstr "Minimum amount for payment" -#: engine/core/graphene/object_types.py:767 +#: engine/core/graphene/object_types.py:789 msgid "analytics data" msgstr "Analytics data" -#: engine/core/graphene/object_types.py:768 +#: engine/core/graphene/object_types.py:790 msgid "advertisement data" msgstr "Advertisement data" -#: engine/core/graphene/object_types.py:771 +#: engine/core/graphene/object_types.py:793 msgid "company configuration" msgstr "Configuration" -#: engine/core/graphene/object_types.py:775 +#: engine/core/graphene/object_types.py:797 msgid "language code" msgstr "Language code" -#: engine/core/graphene/object_types.py:776 +#: engine/core/graphene/object_types.py:798 msgid "language name" msgstr "Language name" -#: engine/core/graphene/object_types.py:777 +#: engine/core/graphene/object_types.py:799 msgid "language flag, if exists :)" msgstr "Language flag, if exists :)" -#: engine/core/graphene/object_types.py:780 +#: engine/core/graphene/object_types.py:802 msgid "supported languages" msgstr "Get a list of supported languages" -#: engine/core/graphene/object_types.py:812 -#: engine/core/graphene/object_types.py:815 -#: engine/core/graphene/object_types.py:818 +#: engine/core/graphene/object_types.py:834 +#: engine/core/graphene/object_types.py:837 +#: engine/core/graphene/object_types.py:840 msgid "products search results" msgstr "Products search results" -#: engine/core/graphene/object_types.py:820 +#: engine/core/graphene/object_types.py:842 msgid "posts search results" msgstr "Products search results" -#: engine/core/models.py:75 +#: engine/core/models.py:91 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 " @@ -1542,23 +1582,23 @@ msgstr "" "parent group, forming a hierarchical structure. This can be useful for " "categorizing and managing attributes more effectively in acomplex system." -#: engine/core/models.py:88 +#: engine/core/models.py:107 msgid "parent of this group" msgstr "Parent of this group" -#: engine/core/models.py:89 +#: engine/core/models.py:108 msgid "parent attribute group" msgstr "Parent attribute group" -#: engine/core/models.py:93 engine/core/models.py:94 +#: engine/core/models.py:112 engine/core/models.py:113 msgid "attribute group's name" msgstr "Attribute group's name" -#: engine/core/models.py:102 engine/core/models.py:763 +#: engine/core/models.py:121 engine/core/models.py:849 msgid "attribute group" msgstr "Attribute group" -#: engine/core/models.py:108 +#: engine/core/models.py:127 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1576,48 +1616,48 @@ msgstr "" "also maintains additional metadata and constraints, making it suitable for " "use in systems that interact with third-party vendors." -#: engine/core/models.py:122 +#: engine/core/models.py:141 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Stores credentials and endpoints required for vendor's API communication" -#: engine/core/models.py:124 +#: engine/core/models.py:143 msgid "authentication info" msgstr "Authentication info" -#: engine/core/models.py:129 +#: engine/core/models.py:148 msgid "define the markup for products retrieved from this vendor" msgstr "Define the markup for products retrieved from this vendor" -#: engine/core/models.py:130 +#: engine/core/models.py:149 msgid "vendor markup percentage" msgstr "Vendor markup percentage" -#: engine/core/models.py:134 +#: engine/core/models.py:153 msgid "name of this vendor" msgstr "Name of this vendor" -#: engine/core/models.py:135 +#: engine/core/models.py:154 msgid "vendor name" msgstr "Vendor name" -#: engine/core/models.py:150 +#: engine/core/models.py:169 msgid "response file" msgstr "response file" -#: engine/core/models.py:151 +#: engine/core/models.py:170 msgid "vendor's last processing response" msgstr "vendor's last processing response" -#: engine/core/models.py:157 +#: engine/core/models.py:176 msgid "vendor's integration file path" msgstr "Vendor's integration file path" -#: engine/core/models.py:158 +#: engine/core/models.py:177 msgid "integration path" msgstr "Integration path" -#: engine/core/models.py:192 +#: engine/core/models.py:211 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1631,27 +1671,27 @@ msgstr "" "display name. It supports operations exported through mixins and provides " "metadata customization for administrative purposes." -#: engine/core/models.py:204 engine/core/models.py:235 +#: engine/core/models.py:223 engine/core/models.py:254 msgid "internal tag identifier for the product tag" msgstr "Internal tag identifier for the product tag" -#: engine/core/models.py:205 engine/core/models.py:236 +#: engine/core/models.py:224 engine/core/models.py:255 msgid "tag name" msgstr "Tag name" -#: engine/core/models.py:209 engine/core/models.py:240 +#: engine/core/models.py:228 engine/core/models.py:259 msgid "user-friendly name for the product tag" msgstr "User-friendly name for the product tag" -#: engine/core/models.py:210 engine/core/models.py:241 +#: engine/core/models.py:229 engine/core/models.py:260 msgid "tag display name" msgstr "Tag display name" -#: engine/core/models.py:218 +#: engine/core/models.py:237 msgid "product tag" msgstr "Product tag" -#: engine/core/models.py:224 +#: engine/core/models.py:243 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1661,15 +1701,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." -#: engine/core/models.py:249 +#: engine/core/models.py:268 msgid "category tag" msgstr "category tag" -#: engine/core/models.py:250 engine/core/models.py:322 +#: engine/core/models.py:269 engine/core/models.py:345 msgid "category tags" msgstr "category tags" -#: engine/core/models.py:255 +#: engine/core/models.py:274 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1691,51 +1731,51 @@ msgstr "" "hierarchy of categories, as well as assign attributes like images, tags, or " "priority." -#: engine/core/models.py:269 +#: engine/core/models.py:292 msgid "upload an image representing this category" msgstr "Upload an image representing this category" -#: engine/core/models.py:272 +#: engine/core/models.py:295 msgid "category image" msgstr "Category image" -#: engine/core/models.py:277 +#: engine/core/models.py:300 msgid "define a markup percentage for products in this category" msgstr "Define a markup percentage for products in this category" -#: engine/core/models.py:286 +#: engine/core/models.py:309 msgid "parent of this category to form a hierarchical structure" msgstr "Parent of this category to form a hierarchical structure" -#: engine/core/models.py:287 +#: engine/core/models.py:310 msgid "parent category" msgstr "Parent category" -#: engine/core/models.py:292 +#: engine/core/models.py:315 msgid "category name" msgstr "Category name" -#: engine/core/models.py:293 +#: engine/core/models.py:316 msgid "provide a name for this category" msgstr "Provide a name for this category" -#: engine/core/models.py:300 +#: engine/core/models.py:323 msgid "add a detailed description for this category" msgstr "Add a detailed description for this category" -#: engine/core/models.py:301 +#: engine/core/models.py:324 msgid "category description" msgstr "Category description" -#: engine/core/models.py:321 +#: engine/core/models.py:344 msgid "tags that help describe or group this category" msgstr "tags that help describe or group this category" -#: engine/core/models.py:328 engine/core/models.py:503 +#: engine/core/models.py:351 engine/core/models.py:552 msgid "priority" msgstr "Priority" -#: engine/core/models.py:446 +#: engine/core/models.py:495 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1749,47 +1789,43 @@ msgstr "" "organization and representation of brand-related data within the " "application." -#: engine/core/models.py:456 +#: engine/core/models.py:505 msgid "name of this brand" msgstr "Name of this brand" -#: engine/core/models.py:457 +#: engine/core/models.py:506 msgid "brand name" msgstr "Brand name" -#: engine/core/models.py:464 +#: engine/core/models.py:513 msgid "upload a logo representing this brand" msgstr "Upload a logo representing this brand" -#: engine/core/models.py:466 +#: engine/core/models.py:515 msgid "brand small image" msgstr "Brand small image" -#: engine/core/models.py:472 +#: engine/core/models.py:521 msgid "upload a big logo representing this brand" msgstr "Upload a big logo representing this brand" -#: engine/core/models.py:474 +#: engine/core/models.py:523 msgid "brand big image" msgstr "Brand big image" -#: engine/core/models.py:479 +#: engine/core/models.py:528 msgid "add a detailed description of the brand" msgstr "Add a detailed description of the brand" -#: engine/core/models.py:480 +#: engine/core/models.py:529 msgid "brand description" msgstr "Brand description" -#: engine/core/models.py:485 -msgid "optional categories that this brand is associated with" -msgstr "Optional categories that this brand is associated with" +#: engine/core/models.py:534 engine/core/models.py:535 +msgid "DEPRECATED" +msgstr "DEPRECATED" -#: engine/core/models.py:486 -msgid "associated categories" -msgstr "Categories" - -#: engine/core/models.py:516 +#: engine/core/models.py:569 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1805,72 +1841,72 @@ msgstr "" "management system to allow tracking and evaluation of products available " "from various vendors." -#: engine/core/models.py:528 +#: engine/core/models.py:581 msgid "the vendor supplying this product stock" msgstr "The vendor supplying this product stock" -#: engine/core/models.py:529 +#: engine/core/models.py:582 msgid "associated vendor" msgstr "Associated vendor" -#: engine/core/models.py:533 +#: engine/core/models.py:588 msgid "final price to the customer after markups" msgstr "Final price to the customer after markups" -#: engine/core/models.py:534 +#: engine/core/models.py:589 msgid "selling price" msgstr "Selling price" -#: engine/core/models.py:539 +#: engine/core/models.py:594 msgid "the product associated with this stock entry" msgstr "The product associated with this stock entry" -#: engine/core/models.py:540 engine/core/models.py:828 -#: engine/core/models.py:874 engine/core/models.py:1912 +#: engine/core/models.py:595 engine/core/models.py:914 +#: engine/core/models.py:962 engine/core/models.py:2020 msgid "associated product" msgstr "Associated product" -#: engine/core/models.py:547 +#: engine/core/models.py:604 msgid "the price paid to the vendor for this product" msgstr "The price paid to the vendor for this product" -#: engine/core/models.py:548 +#: engine/core/models.py:605 msgid "vendor purchase price" msgstr "Vendor purchase price" -#: engine/core/models.py:552 +#: engine/core/models.py:609 msgid "available quantity of the product in stock" msgstr "Available quantity of the product in stock" -#: engine/core/models.py:553 +#: engine/core/models.py:610 msgid "quantity in stock" msgstr "Quantity in stock" -#: engine/core/models.py:557 +#: engine/core/models.py:614 msgid "vendor-assigned SKU for identifying the product" msgstr "Vendor-assigned SKU for identifying the product" -#: engine/core/models.py:558 +#: engine/core/models.py:615 msgid "vendor sku" msgstr "Vendor's SKU" -#: engine/core/models.py:564 +#: engine/core/models.py:621 msgid "digital file associated with this stock if applicable" msgstr "Digital file associated with this stock if applicable" -#: engine/core/models.py:565 +#: engine/core/models.py:622 msgid "digital file" msgstr "Digital file" -#: engine/core/models.py:569 +#: engine/core/models.py:626 msgid "system attributes" msgstr "System attributes" -#: engine/core/models.py:577 +#: engine/core/models.py:636 msgid "stock entries" msgstr "Stock entries" -#: engine/core/models.py:582 +#: engine/core/models.py:641 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1890,71 +1926,79 @@ msgstr "" "properties to improve performance. It is used to define and manipulate " "product data and its associated information within an application." -#: engine/core/models.py:595 +#: engine/core/models.py:660 msgid "category this product belongs to" msgstr "Category this product belongs to" -#: engine/core/models.py:604 +#: engine/core/models.py:669 msgid "optionally associate this product with a brand" msgstr "Optionally associate this product with a brand" -#: engine/core/models.py:610 +#: engine/core/models.py:675 msgid "tags that help describe or group this product" msgstr "Tags that help describe or group this product" -#: engine/core/models.py:615 +#: engine/core/models.py:680 msgid "indicates whether this product is digitally delivered" msgstr "Indicates whether this product is digitally delivered" -#: engine/core/models.py:616 +#: engine/core/models.py:681 msgid "is product digital" msgstr "Is product digital" -#: engine/core/models.py:623 +#: engine/core/models.py:688 msgid "indicates whether this product should be updated from periodic task" msgstr "indicates whether this product should be updated from periodic task" -#: engine/core/models.py:625 +#: engine/core/models.py:690 msgid "is product updatable" msgstr "is product updatable" -#: engine/core/models.py:631 +#: engine/core/models.py:696 msgid "provide a clear identifying name for the product" msgstr "Provide a clear identifying name for the product" -#: engine/core/models.py:632 +#: engine/core/models.py:697 msgid "product name" msgstr "Product name" -#: engine/core/models.py:638 engine/core/models.py:923 +#: engine/core/models.py:703 engine/core/models.py:1012 msgid "add a detailed description of the product" msgstr "Add a detailed description of the product" -#: engine/core/models.py:639 +#: engine/core/models.py:704 msgid "product description" msgstr "Product description" -#: engine/core/models.py:646 +#: engine/core/models.py:710 +msgid "optional video file for this product" +msgstr "Optional video file for this product" + +#: engine/core/models.py:711 +msgid "product video" +msgstr "Product video" + +#: engine/core/models.py:719 msgid "part number for this product" msgstr "Part number for this product" -#: engine/core/models.py:647 +#: engine/core/models.py:720 msgid "part number" msgstr "Part number" -#: engine/core/models.py:666 +#: engine/core/models.py:739 msgid "stock keeping unit for this product" msgstr "Stock Keeping Unit for this product" -#: engine/core/models.py:673 +#: engine/core/models.py:746 msgid "whether to export this product to marketplaces" msgstr "Whether to export this product to marketplaces" -#: engine/core/models.py:674 +#: engine/core/models.py:747 msgid "Export to Marketplaces" msgstr "Export to Marketplaces" -#: engine/core/models.py:749 +#: engine/core/models.py:835 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 " @@ -1970,64 +2014,64 @@ msgstr "" " including string, integer, float, boolean, array, and object. This allows " "for dynamic and flexible data structuring." -#: engine/core/models.py:762 +#: engine/core/models.py:848 msgid "group of this attribute" msgstr "Group of this attribute" -#: engine/core/models.py:768 +#: engine/core/models.py:854 msgid "string" msgstr "String" -#: engine/core/models.py:769 +#: engine/core/models.py:855 msgid "integer" msgstr "Integer" -#: engine/core/models.py:770 +#: engine/core/models.py:856 msgid "float" msgstr "Float" -#: engine/core/models.py:771 +#: engine/core/models.py:857 msgid "boolean" msgstr "Boolean" -#: engine/core/models.py:772 +#: engine/core/models.py:858 msgid "array" msgstr "Array" -#: engine/core/models.py:773 +#: engine/core/models.py:859 msgid "object" msgstr "Object" -#: engine/core/models.py:775 +#: engine/core/models.py:861 msgid "type of the attribute's value" msgstr "Type of the attribute's value" -#: engine/core/models.py:776 +#: engine/core/models.py:862 msgid "value type" msgstr "Value type" -#: engine/core/models.py:781 +#: engine/core/models.py:867 msgid "name of this attribute" msgstr "Name of this attribute" -#: engine/core/models.py:782 +#: engine/core/models.py:868 msgid "attribute's name" msgstr "Attribute's name" -#: engine/core/models.py:787 +#: engine/core/models.py:873 msgid "is filterable" msgstr "is filterable" -#: engine/core/models.py:789 +#: engine/core/models.py:875 msgid "designates whether this attribute can be used for filtering or not" msgstr "designates whether this attribute can be used for filtering or not" -#: engine/core/models.py:802 engine/core/models.py:820 +#: engine/core/models.py:888 engine/core/models.py:906 #: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Attribute" -#: engine/core/models.py:808 +#: engine/core/models.py:894 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" @@ -2037,19 +2081,19 @@ msgstr "" " links the 'attribute' to a unique 'value', allowing better organization and" " dynamic representation of product characteristics." -#: engine/core/models.py:819 +#: engine/core/models.py:905 msgid "attribute of this value" msgstr "Attribute of this value" -#: engine/core/models.py:827 +#: engine/core/models.py:913 msgid "the specific product associated with this attribute's value" msgstr "The specific product associated with this attribute's value" -#: engine/core/models.py:833 +#: engine/core/models.py:919 msgid "the specific value for this attribute" msgstr "The specific value for this attribute" -#: engine/core/models.py:846 +#: engine/core/models.py:934 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -2063,39 +2107,39 @@ msgstr "" "determining their display order. It also includes an accessibility feature " "with alternative text for the images." -#: engine/core/models.py:857 +#: engine/core/models.py:945 msgid "provide alternative text for the image for accessibility" msgstr "Provide alternative text for the image for accessibility" -#: engine/core/models.py:858 +#: engine/core/models.py:946 msgid "image alt text" msgstr "Image alt text" -#: engine/core/models.py:861 +#: engine/core/models.py:949 msgid "upload the image file for this product" msgstr "Upload the image file for this product" -#: engine/core/models.py:862 engine/core/models.py:893 +#: engine/core/models.py:950 engine/core/models.py:982 msgid "product image" msgstr "Product image" -#: engine/core/models.py:867 +#: engine/core/models.py:955 msgid "determines the order in which images are displayed" msgstr "Determines the order in which images are displayed" -#: engine/core/models.py:868 +#: engine/core/models.py:956 msgid "display priority" msgstr "Display priority" -#: engine/core/models.py:873 +#: engine/core/models.py:961 msgid "the product that this image represents" msgstr "The product that this image represents" -#: engine/core/models.py:894 +#: engine/core/models.py:983 msgid "product images" msgstr "Product images" -#: engine/core/models.py:899 +#: engine/core/models.py:988 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -2111,39 +2155,39 @@ msgstr "" "applicable products. It integrates with the product catalog to determine the" " affected items in the campaign." -#: engine/core/models.py:911 +#: engine/core/models.py:1000 msgid "percentage discount for the selected products" msgstr "Percentage discount for the selected products" -#: engine/core/models.py:912 +#: engine/core/models.py:1001 msgid "discount percentage" msgstr "Discount percentage" -#: engine/core/models.py:917 +#: engine/core/models.py:1006 msgid "provide a unique name for this promotion" msgstr "Provide a unique name for this promotion" -#: engine/core/models.py:918 +#: engine/core/models.py:1007 msgid "promotion name" msgstr "Promotion name" -#: engine/core/models.py:924 +#: engine/core/models.py:1013 msgid "promotion description" msgstr "Promotion description" -#: engine/core/models.py:929 +#: engine/core/models.py:1018 msgid "select which products are included in this promotion" msgstr "Select which products are included in this promotion" -#: engine/core/models.py:930 +#: engine/core/models.py:1019 msgid "included products" msgstr "Included products" -#: engine/core/models.py:934 +#: engine/core/models.py:1027 msgid "promotion" msgstr "Promotion" -#: engine/core/models.py:945 +#: engine/core/models.py:1038 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2155,23 +2199,23 @@ msgstr "" "operations such as adding and removing products, as well as supporting " "operations for adding and removing multiple products at once." -#: engine/core/models.py:957 +#: engine/core/models.py:1050 msgid "products that the user has marked as wanted" msgstr "Products that the user has marked as wanted" -#: engine/core/models.py:965 +#: engine/core/models.py:1058 msgid "user who owns this wishlist" msgstr "User who owns this wishlist" -#: engine/core/models.py:966 +#: engine/core/models.py:1059 msgid "wishlist owner" msgstr "Wishlist's Owner" -#: engine/core/models.py:974 +#: engine/core/models.py:1067 msgid "wishlist" msgstr "Wishlist" -#: engine/core/models.py:1016 +#: engine/core/models.py:1109 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2187,19 +2231,19 @@ msgstr "" "files. It extends functionality from specific mixins and provides additional" " custom features." -#: engine/core/models.py:1031 +#: engine/core/models.py:1124 msgid "documentary" msgstr "Documentary" -#: engine/core/models.py:1032 +#: engine/core/models.py:1125 msgid "documentaries" msgstr "Documentaries" -#: engine/core/models.py:1042 +#: engine/core/models.py:1135 msgid "unresolved" msgstr "Unresolved" -#: engine/core/models.py:1047 +#: engine/core/models.py:1140 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2219,59 +2263,59 @@ msgstr "" "responses for further processing or inspection. The class also allows " "associating an address with a user, facilitating personalized data handling." -#: engine/core/models.py:1062 +#: engine/core/models.py:1155 msgid "address line for the customer" msgstr "Address line for the customer" -#: engine/core/models.py:1063 +#: engine/core/models.py:1156 msgid "address line" msgstr "Address line" -#: engine/core/models.py:1065 +#: engine/core/models.py:1158 msgid "street" msgstr "Street" -#: engine/core/models.py:1066 +#: engine/core/models.py:1159 msgid "district" msgstr "District" -#: engine/core/models.py:1067 +#: engine/core/models.py:1160 msgid "city" msgstr "City" -#: engine/core/models.py:1068 +#: engine/core/models.py:1161 msgid "region" msgstr "Region" -#: engine/core/models.py:1069 +#: engine/core/models.py:1162 msgid "postal code" msgstr "Postal code" -#: engine/core/models.py:1070 +#: engine/core/models.py:1163 msgid "country" msgstr "Country" -#: engine/core/models.py:1077 +#: engine/core/models.py:1170 msgid "geolocation point: (longitude, latitude)" msgstr "Geolocation Point(Longitude, Latitude)" -#: engine/core/models.py:1083 +#: engine/core/models.py:1176 msgid "full JSON response from geocoder for this address" msgstr "Full JSON response from geocoder for this address" -#: engine/core/models.py:1089 +#: engine/core/models.py:1182 msgid "stored JSON response from the geocoding service" msgstr "Stored JSON response from the geocoding service" -#: engine/core/models.py:1099 +#: engine/core/models.py:1192 msgid "address" msgstr "Address" -#: engine/core/models.py:1100 +#: engine/core/models.py:1193 msgid "addresses" msgstr "Adresses" -#: engine/core/models.py:1112 +#: engine/core/models.py:1205 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2287,71 +2331,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." -#: engine/core/models.py:1126 +#: engine/core/models.py:1219 msgid "unique code used by a user to redeem a discount" msgstr "Unique code used by a user to redeem a discount" -#: engine/core/models.py:1127 +#: engine/core/models.py:1220 msgid "promo code identifier" msgstr "Promo code identifier" -#: engine/core/models.py:1134 +#: engine/core/models.py:1227 msgid "fixed discount amount applied if percent is not used" msgstr "Fixed discount amount applied if percent is not used" -#: engine/core/models.py:1135 +#: engine/core/models.py:1228 msgid "fixed discount amount" msgstr "Fixed discount amount" -#: engine/core/models.py:1141 +#: engine/core/models.py:1234 msgid "percentage discount applied if fixed amount is not used" msgstr "Percentage discount applied if fixed amount is not used" -#: engine/core/models.py:1142 +#: engine/core/models.py:1235 msgid "percentage discount" msgstr "Percentage discount" -#: engine/core/models.py:1147 +#: engine/core/models.py:1240 msgid "timestamp when the promocode expires" msgstr "Timestamp when the promocode expires" -#: engine/core/models.py:1148 +#: engine/core/models.py:1241 msgid "end validity time" msgstr "End validity time" -#: engine/core/models.py:1153 +#: engine/core/models.py:1246 msgid "timestamp from which this promocode is valid" msgstr "Timestamp from which this promocode is valid" -#: engine/core/models.py:1154 +#: engine/core/models.py:1247 msgid "start validity time" msgstr "Start validity time" -#: engine/core/models.py:1159 +#: engine/core/models.py:1252 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "Timestamp when the promocode was used, blank if not used yet" -#: engine/core/models.py:1160 +#: engine/core/models.py:1253 msgid "usage timestamp" msgstr "Usage timestamp" -#: engine/core/models.py:1165 +#: engine/core/models.py:1258 msgid "user assigned to this promocode if applicable" msgstr "User assigned to this promocode if applicable" -#: engine/core/models.py:1166 +#: engine/core/models.py:1259 msgid "assigned user" msgstr "Assigned user" -#: engine/core/models.py:1173 +#: engine/core/models.py:1266 msgid "promo code" msgstr "Promo code" -#: engine/core/models.py:1174 +#: engine/core/models.py:1267 msgid "promo codes" msgstr "Promo codes" -#: engine/core/models.py:1190 +#: engine/core/models.py:1283 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2359,16 +2403,16 @@ msgstr "" "Only one type of discount should be defined (amount or percent), but not " "both or neither." -#: engine/core/models.py:1212 +#: engine/core/models.py:1305 msgid "promocode already used" msgstr "Promocode has been used already" -#: engine/core/models.py:1234 +#: engine/core/models.py:1327 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Invalid discount type for promocode {self.uuid}!" -#: engine/core/models.py:1243 +#: engine/core/models.py:1336 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 " @@ -2384,136 +2428,136 @@ msgstr "" "set, and shipping or billing details updated. Equally, functionality " "supports managing the products in the order lifecycle." -#: engine/core/models.py:1260 +#: engine/core/models.py:1357 msgid "the billing address used for this order" msgstr "The billing address used for this order" -#: engine/core/models.py:1268 +#: engine/core/models.py:1365 msgid "optional promo code applied to this order" msgstr "Optional promo code applied to this order" -#: engine/core/models.py:1269 +#: engine/core/models.py:1366 msgid "applied promo code" msgstr "Applied promo code" -#: engine/core/models.py:1277 +#: engine/core/models.py:1374 msgid "the shipping address used for this order" msgstr "The shipping address used for this order" -#: engine/core/models.py:1278 +#: engine/core/models.py:1375 msgid "shipping address" msgstr "Shipping address" -#: engine/core/models.py:1284 +#: engine/core/models.py:1381 msgid "current status of the order in its lifecycle" msgstr "Current status of the order in its lifecycle" -#: engine/core/models.py:1285 +#: engine/core/models.py:1382 msgid "order status" msgstr "Order status" -#: engine/core/models.py:1290 engine/core/models.py:1889 +#: engine/core/models.py:1387 engine/core/models.py:1997 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" -#: engine/core/models.py:1296 +#: engine/core/models.py:1393 msgid "json representation of order attributes for this order" msgstr "JSON representation of order attributes for this order" -#: engine/core/models.py:1302 +#: engine/core/models.py:1399 msgid "the user who placed the order" msgstr "The user who placed the order" -#: engine/core/models.py:1303 +#: engine/core/models.py:1400 msgid "user" msgstr "User" -#: engine/core/models.py:1309 +#: engine/core/models.py:1406 msgid "the timestamp when the order was finalized" msgstr "The timestamp when the order was finalized" -#: engine/core/models.py:1310 +#: engine/core/models.py:1407 msgid "buy time" msgstr "Buy time" -#: engine/core/models.py:1317 +#: engine/core/models.py:1414 msgid "a human-readable identifier for the order" msgstr "A human-readable identifier for the order" -#: engine/core/models.py:1318 +#: engine/core/models.py:1415 msgid "human readable id" msgstr "human-readable ID" -#: engine/core/models.py:1324 +#: engine/core/models.py:1421 msgid "order" msgstr "Order" -#: engine/core/models.py:1371 +#: engine/core/models.py:1468 msgid "a user must have only one pending order at a time" msgstr "A user must have only one pending order at a time!" -#: engine/core/models.py:1404 +#: engine/core/models.py:1504 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" -#: engine/core/models.py:1410 +#: engine/core/models.py:1510 msgid "you cannot add inactive products to order" msgstr "You cannot add inactive products to order" -#: engine/core/models.py:1432 +#: engine/core/models.py:1533 msgid "you cannot add more products than available in stock" msgstr "You cannot add more products than available in stock" -#: engine/core/models.py:1456 engine/core/models.py:1485 -#: engine/core/models.py:1495 +#: engine/core/models.py:1557 engine/core/models.py:1586 +#: engine/core/models.py:1596 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" -#: engine/core/models.py:1480 +#: engine/core/models.py:1581 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} does not exist with query <{query}>!" -#: engine/core/models.py:1519 +#: engine/core/models.py:1620 msgid "promocode does not exist" msgstr "Promocode does not exist" -#: engine/core/models.py:1534 +#: engine/core/models.py:1635 msgid "you can only buy physical products with shipping address specified" msgstr "You can only buy physical products with shipping address specified!" -#: engine/core/models.py:1555 +#: engine/core/models.py:1656 msgid "address does not exist" msgstr "Address does not exist" -#: engine/core/models.py:1577 engine/core/models.py:1656 +#: engine/core/models.py:1678 engine/core/models.py:1757 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." -#: engine/core/models.py:1583 engine/core/models.py:1649 +#: engine/core/models.py:1684 engine/core/models.py:1750 msgid "invalid force value" msgstr "Invalid force value" -#: engine/core/models.py:1589 engine/core/models.py:1660 +#: engine/core/models.py:1690 engine/core/models.py:1761 msgid "you cannot purchase an empty order!" msgstr "You cannot purchase an empty order!" -#: engine/core/models.py:1610 +#: engine/core/models.py:1711 msgid "you cannot buy an order without a user" msgstr "You cannot buy an order without a user!" -#: engine/core/models.py:1624 +#: engine/core/models.py:1725 msgid "a user without a balance cannot buy with balance" msgstr "A user without a balance cannot buy with balance!" -#: engine/core/models.py:1630 +#: engine/core/models.py:1731 msgid "insufficient funds to complete the order" msgstr "Insufficient funds to complete the order" -#: engine/core/models.py:1671 +#: engine/core/models.py:1772 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2521,14 +2565,14 @@ msgstr "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" -#: engine/core/models.py:1682 +#: engine/core/models.py:1783 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "Invalid payment method: {payment_method} from {available_payment_methods}!" -#: engine/core/models.py:1813 +#: engine/core/models.py:1916 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2542,33 +2586,33 @@ msgstr "" "product in the order, and a user-assigned rating. The class uses database " "fields to effectively model and manage feedback data." -#: engine/core/models.py:1825 +#: engine/core/models.py:1928 msgid "user-provided comments about their experience with the product" msgstr "User-provided comments about their experience with the product" -#: engine/core/models.py:1826 +#: engine/core/models.py:1929 msgid "feedback comments" msgstr "Feedback comments" -#: engine/core/models.py:1834 +#: engine/core/models.py:1937 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" -#: engine/core/models.py:1836 +#: engine/core/models.py:1939 msgid "related order product" msgstr "Related order product" -#: engine/core/models.py:1841 +#: engine/core/models.py:1944 msgid "user-assigned rating for the product" msgstr "User-assigned rating for the product" -#: engine/core/models.py:1842 +#: engine/core/models.py:1945 msgid "product rating" msgstr "Product rating" -#: engine/core/models.py:1862 +#: engine/core/models.py:1965 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2590,108 +2634,108 @@ msgstr "" "download URL for digital products. The model integrates with the Order and " "Product models and stores a reference to them." -#: engine/core/models.py:1877 +#: engine/core/models.py:1985 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" -#: engine/core/models.py:1878 +#: engine/core/models.py:1986 msgid "purchase price at order time" msgstr "Purchase price at order time" -#: engine/core/models.py:1883 +#: engine/core/models.py:1991 msgid "internal comments for admins about this ordered product" msgstr "Internal comments for admins about this ordered product" -#: engine/core/models.py:1884 +#: engine/core/models.py:1992 msgid "internal comments" msgstr "Internal comments" -#: engine/core/models.py:1890 +#: engine/core/models.py:1998 msgid "user notifications" msgstr "User notifications" -#: engine/core/models.py:1895 +#: engine/core/models.py:2003 msgid "json representation of this item's attributes" msgstr "JSON representation of this item's attributes" -#: engine/core/models.py:1896 +#: engine/core/models.py:2004 msgid "ordered product attributes" msgstr "Ordered product attributes" -#: engine/core/models.py:1901 +#: engine/core/models.py:2009 msgid "reference to the parent order that contains this product" msgstr "Reference to the parent order that contains this product" -#: engine/core/models.py:1902 +#: engine/core/models.py:2010 msgid "parent order" msgstr "Parent order" -#: engine/core/models.py:1911 +#: engine/core/models.py:2019 msgid "the specific product associated with this order line" msgstr "The specific product associated with this order line" -#: engine/core/models.py:1918 +#: engine/core/models.py:2026 msgid "quantity of this specific product in the order" msgstr "Quantity of this specific product in the order" -#: engine/core/models.py:1919 +#: engine/core/models.py:2027 msgid "product quantity" msgstr "Product quantity" -#: engine/core/models.py:1926 +#: engine/core/models.py:2034 msgid "current status of this product in the order" msgstr "Current status of this product in the order" -#: engine/core/models.py:1927 +#: engine/core/models.py:2035 msgid "product line status" msgstr "Product line status" -#: engine/core/models.py:1998 +#: engine/core/models.py:2106 msgid "order product must have an order" msgstr "Orderproduct must have an associated order!" -#: engine/core/models.py:2000 +#: engine/core/models.py:2108 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Wrong action specified for feedback: {action}!" -#: engine/core/models.py:2017 +#: engine/core/models.py:2125 msgid "you cannot feedback an order which is not received" msgstr "you cannot feedback an order which is not received" -#: engine/core/models.py:2026 +#: engine/core/models.py:2132 engine/core/models.py:2227 msgid "name" msgstr "Name" -#: engine/core/models.py:2028 +#: engine/core/models.py:2134 msgid "URL of the integration" msgstr "URL of the integration" -#: engine/core/models.py:2031 +#: engine/core/models.py:2137 msgid "authentication credentials" msgstr "Authentication credentials" -#: engine/core/models.py:2054 +#: engine/core/models.py:2160 msgid "you can only have one default CRM provider" msgstr "You can only have one default CRM provider" -#: engine/core/models.py:2064 +#: engine/core/models.py:2170 msgid "CRM" msgstr "CRM" -#: engine/core/models.py:2065 +#: engine/core/models.py:2171 msgid "CRMs" msgstr "CRMs" -#: engine/core/models.py:2081 +#: engine/core/models.py:2187 msgid "order CRM link" msgstr "Order's CRM link" -#: engine/core/models.py:2082 +#: engine/core/models.py:2188 msgid "orders CRM links" msgstr "Orders' CRM links" -#: engine/core/models.py:2087 +#: engine/core/models.py:2193 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2707,14 +2751,38 @@ 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." -#: engine/core/models.py:2103 +#: engine/core/models.py:2209 msgid "download" msgstr "Download" -#: engine/core/models.py:2104 +#: engine/core/models.py:2210 msgid "downloads" msgstr "Downloads" +#: engine/core/models.py:2228 +msgid "descriptive name for the image" +msgstr "Descriptive name for the image" + +#: engine/core/models.py:2233 +msgid "image file pasted in the markdown editor" +msgstr "Image file pasted in the markdown editor" + +#: engine/core/models.py:2239 +msgid "alt text" +msgstr "Other text" + +#: engine/core/models.py:2240 +msgid "alternative text for accessibility" +msgstr "Alternative text for accessibility" + +#: engine/core/models.py:2244 +msgid "pasted image" +msgstr "Pasted image" + +#: engine/core/models.py:2245 +msgid "pasted images" +msgstr "Pasted images" + #: engine/core/serializers/utility.py:91 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." @@ -2722,6 +2790,16 @@ msgstr "" "you must provide a comment, rating, and order product uuid to add feedback." #: engine/core/sitemaps.py:25 +#: engine/core/templates/admin_doc/bookmarklets.html:8 +#: engine/core/templates/admin_doc/index.html:8 +#: engine/core/templates/admin_doc/missing_docutils.html:8 +#: engine/core/templates/admin_doc/model_detail.html:8 +#: engine/core/templates/admin_doc/model_index.html:8 +#: engine/core/templates/admin_doc/template_detail.html:8 +#: engine/core/templates/admin_doc/template_filter_index.html:8 +#: engine/core/templates/admin_doc/template_tag_index.html:8 +#: engine/core/templates/admin_doc/view_detail.html:8 +#: engine/core/templates/admin_doc/view_index.html:8 msgid "Home" msgstr "Home" @@ -2774,45 +2852,34 @@ msgstr "Gross" msgid "Dashboard" msgstr "Dashboard" -#: engine/core/templates/admin/dashboard/_income_overview.html:7 +#: engine/core/templates/admin/dashboard/_income_overview.html:6 msgid "Income overview" msgstr "Income overview" -#: engine/core/templates/admin/dashboard/_income_overview.html:31 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Net" +#: engine/core/templates/admin/dashboard/_income_overview.html:16 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" msgstr "Net revenue" -#: engine/core/templates/admin/dashboard/_income_overview.html:37 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Taxes" -msgstr "Taxes" - -#: engine/core/templates/admin/dashboard/_income_overview.html:43 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 +#: engine/core/templates/admin/dashboard/_income_overview.html:21 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 msgid "Returns" msgstr "Returns" -#: engine/core/templates/admin/dashboard/_income_overview.html:48 -msgid "Gross (pie total)" -msgstr "Gross revenue" - -#: engine/core/templates/admin/dashboard/_income_overview.html:72 -msgid "No data" -msgstr "No date" - +#: engine/core/templates/admin/dashboard/_income_overview.html:26 #: engine/core/templates/admin/dashboard/_kpis.html:6 msgid "GMV" msgstr "GMV" +#: engine/core/templates/admin/dashboard/_income_overview.html:50 +msgid "No data" +msgstr "No date" + #: engine/core/templates/admin/dashboard/_kpis.html:34 msgid "AOV" msgstr "AOV" -#: engine/core/templates/admin/dashboard/_kpis.html:48 -msgid "Net revenue" -msgstr "Net revenue" - #: engine/core/templates/admin/dashboard/_kpis.html:62 msgid "Refund rate" msgstr "Refund rate" @@ -2825,7 +2892,7 @@ msgstr "Returned" msgid "Low stock" msgstr "Low stock" -#: engine/core/templates/admin/dashboard/_low_stock.html:29 +#: engine/core/templates/admin/dashboard/_low_stock.html:33 msgid "No low stock items." msgstr "No low stock items." @@ -2882,6 +2949,299 @@ msgstr "No category sales in the last 30 days." msgid "Django site admin" msgstr "Django site admin" +#: engine/core/templates/admin_doc/bookmarklets.html:4 +#: engine/core/templates/admin_doc/bookmarklets.html:17 +msgid "Documentation bookmarklets" +msgstr "Documentation bookmarklets" + +#: engine/core/templates/admin_doc/bookmarklets.html:10 +#: engine/core/templates/admin_doc/index.html:4 +#: engine/core/templates/admin_doc/index.html:10 +#: engine/core/templates/admin_doc/index.html:15 +#: engine/core/templates/admin_doc/missing_docutils.html:10 +#: engine/core/templates/admin_doc/missing_docutils.html:19 +#: engine/core/templates/admin_doc/model_detail.html:10 +#: engine/core/templates/admin_doc/model_index.html:10 +#: engine/core/templates/admin_doc/template_detail.html:10 +#: engine/core/templates/admin_doc/template_filter_index.html:10 +#: engine/core/templates/admin_doc/template_tag_index.html:10 +#: engine/core/templates/admin_doc/view_detail.html:10 +#: engine/core/templates/admin_doc/view_index.html:10 +msgid "Documentation" +msgstr "Documentation" + +#: engine/core/templates/admin_doc/bookmarklets.html:12 +#: engine/core/templates/admin_doc/index.html:53 +msgid "Bookmarklets" +msgstr "Bookmarklets" + +#: engine/core/templates/admin_doc/bookmarklets.html:19 +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." + +#: engine/core/templates/admin_doc/bookmarklets.html:29 +msgid "Documentation for this page" +msgstr "Documentation for this page" + +#: engine/core/templates/admin_doc/bookmarklets.html:31 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Jumps you from any page to the documentation for the view that generates " +"that page." + +#: engine/core/templates/admin_doc/index.html:21 +#: engine/core/templates/admin_doc/model_detail.html:12 +#: engine/core/templates/admin_doc/model_index.html:4 +#: engine/core/templates/admin_doc/model_index.html:12 +msgid "Models" +msgstr "Models" + +#: engine/core/templates/admin_doc/index.html:23 +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" + +#: engine/core/templates/admin_doc/index.html:29 +#: engine/core/templates/admin_doc/view_detail.html:12 +#: engine/core/templates/admin_doc/view_index.html:4 +#: engine/core/templates/admin_doc/view_index.html:12 +msgid "Views" +msgstr "Views" + +#: engine/core/templates/admin_doc/index.html:31 +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." + +#: engine/core/templates/admin_doc/index.html:39 +msgid "List of all the template tags and their functions." +msgstr "List of all the template tags and their functions." + +#: engine/core/templates/admin_doc/index.html:45 +#: engine/core/templates/admin_doc/template_filter_index.html:12 +msgid "Filters" +msgstr "Filters" + +#: engine/core/templates/admin_doc/index.html:47 +msgid "" +"Filters are actions which can be applied to variables in a template to alter" +" the output." +msgstr "" +"Filters are actions which can be applied to variables in a template to alter" +" the output." + +#: engine/core/templates/admin_doc/index.html:55 +msgid "Tools for your browser to quickly access admin functionality." +msgstr "Tools for your browser to quickly access admin functionality." + +#: engine/core/templates/admin_doc/missing_docutils.html:4 +msgid "Please install docutils" +msgstr "Please install docutils" + +#: engine/core/templates/admin_doc/missing_docutils.html:20 +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"The admin documentation system requires Python's docutils library." + +#: engine/core/templates/admin_doc/missing_docutils.html:21 +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Please ask your administrators to install docutils." + +#: engine/core/templates/admin_doc/model_detail.html:4 +#, python-format +msgid "Model: %(name)s" +msgstr "Model: %(name)s" + +#: engine/core/templates/admin_doc/model_detail.html:29 +msgid "Fields" +msgstr "Fields" + +#: engine/core/templates/admin_doc/model_detail.html:36 +msgid "Field" +msgstr "Field" + +#: engine/core/templates/admin_doc/model_detail.html:37 +msgid "Type" +msgstr "Type" + +#: engine/core/templates/admin_doc/model_detail.html:38 +#: engine/core/templates/admin_doc/model_detail.html:70 +msgid "Description" +msgstr "Description" + +#: engine/core/templates/admin_doc/model_detail.html:61 +msgid "Methods with arguments" +msgstr "Methods with arguments" + +#: engine/core/templates/admin_doc/model_detail.html:68 +msgid "Method" +msgstr "Method" + +#: engine/core/templates/admin_doc/model_detail.html:69 +msgid "Arguments" +msgstr "Arguments" + +#: engine/core/templates/admin_doc/model_detail.html:89 +msgid "Back to Model documentation" +msgstr "Back to Model documentation" + +#: engine/core/templates/admin_doc/model_index.html:17 +msgid "Model documentation" +msgstr "Model documentation" + +#: engine/core/templates/admin_doc/model_index.html:44 +msgid "Model groups" +msgstr "Model groups" + +#: engine/core/templates/admin_doc/template_detail.html:4 +#, python-format +msgid "Template: %(name)s" +msgstr "Template: %(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:12 +msgid "Templates" +msgstr "Templates" + +#: engine/core/templates/admin_doc/template_detail.html:17 +#, python-format +msgid "" +"Template: %(name)s" +msgstr "" +"Template: %(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:21 +#, python-format +msgid "Search path for template %(name)s:" +msgstr "Search path for template %(name)s:" + +#: engine/core/templates/admin_doc/template_detail.html:29 +msgid "(does not exist)" +msgstr "(does not exist)" + +#: engine/core/templates/admin_doc/template_detail.html:40 +msgid "Back to Documentation" +msgstr "Back to Documentation" + +#: engine/core/templates/admin_doc/template_filter_index.html:4 +msgid "Template filters" +msgstr "Template filters" + +#: engine/core/templates/admin_doc/template_filter_index.html:17 +msgid "Template filter documentation" +msgstr "Template filter documentation" + +#: engine/core/templates/admin_doc/template_filter_index.html:26 +#: engine/core/templates/admin_doc/template_filter_index.html:52 +msgid "Built-in filters" +msgstr "Built-in filters" + +#: engine/core/templates/admin_doc/template_filter_index.html:29 +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before using" +" the filter." +msgstr "" +"To use these filters, put %(code)s in your template before using" +" the filter." + +#: engine/core/templates/admin_doc/template_tag_index.html:4 +msgid "Template tags" +msgstr "Template tags" + +#: engine/core/templates/admin_doc/template_tag_index.html:17 +msgid "Template tag documentation" +msgstr "Template tag documentation" + +#: engine/core/templates/admin_doc/template_tag_index.html:26 +#: engine/core/templates/admin_doc/template_tag_index.html:52 +msgid "Built-in tags" +msgstr "Built-in tags" + +#: engine/core/templates/admin_doc/template_tag_index.html:29 +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using the tag." +msgstr "" +"To use these tags, put %(code)s in your template before using the tag." + +#: engine/core/templates/admin_doc/view_detail.html:4 +#, python-format +msgid "View: %(name)s" +msgstr "View: %(name)s" + +#: engine/core/templates/admin_doc/view_detail.html:28 +msgid "Context:" +msgstr "Context:" + +#: engine/core/templates/admin_doc/view_detail.html:33 +msgid "Templates:" +msgstr "Templates:" + +#: engine/core/templates/admin_doc/view_detail.html:41 +msgid "Back to View documentation" +msgstr "Back to View documentation" + +#: engine/core/templates/admin_doc/view_index.html:17 +msgid "View documentation" +msgstr "View documentation" + +#: engine/core/templates/admin_doc/view_index.html:28 +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Views by namespace %(name)s" + +#: engine/core/templates/admin_doc/view_index.html:30 +msgid "Views by empty namespace" +msgstr "Views by empty namespace" + +#: engine/core/templates/admin_doc/view_index.html:40 +#, python-format +msgid "" +"View function: %(full_name)s. Name: %(url_name)s." +msgstr "" +"View function: %(full_name)s. Name: %(url_name)s." + +#: engine/core/templates/admin_doc/view_index.html:54 +msgid "Jump to namespace" +msgstr "Jump to namespace" + +#: engine/core/templates/admin_doc/view_index.html:59 +msgid "Empty namespace" +msgstr "Empty namespace" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -2981,7 +3341,7 @@ msgstr "" " information" #: engine/core/templates/digital_order_delivered_email.html:137 -#: engine/core/templates/json_table_widget.html:6 +#: engine/core/templates/json_table_widget.html:26 msgid "value" msgstr "Value" @@ -3001,11 +3361,23 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "Best regards,
the %(project_name)s team" -#: engine/core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:7 +msgid "Key" +msgstr "Key" + +#: engine/core/templates/json_table_widget.html:8 +msgid "Value" +msgstr "Value" + +#: engine/core/templates/json_table_widget.html:19 msgid "key" msgstr "Key" -#: engine/core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:32 +msgid "Delete row" +msgstr "Delete row" + +#: engine/core/templates/json_table_widget.html:44 msgid "Add Row" msgstr "Add Row" @@ -3092,13 +3464,22 @@ msgstr "You do not have permission to perform this action." msgid "NOMINATIM_URL must be configured." msgstr "NOMINATIM_URL parameter must be configured!" -#: engine/core/validators.py:23 +#: engine/core/validators.py:18 +msgid "could not determine file type" +msgstr "Could not determine file type" + +#: engine/core/validators.py:24 +#, python-brace-format +msgid "unsupported video format. supported formats: {supported}" +msgstr "Unsupported video format. Supported formats: {supported}" + +#: engine/core/validators.py:45 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "Image dimensions should not exceed w{max_width} x h{max_height} pixels!" -#: engine/core/views.py:104 +#: engine/core/views.py:108 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3106,7 +3487,7 @@ msgstr "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." -#: engine/core/views.py:119 +#: engine/core/views.py:123 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3116,17 +3497,17 @@ msgstr "" "the request, fetches the appropriate sitemap detail response, and sets the " "Content-Type header for XML." -#: engine/core/views.py:155 +#: engine/core/views.py:174 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Returns a list of supported languages and their corresponding information." -#: engine/core/views.py:182 +#: engine/core/views.py:201 msgid "Returns the parameters of the website as a JSON object." msgstr "Returns the parameters of the website as a JSON object." -#: engine/core/views.py:198 +#: engine/core/views.py:217 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3134,11 +3515,11 @@ msgstr "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." -#: engine/core/views.py:220 +#: engine/core/views.py:239 msgid "Handles `contact us` form submissions." msgstr "Handles `contact us` form submissions." -#: engine/core/views.py:236 +#: engine/core/views.py:255 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3146,15 +3527,15 @@ msgstr "" "Handles requests for processing and validating URLs from incoming POST " "requests." -#: engine/core/views.py:273 +#: engine/core/views.py:292 msgid "Handles global search queries." msgstr "Handles global search queries." -#: engine/core/views.py:289 +#: engine/core/views.py:308 msgid "Handles the logic of buying as a business without registration." msgstr "Handles the logic of buying as a business without registration." -#: engine/core/views.py:337 +#: engine/core/views.py:356 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3162,31 +3543,31 @@ msgstr "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." -#: engine/core/views.py:348 +#: engine/core/views.py:367 msgid "order_product_uuid is required" msgstr "order_product_uuid is required" -#: engine/core/views.py:355 +#: engine/core/views.py:374 msgid "order product does not exist" msgstr "order product does not exist" -#: engine/core/views.py:358 +#: engine/core/views.py:377 msgid "you can only download the digital asset once" msgstr "You can only download the digital asset once" -#: engine/core/views.py:362 +#: engine/core/views.py:381 msgid "the order must be paid before downloading the digital asset" msgstr "the order must be paid before downloading the digital asset" -#: engine/core/views.py:369 +#: engine/core/views.py:388 msgid "the order product does not have a product" msgstr "The order product does not have a product" -#: engine/core/views.py:412 +#: engine/core/views.py:431 msgid "favicon not found" msgstr "favicon not found" -#: engine/core/views.py:418 +#: engine/core/views.py:437 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3194,7 +3575,7 @@ msgstr "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." -#: engine/core/views.py:432 +#: engine/core/views.py:451 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3204,16 +3585,20 @@ msgstr "" " HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." -#: engine/core/views.py:445 +#: engine/core/views.py:464 msgid "Returns current version of the Schon. " msgstr "Returns current version of the Schon." -#: engine/core/views.py:674 engine/core/views.py:689 +#: engine/core/views.py:475 +msgid "no image file provided" +msgstr "No image file provided" + +#: engine/core/views.py:710 engine/core/views.py:725 #, python-format msgid "Revenue & Orders (last %(days)d)" msgstr "Revenue & Orders (last %(days)d)" -#: engine/core/views.py:870 +#: engine/core/views.py:911 msgid "Returns custom variables for Dashboard. " msgstr "Returns custom variables for Dashboard." @@ -3301,7 +3686,7 @@ msgstr "" "uses Django's ViewSet framework to simplify the implementation of API " "endpoints for Brand objects." -#: engine/core/viewsets.py:458 +#: engine/core/viewsets.py:460 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3319,7 +3704,15 @@ msgstr "" "product details, applying permissions, and accessing related feedback of a " "product." -#: engine/core/viewsets.py:605 +#: engine/core/viewsets.py:541 +msgid "identificator_type and identificators are required" +msgstr "identificator_type and identificators are required" + +#: engine/core/viewsets.py:554 +msgid "identificator_type must be one of: uuid, slug, sku" +msgstr "identificator_type must be one of: uuid, slug, sku" + +#: engine/core/viewsets.py:635 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3333,7 +3726,7 @@ msgstr "" "actions. The purpose of this class is to provide streamlined access to " "Vendor-related resources through the Django REST framework." -#: engine/core/viewsets.py:625 +#: engine/core/viewsets.py:655 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3349,7 +3742,7 @@ msgstr "" " accessible Feedback objects. It extends the base `SchonViewSet` and makes " "use of Django's filtering system for querying data." -#: engine/core/viewsets.py:652 +#: engine/core/viewsets.py:682 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3367,7 +3760,7 @@ msgstr "" " uses multiple serializers based on the specific action being performed and " "enforces permissions accordingly while interacting with order data." -#: engine/core/viewsets.py:914 +#: engine/core/viewsets.py:944 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3381,11 +3774,11 @@ msgstr "" " requested action. Additionally, it provides a detailed action for handling " "feedback on OrderProduct instances" -#: engine/core/viewsets.py:974 +#: engine/core/viewsets.py:1004 msgid "Manages operations related to Product images in the application. " msgstr "Manages operations related to Product images in the application." -#: engine/core/viewsets.py:988 +#: engine/core/viewsets.py:1018 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3393,15 +3786,15 @@ msgstr "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." -#: engine/core/viewsets.py:1019 +#: engine/core/viewsets.py:1049 msgid "Represents a view set for managing promotions. " msgstr "Represents a view set for managing promotions." -#: engine/core/viewsets.py:1032 +#: engine/core/viewsets.py:1062 msgid "Handles operations related to Stock data in the system." msgstr "Handles operations related to Stock data in the system." -#: engine/core/viewsets.py:1046 +#: engine/core/viewsets.py:1076 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3419,7 +3812,7 @@ msgstr "" "that users can only manage their own wishlists unless explicit permissions " "are granted." -#: engine/core/viewsets.py:1183 +#: engine/core/viewsets.py:1213 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3433,12 +3826,12 @@ msgstr "" "different HTTP methods, serializer overrides, and permission handling based " "on the request context." -#: engine/core/viewsets.py:1254 +#: engine/core/viewsets.py:1275 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Geocoding error: {e}" -#: engine/core/viewsets.py:1262 +#: engine/core/viewsets.py:1283 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/es_ES/LC_MESSAGES/django.mo b/engine/core/locale/es_ES/LC_MESSAGES/django.mo index 5706fff4..13b0baf6 100644 Binary files a/engine/core/locale/es_ES/LC_MESSAGES/django.mo and b/engine/core/locale/es_ES/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/es_ES/LC_MESSAGES/django.po b/engine/core/locale/es_ES/LC_MESSAGES/django.po index c065ef3e..cb84191b 100644 --- a/engine/core/locale/es_ES/LC_MESSAGES/django.po +++ b/engine/core/locale/es_ES/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -51,119 +51,139 @@ msgstr "Modificado" msgid "when the object was last modified" msgstr "Cuándo se editó el objeto por última vez" -#: engine/core/admin.py:94 +#: engine/core/admin.py:98 msgid "translations" msgstr "Traducciones" -#: engine/core/admin.py:102 +#: engine/core/admin.py:106 msgid "general" msgstr "General" -#: engine/core/admin.py:106 +#: engine/core/admin.py:110 msgid "relations" msgstr "Relaciones" -#: engine/core/admin.py:111 +#: engine/core/admin.py:115 msgid "additional info" msgstr "información adicional" -#: engine/core/admin.py:133 +#: engine/core/admin.py:137 msgid "metadata" msgstr "Metadatos" -#: engine/core/admin.py:141 +#: engine/core/admin.py:145 msgid "timestamps" msgstr "Marcas de tiempo" -#: engine/core/admin.py:158 +#: engine/core/admin.py:162 #, python-format msgid "Activate selected %(verbose_name_plural)s" msgstr "Activar %(verbose_name_plural)s seleccionado" -#: engine/core/admin.py:166 +#: engine/core/admin.py:170 msgid "selected items have been activated." msgstr "Los artículos seleccionados se han activado." -#: engine/core/admin.py:174 +#: engine/core/admin.py:178 #, python-format msgid "Deactivate selected %(verbose_name_plural)s" msgstr "Desactivar %(verbose_name_plural)s seleccionado" -#: engine/core/admin.py:184 +#: engine/core/admin.py:188 msgid "selected items have been deactivated." msgstr "Los artículos seleccionados se han desactivado." -#: engine/core/admin.py:196 engine/core/graphene/object_types.py:653 -#: engine/core/graphene/object_types.py:660 engine/core/models.py:832 -#: engine/core/models.py:840 +#: engine/core/admin.py:200 engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:673 engine/core/models.py:918 +#: engine/core/models.py:928 msgid "attribute value" msgstr "Atributo Valor" -#: engine/core/admin.py:197 engine/core/graphene/object_types.py:77 -#: engine/core/models.py:841 +#: engine/core/admin.py:201 engine/core/graphene/object_types.py:81 +#: engine/core/models.py:929 msgid "attribute values" msgstr "Valores de los atributos" -#: engine/core/admin.py:208 +#: engine/core/admin.py:212 engine/core/models.py:2232 msgid "image" msgstr "Imagen" -#: engine/core/admin.py:209 engine/core/graphene/object_types.py:530 +#: engine/core/admin.py:213 engine/core/graphene/object_types.py:535 msgid "images" msgstr "Imágenes" -#: engine/core/admin.py:220 engine/core/models.py:576 +#: engine/core/admin.py:224 engine/core/models.py:635 msgid "stock" msgstr "Stock" -#: engine/core/admin.py:221 engine/core/graphene/object_types.py:713 +#: engine/core/admin.py:225 engine/core/graphene/object_types.py:735 msgid "stocks" msgstr "Acciones" -#: engine/core/admin.py:232 engine/core/models.py:1938 +#: engine/core/admin.py:236 engine/core/models.py:2046 msgid "order product" msgstr "Pedir un producto" -#: engine/core/admin.py:233 engine/core/graphene/object_types.py:441 -#: engine/core/models.py:1939 +#: engine/core/admin.py:237 engine/core/graphene/object_types.py:446 +#: engine/core/models.py:2047 msgid "order products" msgstr "Pedir productos" -#: engine/core/admin.py:251 engine/core/admin.py:252 +#: engine/core/admin.py:255 engine/core/admin.py:256 msgid "children" msgstr "Niños" -#: engine/core/admin.py:528 +#: engine/core/admin.py:545 +msgid "video preview" +msgstr "Vista previa del vídeo" + +#: engine/core/admin.py:551 msgid "has images" msgstr "Tiene imágenes" -#: engine/core/admin.py:531 +#: engine/core/admin.py:554 #, python-format msgid "Export selected %(verbose_name_plural)s to marketplaces' feeds" msgstr "" "Exportar %(verbose_name_plural)s seleccionado a los feeds de los mercados" -#: engine/core/admin.py:542 +#: engine/core/admin.py:565 #, python-format msgid "selected %(verbose_name_plural)s have been marked for export." msgstr "" "Se han marcado para exportación los elementos seleccionados " "%(verbose_name_plural)s." -#: engine/core/admin.py:553 +#: engine/core/admin.py:576 #, python-format msgid "Ban selected %(verbose_name_plural)s from marketplaces' feeds" msgstr "" "Prohibir %(verbose_name_plural)s seleccionado de los feeds de los mercados" -#: engine/core/admin.py:564 +#: engine/core/admin.py:587 #, python-format msgid "selected %(verbose_name_plural)s have been banned from export." msgstr "" "Los productos seleccionados %(verbose_name_plural)s han sido prohibidos para" " la exportación." -#: engine/core/admin.py:1116 +#: engine/core/admin.py:1030 +msgid "Preview" +msgstr "Vista previa" + +#: engine/core/admin.py:1031 +msgid "Metadata" +msgstr "Metadatos" + +#: engine/core/admin.py:1034 +msgid "preview" +msgstr "Vista previa" + +#: engine/core/admin.py:1043 +msgid "image preview" +msgstr "Vista previa de la imagen" + +#: engine/core/admin.py:1166 msgid "Config" msgstr "Configurar" @@ -230,7 +250,7 @@ msgstr "" "negociación de contenido. El idioma se puede seleccionar tanto con Accept-" "Language como con el parámetro de consulta." -#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:36 +#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "E/S de caché" @@ -254,7 +274,7 @@ msgstr "Obtener los parámetros exponibles de la aplicación" msgid "send a message to the support team" msgstr "Enviar un mensaje al equipo de asistencia" -#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:59 msgid "request a CORSed URL" msgstr "Solicitar una URL CORSed. Solo se permite https." @@ -393,11 +413,11 @@ msgstr "" "Reescribir algunos campos de una categoría existente guardando los no " "editables" -#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757 -#: engine/core/docs/drf/viewsets.py:1046 -#: engine/core/graphene/object_types.py:119 -#: engine/core/graphene/object_types.py:239 -#: engine/core/graphene/object_types.py:540 +#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:781 +#: engine/core/docs/drf/viewsets.py:1070 +#: engine/core/graphene/object_types.py:123 +#: engine/core/graphene/object_types.py:247 +#: engine/core/graphene/object_types.py:546 msgid "SEO Meta snapshot" msgstr "SEO Meta snapshot" @@ -701,7 +721,7 @@ msgstr "Recuperar un solo producto (vista detallada)" #: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683 #: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725 -#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763 +#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:787 msgid "Product UUID or slug" msgstr "UUID o babosa del producto" @@ -728,286 +748,300 @@ msgstr "Eliminar un producto" msgid "lists all permitted feedbacks for a product" msgstr "enumera todas las opiniones permitidas sobre un producto" -#: engine/core/docs/drf/viewsets.py:758 +#: engine/core/docs/drf/viewsets.py:757 +msgid "retrieve exact products by identifier" +msgstr "Recuperar productos exactos por identificador" + +#: engine/core/docs/drf/viewsets.py:759 +msgid "" +"retrieve a list of products by identifier type (uuid, slug, or sku). Send a " +"POST request with `identificator_type` and `identificators` (list of " +"values)." +msgstr "" +"Recupera una lista de productos por tipo de identificador (uuid, slug o " +"sku). Envía una solicitud POST con `identificator_type` e `identificators` " +"(lista de valores)." + +#: engine/core/docs/drf/viewsets.py:782 msgid "returns a snapshot of the product's SEO meta data" msgstr "Devuelve una instantánea de los metadatos SEO del producto" -#: engine/core/docs/drf/viewsets.py:779 +#: engine/core/docs/drf/viewsets.py:803 msgid "list all addresses" msgstr "Enumerar todas las direcciones" -#: engine/core/docs/drf/viewsets.py:789 +#: engine/core/docs/drf/viewsets.py:813 msgid "retrieve a single address" msgstr "Recuperar una única dirección" -#: engine/core/docs/drf/viewsets.py:799 +#: engine/core/docs/drf/viewsets.py:823 msgid "create a new address" msgstr "Crear una nueva dirección" -#: engine/core/docs/drf/viewsets.py:810 +#: engine/core/docs/drf/viewsets.py:834 msgid "delete an address" msgstr "Borrar una dirección" -#: engine/core/docs/drf/viewsets.py:820 +#: engine/core/docs/drf/viewsets.py:844 msgid "update an entire address" msgstr "Actualizar una dirección completa" -#: engine/core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:855 msgid "partially update an address" msgstr "Actualizar parcialmente una dirección" -#: engine/core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:866 msgid "autocomplete address suggestions" msgstr "Autocompletar direcciones" -#: engine/core/docs/drf/viewsets.py:848 +#: engine/core/docs/drf/viewsets.py:872 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" "Cadena de consulta de datos sin procesar, adjunte los datos del punto final " "geo-IP" -#: engine/core/docs/drf/viewsets.py:855 +#: engine/core/docs/drf/viewsets.py:879 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "limita la cantidad de resultados, 1 < límite < 10, por defecto: 5" -#: engine/core/docs/drf/viewsets.py:871 +#: engine/core/docs/drf/viewsets.py:895 msgid "list all feedbacks (simple view)" msgstr "lista de todas las reacciones (vista simple)" -#: engine/core/docs/drf/viewsets.py:881 +#: engine/core/docs/drf/viewsets.py:905 msgid "retrieve a single feedback (detailed view)" msgstr "recuperar una sola respuesta (vista detallada)" -#: engine/core/docs/drf/viewsets.py:888 +#: engine/core/docs/drf/viewsets.py:912 msgid "create a feedback" msgstr "crear una retroalimentación" -#: engine/core/docs/drf/viewsets.py:895 +#: engine/core/docs/drf/viewsets.py:919 msgid "delete a feedback" msgstr "eliminar un comentario" -#: engine/core/docs/drf/viewsets.py:902 +#: engine/core/docs/drf/viewsets.py:926 msgid "rewrite an existing feedback saving non-editables" msgstr "reescribir una respuesta existente guardando los no editables" -#: engine/core/docs/drf/viewsets.py:909 +#: engine/core/docs/drf/viewsets.py:933 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" "Reescribir algunos campos de una categoría existente guardando los no " "editables" -#: engine/core/docs/drf/viewsets.py:919 +#: engine/core/docs/drf/viewsets.py:943 msgid "list all order–product relations (simple view)" msgstr "listar todas las relaciones pedido-producto (vista simple)" -#: engine/core/docs/drf/viewsets.py:929 +#: engine/core/docs/drf/viewsets.py:953 msgid "retrieve a single order–product relation (detailed view)" msgstr "recuperar una única relación pedido-producto (vista detallada)" -#: engine/core/docs/drf/viewsets.py:939 +#: engine/core/docs/drf/viewsets.py:963 msgid "create a new order–product relation" msgstr "crear una nueva relación pedido-producto" -#: engine/core/docs/drf/viewsets.py:949 +#: engine/core/docs/drf/viewsets.py:973 msgid "replace an existing order–product relation" msgstr "sustituir una relación pedido-producto existente" -#: engine/core/docs/drf/viewsets.py:959 +#: engine/core/docs/drf/viewsets.py:983 msgid "partially update an existing order–product relation" msgstr "actualizar parcialmente una relación pedido-producto existente" -#: engine/core/docs/drf/viewsets.py:969 +#: engine/core/docs/drf/viewsets.py:993 msgid "delete an order–product relation" msgstr "suprimir una relación pedido-producto" -#: engine/core/docs/drf/viewsets.py:979 +#: engine/core/docs/drf/viewsets.py:1003 msgid "add or remove feedback on an order–product relation" msgstr "añadir o eliminar comentarios en una relación pedido-producto" -#: engine/core/docs/drf/viewsets.py:996 +#: engine/core/docs/drf/viewsets.py:1020 msgid "list all brands (simple view)" msgstr "Lista de todas las marcas (vista simple)" -#: engine/core/docs/drf/viewsets.py:1003 +#: engine/core/docs/drf/viewsets.py:1027 msgid "retrieve a single brand (detailed view)" msgstr "Recuperar una sola marca (vista detallada)" -#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051 +#: engine/core/docs/drf/viewsets.py:1032 engine/core/docs/drf/viewsets.py:1075 msgid "Brand UUID or slug" msgstr "UUID o slug de la marca" -#: engine/core/docs/drf/viewsets.py:1018 +#: engine/core/docs/drf/viewsets.py:1042 msgid "create a brand" msgstr "Crear una marca" -#: engine/core/docs/drf/viewsets.py:1025 +#: engine/core/docs/drf/viewsets.py:1049 msgid "delete a brand" msgstr "Borrar una marca" -#: engine/core/docs/drf/viewsets.py:1032 +#: engine/core/docs/drf/viewsets.py:1056 msgid "rewrite an existing brand saving non-editables" msgstr "Reescribir una marca existente ahorrando no editables" -#: engine/core/docs/drf/viewsets.py:1039 +#: engine/core/docs/drf/viewsets.py:1063 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "" "Reescribir algunos campos de una categoría existente guardando los no " "editables" -#: engine/core/docs/drf/viewsets.py:1064 +#: engine/core/docs/drf/viewsets.py:1088 msgid "list all vendors (simple view)" msgstr "Listar todos los vendedores (vista simple)" -#: engine/core/docs/drf/viewsets.py:1074 +#: engine/core/docs/drf/viewsets.py:1098 msgid "retrieve a single vendor (detailed view)" msgstr "Recuperar un único proveedor (vista detallada)" -#: engine/core/docs/drf/viewsets.py:1081 +#: engine/core/docs/drf/viewsets.py:1105 msgid "create a vendor" msgstr "Crear un proveedor" -#: engine/core/docs/drf/viewsets.py:1088 +#: engine/core/docs/drf/viewsets.py:1112 msgid "delete a vendor" msgstr "Eliminar un proveedor" -#: engine/core/docs/drf/viewsets.py:1095 +#: engine/core/docs/drf/viewsets.py:1119 msgid "rewrite an existing vendor saving non-editables" msgstr "Reescribir un proveedor existente guardando los no editables" -#: engine/core/docs/drf/viewsets.py:1102 +#: engine/core/docs/drf/viewsets.py:1126 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "" "Reescribir algunos campos de una categoría existente guardando los no " "editables" -#: engine/core/docs/drf/viewsets.py:1112 +#: engine/core/docs/drf/viewsets.py:1136 msgid "list all product images (simple view)" msgstr "Listar todas las imágenes de los productos (vista simple)" -#: engine/core/docs/drf/viewsets.py:1122 +#: engine/core/docs/drf/viewsets.py:1146 msgid "retrieve a single product image (detailed view)" msgstr "Recuperar una sola imagen del producto (vista detallada)" -#: engine/core/docs/drf/viewsets.py:1129 +#: engine/core/docs/drf/viewsets.py:1153 msgid "create a product image" msgstr "Crear una imagen del producto" -#: engine/core/docs/drf/viewsets.py:1139 +#: engine/core/docs/drf/viewsets.py:1163 msgid "delete a product image" msgstr "Eliminar la imagen de un producto" -#: engine/core/docs/drf/viewsets.py:1146 +#: engine/core/docs/drf/viewsets.py:1170 msgid "rewrite an existing product image saving non-editables" msgstr "" "Reescribir una imagen de producto existente guardando los no editables" -#: engine/core/docs/drf/viewsets.py:1154 +#: engine/core/docs/drf/viewsets.py:1178 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "" "Reescribir algunos campos de una categoría existente guardando los no " "editables" -#: engine/core/docs/drf/viewsets.py:1165 +#: engine/core/docs/drf/viewsets.py:1189 msgid "list all promo codes (simple view)" msgstr "Listar todos los códigos promocionales (vista simple)" -#: engine/core/docs/drf/viewsets.py:1175 +#: engine/core/docs/drf/viewsets.py:1199 msgid "retrieve a single promo code (detailed view)" msgstr "Recuperar un único código promocional (vista detallada)" -#: engine/core/docs/drf/viewsets.py:1182 +#: engine/core/docs/drf/viewsets.py:1206 msgid "create a promo code" msgstr "Crear un código promocional" -#: engine/core/docs/drf/viewsets.py:1189 +#: engine/core/docs/drf/viewsets.py:1213 msgid "delete a promo code" msgstr "Eliminar un código promocional" -#: engine/core/docs/drf/viewsets.py:1196 +#: engine/core/docs/drf/viewsets.py:1220 msgid "rewrite an existing promo code saving non-editables" msgstr "Reescribir un código promocional existente guardando los no editables" -#: engine/core/docs/drf/viewsets.py:1203 +#: engine/core/docs/drf/viewsets.py:1227 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "" "Reescribir algunos campos de una categoría existente guardando los no " "editables" -#: engine/core/docs/drf/viewsets.py:1213 +#: engine/core/docs/drf/viewsets.py:1237 msgid "list all promotions (simple view)" msgstr "Lista de todas las promociones (vista simple)" -#: engine/core/docs/drf/viewsets.py:1223 +#: engine/core/docs/drf/viewsets.py:1247 msgid "retrieve a single promotion (detailed view)" msgstr "Recuperar una sola promoción (vista detallada)" -#: engine/core/docs/drf/viewsets.py:1230 +#: engine/core/docs/drf/viewsets.py:1254 msgid "create a promotion" msgstr "Crear una promoción" -#: engine/core/docs/drf/viewsets.py:1237 +#: engine/core/docs/drf/viewsets.py:1261 msgid "delete a promotion" msgstr "Eliminar una promoción" -#: engine/core/docs/drf/viewsets.py:1244 +#: engine/core/docs/drf/viewsets.py:1268 msgid "rewrite an existing promotion saving non-editables" msgstr "Reescribir una promoción existente guardando los no editables" -#: engine/core/docs/drf/viewsets.py:1251 +#: engine/core/docs/drf/viewsets.py:1275 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "" "Reescribir algunos campos de una categoría existente guardando los no " "editables" -#: engine/core/docs/drf/viewsets.py:1261 +#: engine/core/docs/drf/viewsets.py:1285 msgid "list all stocks (simple view)" msgstr "Listar todas las acciones (vista simple)" -#: engine/core/docs/drf/viewsets.py:1268 +#: engine/core/docs/drf/viewsets.py:1292 msgid "retrieve a single stock (detailed view)" msgstr "Recuperar una sola acción (vista detallada)" -#: engine/core/docs/drf/viewsets.py:1275 +#: engine/core/docs/drf/viewsets.py:1299 msgid "create a stock record" msgstr "Crear una ficha de existencias" -#: engine/core/docs/drf/viewsets.py:1282 +#: engine/core/docs/drf/viewsets.py:1306 msgid "delete a stock record" msgstr "Borrar una ficha de existencias" -#: engine/core/docs/drf/viewsets.py:1289 +#: engine/core/docs/drf/viewsets.py:1313 msgid "rewrite an existing stock record saving non-editables" msgstr "" "Reescribir un registro de existencias existente guardando los no editables" -#: engine/core/docs/drf/viewsets.py:1297 +#: engine/core/docs/drf/viewsets.py:1321 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "" "Reescribir algunos campos de una categoría existente guardando los no " "editables" -#: engine/core/docs/drf/viewsets.py:1308 +#: engine/core/docs/drf/viewsets.py:1332 msgid "list all product tags (simple view)" msgstr "Listar todas las etiquetas de productos (vista simple)" -#: engine/core/docs/drf/viewsets.py:1318 +#: engine/core/docs/drf/viewsets.py:1342 msgid "retrieve a single product tag (detailed view)" msgstr "Recuperar una sola etiqueta de producto (vista detallada)" -#: engine/core/docs/drf/viewsets.py:1325 +#: engine/core/docs/drf/viewsets.py:1349 msgid "create a product tag" msgstr "Crear una etiqueta de producto" -#: engine/core/docs/drf/viewsets.py:1335 +#: engine/core/docs/drf/viewsets.py:1359 msgid "delete a product tag" msgstr "Eliminar una etiqueta de producto" -#: engine/core/docs/drf/viewsets.py:1342 +#: engine/core/docs/drf/viewsets.py:1366 msgid "rewrite an existing product tag saving non-editables" msgstr "" "Reescribir una etiqueta de producto existente guardando los no editables" -#: engine/core/docs/drf/viewsets.py:1350 +#: engine/core/docs/drf/viewsets.py:1374 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "" "Reescribir algunos campos de una categoría existente guardando los no " @@ -1018,234 +1052,232 @@ msgstr "" msgid "no search term provided." msgstr "No se proporciona ningún término de búsqueda." -#: engine/core/filters.py:78 engine/core/filters.py:484 -#: engine/core/filters.py:625 +#: engine/core/filters.py:79 engine/core/filters.py:485 +#: engine/core/filters.py:626 msgid "Search" msgstr "Buscar en" -#: engine/core/filters.py:79 engine/core/filters.py:663 -#: engine/core/filters.py:692 +#: engine/core/filters.py:80 engine/core/filters.py:664 +#: engine/core/filters.py:693 msgid "UUID" msgstr "UUID" -#: engine/core/filters.py:80 engine/core/filters.py:487 -#: engine/core/filters.py:627 +#: engine/core/filters.py:81 engine/core/filters.py:488 +#: engine/core/filters.py:628 msgid "Name" msgstr "Nombre" -#: engine/core/filters.py:82 engine/core/filters.py:630 +#: engine/core/filters.py:83 engine/core/filters.py:631 msgid "Categories" msgstr "Categorías" -#: engine/core/filters.py:86 +#: engine/core/filters.py:87 msgid "Categories Slugs" msgstr "Categorías Babosas" -#: engine/core/filters.py:88 engine/core/filters.py:495 +#: engine/core/filters.py:89 engine/core/filters.py:496 +#: engine/core/templates/admin_doc/index.html:37 +#: engine/core/templates/admin_doc/template_tag_index.html:12 msgid "Tags" msgstr "Etiquetas" -#: engine/core/filters.py:90 +#: engine/core/filters.py:91 msgid "Min Price" msgstr "Precio mínimo" -#: engine/core/filters.py:93 +#: engine/core/filters.py:94 msgid "Max Price" msgstr "Precio máximo" -#: engine/core/filters.py:95 +#: engine/core/filters.py:96 msgid "Is Active" msgstr "Está activo" -#: engine/core/filters.py:96 +#: engine/core/filters.py:97 msgid "Brand" msgstr "Marca" -#: engine/core/filters.py:97 +#: engine/core/filters.py:98 msgid "Attributes" msgstr "Atributos" -#: engine/core/filters.py:99 +#: engine/core/filters.py:100 msgid "Quantity" msgstr "Cantidad" -#: engine/core/filters.py:101 engine/core/filters.py:489 -#: engine/core/filters.py:628 engine/core/models.py:316 -#: engine/core/models.py:497 engine/core/models.py:663 +#: engine/core/filters.py:102 engine/core/filters.py:490 +#: engine/core/filters.py:629 engine/core/models.py:339 +#: engine/core/models.py:546 engine/core/models.py:736 msgid "Slug" msgstr "Babosa" -#: engine/core/filters.py:102 +#: engine/core/filters.py:103 msgid "Is Digital" msgstr "Es Digital" -#: engine/core/filters.py:104 +#: engine/core/filters.py:105 msgid "Include sub-categories" msgstr "Incluir subcategorías" -#: engine/core/filters.py:108 +#: engine/core/filters.py:109 msgid "Include personal ordered" msgstr "Incluir productos personales solicitados" -#: engine/core/filters.py:110 engine/core/models.py:667 +#: engine/core/filters.py:111 engine/core/models.py:740 msgid "SKU" msgstr "SKU" -#: engine/core/filters.py:212 +#: engine/core/filters.py:213 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" "Debe haber un category_uuid para usar la bandera include_subcategories" -#: engine/core/filters.py:398 +#: engine/core/filters.py:399 msgid "Search (ID, product name or part number)" msgstr "Búsqueda (ID, nombre del producto o número de pieza)" -#: engine/core/filters.py:402 +#: engine/core/filters.py:403 msgid "Bought after (inclusive)" msgstr "Comprado después (inclusive)" -#: engine/core/filters.py:405 +#: engine/core/filters.py:406 msgid "Bought before (inclusive)" msgstr "Comprado antes (inclusive)" -#: engine/core/filters.py:410 engine/core/filters.py:461 -#: engine/core/filters.py:697 +#: engine/core/filters.py:411 engine/core/filters.py:462 +#: engine/core/filters.py:698 msgid "User email" msgstr "Correo electrónico del usuario" -#: engine/core/filters.py:413 engine/core/filters.py:464 -#: engine/core/filters.py:672 engine/core/filters.py:694 +#: engine/core/filters.py:414 engine/core/filters.py:465 +#: engine/core/filters.py:673 engine/core/filters.py:695 msgid "User UUID" msgstr "UUID de usuario" -#: engine/core/filters.py:415 +#: engine/core/filters.py:416 msgid "Status" msgstr "Estado" -#: engine/core/filters.py:419 +#: engine/core/filters.py:420 msgid "Human Readable ID" msgstr "Identificación legible" -#: engine/core/filters.py:488 +#: engine/core/filters.py:489 msgid "Parent" msgstr "Padres" -#: engine/core/filters.py:492 +#: engine/core/filters.py:493 msgid "Whole category(has at least 1 product or not)" msgstr "Toda la categoría (tenga o no al menos 1 producto)" -#: engine/core/filters.py:496 +#: engine/core/filters.py:497 msgid "Level" msgstr "Nivel" -#: engine/core/filters.py:667 +#: engine/core/filters.py:668 msgid "Product UUID" msgstr "UUID del producto" -#: engine/core/graphene/mutations.py:40 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Clave que hay que buscar o introducir en la caché" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:43 msgid "data to store in cache" msgstr "Datos a almacenar en caché" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:46 msgid "timeout in seconds to set the data for into the cache" msgstr "Tiempo de espera en segundos para poner los datos en la caché" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:49 msgid "cached data" msgstr "Datos en caché" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:64 msgid "camelized JSON data from the requested URL" msgstr "Datos JSON camelizados de la URL solicitada" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:248 +#: engine/core/graphene/mutations.py:69 engine/core/views.py:267 msgid "only URLs starting with http(s):// are allowed" msgstr "Sólo se permiten URL que empiecen por http(s)://." -#: engine/core/graphene/mutations.py:86 +#: engine/core/graphene/mutations.py:87 msgid "add a product to the order" msgstr "Añadir un producto al pedido" -#: engine/core/graphene/mutations.py:109 engine/core/graphene/mutations.py:138 -#: engine/core/graphene/mutations.py:254 engine/core/graphene/mutations.py:306 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139 +#: engine/core/graphene/mutations.py:256 engine/core/graphene/mutations.py:308 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Pedido {order_uuid} ¡no encontrado!" -#: engine/core/graphene/mutations.py:115 engine/core/graphene/mutations.py:166 +#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167 msgid "remove a product from the order" msgstr "Eliminar un producto del pedido" -#: engine/core/graphene/mutations.py:144 +#: engine/core/graphene/mutations.py:145 msgid "remove all products from the order" msgstr "Eliminar todos los productos del pedido" -#: engine/core/graphene/mutations.py:189 +#: engine/core/graphene/mutations.py:190 msgid "buy an order" msgstr "Comprar un pedido" -#: engine/core/graphene/mutations.py:220 engine/core/graphene/mutations.py:282 +#: engine/core/graphene/mutations.py:222 engine/core/graphene/mutations.py:284 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "Indique order_uuid o order_hr_id, ¡se excluyen mutuamente!" -#: engine/core/graphene/mutations.py:249 engine/core/graphene/mutations.py:524 -#: engine/core/graphene/mutations.py:573 engine/core/viewsets.py:753 +#: engine/core/graphene/mutations.py:251 engine/core/graphene/mutations.py:526 +#: engine/core/graphene/mutations.py:576 engine/core/viewsets.py:783 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" "Tipo incorrecto proveniente del método order.buy(): {type(instance)!s}" -#: engine/core/graphene/mutations.py:260 +#: engine/core/graphene/mutations.py:262 msgid "perform an action on a list of products in the order" msgstr "Realizar una acción en una lista de productos del pedido" -#: engine/core/graphene/mutations.py:265 +#: engine/core/graphene/mutations.py:267 msgid "remove/add" msgstr "Quitar/Agregar" -#: engine/core/graphene/mutations.py:301 engine/core/graphene/mutations.py:342 +#: engine/core/graphene/mutations.py:303 engine/core/graphene/mutations.py:342 msgid "action must be either add or remove" msgstr "La acción debe ser \"añadir\" o \"eliminar\"." -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:314 msgid "perform an action on a list of products in the wishlist" msgstr "Realizar una acción en una lista de productos de la lista de deseos" -#: engine/core/graphene/mutations.py:330 -msgid "please provide wishlist_uuid value" -msgstr "Por favor, proporcione el valor `wishlist_uuid`." - -#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:423 -#: engine/core/graphene/mutations.py:451 engine/core/graphene/mutations.py:479 -#: engine/core/graphene/mutations.py:529 +#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:424 +#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480 +#: engine/core/graphene/mutations.py:531 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Lista de deseos {wishlist_uuid} ¡no encontrada!" -#: engine/core/graphene/mutations.py:401 +#: engine/core/graphene/mutations.py:402 msgid "add a product to the wishlist" msgstr "Añadir un producto al pedido" -#: engine/core/graphene/mutations.py:429 +#: engine/core/graphene/mutations.py:430 msgid "remove a product from the wishlist" msgstr "Eliminar un producto del pedido" -#: engine/core/graphene/mutations.py:457 +#: engine/core/graphene/mutations.py:458 msgid "remove all products from the wishlist" msgstr "Eliminar un producto del pedido" -#: engine/core/graphene/mutations.py:485 +#: engine/core/graphene/mutations.py:486 msgid "buy all products from the wishlist" msgstr "Eliminar un producto del pedido" -#: engine/core/graphene/mutations.py:535 +#: engine/core/graphene/mutations.py:537 msgid "buy a product" msgstr "Comprar un pedido" -#: engine/core/graphene/mutations.py:542 +#: engine/core/graphene/mutations.py:544 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" @@ -1253,142 +1285,146 @@ msgstr "" "Por favor, envíe los atributos como una cadena formateada como " "attr1=valor1,attr2=valor2" -#: engine/core/graphene/mutations.py:580 +#: engine/core/graphene/mutations.py:583 msgid "add or delete a feedback for orderproduct" msgstr "Añadir o eliminar un comentario para el pedido-producto" -#: engine/core/graphene/mutations.py:606 +#: engine/core/graphene/mutations.py:610 msgid "action must be either `add` or `remove`" msgstr "La acción debe ser \"añadir\" o \"eliminar\"." -#: engine/core/graphene/mutations.py:609 +#: engine/core/graphene/mutations.py:613 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "No se ha encontrado el producto {order_product_uuid}." -#: engine/core/graphene/mutations.py:616 +#: engine/core/graphene/mutations.py:620 msgid "original address string provided by the user" msgstr "Cadena de dirección original proporcionada por el usuario" -#: engine/core/graphene/mutations.py:653 engine/core/models.py:986 -#: engine/core/models.py:999 engine/core/models.py:1443 -#: engine/core/models.py:1474 engine/core/models.py:1505 -#: engine/core/viewsets.py:760 +#: engine/core/graphene/mutations.py:662 engine/core/models.py:1079 +#: engine/core/models.py:1092 engine/core/models.py:1544 +#: engine/core/models.py:1575 engine/core/models.py:1606 +#: engine/core/viewsets.py:790 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} no existe: ¡{uuid}!" -#: engine/core/graphene/mutations.py:667 +#: engine/core/graphene/mutations.py:676 msgid "limit must be between 1 and 10" msgstr "El límite debe estar entre 1 y 10" -#: engine/core/graphene/mutations.py:716 +#: engine/core/graphene/mutations.py:726 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - funciona a las mil maravillas" -#: engine/core/graphene/object_types.py:84 -#: engine/core/graphene/object_types.py:420 -#: engine/core/graphene/object_types.py:471 engine/core/models.py:803 -#: engine/core/models.py:1297 engine/core/models.py:2033 +#: engine/core/graphene/object_types.py:88 +#: engine/core/graphene/object_types.py:425 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:889 +#: engine/core/models.py:1394 engine/core/models.py:2139 msgid "attributes" msgstr "Atributos" -#: engine/core/graphene/object_types.py:97 +#: engine/core/graphene/object_types.py:101 msgid "grouped attributes" msgstr "Atributos agrupados" -#: engine/core/graphene/object_types.py:104 +#: engine/core/graphene/object_types.py:108 msgid "groups of attributes" msgstr "Grupos de atributos" -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:217 -#: engine/core/graphene/object_types.py:255 engine/core/models.py:440 +#: engine/core/graphene/object_types.py:122 +#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:264 engine/core/models.py:489 msgid "categories" msgstr "Categorías" -#: engine/core/graphene/object_types.py:134 engine/core/models.py:511 +#: engine/core/graphene/object_types.py:138 engine/core/models.py:564 msgid "brands" msgstr "Marcas" -#: engine/core/graphene/object_types.py:219 +#: engine/core/graphene/object_types.py:226 msgid "category image url" msgstr "Categorías" -#: engine/core/graphene/object_types.py:220 -#: engine/core/graphene/object_types.py:365 engine/core/models.py:278 +#: engine/core/graphene/object_types.py:227 +#: engine/core/graphene/object_types.py:369 engine/core/models.py:301 msgid "markup percentage" msgstr "Porcentaje de recargo" -#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:231 msgid "which attributes and values can be used for filtering this category." msgstr "" "Qué atributos y valores se pueden utilizar para filtrar esta categoría." -#: engine/core/graphene/object_types.py:230 +#: engine/core/graphene/object_types.py:237 msgid "" "minimum and maximum prices for products in this category, if available." msgstr "" "Precios mínimo y máximo de los productos de esta categoría, si están " "disponibles." -#: engine/core/graphene/object_types.py:234 +#: engine/core/graphene/object_types.py:240 +msgid "brands in this category" +msgstr "Marcas en esta categoría" + +#: engine/core/graphene/object_types.py:242 msgid "tags for this category" msgstr "Etiquetas para esta categoría" -#: engine/core/graphene/object_types.py:237 +#: engine/core/graphene/object_types.py:245 msgid "products in this category" msgstr "Productos de esta categoría" -#: engine/core/graphene/object_types.py:372 engine/core/models.py:183 +#: engine/core/graphene/object_types.py:376 engine/core/models.py:202 msgid "vendors" msgstr "Vendedores" -#: engine/core/graphene/object_types.py:376 +#: engine/core/graphene/object_types.py:380 msgid "Latitude (Y coordinate)" msgstr "Latitud (coordenada Y)" -#: engine/core/graphene/object_types.py:377 +#: engine/core/graphene/object_types.py:381 msgid "Longitude (X coordinate)" msgstr "Longitud (coordenada X)" -#: engine/core/graphene/object_types.py:406 +#: engine/core/graphene/object_types.py:411 msgid "comment" msgstr "Cómo" -#: engine/core/graphene/object_types.py:408 -#: engine/core/graphene/object_types.py:542 +#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:548 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "" "Valor de calificación de 1 a 10, ambos inclusive, o 0 si no está " "configurado." -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:421 msgid "represents feedback from a user." msgstr "Representa la opinión de un usuario." -#: engine/core/graphene/object_types.py:421 -#: engine/core/graphene/object_types.py:472 engine/core/models.py:1291 +#: engine/core/graphene/object_types.py:426 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:1388 msgid "notifications" msgstr "Notificaciones" -#: engine/core/graphene/object_types.py:423 +#: engine/core/graphene/object_types.py:428 msgid "download url for this order product if applicable" msgstr "Descargar url para este producto de pedido si procede" -#: engine/core/graphene/object_types.py:425 engine/core/models.py:1856 +#: engine/core/graphene/object_types.py:430 engine/core/models.py:1959 msgid "feedback" msgstr "Comentarios" -#: engine/core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:464 msgid "a list of order products in this order" msgstr "Una lista de los productos del pedido" -#: engine/core/graphene/object_types.py:461 engine/core/models.py:1261 +#: engine/core/graphene/object_types.py:466 engine/core/models.py:1358 msgid "billing address" msgstr "Dirección de facturación" -#: engine/core/graphene/object_types.py:465 +#: engine/core/graphene/object_types.py:470 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1396,53 +1432,57 @@ msgstr "" "Dirección de envío para este pedido, dejar en blanco si es la misma que la " "de facturación o si no procede" -#: engine/core/graphene/object_types.py:468 +#: engine/core/graphene/object_types.py:473 msgid "total price of this order" msgstr "Precio total de este pedido" -#: engine/core/graphene/object_types.py:469 +#: engine/core/graphene/object_types.py:474 msgid "total quantity of products in order" msgstr "Cantidad total de productos del pedido" -#: engine/core/graphene/object_types.py:470 +#: engine/core/graphene/object_types.py:475 msgid "are all products in the order digital" msgstr "¿Están todos los productos en el pedido digital" -#: engine/core/graphene/object_types.py:474 +#: engine/core/graphene/object_types.py:479 msgid "transactions for this order" msgstr "Transacciones para este pedido" -#: engine/core/graphene/object_types.py:494 engine/core/models.py:1325 +#: engine/core/graphene/object_types.py:499 engine/core/models.py:1422 msgid "orders" msgstr "Pedidos" -#: engine/core/graphene/object_types.py:515 +#: engine/core/graphene/object_types.py:520 msgid "image url" msgstr "URL de la imagen" -#: engine/core/graphene/object_types.py:522 +#: engine/core/graphene/object_types.py:527 msgid "product's images" msgstr "Imágenes del producto" -#: engine/core/graphene/object_types.py:529 engine/core/models.py:439 -#: engine/core/models.py:596 +#: engine/core/graphene/object_types.py:534 engine/core/models.py:488 +#: engine/core/models.py:661 msgid "category" msgstr "Categoría" -#: engine/core/graphene/object_types.py:531 engine/core/models.py:1857 +#: engine/core/graphene/object_types.py:536 engine/core/models.py:1960 msgid "feedbacks" msgstr "Comentarios" -#: engine/core/graphene/object_types.py:532 engine/core/models.py:510 -#: engine/core/models.py:605 +#: engine/core/graphene/object_types.py:537 engine/core/models.py:563 +#: engine/core/models.py:670 msgid "brand" msgstr "Marca" -#: engine/core/graphene/object_types.py:534 engine/core/models.py:103 +#: engine/core/graphene/object_types.py:538 +msgid "video url" +msgstr "URL del vídeo" + +#: engine/core/graphene/object_types.py:540 engine/core/models.py:122 msgid "attribute groups" msgstr "Grupos de atributos" -#: engine/core/graphene/object_types.py:536 +#: engine/core/graphene/object_types.py:542 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1450,7 +1490,7 @@ msgstr "Grupos de atributos" msgid "price" msgstr "Precio" -#: engine/core/graphene/object_types.py:537 +#: engine/core/graphene/object_types.py:543 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1458,39 +1498,39 @@ msgstr "Precio" msgid "quantity" msgstr "Cantidad" -#: engine/core/graphene/object_types.py:538 +#: engine/core/graphene/object_types.py:544 msgid "number of feedbacks" msgstr "Número de reacciones" -#: engine/core/graphene/object_types.py:539 +#: engine/core/graphene/object_types.py:545 msgid "only available for personal orders" msgstr "Productos sólo disponibles para pedidos personales" -#: engine/core/graphene/object_types.py:544 +#: engine/core/graphene/object_types.py:550 msgid "discount price" msgstr "Precio reducido" -#: engine/core/graphene/object_types.py:568 engine/core/models.py:682 +#: engine/core/graphene/object_types.py:575 engine/core/models.py:755 msgid "products" msgstr "Productos" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:691 msgid "promocodes" msgstr "Códigos promocionales" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:706 msgid "products on sale" msgstr "Productos a la venta" -#: engine/core/graphene/object_types.py:701 engine/core/models.py:935 +#: engine/core/graphene/object_types.py:720 engine/core/models.py:1028 msgid "promotions" msgstr "Promociones" -#: engine/core/graphene/object_types.py:705 engine/core/models.py:182 +#: engine/core/graphene/object_types.py:727 engine/core/models.py:201 msgid "vendor" msgstr "Vendedor" -#: engine/core/graphene/object_types.py:706 engine/core/models.py:681 +#: engine/core/graphene/object_types.py:728 engine/core/models.py:754 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1498,103 +1538,103 @@ msgstr "Vendedor" msgid "product" msgstr "Producto" -#: engine/core/graphene/object_types.py:718 engine/core/models.py:958 +#: engine/core/graphene/object_types.py:740 engine/core/models.py:1051 msgid "wishlisted products" msgstr "Productos deseados" -#: engine/core/graphene/object_types.py:725 engine/core/models.py:975 +#: engine/core/graphene/object_types.py:747 engine/core/models.py:1068 msgid "wishlists" msgstr "Listas de deseos" -#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:752 msgid "tagged products" msgstr "Productos con etiqueta" -#: engine/core/graphene/object_types.py:738 engine/core/models.py:219 -#: engine/core/models.py:611 +#: engine/core/graphene/object_types.py:760 engine/core/models.py:238 +#: engine/core/models.py:676 msgid "product tags" msgstr "Etiquetas del producto" -#: engine/core/graphene/object_types.py:743 +#: engine/core/graphene/object_types.py:765 msgid "tagged categories" msgstr "Categorías" -#: engine/core/graphene/object_types.py:751 +#: engine/core/graphene/object_types.py:773 msgid "categories tags" msgstr "Etiquetas de las categorías" -#: engine/core/graphene/object_types.py:755 +#: engine/core/graphene/object_types.py:777 msgid "project name" msgstr "Nombre del proyecto" -#: engine/core/graphene/object_types.py:756 +#: engine/core/graphene/object_types.py:778 msgid "company name" msgstr "Nombre de la empresa" -#: engine/core/graphene/object_types.py:757 +#: engine/core/graphene/object_types.py:779 msgid "company address" msgstr "Dirección de la empresa" -#: engine/core/graphene/object_types.py:758 +#: engine/core/graphene/object_types.py:780 msgid "company phone number" msgstr "Teléfono de la empresa" -#: engine/core/graphene/object_types.py:761 +#: engine/core/graphene/object_types.py:783 msgid "email from, sometimes it must be used instead of host user value" msgstr "" "'email from', a veces debe utilizarse en lugar del valor del usuario host" -#: engine/core/graphene/object_types.py:764 +#: engine/core/graphene/object_types.py:786 msgid "email host user" msgstr "Correo electrónico del usuario anfitrión" -#: engine/core/graphene/object_types.py:765 +#: engine/core/graphene/object_types.py:787 msgid "maximum amount for payment" msgstr "Importe máximo de pago" -#: engine/core/graphene/object_types.py:766 +#: engine/core/graphene/object_types.py:788 msgid "minimum amount for payment" msgstr "Importe mínimo de pago" -#: engine/core/graphene/object_types.py:767 +#: engine/core/graphene/object_types.py:789 msgid "analytics data" msgstr "Datos analíticos" -#: engine/core/graphene/object_types.py:768 +#: engine/core/graphene/object_types.py:790 msgid "advertisement data" msgstr "Datos publicitarios" -#: engine/core/graphene/object_types.py:771 +#: engine/core/graphene/object_types.py:793 msgid "company configuration" msgstr "Configuración" -#: engine/core/graphene/object_types.py:775 +#: engine/core/graphene/object_types.py:797 msgid "language code" msgstr "Código de idioma" -#: engine/core/graphene/object_types.py:776 +#: engine/core/graphene/object_types.py:798 msgid "language name" msgstr "Nombre de la lengua" -#: engine/core/graphene/object_types.py:777 +#: engine/core/graphene/object_types.py:799 msgid "language flag, if exists :)" msgstr "Bandera de idioma, si existe :)" -#: engine/core/graphene/object_types.py:780 +#: engine/core/graphene/object_types.py:802 msgid "supported languages" msgstr "Obtener una lista de los idiomas admitidos" -#: engine/core/graphene/object_types.py:812 -#: engine/core/graphene/object_types.py:815 -#: engine/core/graphene/object_types.py:818 +#: engine/core/graphene/object_types.py:834 +#: engine/core/graphene/object_types.py:837 +#: engine/core/graphene/object_types.py:840 msgid "products search results" msgstr "Resultados de la búsqueda de productos" -#: engine/core/graphene/object_types.py:820 +#: engine/core/graphene/object_types.py:842 msgid "posts search results" msgstr "Resultados de la búsqueda de productos" -#: engine/core/models.py:75 +#: engine/core/models.py:91 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 " @@ -1607,23 +1647,23 @@ msgstr "" "Esto puede ser útil para categorizar y gestionar los atributos de manera más" " eficaz en un sistema complejo." -#: engine/core/models.py:88 +#: engine/core/models.py:107 msgid "parent of this group" msgstr "Padre de este grupo" -#: engine/core/models.py:89 +#: engine/core/models.py:108 msgid "parent attribute group" msgstr "Grupo de atributos padre" -#: engine/core/models.py:93 engine/core/models.py:94 +#: engine/core/models.py:112 engine/core/models.py:113 msgid "attribute group's name" msgstr "Nombre del grupo de atributos" -#: engine/core/models.py:102 engine/core/models.py:763 +#: engine/core/models.py:121 engine/core/models.py:849 msgid "attribute group" msgstr "Grupo de atributos" -#: engine/core/models.py:108 +#: engine/core/models.py:127 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1642,51 +1682,51 @@ msgstr "" " restricciones adicionales, lo que lo hace adecuado para su uso en sistemas " "que interactúan con proveedores externos." -#: engine/core/models.py:122 +#: engine/core/models.py:141 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" -#: engine/core/models.py:124 +#: engine/core/models.py:143 msgid "authentication info" msgstr "Información de autenticación" -#: engine/core/models.py:129 +#: engine/core/models.py:148 msgid "define the markup for products retrieved from this vendor" msgstr "" "Definir el margen de beneficio para los productos recuperados de este " "proveedor" -#: engine/core/models.py:130 +#: engine/core/models.py:149 msgid "vendor markup percentage" msgstr "Porcentaje de margen del vendedor" -#: engine/core/models.py:134 +#: engine/core/models.py:153 msgid "name of this vendor" msgstr "Nombre de este vendedor" -#: engine/core/models.py:135 +#: engine/core/models.py:154 msgid "vendor name" msgstr "Nombre del vendedor" -#: engine/core/models.py:150 +#: engine/core/models.py:169 msgid "response file" msgstr "archivo de respuesta" -#: engine/core/models.py:151 +#: engine/core/models.py:170 msgid "vendor's last processing response" msgstr "última respuesta de procesamiento del proveedor" -#: engine/core/models.py:157 +#: engine/core/models.py:176 msgid "vendor's integration file path" msgstr "Ruta del archivo de integración del proveedor" -#: engine/core/models.py:158 +#: engine/core/models.py:177 msgid "integration path" msgstr "Vía de integración" -#: engine/core/models.py:192 +#: engine/core/models.py:211 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1701,27 +1741,27 @@ msgstr "" "operaciones exportadas a través de mixins y proporciona personalización de " "metadatos con fines administrativos." -#: engine/core/models.py:204 engine/core/models.py:235 +#: engine/core/models.py:223 engine/core/models.py:254 msgid "internal tag identifier for the product tag" msgstr "Identificador interno de la etiqueta del producto" -#: engine/core/models.py:205 engine/core/models.py:236 +#: engine/core/models.py:224 engine/core/models.py:255 msgid "tag name" msgstr "Nombre de la etiqueta" -#: engine/core/models.py:209 engine/core/models.py:240 +#: engine/core/models.py:228 engine/core/models.py:259 msgid "user-friendly name for the product tag" msgstr "Nombre fácil de usar para la etiqueta del producto" -#: engine/core/models.py:210 engine/core/models.py:241 +#: engine/core/models.py:229 engine/core/models.py:260 msgid "tag display name" msgstr "Nombre de la etiqueta" -#: engine/core/models.py:218 +#: engine/core/models.py:237 msgid "product tag" msgstr "Etiqueta del producto" -#: engine/core/models.py:224 +#: engine/core/models.py:243 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 " @@ -1732,15 +1772,15 @@ msgstr "" "clasificar productos. Incluye atributos para un identificador de etiqueta " "interno y un nombre de visualización fácil de usar." -#: engine/core/models.py:249 +#: engine/core/models.py:268 msgid "category tag" msgstr "etiqueta de categoría" -#: engine/core/models.py:250 engine/core/models.py:322 +#: engine/core/models.py:269 engine/core/models.py:345 msgid "category tags" msgstr "etiquetas de categoría" -#: engine/core/models.py:255 +#: engine/core/models.py:274 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1763,51 +1803,51 @@ msgstr "" "descripción y la jerarquía de las categorías, así como asignar atributos " "como imágenes, etiquetas o prioridad." -#: engine/core/models.py:269 +#: engine/core/models.py:292 msgid "upload an image representing this category" msgstr "Cargar una imagen que represente esta categoría" -#: engine/core/models.py:272 +#: engine/core/models.py:295 msgid "category image" msgstr "Categoría imagen" -#: engine/core/models.py:277 +#: engine/core/models.py:300 msgid "define a markup percentage for products in this category" msgstr "Definir un porcentaje de recargo para los productos de esta categoría" -#: engine/core/models.py:286 +#: engine/core/models.py:309 msgid "parent of this category to form a hierarchical structure" msgstr "Padre de esta categoría para formar una estructura jerárquica" -#: engine/core/models.py:287 +#: engine/core/models.py:310 msgid "parent category" msgstr "Categoría de padres" -#: engine/core/models.py:292 +#: engine/core/models.py:315 msgid "category name" msgstr "Nombre de la categoría" -#: engine/core/models.py:293 +#: engine/core/models.py:316 msgid "provide a name for this category" msgstr "Indique un nombre para esta categoría" -#: engine/core/models.py:300 +#: engine/core/models.py:323 msgid "add a detailed description for this category" msgstr "Añadir una descripción detallada para esta categoría" -#: engine/core/models.py:301 +#: engine/core/models.py:324 msgid "category description" msgstr "Descripción de la categoría" -#: engine/core/models.py:321 +#: engine/core/models.py:344 msgid "tags that help describe or group this category" msgstr "etiquetas que ayudan a describir o agrupar esta categoría" -#: engine/core/models.py:328 engine/core/models.py:503 +#: engine/core/models.py:351 engine/core/models.py:552 msgid "priority" msgstr "Prioridad" -#: engine/core/models.py:446 +#: engine/core/models.py:495 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1821,47 +1861,43 @@ msgstr "" "Permite organizar y representar los datos relacionados con la marca dentro " "de la aplicación." -#: engine/core/models.py:456 +#: engine/core/models.py:505 msgid "name of this brand" msgstr "Nombre de esta marca" -#: engine/core/models.py:457 +#: engine/core/models.py:506 msgid "brand name" msgstr "Marca" -#: engine/core/models.py:464 +#: engine/core/models.py:513 msgid "upload a logo representing this brand" msgstr "Cargar un logotipo que represente a esta marca" -#: engine/core/models.py:466 +#: engine/core/models.py:515 msgid "brand small image" msgstr "Marca pequeña imagen" -#: engine/core/models.py:472 +#: engine/core/models.py:521 msgid "upload a big logo representing this brand" msgstr "Sube un logotipo grande que represente a esta marca" -#: engine/core/models.py:474 +#: engine/core/models.py:523 msgid "brand big image" msgstr "Gran imagen de marca" -#: engine/core/models.py:479 +#: engine/core/models.py:528 msgid "add a detailed description of the brand" msgstr "Añadir una descripción detallada de la marca" -#: engine/core/models.py:480 +#: engine/core/models.py:529 msgid "brand description" msgstr "Descripción de la marca" -#: engine/core/models.py:485 -msgid "optional categories that this brand is associated with" -msgstr "Categorías opcionales a las que se asocia esta marca" +#: engine/core/models.py:534 engine/core/models.py:535 +msgid "DEPRECATED" +msgstr "OBSOLETO" -#: engine/core/models.py:486 -msgid "associated categories" -msgstr "Categorías" - -#: engine/core/models.py:516 +#: engine/core/models.py:569 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1878,72 +1914,72 @@ msgstr "" "seguimiento y la evaluación de los productos disponibles de varios " "vendedores." -#: engine/core/models.py:528 +#: engine/core/models.py:581 msgid "the vendor supplying this product stock" msgstr "El vendedor que suministra este producto dispone de" -#: engine/core/models.py:529 +#: engine/core/models.py:582 msgid "associated vendor" msgstr "Proveedor asociado" -#: engine/core/models.py:533 +#: engine/core/models.py:588 msgid "final price to the customer after markups" msgstr "Precio final al cliente después de márgenes" -#: engine/core/models.py:534 +#: engine/core/models.py:589 msgid "selling price" msgstr "Precio de venta" -#: engine/core/models.py:539 +#: engine/core/models.py:594 msgid "the product associated with this stock entry" msgstr "El producto asociado a esta entrada en stock" -#: engine/core/models.py:540 engine/core/models.py:828 -#: engine/core/models.py:874 engine/core/models.py:1912 +#: engine/core/models.py:595 engine/core/models.py:914 +#: engine/core/models.py:962 engine/core/models.py:2020 msgid "associated product" msgstr "Producto asociado" -#: engine/core/models.py:547 +#: engine/core/models.py:604 msgid "the price paid to the vendor for this product" msgstr "El precio pagado al vendedor por este producto" -#: engine/core/models.py:548 +#: engine/core/models.py:605 msgid "vendor purchase price" msgstr "Precio de compra al vendedor" -#: engine/core/models.py:552 +#: engine/core/models.py:609 msgid "available quantity of the product in stock" msgstr "Cantidad disponible del producto en stock" -#: engine/core/models.py:553 +#: engine/core/models.py:610 msgid "quantity in stock" msgstr "Cantidad en stock" -#: engine/core/models.py:557 +#: engine/core/models.py:614 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU asignada por el proveedor para identificar el producto" -#: engine/core/models.py:558 +#: engine/core/models.py:615 msgid "vendor sku" msgstr "SKU del vendedor" -#: engine/core/models.py:564 +#: engine/core/models.py:621 msgid "digital file associated with this stock if applicable" msgstr "Archivo digital asociado a esta acción, si procede" -#: engine/core/models.py:565 +#: engine/core/models.py:622 msgid "digital file" msgstr "Archivo digital" -#: engine/core/models.py:569 +#: engine/core/models.py:626 msgid "system attributes" msgstr "Atributos del sistema" -#: engine/core/models.py:577 +#: engine/core/models.py:636 msgid "stock entries" msgstr "Entradas en existencias" -#: engine/core/models.py:582 +#: engine/core/models.py:641 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1965,72 +2001,80 @@ msgstr "" "para definir y manipular datos de productos y su información asociada dentro" " de una aplicación." -#: engine/core/models.py:595 +#: engine/core/models.py:660 msgid "category this product belongs to" msgstr "Categoría a la que pertenece este producto" -#: engine/core/models.py:604 +#: engine/core/models.py:669 msgid "optionally associate this product with a brand" msgstr "Si lo desea, puede asociar este producto a una marca" -#: engine/core/models.py:610 +#: engine/core/models.py:675 msgid "tags that help describe or group this product" msgstr "Etiquetas que ayudan a describir o agrupar este producto" -#: engine/core/models.py:615 +#: engine/core/models.py:680 msgid "indicates whether this product is digitally delivered" msgstr "Indica si este producto se entrega digitalmente" -#: engine/core/models.py:616 +#: engine/core/models.py:681 msgid "is product digital" msgstr "¿Es digital el producto?" -#: engine/core/models.py:623 +#: engine/core/models.py:688 msgid "indicates whether this product should be updated from periodic task" msgstr "" "indica si este producto debe actualizarse a partir de la tarea periódica" -#: engine/core/models.py:625 +#: engine/core/models.py:690 msgid "is product updatable" msgstr "el producto es actualizable" -#: engine/core/models.py:631 +#: engine/core/models.py:696 msgid "provide a clear identifying name for the product" msgstr "Proporcionar un nombre que identifique claramente el producto" -#: engine/core/models.py:632 +#: engine/core/models.py:697 msgid "product name" msgstr "Nombre del producto" -#: engine/core/models.py:638 engine/core/models.py:923 +#: engine/core/models.py:703 engine/core/models.py:1012 msgid "add a detailed description of the product" msgstr "Añada una descripción detallada del producto" -#: engine/core/models.py:639 +#: engine/core/models.py:704 msgid "product description" msgstr "Descripción del producto" -#: engine/core/models.py:646 +#: engine/core/models.py:710 +msgid "optional video file for this product" +msgstr "Archivo de vídeo opcional para este producto" + +#: engine/core/models.py:711 +msgid "product video" +msgstr "Vídeo del producto" + +#: engine/core/models.py:719 msgid "part number for this product" msgstr "Número de pieza de este producto" -#: engine/core/models.py:647 +#: engine/core/models.py:720 msgid "part number" msgstr "Número de pieza" -#: engine/core/models.py:666 +#: engine/core/models.py:739 msgid "stock keeping unit for this product" msgstr "Unidad de Mantenimiento de Existencias para este producto" -#: engine/core/models.py:673 +#: engine/core/models.py:746 msgid "whether to export this product to marketplaces" msgstr "Si exportar este producto a los mercados." -#: engine/core/models.py:674 +#: engine/core/models.py:747 msgid "Export to Marketplaces" msgstr "Exportar a mercados" -#: engine/core/models.py:749 +#: engine/core/models.py:835 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 " @@ -2046,65 +2090,65 @@ msgstr "" "enteros, flotantes, booleanos, matrices y objetos. Esto permite una " "estructuración dinámica y flexible de los datos." -#: engine/core/models.py:762 +#: engine/core/models.py:848 msgid "group of this attribute" msgstr "Grupo de este atributo" -#: engine/core/models.py:768 +#: engine/core/models.py:854 msgid "string" msgstr "Cadena" -#: engine/core/models.py:769 +#: engine/core/models.py:855 msgid "integer" msgstr "Entero" -#: engine/core/models.py:770 +#: engine/core/models.py:856 msgid "float" msgstr "Flotador" -#: engine/core/models.py:771 +#: engine/core/models.py:857 msgid "boolean" msgstr "Booleano" -#: engine/core/models.py:772 +#: engine/core/models.py:858 msgid "array" msgstr "Matriz" -#: engine/core/models.py:773 +#: engine/core/models.py:859 msgid "object" msgstr "Objeto" -#: engine/core/models.py:775 +#: engine/core/models.py:861 msgid "type of the attribute's value" msgstr "Tipo del valor del atributo" -#: engine/core/models.py:776 +#: engine/core/models.py:862 msgid "value type" msgstr "Tipo de valor" -#: engine/core/models.py:781 +#: engine/core/models.py:867 msgid "name of this attribute" msgstr "Nombre de este atributo" -#: engine/core/models.py:782 +#: engine/core/models.py:868 msgid "attribute's name" msgstr "Nombre del atributo" -#: engine/core/models.py:787 +#: engine/core/models.py:873 msgid "is filterable" msgstr "es filtrable" -#: engine/core/models.py:789 +#: engine/core/models.py:875 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." -#: engine/core/models.py:802 engine/core/models.py:820 +#: engine/core/models.py:888 engine/core/models.py:906 #: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Atributo" -#: engine/core/models.py:808 +#: engine/core/models.py:894 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" @@ -2114,19 +2158,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." -#: engine/core/models.py:819 +#: engine/core/models.py:905 msgid "attribute of this value" msgstr "Atributo de este valor" -#: engine/core/models.py:827 +#: engine/core/models.py:913 msgid "the specific product associated with this attribute's value" msgstr "El producto específico asociado al valor de este atributo" -#: engine/core/models.py:833 +#: engine/core/models.py:919 msgid "the specific value for this attribute" msgstr "El valor específico de este atributo" -#: engine/core/models.py:846 +#: engine/core/models.py:934 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -2140,40 +2184,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." -#: engine/core/models.py:857 +#: engine/core/models.py:945 msgid "provide alternative text for the image for accessibility" msgstr "" "Proporcione un texto alternativo para la imagen en aras de la accesibilidad" -#: engine/core/models.py:858 +#: engine/core/models.py:946 msgid "image alt text" msgstr "Texto alternativo de la imagen" -#: engine/core/models.py:861 +#: engine/core/models.py:949 msgid "upload the image file for this product" msgstr "Cargar el archivo de imagen para este producto" -#: engine/core/models.py:862 engine/core/models.py:893 +#: engine/core/models.py:950 engine/core/models.py:982 msgid "product image" msgstr "Imagen del producto" -#: engine/core/models.py:867 +#: engine/core/models.py:955 msgid "determines the order in which images are displayed" msgstr "Determina el orden de visualización de las imágenes" -#: engine/core/models.py:868 +#: engine/core/models.py:956 msgid "display priority" msgstr "Prioridad de visualización" -#: engine/core/models.py:873 +#: engine/core/models.py:961 msgid "the product that this image represents" msgstr "El producto que representa esta imagen" -#: engine/core/models.py:894 +#: engine/core/models.py:983 msgid "product images" msgstr "Imágenes de productos" -#: engine/core/models.py:899 +#: engine/core/models.py:988 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -2189,39 +2233,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." -#: engine/core/models.py:911 +#: engine/core/models.py:1000 msgid "percentage discount for the selected products" msgstr "Porcentaje de descuento para los productos seleccionados" -#: engine/core/models.py:912 +#: engine/core/models.py:1001 msgid "discount percentage" msgstr "Porcentaje de descuento" -#: engine/core/models.py:917 +#: engine/core/models.py:1006 msgid "provide a unique name for this promotion" msgstr "Proporcione un nombre único para esta promoción" -#: engine/core/models.py:918 +#: engine/core/models.py:1007 msgid "promotion name" msgstr "Nombre de la promoción" -#: engine/core/models.py:924 +#: engine/core/models.py:1013 msgid "promotion description" msgstr "Descripción de la promoción" -#: engine/core/models.py:929 +#: engine/core/models.py:1018 msgid "select which products are included in this promotion" msgstr "Seleccione los productos incluidos en esta promoción" -#: engine/core/models.py:930 +#: engine/core/models.py:1019 msgid "included products" msgstr "Productos incluidos" -#: engine/core/models.py:934 +#: engine/core/models.py:1027 msgid "promotion" msgstr "Promoción" -#: engine/core/models.py:945 +#: engine/core/models.py:1038 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2234,23 +2278,23 @@ msgstr "" "productos, así como soportar operaciones para añadir y eliminar múltiples " "productos a la vez." -#: engine/core/models.py:957 +#: engine/core/models.py:1050 msgid "products that the user has marked as wanted" msgstr "Productos que el usuario ha marcado como deseados" -#: engine/core/models.py:965 +#: engine/core/models.py:1058 msgid "user who owns this wishlist" msgstr "Usuario propietario de esta lista de deseos" -#: engine/core/models.py:966 +#: engine/core/models.py:1059 msgid "wishlist owner" msgstr "Propietario de Wishlist" -#: engine/core/models.py:974 +#: engine/core/models.py:1067 msgid "wishlist" msgstr "Lista de deseos" -#: engine/core/models.py:1016 +#: engine/core/models.py:1109 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2266,19 +2310,19 @@ msgstr "" "de almacenamiento de los archivos documentales. Amplía la funcionalidad de " "mixins específicos y proporciona características personalizadas adicionales." -#: engine/core/models.py:1031 +#: engine/core/models.py:1124 msgid "documentary" msgstr "Documental" -#: engine/core/models.py:1032 +#: engine/core/models.py:1125 msgid "documentaries" msgstr "Documentaries" -#: engine/core/models.py:1042 +#: engine/core/models.py:1135 msgid "unresolved" msgstr "Sin resolver" -#: engine/core/models.py:1047 +#: engine/core/models.py:1140 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2300,59 +2344,59 @@ msgstr "" " clase también permite asociar una dirección a un usuario, facilitando el " "manejo personalizado de los datos." -#: engine/core/models.py:1062 +#: engine/core/models.py:1155 msgid "address line for the customer" msgstr "Dirección del cliente" -#: engine/core/models.py:1063 +#: engine/core/models.py:1156 msgid "address line" msgstr "Dirección" -#: engine/core/models.py:1065 +#: engine/core/models.py:1158 msgid "street" msgstr "Calle" -#: engine/core/models.py:1066 +#: engine/core/models.py:1159 msgid "district" msgstr "Distrito" -#: engine/core/models.py:1067 +#: engine/core/models.py:1160 msgid "city" msgstr "Ciudad" -#: engine/core/models.py:1068 +#: engine/core/models.py:1161 msgid "region" msgstr "Región" -#: engine/core/models.py:1069 +#: engine/core/models.py:1162 msgid "postal code" msgstr "Promo code" -#: engine/core/models.py:1070 +#: engine/core/models.py:1163 msgid "country" msgstr "País" -#: engine/core/models.py:1077 +#: engine/core/models.py:1170 msgid "geolocation point: (longitude, latitude)" msgstr "Geolocalización Punto(Longitud, Latitud)" -#: engine/core/models.py:1083 +#: engine/core/models.py:1176 msgid "full JSON response from geocoder for this address" msgstr "Respuesta JSON completa del geocodificador para esta dirección" -#: engine/core/models.py:1089 +#: engine/core/models.py:1182 msgid "stored JSON response from the geocoding service" msgstr "Respuesta JSON almacenada del servicio de geocodificación" -#: engine/core/models.py:1099 +#: engine/core/models.py:1192 msgid "address" msgstr "Dirección" -#: engine/core/models.py:1100 +#: engine/core/models.py:1193 msgid "addresses" msgstr "Direcciones" -#: engine/core/models.py:1112 +#: engine/core/models.py:1205 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2369,72 +2413,72 @@ msgstr "" "para validar y aplicar el código promocional a un pedido garantizando el " "cumplimiento de las restricciones." -#: engine/core/models.py:1126 +#: engine/core/models.py:1219 msgid "unique code used by a user to redeem a discount" msgstr "Código único utilizado por un usuario para canjear un descuento" -#: engine/core/models.py:1127 +#: engine/core/models.py:1220 msgid "promo code identifier" msgstr "Promo code identifier" -#: engine/core/models.py:1134 +#: engine/core/models.py:1227 msgid "fixed discount amount applied if percent is not used" msgstr "Se aplica un descuento fijo si no se utiliza el porcentaje" -#: engine/core/models.py:1135 +#: engine/core/models.py:1228 msgid "fixed discount amount" msgstr "Importe fijo del descuento" -#: engine/core/models.py:1141 +#: engine/core/models.py:1234 msgid "percentage discount applied if fixed amount is not used" msgstr "Porcentaje de descuento aplicado si no se utiliza el importe fijo" -#: engine/core/models.py:1142 +#: engine/core/models.py:1235 msgid "percentage discount" msgstr "Porcentaje de descuento" -#: engine/core/models.py:1147 +#: engine/core/models.py:1240 msgid "timestamp when the promocode expires" msgstr "Fecha de caducidad del promocode" -#: engine/core/models.py:1148 +#: engine/core/models.py:1241 msgid "end validity time" msgstr "Hora de fin de validez" -#: engine/core/models.py:1153 +#: engine/core/models.py:1246 msgid "timestamp from which this promocode is valid" msgstr "Fecha a partir de la cual es válido este promocode" -#: engine/core/models.py:1154 +#: engine/core/models.py:1247 msgid "start validity time" msgstr "Hora de inicio de validez" -#: engine/core/models.py:1159 +#: engine/core/models.py:1252 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" -#: engine/core/models.py:1160 +#: engine/core/models.py:1253 msgid "usage timestamp" msgstr "Marca de tiempo de uso" -#: engine/core/models.py:1165 +#: engine/core/models.py:1258 msgid "user assigned to this promocode if applicable" msgstr "Usuario asignado a este promocode si procede" -#: engine/core/models.py:1166 +#: engine/core/models.py:1259 msgid "assigned user" msgstr "Usuario asignado" -#: engine/core/models.py:1173 +#: engine/core/models.py:1266 msgid "promo code" msgstr "Promo code" -#: engine/core/models.py:1174 +#: engine/core/models.py:1267 msgid "promo codes" msgstr "Promo codes" -#: engine/core/models.py:1190 +#: engine/core/models.py:1283 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2442,16 +2486,16 @@ msgstr "" "Sólo debe definirse un tipo de descuento (importe o porcentaje), pero no " "ambos ni ninguno." -#: engine/core/models.py:1212 +#: engine/core/models.py:1305 msgid "promocode already used" msgstr "El código promocional ya ha sido utilizado" -#: engine/core/models.py:1234 +#: engine/core/models.py:1327 #, 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}!" -#: engine/core/models.py:1243 +#: engine/core/models.py:1336 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 " @@ -2468,138 +2512,138 @@ msgstr "" " envío o facturación. Del mismo modo, la funcionalidad permite gestionar los" " productos en el ciclo de vida del pedido." -#: engine/core/models.py:1260 +#: engine/core/models.py:1357 msgid "the billing address used for this order" msgstr "La dirección de facturación utilizada para este pedido" -#: engine/core/models.py:1268 +#: engine/core/models.py:1365 msgid "optional promo code applied to this order" msgstr "Código promocional opcional aplicado a este pedido" -#: engine/core/models.py:1269 +#: engine/core/models.py:1366 msgid "applied promo code" msgstr "Código promocional aplicado" -#: engine/core/models.py:1277 +#: engine/core/models.py:1374 msgid "the shipping address used for this order" msgstr "La dirección de envío utilizada para este pedido" -#: engine/core/models.py:1278 +#: engine/core/models.py:1375 msgid "shipping address" msgstr "Dirección de envío" -#: engine/core/models.py:1284 +#: engine/core/models.py:1381 msgid "current status of the order in its lifecycle" msgstr "Estado actual del pedido en su ciclo de vida" -#: engine/core/models.py:1285 +#: engine/core/models.py:1382 msgid "order status" msgstr "Estado del pedido" -#: engine/core/models.py:1290 engine/core/models.py:1889 +#: engine/core/models.py:1387 engine/core/models.py:1997 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." -#: engine/core/models.py:1296 +#: engine/core/models.py:1393 msgid "json representation of order attributes for this order" msgstr "Representación JSON de los atributos de la orden para esta orden" -#: engine/core/models.py:1302 +#: engine/core/models.py:1399 msgid "the user who placed the order" msgstr "El usuario que realizó el pedido" -#: engine/core/models.py:1303 +#: engine/core/models.py:1400 msgid "user" msgstr "Usuario" -#: engine/core/models.py:1309 +#: engine/core/models.py:1406 msgid "the timestamp when the order was finalized" msgstr "Fecha de finalización de la orden" -#: engine/core/models.py:1310 +#: engine/core/models.py:1407 msgid "buy time" msgstr "Comprar tiempo" -#: engine/core/models.py:1317 +#: engine/core/models.py:1414 msgid "a human-readable identifier for the order" msgstr "Un identificador legible por el ser humano para la orden" -#: engine/core/models.py:1318 +#: engine/core/models.py:1415 msgid "human readable id" msgstr "ID legible por humanos" -#: engine/core/models.py:1324 +#: engine/core/models.py:1421 msgid "order" msgstr "Pida" -#: engine/core/models.py:1371 +#: engine/core/models.py:1468 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." -#: engine/core/models.py:1404 +#: engine/core/models.py:1504 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" -#: engine/core/models.py:1410 +#: engine/core/models.py:1510 msgid "you cannot add inactive products to order" msgstr "No se pueden añadir productos inactivos al pedido" -#: engine/core/models.py:1432 +#: engine/core/models.py:1533 msgid "you cannot add more products than available in stock" msgstr "No puede añadir más productos de los disponibles en stock" -#: engine/core/models.py:1456 engine/core/models.py:1485 -#: engine/core/models.py:1495 +#: engine/core/models.py:1557 engine/core/models.py:1586 +#: engine/core/models.py:1596 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" -#: engine/core/models.py:1480 +#: engine/core/models.py:1581 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} ¡no existe con la consulta <{query}>!" -#: engine/core/models.py:1519 +#: engine/core/models.py:1620 msgid "promocode does not exist" msgstr "Promocode no existe" -#: engine/core/models.py:1534 +#: engine/core/models.py:1635 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." -#: engine/core/models.py:1555 +#: engine/core/models.py:1656 msgid "address does not exist" msgstr "La dirección no existe" -#: engine/core/models.py:1577 engine/core/models.py:1656 +#: engine/core/models.py:1678 engine/core/models.py:1757 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." -#: engine/core/models.py:1583 engine/core/models.py:1649 +#: engine/core/models.py:1684 engine/core/models.py:1750 msgid "invalid force value" msgstr "Valor de fuerza no válido" -#: engine/core/models.py:1589 engine/core/models.py:1660 +#: engine/core/models.py:1690 engine/core/models.py:1761 msgid "you cannot purchase an empty order!" msgstr "No se puede comprar un pedido vacío." -#: engine/core/models.py:1610 +#: engine/core/models.py:1711 msgid "you cannot buy an order without a user" msgstr "No se puede comprar un pedido sin un usuario." -#: engine/core/models.py:1624 +#: engine/core/models.py:1725 msgid "a user without a balance cannot buy with balance" msgstr "¡Un usuario sin saldo no puede comprar con saldo!" -#: engine/core/models.py:1630 +#: engine/core/models.py:1731 msgid "insufficient funds to complete the order" msgstr "Fondos insuficientes para completar el pedido" -#: engine/core/models.py:1671 +#: engine/core/models.py:1772 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2607,14 +2651,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" -#: engine/core/models.py:1682 +#: engine/core/models.py:1783 #, 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}!" -#: engine/core/models.py:1813 +#: engine/core/models.py:1916 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2630,34 +2674,34 @@ msgstr "" "clase utiliza campos de base de datos para modelar y gestionar eficazmente " "los datos de los comentarios." -#: engine/core/models.py:1825 +#: engine/core/models.py:1928 msgid "user-provided comments about their experience with the product" msgstr "Comentarios de los usuarios sobre su experiencia con el producto" -#: engine/core/models.py:1826 +#: engine/core/models.py:1929 msgid "feedback comments" msgstr "Comentarios" -#: engine/core/models.py:1834 +#: engine/core/models.py:1937 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" -#: engine/core/models.py:1836 +#: engine/core/models.py:1939 msgid "related order product" msgstr "Producto relacionado con el pedido" -#: engine/core/models.py:1841 +#: engine/core/models.py:1944 msgid "user-assigned rating for the product" msgstr "Valoración del producto asignada por el usuario" -#: engine/core/models.py:1842 +#: engine/core/models.py:1945 msgid "product rating" msgstr "Valoración del producto" -#: engine/core/models.py:1862 +#: engine/core/models.py:1965 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2680,110 +2724,110 @@ msgstr "" "productos digitales. El modelo se integra con los modelos Pedido y Producto " "y almacena una referencia a ellos." -#: engine/core/models.py:1877 +#: engine/core/models.py:1985 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" -#: engine/core/models.py:1878 +#: engine/core/models.py:1986 msgid "purchase price at order time" msgstr "Precio de compra en el momento del pedido" -#: engine/core/models.py:1883 +#: engine/core/models.py:1991 msgid "internal comments for admins about this ordered product" msgstr "" "Comentarios internos para los administradores sobre este producto solicitado" -#: engine/core/models.py:1884 +#: engine/core/models.py:1992 msgid "internal comments" msgstr "Comentarios internos" -#: engine/core/models.py:1890 +#: engine/core/models.py:1998 msgid "user notifications" msgstr "Notificaciones a los usuarios" -#: engine/core/models.py:1895 +#: engine/core/models.py:2003 msgid "json representation of this item's attributes" msgstr "Representación JSON de los atributos de este elemento" -#: engine/core/models.py:1896 +#: engine/core/models.py:2004 msgid "ordered product attributes" msgstr "Atributos ordenados del producto" -#: engine/core/models.py:1901 +#: engine/core/models.py:2009 msgid "reference to the parent order that contains this product" msgstr "Referencia al pedido principal que contiene este producto" -#: engine/core/models.py:1902 +#: engine/core/models.py:2010 msgid "parent order" msgstr "Orden de los padres" -#: engine/core/models.py:1911 +#: engine/core/models.py:2019 msgid "the specific product associated with this order line" msgstr "El producto específico asociado a esta línea de pedido" -#: engine/core/models.py:1918 +#: engine/core/models.py:2026 msgid "quantity of this specific product in the order" msgstr "Cantidad de este producto específico en el pedido" -#: engine/core/models.py:1919 +#: engine/core/models.py:2027 msgid "product quantity" msgstr "Cantidad de productos" -#: engine/core/models.py:1926 +#: engine/core/models.py:2034 msgid "current status of this product in the order" msgstr "Estado actual de este producto en el pedido" -#: engine/core/models.py:1927 +#: engine/core/models.py:2035 msgid "product line status" msgstr "Estado de la línea de productos" -#: engine/core/models.py:1998 +#: engine/core/models.py:2106 msgid "order product must have an order" msgstr "El pedido-producto debe tener un pedido asociado." -#: engine/core/models.py:2000 +#: engine/core/models.py:2108 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Acción incorrecta especificada para la retroalimentación: ¡{action}!" -#: engine/core/models.py:2017 +#: engine/core/models.py:2125 msgid "you cannot feedback an order which is not received" msgstr "no se puede comentar un pedido no recibido" -#: engine/core/models.py:2026 +#: engine/core/models.py:2132 engine/core/models.py:2227 msgid "name" msgstr "Nombre" -#: engine/core/models.py:2028 +#: engine/core/models.py:2134 msgid "URL of the integration" msgstr "URL de la integración" -#: engine/core/models.py:2031 +#: engine/core/models.py:2137 msgid "authentication credentials" msgstr "Credenciales de autenticación" -#: engine/core/models.py:2054 +#: engine/core/models.py:2160 msgid "you can only have one default CRM provider" msgstr "Sólo puede tener un proveedor de CRM por defecto" -#: engine/core/models.py:2064 +#: engine/core/models.py:2170 msgid "CRM" msgstr "CRM" -#: engine/core/models.py:2065 +#: engine/core/models.py:2171 msgid "CRMs" msgstr "CRMs" -#: engine/core/models.py:2081 +#: engine/core/models.py:2187 msgid "order CRM link" msgstr "Enlace CRM del pedido" -#: engine/core/models.py:2082 +#: engine/core/models.py:2188 msgid "orders CRM links" msgstr "Enlaces CRM de los pedidos" -#: engine/core/models.py:2087 +#: engine/core/models.py:2193 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2800,14 +2844,39 @@ msgstr "" " para descargar el activo cuando el pedido asociado está en estado " "completado." -#: engine/core/models.py:2103 +#: engine/core/models.py:2209 msgid "download" msgstr "Descargar" -#: engine/core/models.py:2104 +#: engine/core/models.py:2210 msgid "downloads" msgstr "Descargas" +#: engine/core/models.py:2228 +msgid "descriptive name for the image" +msgstr "Nombre descriptivo de la imagen" + +#: engine/core/models.py:2233 +msgid "image file pasted in the markdown editor" +msgstr "Archivo de imagen pegado en el editor Markdown." + +#: engine/core/models.py:2239 +msgid "alt text" +msgstr "Otro texto" + +#: engine/core/models.py:2240 +msgid "alternative text for accessibility" +msgstr "" +"Proporcione un texto alternativo para la imagen en aras de la accesibilidad" + +#: engine/core/models.py:2244 +msgid "pasted image" +msgstr "Imagen pegada" + +#: engine/core/models.py:2245 +msgid "pasted images" +msgstr "Imágenes pegadas" + #: engine/core/serializers/utility.py:91 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." @@ -2816,6 +2885,16 @@ msgstr "" "solicitado para añadir comentarios." #: engine/core/sitemaps.py:25 +#: engine/core/templates/admin_doc/bookmarklets.html:8 +#: engine/core/templates/admin_doc/index.html:8 +#: engine/core/templates/admin_doc/missing_docutils.html:8 +#: engine/core/templates/admin_doc/model_detail.html:8 +#: engine/core/templates/admin_doc/model_index.html:8 +#: engine/core/templates/admin_doc/template_detail.html:8 +#: engine/core/templates/admin_doc/template_filter_index.html:8 +#: engine/core/templates/admin_doc/template_tag_index.html:8 +#: engine/core/templates/admin_doc/view_detail.html:8 +#: engine/core/templates/admin_doc/view_index.html:8 msgid "Home" msgstr "Inicio" @@ -2868,45 +2947,34 @@ msgstr "Bruto" msgid "Dashboard" msgstr "Cuadro de mandos" -#: engine/core/templates/admin/dashboard/_income_overview.html:7 +#: engine/core/templates/admin/dashboard/_income_overview.html:6 msgid "Income overview" msgstr "Resumen de ingresos" -#: engine/core/templates/admin/dashboard/_income_overview.html:31 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Net" +#: engine/core/templates/admin/dashboard/_income_overview.html:16 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" msgstr "Ingresos netos" -#: engine/core/templates/admin/dashboard/_income_overview.html:37 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Taxes" -msgstr "Impuestos" - -#: engine/core/templates/admin/dashboard/_income_overview.html:43 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 +#: engine/core/templates/admin/dashboard/_income_overview.html:21 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 msgid "Returns" msgstr "Devuelve" -#: engine/core/templates/admin/dashboard/_income_overview.html:48 -msgid "Gross (pie total)" -msgstr "Ingresos brutos" - -#: engine/core/templates/admin/dashboard/_income_overview.html:72 -msgid "No data" -msgstr "Sin fecha" - +#: engine/core/templates/admin/dashboard/_income_overview.html:26 #: engine/core/templates/admin/dashboard/_kpis.html:6 msgid "GMV" msgstr "GMV" +#: engine/core/templates/admin/dashboard/_income_overview.html:50 +msgid "No data" +msgstr "Sin fecha" + #: engine/core/templates/admin/dashboard/_kpis.html:34 msgid "AOV" msgstr "AOV" -#: engine/core/templates/admin/dashboard/_kpis.html:48 -msgid "Net revenue" -msgstr "Ingresos netos" - #: engine/core/templates/admin/dashboard/_kpis.html:62 msgid "Refund rate" msgstr "Tasa de devolución" @@ -2919,7 +2987,7 @@ msgstr "Devuelto" msgid "Low stock" msgstr "Pocas existencias" -#: engine/core/templates/admin/dashboard/_low_stock.html:29 +#: engine/core/templates/admin/dashboard/_low_stock.html:33 msgid "No low stock items." msgstr "No hay artículos de bajo stock." @@ -2976,6 +3044,306 @@ msgstr "Ninguna venta de categoría en los últimos 30 días." msgid "Django site admin" msgstr "Administrador del sitio Django" +#: engine/core/templates/admin_doc/bookmarklets.html:4 +#: engine/core/templates/admin_doc/bookmarklets.html:17 +msgid "Documentation bookmarklets" +msgstr "Marcadores de documentación" + +#: engine/core/templates/admin_doc/bookmarklets.html:10 +#: engine/core/templates/admin_doc/index.html:4 +#: engine/core/templates/admin_doc/index.html:10 +#: engine/core/templates/admin_doc/index.html:15 +#: engine/core/templates/admin_doc/missing_docutils.html:10 +#: engine/core/templates/admin_doc/missing_docutils.html:19 +#: engine/core/templates/admin_doc/model_detail.html:10 +#: engine/core/templates/admin_doc/model_index.html:10 +#: engine/core/templates/admin_doc/template_detail.html:10 +#: engine/core/templates/admin_doc/template_filter_index.html:10 +#: engine/core/templates/admin_doc/template_tag_index.html:10 +#: engine/core/templates/admin_doc/view_detail.html:10 +#: engine/core/templates/admin_doc/view_index.html:10 +msgid "Documentation" +msgstr "Documentación" + +#: engine/core/templates/admin_doc/bookmarklets.html:12 +#: engine/core/templates/admin_doc/index.html:53 +msgid "Bookmarklets" +msgstr "Marcadores" + +#: engine/core/templates/admin_doc/bookmarklets.html:19 +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Para instalar los marcadores, arrastre el enlace a la barra de marcadores o " +"haga clic con el botón derecho del ratón en el enlace y añádalo a sus " +"marcadores. Ahora puede seleccionar el marcador desde cualquier página del " +"sitio." + +#: engine/core/templates/admin_doc/bookmarklets.html:29 +msgid "Documentation for this page" +msgstr "Documentación para esta página" + +#: engine/core/templates/admin_doc/bookmarklets.html:31 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Te lleva desde cualquier página a la documentación de la vista que genera " +"esa página." + +#: engine/core/templates/admin_doc/index.html:21 +#: engine/core/templates/admin_doc/model_detail.html:12 +#: engine/core/templates/admin_doc/model_index.html:4 +#: engine/core/templates/admin_doc/model_index.html:12 +msgid "Models" +msgstr "Modelos" + +#: engine/core/templates/admin_doc/index.html:23 +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Los modelos son descripciones de todos los objetos del sistema y sus campos " +"asociados. Cada modelo tiene una lista de campos a los que se puede acceder " +"como variables de plantilla." + +#: engine/core/templates/admin_doc/index.html:29 +#: engine/core/templates/admin_doc/view_detail.html:12 +#: engine/core/templates/admin_doc/view_index.html:4 +#: engine/core/templates/admin_doc/view_index.html:12 +msgid "Views" +msgstr "Vistas" + +#: engine/core/templates/admin_doc/index.html:31 +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Cada página del sitio público se genera mediante una vista. La vista define " +"qué plantilla se utiliza para generar la página y qué objetos están " +"disponibles para esa plantilla." + +#: engine/core/templates/admin_doc/index.html:39 +msgid "List of all the template tags and their functions." +msgstr "Lista de todas las etiquetas de plantilla y sus funciones." + +#: engine/core/templates/admin_doc/index.html:45 +#: engine/core/templates/admin_doc/template_filter_index.html:12 +msgid "Filters" +msgstr "Filtros" + +#: engine/core/templates/admin_doc/index.html:47 +msgid "" +"Filters are actions which can be applied to variables in a template to alter" +" the output." +msgstr "" +"Los filtros son acciones que se pueden aplicar a las variables de una " +"plantilla para modificar el resultado." + +#: engine/core/templates/admin_doc/index.html:55 +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Herramientas para que tu navegador acceda rápidamente a las funciones de " +"administración." + +#: engine/core/templates/admin_doc/missing_docutils.html:4 +msgid "Please install docutils" +msgstr "Instala docutils." + +#: engine/core/templates/admin_doc/missing_docutils.html:20 +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"El sistema de documentación administrativa requiere la biblioteca docutils de Python." + +#: engine/core/templates/admin_doc/missing_docutils.html:21 +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Pida a sus administradores que instalen docutils." + +#: engine/core/templates/admin_doc/model_detail.html:4 +#, python-format +msgid "Model: %(name)s" +msgstr "Modelo: %(name)s" + +#: engine/core/templates/admin_doc/model_detail.html:29 +msgid "Fields" +msgstr "Campos" + +#: engine/core/templates/admin_doc/model_detail.html:36 +msgid "Field" +msgstr "Campo" + +#: engine/core/templates/admin_doc/model_detail.html:37 +msgid "Type" +msgstr "Tipo" + +#: engine/core/templates/admin_doc/model_detail.html:38 +#: engine/core/templates/admin_doc/model_detail.html:70 +msgid "Description" +msgstr "Descripción" + +#: engine/core/templates/admin_doc/model_detail.html:61 +msgid "Methods with arguments" +msgstr "Métodos con argumentos" + +#: engine/core/templates/admin_doc/model_detail.html:68 +msgid "Method" +msgstr "Método" + +#: engine/core/templates/admin_doc/model_detail.html:69 +msgid "Arguments" +msgstr "Argumentos" + +#: engine/core/templates/admin_doc/model_detail.html:89 +msgid "Back to Model documentation" +msgstr "Volver a la documentación del modelo" + +#: engine/core/templates/admin_doc/model_index.html:17 +msgid "Model documentation" +msgstr "Documentación del modelo" + +#: engine/core/templates/admin_doc/model_index.html:44 +msgid "Model groups" +msgstr "Grupos modelo" + +#: engine/core/templates/admin_doc/template_detail.html:4 +#, python-format +msgid "Template: %(name)s" +msgstr "Plantilla: %(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:12 +msgid "Templates" +msgstr "Plantillas" + +#: engine/core/templates/admin_doc/template_detail.html:17 +#, python-format +msgid "" +"Template: %(name)s" +msgstr "" +"Plantilla: %(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:21 +#, python-format +msgid "Search path for template %(name)s:" +msgstr "" +"Ruta de búsqueda para la plantilla %(name)s:" + +#: engine/core/templates/admin_doc/template_detail.html:29 +msgid "(does not exist)" +msgstr "(no existe)" + +#: engine/core/templates/admin_doc/template_detail.html:40 +msgid "Back to Documentation" +msgstr "Volver a la documentación" + +#: engine/core/templates/admin_doc/template_filter_index.html:4 +msgid "Template filters" +msgstr "Filtros de plantillas" + +#: engine/core/templates/admin_doc/template_filter_index.html:17 +msgid "Template filter documentation" +msgstr "Documentación del filtro de plantillas" + +#: engine/core/templates/admin_doc/template_filter_index.html:26 +#: engine/core/templates/admin_doc/template_filter_index.html:52 +msgid "Built-in filters" +msgstr "Filtros integrados" + +#: engine/core/templates/admin_doc/template_filter_index.html:29 +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before using" +" the filter." +msgstr "" +"Para utilizar estos filtros, introduzca %(code)s en su plantilla antes" +" de utilizar el filtro." + +#: engine/core/templates/admin_doc/template_tag_index.html:4 +msgid "Template tags" +msgstr "Etiquetas de plantilla" + +#: engine/core/templates/admin_doc/template_tag_index.html:17 +msgid "Template tag documentation" +msgstr "Documentación de etiquetas de plantilla" + +#: engine/core/templates/admin_doc/template_tag_index.html:26 +#: engine/core/templates/admin_doc/template_tag_index.html:52 +msgid "Built-in tags" +msgstr "Etiquetas integradas" + +#: engine/core/templates/admin_doc/template_tag_index.html:29 +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using the tag." +msgstr "" +"Para utilizar estas etiquetas, introduzca %(code)s en su " +"plantilla antes de utilizar la etiqueta." + +#: engine/core/templates/admin_doc/view_detail.html:4 +#, python-format +msgid "View: %(name)s" +msgstr "Ver: %(name)s" + +#: engine/core/templates/admin_doc/view_detail.html:28 +msgid "Context:" +msgstr "Contexto:" + +#: engine/core/templates/admin_doc/view_detail.html:33 +msgid "Templates:" +msgstr "Plantillas:" + +#: engine/core/templates/admin_doc/view_detail.html:41 +msgid "Back to View documentation" +msgstr "Volver a Ver documentación" + +#: engine/core/templates/admin_doc/view_index.html:17 +msgid "View documentation" +msgstr "Ver documentación" + +#: engine/core/templates/admin_doc/view_index.html:28 +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Vistas por espacio de nombres %(name)s" + +#: engine/core/templates/admin_doc/view_index.html:30 +msgid "Views by empty namespace" +msgstr "Vistas por espacio de nombres vacío" + +#: engine/core/templates/admin_doc/view_index.html:40 +#, python-format +msgid "" +"View function: %(full_name)s. Name: %(url_name)s." +msgstr "" +"Función de visualización: %(full_name)s. Nombre: " +"%(url_name)s." + +#: engine/core/templates/admin_doc/view_index.html:54 +msgid "Jump to namespace" +msgstr "Ir al espacio de nombres" + +#: engine/core/templates/admin_doc/view_index.html:59 +msgid "Empty namespace" +msgstr "Espacio de nombres vacío" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -3075,7 +3443,7 @@ msgstr "" " información adicional" #: engine/core/templates/digital_order_delivered_email.html:137 -#: engine/core/templates/json_table_widget.html:6 +#: engine/core/templates/json_table_widget.html:26 msgid "value" msgstr "Valor" @@ -3095,11 +3463,23 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "Saludos cordiales,
el equipo %(project_name)s" -#: engine/core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:7 +msgid "Key" +msgstr "Clave" + +#: engine/core/templates/json_table_widget.html:8 +msgid "Value" +msgstr "Valor" + +#: engine/core/templates/json_table_widget.html:19 msgid "key" msgstr "Clave" -#: engine/core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:32 +msgid "Delete row" +msgstr "Eliminar fila" + +#: engine/core/templates/json_table_widget.html:44 msgid "Add Row" msgstr "Añadir fila" @@ -3187,14 +3567,23 @@ msgstr "No tiene permiso para realizar esta acción." msgid "NOMINATIM_URL must be configured." msgstr "El parámetro NOMINATIM_URL debe estar configurado." -#: engine/core/validators.py:23 +#: engine/core/validators.py:18 +msgid "could not determine file type" +msgstr "No se pudo determinar el tipo de archivo." + +#: engine/core/validators.py:24 +#, python-brace-format +msgid "unsupported video format. supported formats: {supported}" +msgstr "Formato de vídeo no compatible. Formatos compatibles: {supported}" + +#: engine/core/validators.py:45 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "Las dimensiones de la imagen no deben superar w{max_width} x h{max_height} " "píxeles." -#: engine/core/views.py:104 +#: engine/core/views.py:108 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3203,7 +3592,7 @@ msgstr "" " XML. Se asegura de que la respuesta incluya el encabezado de tipo de " "contenido apropiado para XML." -#: engine/core/views.py:119 +#: engine/core/views.py:123 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3213,18 +3602,18 @@ msgstr "" "función procesa la solicitud, obtiene la respuesta detallada del mapa del " "sitio y establece el encabezado Content-Type para XML." -#: engine/core/views.py:155 +#: engine/core/views.py:174 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Devuelve una lista de los idiomas admitidos y su información " "correspondiente." -#: engine/core/views.py:182 +#: engine/core/views.py:201 msgid "Returns the parameters of the website as a JSON object." msgstr "Devuelve los parámetros del sitio web como un objeto JSON." -#: engine/core/views.py:198 +#: engine/core/views.py:217 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3232,11 +3621,11 @@ msgstr "" "Gestiona las operaciones de caché, como la lectura y el establecimiento de " "datos de caché con una clave y un tiempo de espera especificados." -#: engine/core/views.py:220 +#: engine/core/views.py:239 msgid "Handles `contact us` form submissions." msgstr "Gestiona los formularios de contacto." -#: engine/core/views.py:236 +#: engine/core/views.py:255 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3244,15 +3633,15 @@ msgstr "" "Gestiona las solicitudes de procesamiento y validación de URL de las " "solicitudes POST entrantes." -#: engine/core/views.py:273 +#: engine/core/views.py:292 msgid "Handles global search queries." msgstr "Gestiona las consultas de búsqueda global." -#: engine/core/views.py:289 +#: engine/core/views.py:308 msgid "Handles the logic of buying as a business without registration." msgstr "Maneja la lógica de la compra como empresa sin registro." -#: engine/core/views.py:337 +#: engine/core/views.py:356 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3260,31 +3649,31 @@ msgstr "" "Gestiona la descarga de un activo digital asociado a un pedido.\n" "Esta función intenta servir el archivo del activo digital ubicado en el directorio de almacenamiento del proyecto. Si no se encuentra el archivo, se genera un error HTTP 404 para indicar que el recurso no está disponible." -#: engine/core/views.py:348 +#: engine/core/views.py:367 msgid "order_product_uuid is required" msgstr "order_product_uuid es obligatorio" -#: engine/core/views.py:355 +#: engine/core/views.py:374 msgid "order product does not exist" msgstr "pedir producto no existe" -#: engine/core/views.py:358 +#: engine/core/views.py:377 msgid "you can only download the digital asset once" msgstr "Sólo puede descargar el activo digital una vez" -#: engine/core/views.py:362 +#: engine/core/views.py:381 msgid "the order must be paid before downloading the digital asset" msgstr "el pedido debe pagarse antes de descargar el activo digital" -#: engine/core/views.py:369 +#: engine/core/views.py:388 msgid "the order product does not have a product" msgstr "El producto del pedido no tiene un producto" -#: engine/core/views.py:412 +#: engine/core/views.py:431 msgid "favicon not found" msgstr "favicon no encontrado" -#: engine/core/views.py:418 +#: engine/core/views.py:437 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3292,7 +3681,7 @@ msgstr "" "Gestiona las peticiones del favicon de un sitio web.\n" "Esta función intenta servir el archivo favicon ubicado en el directorio estático del proyecto. Si no se encuentra el archivo favicon, se genera un error HTTP 404 para indicar que el recurso no está disponible." -#: engine/core/views.py:432 +#: engine/core/views.py:451 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3303,16 +3692,20 @@ msgstr "" "de la interfaz de administración de Django. Utiliza la función `redirect` de" " Django para gestionar la redirección HTTP." -#: engine/core/views.py:445 +#: engine/core/views.py:464 msgid "Returns current version of the Schon. " msgstr "Devuelve la versión actual del Schon." -#: engine/core/views.py:674 engine/core/views.py:689 +#: engine/core/views.py:475 +msgid "no image file provided" +msgstr "No se ha proporcionado ningún archivo de imagen." + +#: engine/core/views.py:710 engine/core/views.py:725 #, python-format msgid "Revenue & Orders (last %(days)d)" msgstr "Ingresos y pedidos (últimos %(days)d)" -#: engine/core/views.py:870 +#: engine/core/views.py:911 msgid "Returns custom variables for Dashboard. " msgstr "Devuelve variables personalizadas para Dashboard." @@ -3402,7 +3795,7 @@ msgstr "" " Brand. Utiliza el marco ViewSet de Django para simplificar la " "implementación de puntos finales de API para objetos Brand." -#: engine/core/viewsets.py:458 +#: engine/core/viewsets.py:460 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3420,7 +3813,16 @@ msgstr "" "API. Incluye métodos para recuperar detalles del producto, aplicar permisos " "y acceder a comentarios relacionados de un producto." -#: engine/core/viewsets.py:605 +#: engine/core/viewsets.py:541 +msgid "identificator_type and identificators are required" +msgstr "Se requieren identificador_tipo e identificadores." + +#: engine/core/viewsets.py:554 +msgid "identificator_type must be one of: uuid, slug, sku" +msgstr "" +"El tipo de identificador debe ser uno de los siguientes: uuid, slug, sku." + +#: engine/core/viewsets.py:635 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3435,7 +3837,7 @@ msgstr "" "proporcionar un acceso simplificado a los recursos relacionados con el " "vendedor a través del marco REST de Django." -#: engine/core/viewsets.py:625 +#: engine/core/viewsets.py:655 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3452,7 +3854,7 @@ msgstr "" "objetos Feedback accesibles. Extiende la base `SchonViewSet` y hace uso del " "sistema de filtrado de Django para la consulta de datos." -#: engine/core/viewsets.py:652 +#: engine/core/viewsets.py:682 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3471,7 +3873,7 @@ msgstr "" "acción específica que se esté realizando y aplica los permisos " "correspondientes al interactuar con los datos del pedido." -#: engine/core/viewsets.py:914 +#: engine/core/viewsets.py:944 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3486,13 +3888,13 @@ msgstr "" "Además, proporciona una acción detallada para gestionar los comentarios " "sobre las instancias de OrderProduct." -#: engine/core/viewsets.py:974 +#: engine/core/viewsets.py:1004 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." -#: engine/core/viewsets.py:988 +#: engine/core/viewsets.py:1018 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3500,16 +3902,16 @@ msgstr "" "Gestiona la recuperación y el manejo de instancias de PromoCode a través de " "varias acciones de la API." -#: engine/core/viewsets.py:1019 +#: engine/core/viewsets.py:1049 msgid "Represents a view set for managing promotions. " msgstr "Representa un conjunto de vistas para gestionar promociones." -#: engine/core/viewsets.py:1032 +#: engine/core/viewsets.py:1062 msgid "Handles operations related to Stock data in the system." msgstr "" "Gestiona las operaciones relacionadas con los datos de Stock en el sistema." -#: engine/core/viewsets.py:1046 +#: engine/core/viewsets.py:1076 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3528,7 +3930,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." -#: engine/core/viewsets.py:1183 +#: engine/core/viewsets.py:1213 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3542,12 +3944,12 @@ msgstr "" "comportamientos especializados para diferentes métodos HTTP, anulaciones del" " serializador y gestión de permisos basada en el contexto de la solicitud." -#: engine/core/viewsets.py:1254 +#: engine/core/viewsets.py:1275 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Error de geocodificación: {e}" -#: engine/core/viewsets.py:1262 +#: engine/core/viewsets.py:1283 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/fa_IR/LC_MESSAGES/django.po b/engine/core/locale/fa_IR/LC_MESSAGES/django.po index 454cae48..40c64198 100644 --- a/engine/core/locale/fa_IR/LC_MESSAGES/django.po +++ b/engine/core/locale/fa_IR/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 01:44+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -49,113 +49,133 @@ msgstr "" msgid "when the object was last modified" msgstr "" -#: engine/core/admin.py:94 +#: engine/core/admin.py:98 msgid "translations" msgstr "" -#: engine/core/admin.py:102 +#: engine/core/admin.py:106 msgid "general" msgstr "" -#: engine/core/admin.py:106 +#: engine/core/admin.py:110 msgid "relations" msgstr "" -#: engine/core/admin.py:111 +#: engine/core/admin.py:115 msgid "additional info" msgstr "" -#: engine/core/admin.py:133 +#: engine/core/admin.py:137 msgid "metadata" msgstr "" -#: engine/core/admin.py:141 +#: engine/core/admin.py:145 msgid "timestamps" msgstr "" -#: engine/core/admin.py:158 +#: engine/core/admin.py:162 #, python-format msgid "Activate selected %(verbose_name_plural)s" msgstr "" -#: engine/core/admin.py:166 +#: engine/core/admin.py:170 msgid "selected items have been activated." msgstr "" -#: engine/core/admin.py:174 +#: engine/core/admin.py:178 #, python-format msgid "Deactivate selected %(verbose_name_plural)s" msgstr "" -#: engine/core/admin.py:184 +#: engine/core/admin.py:188 msgid "selected items have been deactivated." msgstr "" -#: engine/core/admin.py:196 engine/core/graphene/object_types.py:653 -#: engine/core/graphene/object_types.py:660 engine/core/models.py:832 -#: engine/core/models.py:840 +#: engine/core/admin.py:200 engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:673 engine/core/models.py:918 +#: engine/core/models.py:928 msgid "attribute value" msgstr "" -#: engine/core/admin.py:197 engine/core/graphene/object_types.py:77 -#: engine/core/models.py:841 +#: engine/core/admin.py:201 engine/core/graphene/object_types.py:81 +#: engine/core/models.py:929 msgid "attribute values" msgstr "" -#: engine/core/admin.py:208 +#: engine/core/admin.py:212 engine/core/models.py:2232 msgid "image" msgstr "" -#: engine/core/admin.py:209 engine/core/graphene/object_types.py:530 +#: engine/core/admin.py:213 engine/core/graphene/object_types.py:535 msgid "images" msgstr "" -#: engine/core/admin.py:220 engine/core/models.py:576 +#: engine/core/admin.py:224 engine/core/models.py:635 msgid "stock" msgstr "" -#: engine/core/admin.py:221 engine/core/graphene/object_types.py:713 +#: engine/core/admin.py:225 engine/core/graphene/object_types.py:735 msgid "stocks" msgstr "" -#: engine/core/admin.py:232 engine/core/models.py:1938 +#: engine/core/admin.py:236 engine/core/models.py:2046 msgid "order product" msgstr "" -#: engine/core/admin.py:233 engine/core/graphene/object_types.py:441 -#: engine/core/models.py:1939 +#: engine/core/admin.py:237 engine/core/graphene/object_types.py:446 +#: engine/core/models.py:2047 msgid "order products" msgstr "" -#: engine/core/admin.py:251 engine/core/admin.py:252 +#: engine/core/admin.py:255 engine/core/admin.py:256 msgid "children" msgstr "" -#: engine/core/admin.py:528 +#: engine/core/admin.py:545 +msgid "video preview" +msgstr "" + +#: engine/core/admin.py:551 msgid "has images" msgstr "" -#: engine/core/admin.py:531 +#: engine/core/admin.py:554 #, python-format msgid "Export selected %(verbose_name_plural)s to marketplaces' feeds" msgstr "" -#: engine/core/admin.py:542 +#: engine/core/admin.py:565 #, python-format msgid "selected %(verbose_name_plural)s have been marked for export." msgstr "" -#: engine/core/admin.py:553 +#: engine/core/admin.py:576 #, python-format msgid "Ban selected %(verbose_name_plural)s from marketplaces' feeds" msgstr "" -#: engine/core/admin.py:564 +#: engine/core/admin.py:587 #, python-format msgid "selected %(verbose_name_plural)s have been banned from export." msgstr "" -#: engine/core/admin.py:1116 +#: engine/core/admin.py:1030 +msgid "Preview" +msgstr "" + +#: engine/core/admin.py:1031 +msgid "Metadata" +msgstr "" + +#: engine/core/admin.py:1034 +msgid "preview" +msgstr "" + +#: engine/core/admin.py:1043 +msgid "image preview" +msgstr "" + +#: engine/core/admin.py:1166 msgid "Config" msgstr "" @@ -218,7 +238,7 @@ msgid "" "parameter both." msgstr "" -#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:36 +#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "" @@ -240,7 +260,7 @@ msgstr "" msgid "send a message to the support team" msgstr "" -#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:59 msgid "request a CORSed URL" msgstr "" @@ -366,11 +386,11 @@ msgstr "" msgid "rewrite some fields of an existing category saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757 -#: engine/core/docs/drf/viewsets.py:1046 -#: engine/core/graphene/object_types.py:119 -#: engine/core/graphene/object_types.py:239 -#: engine/core/graphene/object_types.py:540 +#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:781 +#: engine/core/docs/drf/viewsets.py:1070 +#: engine/core/graphene/object_types.py:123 +#: engine/core/graphene/object_types.py:247 +#: engine/core/graphene/object_types.py:546 msgid "SEO Meta snapshot" msgstr "" @@ -633,7 +653,7 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683 #: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725 -#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763 +#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:787 msgid "Product UUID or slug" msgstr "" @@ -658,267 +678,277 @@ msgstr "" msgid "lists all permitted feedbacks for a product" msgstr "" -#: engine/core/docs/drf/viewsets.py:758 +#: engine/core/docs/drf/viewsets.py:757 +msgid "retrieve exact products by identifier" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:759 +msgid "" +"retrieve a list of products by identifier type (uuid, slug, or sku). Send a " +"POST request with `identificator_type` and `identificators` (list of values)." +msgstr "" + +#: engine/core/docs/drf/viewsets.py:782 msgid "returns a snapshot of the product's SEO meta data" msgstr "" -#: engine/core/docs/drf/viewsets.py:779 +#: engine/core/docs/drf/viewsets.py:803 msgid "list all addresses" msgstr "" -#: engine/core/docs/drf/viewsets.py:789 +#: engine/core/docs/drf/viewsets.py:813 msgid "retrieve a single address" msgstr "" -#: engine/core/docs/drf/viewsets.py:799 +#: engine/core/docs/drf/viewsets.py:823 msgid "create a new address" msgstr "" -#: engine/core/docs/drf/viewsets.py:810 +#: engine/core/docs/drf/viewsets.py:834 msgid "delete an address" msgstr "" -#: engine/core/docs/drf/viewsets.py:820 +#: engine/core/docs/drf/viewsets.py:844 msgid "update an entire address" msgstr "" -#: engine/core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:855 msgid "partially update an address" msgstr "" -#: engine/core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:866 msgid "autocomplete address suggestions" msgstr "" -#: engine/core/docs/drf/viewsets.py:848 +#: engine/core/docs/drf/viewsets.py:872 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" -#: engine/core/docs/drf/viewsets.py:855 +#: engine/core/docs/drf/viewsets.py:879 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "" -#: engine/core/docs/drf/viewsets.py:871 +#: engine/core/docs/drf/viewsets.py:895 msgid "list all feedbacks (simple view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:881 +#: engine/core/docs/drf/viewsets.py:905 msgid "retrieve a single feedback (detailed view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:888 +#: engine/core/docs/drf/viewsets.py:912 msgid "create a feedback" msgstr "" -#: engine/core/docs/drf/viewsets.py:895 +#: engine/core/docs/drf/viewsets.py:919 msgid "delete a feedback" msgstr "" -#: engine/core/docs/drf/viewsets.py:902 +#: engine/core/docs/drf/viewsets.py:926 msgid "rewrite an existing feedback saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:909 +#: engine/core/docs/drf/viewsets.py:933 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:919 +#: engine/core/docs/drf/viewsets.py:943 msgid "list all order–product relations (simple view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:929 +#: engine/core/docs/drf/viewsets.py:953 msgid "retrieve a single order–product relation (detailed view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:939 +#: engine/core/docs/drf/viewsets.py:963 msgid "create a new order–product relation" msgstr "" -#: engine/core/docs/drf/viewsets.py:949 +#: engine/core/docs/drf/viewsets.py:973 msgid "replace an existing order–product relation" msgstr "" -#: engine/core/docs/drf/viewsets.py:959 +#: engine/core/docs/drf/viewsets.py:983 msgid "partially update an existing order–product relation" msgstr "" -#: engine/core/docs/drf/viewsets.py:969 +#: engine/core/docs/drf/viewsets.py:993 msgid "delete an order–product relation" msgstr "" -#: engine/core/docs/drf/viewsets.py:979 +#: engine/core/docs/drf/viewsets.py:1003 msgid "add or remove feedback on an order–product relation" msgstr "" -#: engine/core/docs/drf/viewsets.py:996 +#: engine/core/docs/drf/viewsets.py:1020 msgid "list all brands (simple view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1003 +#: engine/core/docs/drf/viewsets.py:1027 msgid "retrieve a single brand (detailed view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051 +#: engine/core/docs/drf/viewsets.py:1032 engine/core/docs/drf/viewsets.py:1075 msgid "Brand UUID or slug" msgstr "" -#: engine/core/docs/drf/viewsets.py:1018 +#: engine/core/docs/drf/viewsets.py:1042 msgid "create a brand" msgstr "" -#: engine/core/docs/drf/viewsets.py:1025 +#: engine/core/docs/drf/viewsets.py:1049 msgid "delete a brand" msgstr "" -#: engine/core/docs/drf/viewsets.py:1032 +#: engine/core/docs/drf/viewsets.py:1056 msgid "rewrite an existing brand saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1039 +#: engine/core/docs/drf/viewsets.py:1063 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1064 +#: engine/core/docs/drf/viewsets.py:1088 msgid "list all vendors (simple view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1074 +#: engine/core/docs/drf/viewsets.py:1098 msgid "retrieve a single vendor (detailed view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1081 +#: engine/core/docs/drf/viewsets.py:1105 msgid "create a vendor" msgstr "" -#: engine/core/docs/drf/viewsets.py:1088 +#: engine/core/docs/drf/viewsets.py:1112 msgid "delete a vendor" msgstr "" -#: engine/core/docs/drf/viewsets.py:1095 +#: engine/core/docs/drf/viewsets.py:1119 msgid "rewrite an existing vendor saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1102 +#: engine/core/docs/drf/viewsets.py:1126 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1112 +#: engine/core/docs/drf/viewsets.py:1136 msgid "list all product images (simple view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1122 +#: engine/core/docs/drf/viewsets.py:1146 msgid "retrieve a single product image (detailed view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1129 +#: engine/core/docs/drf/viewsets.py:1153 msgid "create a product image" msgstr "" -#: engine/core/docs/drf/viewsets.py:1139 +#: engine/core/docs/drf/viewsets.py:1163 msgid "delete a product image" msgstr "" -#: engine/core/docs/drf/viewsets.py:1146 +#: engine/core/docs/drf/viewsets.py:1170 msgid "rewrite an existing product image saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1154 +#: engine/core/docs/drf/viewsets.py:1178 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1165 +#: engine/core/docs/drf/viewsets.py:1189 msgid "list all promo codes (simple view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1175 +#: engine/core/docs/drf/viewsets.py:1199 msgid "retrieve a single promo code (detailed view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1182 +#: engine/core/docs/drf/viewsets.py:1206 msgid "create a promo code" msgstr "" -#: engine/core/docs/drf/viewsets.py:1189 +#: engine/core/docs/drf/viewsets.py:1213 msgid "delete a promo code" msgstr "" -#: engine/core/docs/drf/viewsets.py:1196 +#: engine/core/docs/drf/viewsets.py:1220 msgid "rewrite an existing promo code saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1203 +#: engine/core/docs/drf/viewsets.py:1227 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1213 +#: engine/core/docs/drf/viewsets.py:1237 msgid "list all promotions (simple view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1223 +#: engine/core/docs/drf/viewsets.py:1247 msgid "retrieve a single promotion (detailed view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1230 +#: engine/core/docs/drf/viewsets.py:1254 msgid "create a promotion" msgstr "" -#: engine/core/docs/drf/viewsets.py:1237 +#: engine/core/docs/drf/viewsets.py:1261 msgid "delete a promotion" msgstr "" -#: engine/core/docs/drf/viewsets.py:1244 +#: engine/core/docs/drf/viewsets.py:1268 msgid "rewrite an existing promotion saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1251 +#: engine/core/docs/drf/viewsets.py:1275 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1261 +#: engine/core/docs/drf/viewsets.py:1285 msgid "list all stocks (simple view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1268 +#: engine/core/docs/drf/viewsets.py:1292 msgid "retrieve a single stock (detailed view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1275 +#: engine/core/docs/drf/viewsets.py:1299 msgid "create a stock record" msgstr "" -#: engine/core/docs/drf/viewsets.py:1282 +#: engine/core/docs/drf/viewsets.py:1306 msgid "delete a stock record" msgstr "" -#: engine/core/docs/drf/viewsets.py:1289 +#: engine/core/docs/drf/viewsets.py:1313 msgid "rewrite an existing stock record saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1297 +#: engine/core/docs/drf/viewsets.py:1321 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1308 +#: engine/core/docs/drf/viewsets.py:1332 msgid "list all product tags (simple view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1318 +#: engine/core/docs/drf/viewsets.py:1342 msgid "retrieve a single product tag (detailed view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1325 +#: engine/core/docs/drf/viewsets.py:1349 msgid "create a product tag" msgstr "" -#: engine/core/docs/drf/viewsets.py:1335 +#: engine/core/docs/drf/viewsets.py:1359 msgid "delete a product tag" msgstr "" -#: engine/core/docs/drf/viewsets.py:1342 +#: engine/core/docs/drf/viewsets.py:1366 msgid "rewrite an existing product tag saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1350 +#: engine/core/docs/drf/viewsets.py:1374 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "" @@ -927,419 +957,425 @@ msgstr "" msgid "no search term provided." msgstr "" -#: engine/core/filters.py:78 engine/core/filters.py:484 -#: engine/core/filters.py:625 +#: engine/core/filters.py:79 engine/core/filters.py:485 +#: engine/core/filters.py:626 msgid "Search" msgstr "" -#: engine/core/filters.py:79 engine/core/filters.py:663 -#: engine/core/filters.py:692 +#: engine/core/filters.py:80 engine/core/filters.py:664 +#: engine/core/filters.py:693 msgid "UUID" msgstr "" -#: engine/core/filters.py:80 engine/core/filters.py:487 -#: engine/core/filters.py:627 +#: engine/core/filters.py:81 engine/core/filters.py:488 +#: engine/core/filters.py:628 msgid "Name" msgstr "" -#: engine/core/filters.py:82 engine/core/filters.py:630 +#: engine/core/filters.py:83 engine/core/filters.py:631 msgid "Categories" msgstr "" -#: engine/core/filters.py:86 +#: engine/core/filters.py:87 msgid "Categories Slugs" msgstr "" -#: engine/core/filters.py:88 engine/core/filters.py:495 +#: engine/core/filters.py:89 engine/core/filters.py:496 +#: engine/core/templates/admin_doc/index.html:37 +#: engine/core/templates/admin_doc/template_tag_index.html:12 msgid "Tags" msgstr "" -#: engine/core/filters.py:90 +#: engine/core/filters.py:91 msgid "Min Price" msgstr "" -#: engine/core/filters.py:93 +#: engine/core/filters.py:94 msgid "Max Price" msgstr "" -#: engine/core/filters.py:95 +#: engine/core/filters.py:96 msgid "Is Active" msgstr "" -#: engine/core/filters.py:96 +#: engine/core/filters.py:97 msgid "Brand" msgstr "" -#: engine/core/filters.py:97 +#: engine/core/filters.py:98 msgid "Attributes" msgstr "" -#: engine/core/filters.py:99 +#: engine/core/filters.py:100 msgid "Quantity" msgstr "" -#: engine/core/filters.py:101 engine/core/filters.py:489 -#: engine/core/filters.py:628 engine/core/models.py:316 -#: engine/core/models.py:497 engine/core/models.py:663 +#: engine/core/filters.py:102 engine/core/filters.py:490 +#: engine/core/filters.py:629 engine/core/models.py:339 +#: engine/core/models.py:546 engine/core/models.py:736 msgid "Slug" msgstr "" -#: engine/core/filters.py:102 +#: engine/core/filters.py:103 msgid "Is Digital" msgstr "" -#: engine/core/filters.py:104 +#: engine/core/filters.py:105 msgid "Include sub-categories" msgstr "" -#: engine/core/filters.py:108 +#: engine/core/filters.py:109 msgid "Include personal ordered" msgstr "" -#: engine/core/filters.py:110 engine/core/models.py:667 +#: engine/core/filters.py:111 engine/core/models.py:740 msgid "SKU" msgstr "" -#: engine/core/filters.py:212 +#: engine/core/filters.py:213 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" -#: engine/core/filters.py:398 +#: engine/core/filters.py:399 msgid "Search (ID, product name or part number)" msgstr "" -#: engine/core/filters.py:402 +#: engine/core/filters.py:403 msgid "Bought after (inclusive)" msgstr "" -#: engine/core/filters.py:405 +#: engine/core/filters.py:406 msgid "Bought before (inclusive)" msgstr "" -#: engine/core/filters.py:410 engine/core/filters.py:461 -#: engine/core/filters.py:697 +#: engine/core/filters.py:411 engine/core/filters.py:462 +#: engine/core/filters.py:698 msgid "User email" msgstr "" -#: engine/core/filters.py:413 engine/core/filters.py:464 -#: engine/core/filters.py:672 engine/core/filters.py:694 +#: engine/core/filters.py:414 engine/core/filters.py:465 +#: engine/core/filters.py:673 engine/core/filters.py:695 msgid "User UUID" msgstr "" -#: engine/core/filters.py:415 +#: engine/core/filters.py:416 msgid "Status" msgstr "" -#: engine/core/filters.py:419 +#: engine/core/filters.py:420 msgid "Human Readable ID" msgstr "" -#: engine/core/filters.py:488 +#: engine/core/filters.py:489 msgid "Parent" msgstr "" -#: engine/core/filters.py:492 +#: engine/core/filters.py:493 msgid "Whole category(has at least 1 product or not)" msgstr "" -#: engine/core/filters.py:496 +#: engine/core/filters.py:497 msgid "Level" msgstr "" -#: engine/core/filters.py:667 +#: engine/core/filters.py:668 msgid "Product UUID" msgstr "" -#: engine/core/graphene/mutations.py:40 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:43 msgid "data to store in cache" msgstr "" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:46 msgid "timeout in seconds to set the data for into the cache" msgstr "" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:49 msgid "cached data" msgstr "" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:64 msgid "camelized JSON data from the requested URL" msgstr "" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:248 +#: engine/core/graphene/mutations.py:69 engine/core/views.py:267 msgid "only URLs starting with http(s):// are allowed" msgstr "" -#: engine/core/graphene/mutations.py:86 +#: engine/core/graphene/mutations.py:87 msgid "add a product to the order" msgstr "" -#: engine/core/graphene/mutations.py:109 engine/core/graphene/mutations.py:138 -#: engine/core/graphene/mutations.py:254 engine/core/graphene/mutations.py:306 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139 +#: engine/core/graphene/mutations.py:256 engine/core/graphene/mutations.py:308 #, python-brace-format msgid "order {order_uuid} not found" msgstr "" -#: engine/core/graphene/mutations.py:115 engine/core/graphene/mutations.py:166 +#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167 msgid "remove a product from the order" msgstr "" -#: engine/core/graphene/mutations.py:144 +#: engine/core/graphene/mutations.py:145 msgid "remove all products from the order" msgstr "" -#: engine/core/graphene/mutations.py:189 +#: engine/core/graphene/mutations.py:190 msgid "buy an order" msgstr "" -#: engine/core/graphene/mutations.py:220 engine/core/graphene/mutations.py:282 +#: engine/core/graphene/mutations.py:222 engine/core/graphene/mutations.py:284 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" -#: engine/core/graphene/mutations.py:249 engine/core/graphene/mutations.py:524 -#: engine/core/graphene/mutations.py:573 engine/core/viewsets.py:753 +#: engine/core/graphene/mutations.py:251 engine/core/graphene/mutations.py:526 +#: engine/core/graphene/mutations.py:576 engine/core/viewsets.py:783 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" -#: engine/core/graphene/mutations.py:260 +#: engine/core/graphene/mutations.py:262 msgid "perform an action on a list of products in the order" msgstr "" -#: engine/core/graphene/mutations.py:265 +#: engine/core/graphene/mutations.py:267 msgid "remove/add" msgstr "" -#: engine/core/graphene/mutations.py:301 engine/core/graphene/mutations.py:342 +#: engine/core/graphene/mutations.py:303 engine/core/graphene/mutations.py:342 msgid "action must be either add or remove" msgstr "" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:314 msgid "perform an action on a list of products in the wishlist" msgstr "" -#: engine/core/graphene/mutations.py:330 -msgid "please provide wishlist_uuid value" -msgstr "" - -#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:423 -#: engine/core/graphene/mutations.py:451 engine/core/graphene/mutations.py:479 -#: engine/core/graphene/mutations.py:529 +#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:424 +#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480 +#: engine/core/graphene/mutations.py:531 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "" -#: engine/core/graphene/mutations.py:401 +#: engine/core/graphene/mutations.py:402 msgid "add a product to the wishlist" msgstr "" -#: engine/core/graphene/mutations.py:429 +#: engine/core/graphene/mutations.py:430 msgid "remove a product from the wishlist" msgstr "" -#: engine/core/graphene/mutations.py:457 +#: engine/core/graphene/mutations.py:458 msgid "remove all products from the wishlist" msgstr "" -#: engine/core/graphene/mutations.py:485 +#: engine/core/graphene/mutations.py:486 msgid "buy all products from the wishlist" msgstr "" -#: engine/core/graphene/mutations.py:535 +#: engine/core/graphene/mutations.py:537 msgid "buy a product" msgstr "" -#: engine/core/graphene/mutations.py:542 +#: engine/core/graphene/mutations.py:544 msgid "" "please send the attributes as the string formatted like attr1=value1," "attr2=value2" msgstr "" -#: engine/core/graphene/mutations.py:580 +#: engine/core/graphene/mutations.py:583 msgid "add or delete a feedback for orderproduct" msgstr "" -#: engine/core/graphene/mutations.py:606 +#: engine/core/graphene/mutations.py:610 msgid "action must be either `add` or `remove`" msgstr "" -#: engine/core/graphene/mutations.py:609 +#: engine/core/graphene/mutations.py:613 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "" -#: engine/core/graphene/mutations.py:616 +#: engine/core/graphene/mutations.py:620 msgid "original address string provided by the user" msgstr "" -#: engine/core/graphene/mutations.py:653 engine/core/models.py:986 -#: engine/core/models.py:999 engine/core/models.py:1443 -#: engine/core/models.py:1474 engine/core/models.py:1505 -#: engine/core/viewsets.py:760 +#: engine/core/graphene/mutations.py:662 engine/core/models.py:1079 +#: engine/core/models.py:1092 engine/core/models.py:1544 +#: engine/core/models.py:1575 engine/core/models.py:1606 +#: engine/core/viewsets.py:790 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "" -#: engine/core/graphene/mutations.py:667 +#: engine/core/graphene/mutations.py:676 msgid "limit must be between 1 and 10" msgstr "" -#: engine/core/graphene/mutations.py:716 +#: engine/core/graphene/mutations.py:726 msgid "elasticsearch - works like a charm" msgstr "" -#: engine/core/graphene/object_types.py:84 -#: engine/core/graphene/object_types.py:420 -#: engine/core/graphene/object_types.py:471 engine/core/models.py:803 -#: engine/core/models.py:1297 engine/core/models.py:2033 +#: engine/core/graphene/object_types.py:88 +#: engine/core/graphene/object_types.py:425 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:889 +#: engine/core/models.py:1394 engine/core/models.py:2139 msgid "attributes" msgstr "" -#: engine/core/graphene/object_types.py:97 +#: engine/core/graphene/object_types.py:101 msgid "grouped attributes" msgstr "" -#: engine/core/graphene/object_types.py:104 +#: engine/core/graphene/object_types.py:108 msgid "groups of attributes" msgstr "" -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:217 -#: engine/core/graphene/object_types.py:255 engine/core/models.py:440 +#: engine/core/graphene/object_types.py:122 +#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:264 engine/core/models.py:489 msgid "categories" msgstr "" -#: engine/core/graphene/object_types.py:134 engine/core/models.py:511 +#: engine/core/graphene/object_types.py:138 engine/core/models.py:564 msgid "brands" msgstr "" -#: engine/core/graphene/object_types.py:219 +#: engine/core/graphene/object_types.py:226 msgid "category image url" msgstr "" -#: engine/core/graphene/object_types.py:220 -#: engine/core/graphene/object_types.py:365 engine/core/models.py:278 +#: engine/core/graphene/object_types.py:227 +#: engine/core/graphene/object_types.py:369 engine/core/models.py:301 msgid "markup percentage" msgstr "" -#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:231 msgid "which attributes and values can be used for filtering this category." msgstr "" -#: engine/core/graphene/object_types.py:230 +#: engine/core/graphene/object_types.py:237 msgid "minimum and maximum prices for products in this category, if available." msgstr "" -#: engine/core/graphene/object_types.py:234 +#: engine/core/graphene/object_types.py:240 +msgid "brands in this category" +msgstr "" + +#: engine/core/graphene/object_types.py:242 msgid "tags for this category" msgstr "" -#: engine/core/graphene/object_types.py:237 +#: engine/core/graphene/object_types.py:245 msgid "products in this category" msgstr "" -#: engine/core/graphene/object_types.py:372 engine/core/models.py:183 +#: engine/core/graphene/object_types.py:376 engine/core/models.py:202 msgid "vendors" msgstr "" -#: engine/core/graphene/object_types.py:376 +#: engine/core/graphene/object_types.py:380 msgid "Latitude (Y coordinate)" msgstr "" -#: engine/core/graphene/object_types.py:377 +#: engine/core/graphene/object_types.py:381 msgid "Longitude (X coordinate)" msgstr "" -#: engine/core/graphene/object_types.py:406 +#: engine/core/graphene/object_types.py:411 msgid "comment" msgstr "" -#: engine/core/graphene/object_types.py:408 -#: engine/core/graphene/object_types.py:542 +#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:548 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "" -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:421 msgid "represents feedback from a user." msgstr "" -#: engine/core/graphene/object_types.py:421 -#: engine/core/graphene/object_types.py:472 engine/core/models.py:1291 +#: engine/core/graphene/object_types.py:426 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:1388 msgid "notifications" msgstr "" -#: engine/core/graphene/object_types.py:423 +#: engine/core/graphene/object_types.py:428 msgid "download url for this order product if applicable" msgstr "" -#: engine/core/graphene/object_types.py:425 engine/core/models.py:1856 +#: engine/core/graphene/object_types.py:430 engine/core/models.py:1959 msgid "feedback" msgstr "" -#: engine/core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:464 msgid "a list of order products in this order" msgstr "" -#: engine/core/graphene/object_types.py:461 engine/core/models.py:1261 +#: engine/core/graphene/object_types.py:466 engine/core/models.py:1358 msgid "billing address" msgstr "" -#: engine/core/graphene/object_types.py:465 +#: engine/core/graphene/object_types.py:470 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" msgstr "" -#: engine/core/graphene/object_types.py:468 +#: engine/core/graphene/object_types.py:473 msgid "total price of this order" msgstr "" -#: engine/core/graphene/object_types.py:469 +#: engine/core/graphene/object_types.py:474 msgid "total quantity of products in order" msgstr "" -#: engine/core/graphene/object_types.py:470 +#: engine/core/graphene/object_types.py:475 msgid "are all products in the order digital" msgstr "" -#: engine/core/graphene/object_types.py:474 +#: engine/core/graphene/object_types.py:479 msgid "transactions for this order" msgstr "" -#: engine/core/graphene/object_types.py:494 engine/core/models.py:1325 +#: engine/core/graphene/object_types.py:499 engine/core/models.py:1422 msgid "orders" msgstr "" -#: engine/core/graphene/object_types.py:515 +#: engine/core/graphene/object_types.py:520 msgid "image url" msgstr "" -#: engine/core/graphene/object_types.py:522 +#: engine/core/graphene/object_types.py:527 msgid "product's images" msgstr "" -#: engine/core/graphene/object_types.py:529 engine/core/models.py:439 -#: engine/core/models.py:596 +#: engine/core/graphene/object_types.py:534 engine/core/models.py:488 +#: engine/core/models.py:661 msgid "category" msgstr "" -#: engine/core/graphene/object_types.py:531 engine/core/models.py:1857 +#: engine/core/graphene/object_types.py:536 engine/core/models.py:1960 msgid "feedbacks" msgstr "" -#: engine/core/graphene/object_types.py:532 engine/core/models.py:510 -#: engine/core/models.py:605 +#: engine/core/graphene/object_types.py:537 engine/core/models.py:563 +#: engine/core/models.py:670 msgid "brand" msgstr "" -#: engine/core/graphene/object_types.py:534 engine/core/models.py:103 +#: engine/core/graphene/object_types.py:538 +msgid "video url" +msgstr "" + +#: engine/core/graphene/object_types.py:540 engine/core/models.py:122 msgid "attribute groups" msgstr "" -#: engine/core/graphene/object_types.py:536 +#: engine/core/graphene/object_types.py:542 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1347,7 +1383,7 @@ msgstr "" msgid "price" msgstr "" -#: engine/core/graphene/object_types.py:537 +#: engine/core/graphene/object_types.py:543 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1355,39 +1391,39 @@ msgstr "" msgid "quantity" msgstr "" -#: engine/core/graphene/object_types.py:538 +#: engine/core/graphene/object_types.py:544 msgid "number of feedbacks" msgstr "" -#: engine/core/graphene/object_types.py:539 +#: engine/core/graphene/object_types.py:545 msgid "only available for personal orders" msgstr "" -#: engine/core/graphene/object_types.py:544 +#: engine/core/graphene/object_types.py:550 msgid "discount price" msgstr "" -#: engine/core/graphene/object_types.py:568 engine/core/models.py:682 +#: engine/core/graphene/object_types.py:575 engine/core/models.py:755 msgid "products" msgstr "" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:691 msgid "promocodes" msgstr "" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:706 msgid "products on sale" msgstr "" -#: engine/core/graphene/object_types.py:701 engine/core/models.py:935 +#: engine/core/graphene/object_types.py:720 engine/core/models.py:1028 msgid "promotions" msgstr "" -#: engine/core/graphene/object_types.py:705 engine/core/models.py:182 +#: engine/core/graphene/object_types.py:727 engine/core/models.py:201 msgid "vendor" msgstr "" -#: engine/core/graphene/object_types.py:706 engine/core/models.py:681 +#: engine/core/graphene/object_types.py:728 engine/core/models.py:754 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1395,102 +1431,102 @@ msgstr "" msgid "product" msgstr "" -#: engine/core/graphene/object_types.py:718 engine/core/models.py:958 +#: engine/core/graphene/object_types.py:740 engine/core/models.py:1051 msgid "wishlisted products" msgstr "" -#: engine/core/graphene/object_types.py:725 engine/core/models.py:975 +#: engine/core/graphene/object_types.py:747 engine/core/models.py:1068 msgid "wishlists" msgstr "" -#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:752 msgid "tagged products" msgstr "" -#: engine/core/graphene/object_types.py:738 engine/core/models.py:219 -#: engine/core/models.py:611 +#: engine/core/graphene/object_types.py:760 engine/core/models.py:238 +#: engine/core/models.py:676 msgid "product tags" msgstr "" -#: engine/core/graphene/object_types.py:743 +#: engine/core/graphene/object_types.py:765 msgid "tagged categories" msgstr "" -#: engine/core/graphene/object_types.py:751 +#: engine/core/graphene/object_types.py:773 msgid "categories tags" msgstr "" -#: engine/core/graphene/object_types.py:755 +#: engine/core/graphene/object_types.py:777 msgid "project name" msgstr "" -#: engine/core/graphene/object_types.py:756 +#: engine/core/graphene/object_types.py:778 msgid "company name" msgstr "" -#: engine/core/graphene/object_types.py:757 +#: engine/core/graphene/object_types.py:779 msgid "company address" msgstr "" -#: engine/core/graphene/object_types.py:758 +#: engine/core/graphene/object_types.py:780 msgid "company phone number" msgstr "" -#: engine/core/graphene/object_types.py:761 +#: engine/core/graphene/object_types.py:783 msgid "email from, sometimes it must be used instead of host user value" msgstr "" -#: engine/core/graphene/object_types.py:764 +#: engine/core/graphene/object_types.py:786 msgid "email host user" msgstr "" -#: engine/core/graphene/object_types.py:765 +#: engine/core/graphene/object_types.py:787 msgid "maximum amount for payment" msgstr "" -#: engine/core/graphene/object_types.py:766 +#: engine/core/graphene/object_types.py:788 msgid "minimum amount for payment" msgstr "" -#: engine/core/graphene/object_types.py:767 +#: engine/core/graphene/object_types.py:789 msgid "analytics data" msgstr "" -#: engine/core/graphene/object_types.py:768 +#: engine/core/graphene/object_types.py:790 msgid "advertisement data" msgstr "" -#: engine/core/graphene/object_types.py:771 +#: engine/core/graphene/object_types.py:793 msgid "company configuration" msgstr "" -#: engine/core/graphene/object_types.py:775 +#: engine/core/graphene/object_types.py:797 msgid "language code" msgstr "" -#: engine/core/graphene/object_types.py:776 +#: engine/core/graphene/object_types.py:798 msgid "language name" msgstr "" -#: engine/core/graphene/object_types.py:777 +#: engine/core/graphene/object_types.py:799 msgid "language flag, if exists :)" msgstr "" -#: engine/core/graphene/object_types.py:780 +#: engine/core/graphene/object_types.py:802 msgid "supported languages" msgstr "" -#: engine/core/graphene/object_types.py:812 -#: engine/core/graphene/object_types.py:815 -#: engine/core/graphene/object_types.py:818 +#: engine/core/graphene/object_types.py:834 +#: engine/core/graphene/object_types.py:837 +#: engine/core/graphene/object_types.py:840 msgid "products search results" msgstr "" -#: engine/core/graphene/object_types.py:820 +#: engine/core/graphene/object_types.py:842 msgid "posts search results" msgstr "" -#: engine/core/models.py:75 +#: engine/core/models.py:91 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 " @@ -1498,23 +1534,23 @@ msgid "" "categorizing and managing attributes more effectively in acomplex system." msgstr "" -#: engine/core/models.py:88 +#: engine/core/models.py:107 msgid "parent of this group" msgstr "" -#: engine/core/models.py:89 +#: engine/core/models.py:108 msgid "parent attribute group" msgstr "" -#: engine/core/models.py:93 engine/core/models.py:94 +#: engine/core/models.py:112 engine/core/models.py:113 msgid "attribute group's name" msgstr "" -#: engine/core/models.py:102 engine/core/models.py:763 +#: engine/core/models.py:121 engine/core/models.py:849 msgid "attribute group" msgstr "" -#: engine/core/models.py:108 +#: engine/core/models.py:127 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1525,47 +1561,47 @@ msgid "" "use in systems that interact with third-party vendors." msgstr "" -#: engine/core/models.py:122 +#: engine/core/models.py:141 msgid "stores credentials and endpoints required for vendor communication" msgstr "" -#: engine/core/models.py:124 +#: engine/core/models.py:143 msgid "authentication info" msgstr "" -#: engine/core/models.py:129 +#: engine/core/models.py:148 msgid "define the markup for products retrieved from this vendor" msgstr "" -#: engine/core/models.py:130 +#: engine/core/models.py:149 msgid "vendor markup percentage" msgstr "" -#: engine/core/models.py:134 +#: engine/core/models.py:153 msgid "name of this vendor" msgstr "" -#: engine/core/models.py:135 +#: engine/core/models.py:154 msgid "vendor name" msgstr "" -#: engine/core/models.py:150 +#: engine/core/models.py:169 msgid "response file" msgstr "" -#: engine/core/models.py:151 +#: engine/core/models.py:170 msgid "vendor's last processing response" msgstr "" -#: engine/core/models.py:157 +#: engine/core/models.py:176 msgid "vendor's integration file path" msgstr "" -#: engine/core/models.py:158 +#: engine/core/models.py:177 msgid "integration path" msgstr "" -#: engine/core/models.py:192 +#: engine/core/models.py:211 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1574,42 +1610,42 @@ msgid "" "metadata customization for administrative purposes." msgstr "" -#: engine/core/models.py:204 engine/core/models.py:235 +#: engine/core/models.py:223 engine/core/models.py:254 msgid "internal tag identifier for the product tag" msgstr "" -#: engine/core/models.py:205 engine/core/models.py:236 +#: engine/core/models.py:224 engine/core/models.py:255 msgid "tag name" msgstr "" -#: engine/core/models.py:209 engine/core/models.py:240 +#: engine/core/models.py:228 engine/core/models.py:259 msgid "user-friendly name for the product tag" msgstr "" -#: engine/core/models.py:210 engine/core/models.py:241 +#: engine/core/models.py:229 engine/core/models.py:260 msgid "tag display name" msgstr "" -#: engine/core/models.py:218 +#: engine/core/models.py:237 msgid "product tag" msgstr "" -#: engine/core/models.py:224 +#: engine/core/models.py:243 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 "" -#: engine/core/models.py:249 +#: engine/core/models.py:268 msgid "category tag" msgstr "" -#: engine/core/models.py:250 engine/core/models.py:322 +#: engine/core/models.py:269 engine/core/models.py:345 msgid "category tags" msgstr "" -#: engine/core/models.py:255 +#: engine/core/models.py:274 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1622,51 +1658,51 @@ msgid "" "priority." msgstr "" -#: engine/core/models.py:269 +#: engine/core/models.py:292 msgid "upload an image representing this category" msgstr "" -#: engine/core/models.py:272 +#: engine/core/models.py:295 msgid "category image" msgstr "" -#: engine/core/models.py:277 +#: engine/core/models.py:300 msgid "define a markup percentage for products in this category" msgstr "" -#: engine/core/models.py:286 +#: engine/core/models.py:309 msgid "parent of this category to form a hierarchical structure" msgstr "" -#: engine/core/models.py:287 +#: engine/core/models.py:310 msgid "parent category" msgstr "" -#: engine/core/models.py:292 +#: engine/core/models.py:315 msgid "category name" msgstr "" -#: engine/core/models.py:293 +#: engine/core/models.py:316 msgid "provide a name for this category" msgstr "" -#: engine/core/models.py:300 +#: engine/core/models.py:323 msgid "add a detailed description for this category" msgstr "" -#: engine/core/models.py:301 +#: engine/core/models.py:324 msgid "category description" msgstr "" -#: engine/core/models.py:321 +#: engine/core/models.py:344 msgid "tags that help describe or group this category" msgstr "" -#: engine/core/models.py:328 engine/core/models.py:503 +#: engine/core/models.py:351 engine/core/models.py:552 msgid "priority" msgstr "" -#: engine/core/models.py:446 +#: engine/core/models.py:495 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1674,47 +1710,43 @@ msgid "" "organization and representation of brand-related data within the application." msgstr "" -#: engine/core/models.py:456 +#: engine/core/models.py:505 msgid "name of this brand" msgstr "" -#: engine/core/models.py:457 +#: engine/core/models.py:506 msgid "brand name" msgstr "" -#: engine/core/models.py:464 +#: engine/core/models.py:513 msgid "upload a logo representing this brand" msgstr "" -#: engine/core/models.py:466 +#: engine/core/models.py:515 msgid "brand small image" msgstr "" -#: engine/core/models.py:472 +#: engine/core/models.py:521 msgid "upload a big logo representing this brand" msgstr "" -#: engine/core/models.py:474 +#: engine/core/models.py:523 msgid "brand big image" msgstr "" -#: engine/core/models.py:479 +#: engine/core/models.py:528 msgid "add a detailed description of the brand" msgstr "" -#: engine/core/models.py:480 +#: engine/core/models.py:529 msgid "brand description" msgstr "" -#: engine/core/models.py:485 -msgid "optional categories that this brand is associated with" +#: engine/core/models.py:534 engine/core/models.py:535 +msgid "DEPRECATED" msgstr "" -#: engine/core/models.py:486 -msgid "associated categories" -msgstr "" - -#: engine/core/models.py:516 +#: engine/core/models.py:569 msgid "" "Represents the stock of a product managed in the system. This class provides " "details about the relationship between vendors, products, and their stock " @@ -1724,72 +1756,72 @@ msgid "" "from various vendors." msgstr "" -#: engine/core/models.py:528 +#: engine/core/models.py:581 msgid "the vendor supplying this product stock" msgstr "" -#: engine/core/models.py:529 +#: engine/core/models.py:582 msgid "associated vendor" msgstr "" -#: engine/core/models.py:533 +#: engine/core/models.py:588 msgid "final price to the customer after markups" msgstr "" -#: engine/core/models.py:534 +#: engine/core/models.py:589 msgid "selling price" msgstr "" -#: engine/core/models.py:539 +#: engine/core/models.py:594 msgid "the product associated with this stock entry" msgstr "" -#: engine/core/models.py:540 engine/core/models.py:828 -#: engine/core/models.py:874 engine/core/models.py:1912 +#: engine/core/models.py:595 engine/core/models.py:914 +#: engine/core/models.py:962 engine/core/models.py:2020 msgid "associated product" msgstr "" -#: engine/core/models.py:547 +#: engine/core/models.py:604 msgid "the price paid to the vendor for this product" msgstr "" -#: engine/core/models.py:548 +#: engine/core/models.py:605 msgid "vendor purchase price" msgstr "" -#: engine/core/models.py:552 +#: engine/core/models.py:609 msgid "available quantity of the product in stock" msgstr "" -#: engine/core/models.py:553 +#: engine/core/models.py:610 msgid "quantity in stock" msgstr "" -#: engine/core/models.py:557 +#: engine/core/models.py:614 msgid "vendor-assigned SKU for identifying the product" msgstr "" -#: engine/core/models.py:558 +#: engine/core/models.py:615 msgid "vendor sku" msgstr "" -#: engine/core/models.py:564 +#: engine/core/models.py:621 msgid "digital file associated with this stock if applicable" msgstr "" -#: engine/core/models.py:565 +#: engine/core/models.py:622 msgid "digital file" msgstr "" -#: engine/core/models.py:569 +#: engine/core/models.py:626 msgid "system attributes" msgstr "" -#: engine/core/models.py:577 +#: engine/core/models.py:636 msgid "stock entries" msgstr "" -#: engine/core/models.py:582 +#: engine/core/models.py:641 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1801,71 +1833,79 @@ msgid "" "product data and its associated information within an application." msgstr "" -#: engine/core/models.py:595 +#: engine/core/models.py:660 msgid "category this product belongs to" msgstr "" -#: engine/core/models.py:604 +#: engine/core/models.py:669 msgid "optionally associate this product with a brand" msgstr "" -#: engine/core/models.py:610 +#: engine/core/models.py:675 msgid "tags that help describe or group this product" msgstr "" -#: engine/core/models.py:615 +#: engine/core/models.py:680 msgid "indicates whether this product is digitally delivered" msgstr "" -#: engine/core/models.py:616 +#: engine/core/models.py:681 msgid "is product digital" msgstr "" -#: engine/core/models.py:623 +#: engine/core/models.py:688 msgid "indicates whether this product should be updated from periodic task" msgstr "" -#: engine/core/models.py:625 +#: engine/core/models.py:690 msgid "is product updatable" msgstr "" -#: engine/core/models.py:631 +#: engine/core/models.py:696 msgid "provide a clear identifying name for the product" msgstr "" -#: engine/core/models.py:632 +#: engine/core/models.py:697 msgid "product name" msgstr "" -#: engine/core/models.py:638 engine/core/models.py:923 +#: engine/core/models.py:703 engine/core/models.py:1012 msgid "add a detailed description of the product" msgstr "" -#: engine/core/models.py:639 +#: engine/core/models.py:704 msgid "product description" msgstr "" -#: engine/core/models.py:646 +#: engine/core/models.py:710 +msgid "optional video file for this product" +msgstr "" + +#: engine/core/models.py:711 +msgid "product video" +msgstr "" + +#: engine/core/models.py:719 msgid "part number for this product" msgstr "" -#: engine/core/models.py:647 +#: engine/core/models.py:720 msgid "part number" msgstr "" -#: engine/core/models.py:666 +#: engine/core/models.py:739 msgid "stock keeping unit for this product" msgstr "" -#: engine/core/models.py:673 +#: engine/core/models.py:746 msgid "whether to export this product to marketplaces" msgstr "" -#: engine/core/models.py:674 +#: engine/core/models.py:747 msgid "Export to Marketplaces" msgstr "" -#: engine/core/models.py:749 +#: engine/core/models.py:835 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 " @@ -1875,83 +1915,83 @@ msgid "" "for dynamic and flexible data structuring." msgstr "" -#: engine/core/models.py:762 +#: engine/core/models.py:848 msgid "group of this attribute" msgstr "" -#: engine/core/models.py:768 +#: engine/core/models.py:854 msgid "string" msgstr "" -#: engine/core/models.py:769 +#: engine/core/models.py:855 msgid "integer" msgstr "" -#: engine/core/models.py:770 +#: engine/core/models.py:856 msgid "float" msgstr "" -#: engine/core/models.py:771 +#: engine/core/models.py:857 msgid "boolean" msgstr "" -#: engine/core/models.py:772 +#: engine/core/models.py:858 msgid "array" msgstr "" -#: engine/core/models.py:773 +#: engine/core/models.py:859 msgid "object" msgstr "" -#: engine/core/models.py:775 +#: engine/core/models.py:861 msgid "type of the attribute's value" msgstr "" -#: engine/core/models.py:776 +#: engine/core/models.py:862 msgid "value type" msgstr "" -#: engine/core/models.py:781 +#: engine/core/models.py:867 msgid "name of this attribute" msgstr "" -#: engine/core/models.py:782 +#: engine/core/models.py:868 msgid "attribute's name" msgstr "" -#: engine/core/models.py:787 +#: engine/core/models.py:873 msgid "is filterable" msgstr "" -#: engine/core/models.py:789 +#: engine/core/models.py:875 msgid "designates whether this attribute can be used for filtering or not" msgstr "" -#: engine/core/models.py:802 engine/core/models.py:820 +#: engine/core/models.py:888 engine/core/models.py:906 #: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "" -#: engine/core/models.py:808 +#: engine/core/models.py:894 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 "" -#: engine/core/models.py:819 +#: engine/core/models.py:905 msgid "attribute of this value" msgstr "" -#: engine/core/models.py:827 +#: engine/core/models.py:913 msgid "the specific product associated with this attribute's value" msgstr "" -#: engine/core/models.py:833 +#: engine/core/models.py:919 msgid "the specific value for this attribute" msgstr "" -#: engine/core/models.py:846 +#: engine/core/models.py:934 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for " @@ -1960,39 +2000,39 @@ msgid "" "with alternative text for the images." msgstr "" -#: engine/core/models.py:857 +#: engine/core/models.py:945 msgid "provide alternative text for the image for accessibility" msgstr "" -#: engine/core/models.py:858 +#: engine/core/models.py:946 msgid "image alt text" msgstr "" -#: engine/core/models.py:861 +#: engine/core/models.py:949 msgid "upload the image file for this product" msgstr "" -#: engine/core/models.py:862 engine/core/models.py:893 +#: engine/core/models.py:950 engine/core/models.py:982 msgid "product image" msgstr "" -#: engine/core/models.py:867 +#: engine/core/models.py:955 msgid "determines the order in which images are displayed" msgstr "" -#: engine/core/models.py:868 +#: engine/core/models.py:956 msgid "display priority" msgstr "" -#: engine/core/models.py:873 +#: engine/core/models.py:961 msgid "the product that this image represents" msgstr "" -#: engine/core/models.py:894 +#: engine/core/models.py:983 msgid "product images" msgstr "" -#: engine/core/models.py:899 +#: engine/core/models.py:988 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -2002,39 +2042,39 @@ msgid "" "affected items in the campaign." msgstr "" -#: engine/core/models.py:911 +#: engine/core/models.py:1000 msgid "percentage discount for the selected products" msgstr "" -#: engine/core/models.py:912 +#: engine/core/models.py:1001 msgid "discount percentage" msgstr "" -#: engine/core/models.py:917 +#: engine/core/models.py:1006 msgid "provide a unique name for this promotion" msgstr "" -#: engine/core/models.py:918 +#: engine/core/models.py:1007 msgid "promotion name" msgstr "" -#: engine/core/models.py:924 +#: engine/core/models.py:1013 msgid "promotion description" msgstr "" -#: engine/core/models.py:929 +#: engine/core/models.py:1018 msgid "select which products are included in this promotion" msgstr "" -#: engine/core/models.py:930 +#: engine/core/models.py:1019 msgid "included products" msgstr "" -#: engine/core/models.py:934 +#: engine/core/models.py:1027 msgid "promotion" msgstr "" -#: engine/core/models.py:945 +#: engine/core/models.py:1038 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2042,23 +2082,23 @@ msgid "" "operations for adding and removing multiple products at once." msgstr "" -#: engine/core/models.py:957 +#: engine/core/models.py:1050 msgid "products that the user has marked as wanted" msgstr "" -#: engine/core/models.py:965 +#: engine/core/models.py:1058 msgid "user who owns this wishlist" msgstr "" -#: engine/core/models.py:966 +#: engine/core/models.py:1059 msgid "wishlist owner" msgstr "" -#: engine/core/models.py:974 +#: engine/core/models.py:1067 msgid "wishlist" msgstr "" -#: engine/core/models.py:1016 +#: engine/core/models.py:1109 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2068,19 +2108,19 @@ msgid "" "custom features." msgstr "" -#: engine/core/models.py:1031 +#: engine/core/models.py:1124 msgid "documentary" msgstr "" -#: engine/core/models.py:1032 +#: engine/core/models.py:1125 msgid "documentaries" msgstr "" -#: engine/core/models.py:1042 +#: engine/core/models.py:1135 msgid "unresolved" msgstr "" -#: engine/core/models.py:1047 +#: engine/core/models.py:1140 msgid "" "Represents an address entity that includes location details and associations " "with a user. Provides functionality for geographic and address data storage, " @@ -2092,59 +2132,59 @@ msgid "" "address with a user, facilitating personalized data handling." msgstr "" -#: engine/core/models.py:1062 +#: engine/core/models.py:1155 msgid "address line for the customer" msgstr "" -#: engine/core/models.py:1063 +#: engine/core/models.py:1156 msgid "address line" msgstr "" -#: engine/core/models.py:1065 +#: engine/core/models.py:1158 msgid "street" msgstr "" -#: engine/core/models.py:1066 +#: engine/core/models.py:1159 msgid "district" msgstr "" -#: engine/core/models.py:1067 +#: engine/core/models.py:1160 msgid "city" msgstr "" -#: engine/core/models.py:1068 +#: engine/core/models.py:1161 msgid "region" msgstr "" -#: engine/core/models.py:1069 +#: engine/core/models.py:1162 msgid "postal code" msgstr "" -#: engine/core/models.py:1070 +#: engine/core/models.py:1163 msgid "country" msgstr "" -#: engine/core/models.py:1077 +#: engine/core/models.py:1170 msgid "geolocation point: (longitude, latitude)" msgstr "" -#: engine/core/models.py:1083 +#: engine/core/models.py:1176 msgid "full JSON response from geocoder for this address" msgstr "" -#: engine/core/models.py:1089 +#: engine/core/models.py:1182 msgid "stored JSON response from the geocoding service" msgstr "" -#: engine/core/models.py:1099 +#: engine/core/models.py:1192 msgid "address" msgstr "" -#: engine/core/models.py:1100 +#: engine/core/models.py:1193 msgid "addresses" msgstr "" -#: engine/core/models.py:1112 +#: engine/core/models.py:1205 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2154,86 +2194,86 @@ msgid "" "apply the promo code to an order while ensuring constraints are met." msgstr "" -#: engine/core/models.py:1126 +#: engine/core/models.py:1219 msgid "unique code used by a user to redeem a discount" msgstr "" -#: engine/core/models.py:1127 +#: engine/core/models.py:1220 msgid "promo code identifier" msgstr "" -#: engine/core/models.py:1134 +#: engine/core/models.py:1227 msgid "fixed discount amount applied if percent is not used" msgstr "" -#: engine/core/models.py:1135 +#: engine/core/models.py:1228 msgid "fixed discount amount" msgstr "" -#: engine/core/models.py:1141 +#: engine/core/models.py:1234 msgid "percentage discount applied if fixed amount is not used" msgstr "" -#: engine/core/models.py:1142 +#: engine/core/models.py:1235 msgid "percentage discount" msgstr "" -#: engine/core/models.py:1147 +#: engine/core/models.py:1240 msgid "timestamp when the promocode expires" msgstr "" -#: engine/core/models.py:1148 +#: engine/core/models.py:1241 msgid "end validity time" msgstr "" -#: engine/core/models.py:1153 +#: engine/core/models.py:1246 msgid "timestamp from which this promocode is valid" msgstr "" -#: engine/core/models.py:1154 +#: engine/core/models.py:1247 msgid "start validity time" msgstr "" -#: engine/core/models.py:1159 +#: engine/core/models.py:1252 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" -#: engine/core/models.py:1160 +#: engine/core/models.py:1253 msgid "usage timestamp" msgstr "" -#: engine/core/models.py:1165 +#: engine/core/models.py:1258 msgid "user assigned to this promocode if applicable" msgstr "" -#: engine/core/models.py:1166 +#: engine/core/models.py:1259 msgid "assigned user" msgstr "" -#: engine/core/models.py:1173 +#: engine/core/models.py:1266 msgid "promo code" msgstr "" -#: engine/core/models.py:1174 +#: engine/core/models.py:1267 msgid "promo codes" msgstr "" -#: engine/core/models.py:1190 +#: engine/core/models.py:1283 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "" -#: engine/core/models.py:1212 +#: engine/core/models.py:1305 msgid "promocode already used" msgstr "" -#: engine/core/models.py:1234 +#: engine/core/models.py:1327 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "" -#: engine/core/models.py:1243 +#: engine/core/models.py:1336 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 " @@ -2243,145 +2283,145 @@ msgid "" "supports managing the products in the order lifecycle." msgstr "" -#: engine/core/models.py:1260 +#: engine/core/models.py:1357 msgid "the billing address used for this order" msgstr "" -#: engine/core/models.py:1268 +#: engine/core/models.py:1365 msgid "optional promo code applied to this order" msgstr "" -#: engine/core/models.py:1269 +#: engine/core/models.py:1366 msgid "applied promo code" msgstr "" -#: engine/core/models.py:1277 +#: engine/core/models.py:1374 msgid "the shipping address used for this order" msgstr "" -#: engine/core/models.py:1278 +#: engine/core/models.py:1375 msgid "shipping address" msgstr "" -#: engine/core/models.py:1284 +#: engine/core/models.py:1381 msgid "current status of the order in its lifecycle" msgstr "" -#: engine/core/models.py:1285 +#: engine/core/models.py:1382 msgid "order status" msgstr "" -#: engine/core/models.py:1290 engine/core/models.py:1889 +#: engine/core/models.py:1387 engine/core/models.py:1997 msgid "json structure of notifications to display to users" msgstr "" -#: engine/core/models.py:1296 +#: engine/core/models.py:1393 msgid "json representation of order attributes for this order" msgstr "" -#: engine/core/models.py:1302 +#: engine/core/models.py:1399 msgid "the user who placed the order" msgstr "" -#: engine/core/models.py:1303 +#: engine/core/models.py:1400 msgid "user" msgstr "" -#: engine/core/models.py:1309 +#: engine/core/models.py:1406 msgid "the timestamp when the order was finalized" msgstr "" -#: engine/core/models.py:1310 +#: engine/core/models.py:1407 msgid "buy time" msgstr "" -#: engine/core/models.py:1317 +#: engine/core/models.py:1414 msgid "a human-readable identifier for the order" msgstr "" -#: engine/core/models.py:1318 +#: engine/core/models.py:1415 msgid "human readable id" msgstr "" -#: engine/core/models.py:1324 +#: engine/core/models.py:1421 msgid "order" msgstr "" -#: engine/core/models.py:1371 +#: engine/core/models.py:1468 msgid "a user must have only one pending order at a time" msgstr "" -#: engine/core/models.py:1404 +#: engine/core/models.py:1504 msgid "you cannot add products to an order that is not a pending one" msgstr "" -#: engine/core/models.py:1410 +#: engine/core/models.py:1510 msgid "you cannot add inactive products to order" msgstr "" -#: engine/core/models.py:1432 +#: engine/core/models.py:1533 msgid "you cannot add more products than available in stock" msgstr "" -#: engine/core/models.py:1456 engine/core/models.py:1485 -#: engine/core/models.py:1495 +#: engine/core/models.py:1557 engine/core/models.py:1586 +#: engine/core/models.py:1596 msgid "you cannot remove products from an order that is not a pending one" msgstr "" -#: engine/core/models.py:1480 +#: engine/core/models.py:1581 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "" -#: engine/core/models.py:1519 +#: engine/core/models.py:1620 msgid "promocode does not exist" msgstr "" -#: engine/core/models.py:1534 +#: engine/core/models.py:1635 msgid "you can only buy physical products with shipping address specified" msgstr "" -#: engine/core/models.py:1555 +#: engine/core/models.py:1656 msgid "address does not exist" msgstr "" -#: engine/core/models.py:1577 engine/core/models.py:1656 +#: engine/core/models.py:1678 engine/core/models.py:1757 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" -#: engine/core/models.py:1583 engine/core/models.py:1649 +#: engine/core/models.py:1684 engine/core/models.py:1750 msgid "invalid force value" msgstr "" -#: engine/core/models.py:1589 engine/core/models.py:1660 +#: engine/core/models.py:1690 engine/core/models.py:1761 msgid "you cannot purchase an empty order!" msgstr "" -#: engine/core/models.py:1610 +#: engine/core/models.py:1711 msgid "you cannot buy an order without a user" msgstr "" -#: engine/core/models.py:1624 +#: engine/core/models.py:1725 msgid "a user without a balance cannot buy with balance" msgstr "" -#: engine/core/models.py:1630 +#: engine/core/models.py:1731 msgid "insufficient funds to complete the order" msgstr "" -#: engine/core/models.py:1671 +#: engine/core/models.py:1772 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "" -#: engine/core/models.py:1682 +#: engine/core/models.py:1783 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" -#: engine/core/models.py:1813 +#: engine/core/models.py:1916 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2390,31 +2430,31 @@ msgid "" "fields to effectively model and manage feedback data." msgstr "" -#: engine/core/models.py:1825 +#: engine/core/models.py:1928 msgid "user-provided comments about their experience with the product" msgstr "" -#: engine/core/models.py:1826 +#: engine/core/models.py:1929 msgid "feedback comments" msgstr "" -#: engine/core/models.py:1834 +#: engine/core/models.py:1937 msgid "references the specific product in an order that this feedback is about" msgstr "" -#: engine/core/models.py:1836 +#: engine/core/models.py:1939 msgid "related order product" msgstr "" -#: engine/core/models.py:1841 +#: engine/core/models.py:1944 msgid "user-assigned rating for the product" msgstr "" -#: engine/core/models.py:1842 +#: engine/core/models.py:1945 msgid "product rating" msgstr "" -#: engine/core/models.py:1862 +#: engine/core/models.py:1965 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2427,108 +2467,108 @@ msgid "" "Product models and stores a reference to them." msgstr "" -#: engine/core/models.py:1877 +#: engine/core/models.py:1985 msgid "the price paid by the customer for this product at purchase time" msgstr "" -#: engine/core/models.py:1878 +#: engine/core/models.py:1986 msgid "purchase price at order time" msgstr "" -#: engine/core/models.py:1883 +#: engine/core/models.py:1991 msgid "internal comments for admins about this ordered product" msgstr "" -#: engine/core/models.py:1884 +#: engine/core/models.py:1992 msgid "internal comments" msgstr "" -#: engine/core/models.py:1890 +#: engine/core/models.py:1998 msgid "user notifications" msgstr "" -#: engine/core/models.py:1895 +#: engine/core/models.py:2003 msgid "json representation of this item's attributes" msgstr "" -#: engine/core/models.py:1896 +#: engine/core/models.py:2004 msgid "ordered product attributes" msgstr "" -#: engine/core/models.py:1901 +#: engine/core/models.py:2009 msgid "reference to the parent order that contains this product" msgstr "" -#: engine/core/models.py:1902 +#: engine/core/models.py:2010 msgid "parent order" msgstr "" -#: engine/core/models.py:1911 +#: engine/core/models.py:2019 msgid "the specific product associated with this order line" msgstr "" -#: engine/core/models.py:1918 +#: engine/core/models.py:2026 msgid "quantity of this specific product in the order" msgstr "" -#: engine/core/models.py:1919 +#: engine/core/models.py:2027 msgid "product quantity" msgstr "" -#: engine/core/models.py:1926 +#: engine/core/models.py:2034 msgid "current status of this product in the order" msgstr "" -#: engine/core/models.py:1927 +#: engine/core/models.py:2035 msgid "product line status" msgstr "" -#: engine/core/models.py:1998 +#: engine/core/models.py:2106 msgid "order product must have an order" msgstr "" -#: engine/core/models.py:2000 +#: engine/core/models.py:2108 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "" -#: engine/core/models.py:2017 +#: engine/core/models.py:2125 msgid "you cannot feedback an order which is not received" msgstr "" -#: engine/core/models.py:2026 +#: engine/core/models.py:2132 engine/core/models.py:2227 msgid "name" msgstr "" -#: engine/core/models.py:2028 +#: engine/core/models.py:2134 msgid "URL of the integration" msgstr "" -#: engine/core/models.py:2031 +#: engine/core/models.py:2137 msgid "authentication credentials" msgstr "" -#: engine/core/models.py:2054 +#: engine/core/models.py:2160 msgid "you can only have one default CRM provider" msgstr "" -#: engine/core/models.py:2064 +#: engine/core/models.py:2170 msgid "CRM" msgstr "" -#: engine/core/models.py:2065 +#: engine/core/models.py:2171 msgid "CRMs" msgstr "" -#: engine/core/models.py:2081 +#: engine/core/models.py:2187 msgid "order CRM link" msgstr "" -#: engine/core/models.py:2082 +#: engine/core/models.py:2188 msgid "orders CRM links" msgstr "" -#: engine/core/models.py:2087 +#: engine/core/models.py:2193 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2538,20 +2578,54 @@ msgid "" "the asset when the associated order is in a completed status." msgstr "" -#: engine/core/models.py:2103 +#: engine/core/models.py:2209 msgid "download" msgstr "" -#: engine/core/models.py:2104 +#: engine/core/models.py:2210 msgid "downloads" msgstr "" +#: engine/core/models.py:2228 +msgid "descriptive name for the image" +msgstr "" + +#: engine/core/models.py:2233 +msgid "image file pasted in the markdown editor" +msgstr "" + +#: engine/core/models.py:2239 +msgid "alt text" +msgstr "" + +#: engine/core/models.py:2240 +msgid "alternative text for accessibility" +msgstr "" + +#: engine/core/models.py:2244 +msgid "pasted image" +msgstr "" + +#: engine/core/models.py:2245 +msgid "pasted images" +msgstr "" + #: engine/core/serializers/utility.py:91 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" #: engine/core/sitemaps.py:25 +#: engine/core/templates/admin_doc/bookmarklets.html:8 +#: engine/core/templates/admin_doc/index.html:8 +#: engine/core/templates/admin_doc/missing_docutils.html:8 +#: engine/core/templates/admin_doc/model_detail.html:8 +#: engine/core/templates/admin_doc/model_index.html:8 +#: engine/core/templates/admin_doc/template_detail.html:8 +#: engine/core/templates/admin_doc/template_filter_index.html:8 +#: engine/core/templates/admin_doc/template_tag_index.html:8 +#: engine/core/templates/admin_doc/view_detail.html:8 +#: engine/core/templates/admin_doc/view_index.html:8 msgid "Home" msgstr "" @@ -2604,43 +2678,32 @@ msgstr "" msgid "Dashboard" msgstr "" -#: engine/core/templates/admin/dashboard/_income_overview.html:7 +#: engine/core/templates/admin/dashboard/_income_overview.html:6 msgid "Income overview" msgstr "" -#: engine/core/templates/admin/dashboard/_income_overview.html:31 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Net" +#: engine/core/templates/admin/dashboard/_income_overview.html:16 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" msgstr "" -#: engine/core/templates/admin/dashboard/_income_overview.html:37 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Taxes" -msgstr "" - -#: engine/core/templates/admin/dashboard/_income_overview.html:43 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 +#: engine/core/templates/admin/dashboard/_income_overview.html:21 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 msgid "Returns" msgstr "" -#: engine/core/templates/admin/dashboard/_income_overview.html:48 -msgid "Gross (pie total)" -msgstr "" - -#: engine/core/templates/admin/dashboard/_income_overview.html:72 -msgid "No data" -msgstr "" - +#: engine/core/templates/admin/dashboard/_income_overview.html:26 #: engine/core/templates/admin/dashboard/_kpis.html:6 msgid "GMV" msgstr "" -#: engine/core/templates/admin/dashboard/_kpis.html:34 -msgid "AOV" +#: engine/core/templates/admin/dashboard/_income_overview.html:50 +msgid "No data" msgstr "" -#: engine/core/templates/admin/dashboard/_kpis.html:48 -msgid "Net revenue" +#: engine/core/templates/admin/dashboard/_kpis.html:34 +msgid "AOV" msgstr "" #: engine/core/templates/admin/dashboard/_kpis.html:62 @@ -2655,7 +2718,7 @@ msgstr "" msgid "Low stock" msgstr "" -#: engine/core/templates/admin/dashboard/_low_stock.html:29 +#: engine/core/templates/admin/dashboard/_low_stock.html:33 msgid "No low stock items." msgstr "" @@ -2712,6 +2775,274 @@ msgstr "" msgid "Django site admin" msgstr "" +#: engine/core/templates/admin_doc/bookmarklets.html:4 +#: engine/core/templates/admin_doc/bookmarklets.html:17 +msgid "Documentation bookmarklets" +msgstr "" + +#: engine/core/templates/admin_doc/bookmarklets.html:10 +#: engine/core/templates/admin_doc/index.html:4 +#: engine/core/templates/admin_doc/index.html:10 +#: engine/core/templates/admin_doc/index.html:15 +#: engine/core/templates/admin_doc/missing_docutils.html:10 +#: engine/core/templates/admin_doc/missing_docutils.html:19 +#: engine/core/templates/admin_doc/model_detail.html:10 +#: engine/core/templates/admin_doc/model_index.html:10 +#: engine/core/templates/admin_doc/template_detail.html:10 +#: engine/core/templates/admin_doc/template_filter_index.html:10 +#: engine/core/templates/admin_doc/template_tag_index.html:10 +#: engine/core/templates/admin_doc/view_detail.html:10 +#: engine/core/templates/admin_doc/view_index.html:10 +msgid "Documentation" +msgstr "" + +#: engine/core/templates/admin_doc/bookmarklets.html:12 +#: engine/core/templates/admin_doc/index.html:53 +msgid "Bookmarklets" +msgstr "" + +#: engine/core/templates/admin_doc/bookmarklets.html:19 +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +#: engine/core/templates/admin_doc/bookmarklets.html:29 +msgid "Documentation for this page" +msgstr "" + +#: engine/core/templates/admin_doc/bookmarklets.html:31 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" + +#: engine/core/templates/admin_doc/index.html:21 +#: engine/core/templates/admin_doc/model_detail.html:12 +#: engine/core/templates/admin_doc/model_index.html:4 +#: engine/core/templates/admin_doc/model_index.html:12 +msgid "Models" +msgstr "" + +#: engine/core/templates/admin_doc/index.html:23 +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +#: engine/core/templates/admin_doc/index.html:29 +#: engine/core/templates/admin_doc/view_detail.html:12 +#: engine/core/templates/admin_doc/view_index.html:4 +#: engine/core/templates/admin_doc/view_index.html:12 +msgid "Views" +msgstr "" + +#: engine/core/templates/admin_doc/index.html:31 +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +#: engine/core/templates/admin_doc/index.html:39 +msgid "List of all the template tags and their functions." +msgstr "" + +#: engine/core/templates/admin_doc/index.html:45 +#: engine/core/templates/admin_doc/template_filter_index.html:12 +msgid "Filters" +msgstr "" + +#: engine/core/templates/admin_doc/index.html:47 +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +#: engine/core/templates/admin_doc/index.html:55 +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +#: engine/core/templates/admin_doc/missing_docutils.html:4 +msgid "Please install docutils" +msgstr "" + +#: engine/core/templates/admin_doc/missing_docutils.html:20 +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#: engine/core/templates/admin_doc/missing_docutils.html:21 +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#: engine/core/templates/admin_doc/model_detail.html:4 +#, python-format +msgid "Model: %(name)s" +msgstr "" + +#: engine/core/templates/admin_doc/model_detail.html:29 +msgid "Fields" +msgstr "" + +#: engine/core/templates/admin_doc/model_detail.html:36 +msgid "Field" +msgstr "" + +#: engine/core/templates/admin_doc/model_detail.html:37 +msgid "Type" +msgstr "" + +#: engine/core/templates/admin_doc/model_detail.html:38 +#: engine/core/templates/admin_doc/model_detail.html:70 +msgid "Description" +msgstr "" + +#: engine/core/templates/admin_doc/model_detail.html:61 +msgid "Methods with arguments" +msgstr "" + +#: engine/core/templates/admin_doc/model_detail.html:68 +msgid "Method" +msgstr "" + +#: engine/core/templates/admin_doc/model_detail.html:69 +msgid "Arguments" +msgstr "" + +#: engine/core/templates/admin_doc/model_detail.html:89 +msgid "Back to Model documentation" +msgstr "" + +#: engine/core/templates/admin_doc/model_index.html:17 +msgid "Model documentation" +msgstr "" + +#: engine/core/templates/admin_doc/model_index.html:44 +msgid "Model groups" +msgstr "" + +#: engine/core/templates/admin_doc/template_detail.html:4 +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#: engine/core/templates/admin_doc/template_detail.html:12 +msgid "Templates" +msgstr "" + +#: engine/core/templates/admin_doc/template_detail.html:17 +#, python-format +msgid "" +"Template: %(name)s" +msgstr "" + +#: engine/core/templates/admin_doc/template_detail.html:21 +#, python-format +msgid "Search path for template %(name)s:" +msgstr "" + +#: engine/core/templates/admin_doc/template_detail.html:29 +msgid "(does not exist)" +msgstr "" + +#: engine/core/templates/admin_doc/template_detail.html:40 +msgid "Back to Documentation" +msgstr "" + +#: engine/core/templates/admin_doc/template_filter_index.html:4 +msgid "Template filters" +msgstr "" + +#: engine/core/templates/admin_doc/template_filter_index.html:17 +msgid "Template filter documentation" +msgstr "" + +#: engine/core/templates/admin_doc/template_filter_index.html:26 +#: engine/core/templates/admin_doc/template_filter_index.html:52 +msgid "Built-in filters" +msgstr "" + +#: engine/core/templates/admin_doc/template_filter_index.html:29 +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before using " +"the filter." +msgstr "" + +#: engine/core/templates/admin_doc/template_tag_index.html:4 +msgid "Template tags" +msgstr "" + +#: engine/core/templates/admin_doc/template_tag_index.html:17 +msgid "Template tag documentation" +msgstr "" + +#: engine/core/templates/admin_doc/template_tag_index.html:26 +#: engine/core/templates/admin_doc/template_tag_index.html:52 +msgid "Built-in tags" +msgstr "" + +#: engine/core/templates/admin_doc/template_tag_index.html:29 +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using the tag." +msgstr "" + +#: engine/core/templates/admin_doc/view_detail.html:4 +#, python-format +msgid "View: %(name)s" +msgstr "" + +#: engine/core/templates/admin_doc/view_detail.html:28 +msgid "Context:" +msgstr "" + +#: engine/core/templates/admin_doc/view_detail.html:33 +msgid "Templates:" +msgstr "" + +#: engine/core/templates/admin_doc/view_detail.html:41 +msgid "Back to View documentation" +msgstr "" + +#: engine/core/templates/admin_doc/view_index.html:17 +msgid "View documentation" +msgstr "" + +#: engine/core/templates/admin_doc/view_index.html:28 +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +#: engine/core/templates/admin_doc/view_index.html:30 +msgid "Views by empty namespace" +msgstr "" + +#: engine/core/templates/admin_doc/view_index.html:40 +#, python-format +msgid "" +"View function: %(full_name)s. Name: %(url_name)s." +msgstr "" + +#: engine/core/templates/admin_doc/view_index.html:54 +msgid "Jump to namespace" +msgstr "" + +#: engine/core/templates/admin_doc/view_index.html:59 +msgid "Empty namespace" +msgstr "" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -2804,7 +3135,7 @@ msgid "" msgstr "" #: engine/core/templates/digital_order_delivered_email.html:137 -#: engine/core/templates/json_table_widget.html:6 +#: engine/core/templates/json_table_widget.html:26 msgid "value" msgstr "" @@ -2822,11 +3153,23 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "" -#: engine/core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:7 +msgid "Key" +msgstr "" + +#: engine/core/templates/json_table_widget.html:8 +msgid "Value" +msgstr "" + +#: engine/core/templates/json_table_widget.html:19 msgid "key" msgstr "" -#: engine/core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:32 +msgid "Delete row" +msgstr "" + +#: engine/core/templates/json_table_widget.html:44 msgid "Add Row" msgstr "" @@ -2908,58 +3251,67 @@ msgstr "" msgid "NOMINATIM_URL must be configured." msgstr "" -#: engine/core/validators.py:23 +#: engine/core/validators.py:18 +msgid "could not determine file type" +msgstr "" + +#: engine/core/validators.py:24 +#, python-brace-format +msgid "unsupported video format. supported formats: {supported}" +msgstr "" + +#: engine/core/validators.py:45 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" -#: engine/core/views.py:104 +#: engine/core/views.py:108 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." msgstr "" -#: engine/core/views.py:119 +#: engine/core/views.py:123 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " "Content-Type header for XML." msgstr "" -#: engine/core/views.py:155 +#: engine/core/views.py:174 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" -#: engine/core/views.py:182 +#: engine/core/views.py:201 msgid "Returns the parameters of the website as a JSON object." msgstr "" -#: engine/core/views.py:198 +#: engine/core/views.py:217 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." msgstr "" -#: engine/core/views.py:220 +#: engine/core/views.py:239 msgid "Handles `contact us` form submissions." msgstr "" -#: engine/core/views.py:236 +#: engine/core/views.py:255 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." msgstr "" -#: engine/core/views.py:273 +#: engine/core/views.py:292 msgid "Handles global search queries." msgstr "" -#: engine/core/views.py:289 +#: engine/core/views.py:308 msgid "Handles the logic of buying as a business without registration." msgstr "" -#: engine/core/views.py:337 +#: engine/core/views.py:356 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the " @@ -2967,31 +3319,31 @@ msgid "" "error is raised to indicate the resource is unavailable." msgstr "" -#: engine/core/views.py:348 +#: engine/core/views.py:367 msgid "order_product_uuid is required" msgstr "" -#: engine/core/views.py:355 +#: engine/core/views.py:374 msgid "order product does not exist" msgstr "" -#: engine/core/views.py:358 +#: engine/core/views.py:377 msgid "you can only download the digital asset once" msgstr "" -#: engine/core/views.py:362 +#: engine/core/views.py:381 msgid "the order must be paid before downloading the digital asset" msgstr "" -#: engine/core/views.py:369 +#: engine/core/views.py:388 msgid "the order product does not have a product" msgstr "" -#: engine/core/views.py:412 +#: engine/core/views.py:431 msgid "favicon not found" msgstr "" -#: engine/core/views.py:418 +#: engine/core/views.py:437 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static " @@ -2999,23 +3351,27 @@ msgid "" "error is raised to indicate the resource is unavailable." msgstr "" -#: engine/core/views.py:432 +#: engine/core/views.py:451 msgid "" "Redirects the request to the admin index page. The function handles incoming " "HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." msgstr "" -#: engine/core/views.py:445 +#: engine/core/views.py:464 msgid "Returns current version of the Schon. " msgstr "" -#: engine/core/views.py:674 engine/core/views.py:689 +#: engine/core/views.py:475 +msgid "no image file provided" +msgstr "" + +#: engine/core/views.py:710 engine/core/views.py:725 #, python-format msgid "Revenue & Orders (last %(days)d)" msgstr "" -#: engine/core/views.py:870 +#: engine/core/views.py:911 msgid "Returns custom variables for Dashboard. " msgstr "" @@ -3072,7 +3428,7 @@ msgid "" "endpoints for Brand objects." msgstr "" -#: engine/core/viewsets.py:458 +#: engine/core/viewsets.py:460 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3083,7 +3439,15 @@ msgid "" "product." msgstr "" -#: engine/core/viewsets.py:605 +#: engine/core/viewsets.py:541 +msgid "identificator_type and identificators are required" +msgstr "" + +#: engine/core/viewsets.py:554 +msgid "identificator_type must be one of: uuid, slug, sku" +msgstr "" + +#: engine/core/viewsets.py:635 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3092,7 +3456,7 @@ msgid "" "Vendor-related resources through the Django REST framework." msgstr "" -#: engine/core/viewsets.py:625 +#: engine/core/viewsets.py:655 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3102,7 +3466,7 @@ msgid "" "use of Django's filtering system for querying data." msgstr "" -#: engine/core/viewsets.py:652 +#: engine/core/viewsets.py:682 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3113,7 +3477,7 @@ msgid "" "enforces permissions accordingly while interacting with order data." msgstr "" -#: engine/core/viewsets.py:914 +#: engine/core/viewsets.py:944 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3122,25 +3486,25 @@ msgid "" "feedback on OrderProduct instances" msgstr "" -#: engine/core/viewsets.py:974 +#: engine/core/viewsets.py:1004 msgid "Manages operations related to Product images in the application. " msgstr "" -#: engine/core/viewsets.py:988 +#: engine/core/viewsets.py:1018 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "" -#: engine/core/viewsets.py:1019 +#: engine/core/viewsets.py:1049 msgid "Represents a view set for managing promotions. " msgstr "" -#: engine/core/viewsets.py:1032 +#: engine/core/viewsets.py:1062 msgid "Handles operations related to Stock data in the system." msgstr "" -#: engine/core/viewsets.py:1046 +#: engine/core/viewsets.py:1076 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3151,7 +3515,7 @@ msgid "" "are granted." msgstr "" -#: engine/core/viewsets.py:1183 +#: engine/core/viewsets.py:1213 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3160,12 +3524,12 @@ msgid "" "on the request context." msgstr "" -#: engine/core/viewsets.py:1254 +#: engine/core/viewsets.py:1275 #, python-brace-format msgid "Geocoding error: {e}" msgstr "" -#: engine/core/viewsets.py:1262 +#: engine/core/viewsets.py:1283 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/fr_FR/LC_MESSAGES/django.mo b/engine/core/locale/fr_FR/LC_MESSAGES/django.mo index 6eb28c71..c10f4abf 100644 Binary files a/engine/core/locale/fr_FR/LC_MESSAGES/django.mo and b/engine/core/locale/fr_FR/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/fr_FR/LC_MESSAGES/django.po b/engine/core/locale/fr_FR/LC_MESSAGES/django.po index ca67a0b4..9e4bf26b 100644 --- a/engine/core/locale/fr_FR/LC_MESSAGES/django.po +++ b/engine/core/locale/fr_FR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -51,121 +51,141 @@ msgstr "Modifié" msgid "when the object was last modified" msgstr "Date de la dernière modification de l'objet" -#: engine/core/admin.py:94 +#: engine/core/admin.py:98 msgid "translations" msgstr "Traductions" -#: engine/core/admin.py:102 +#: engine/core/admin.py:106 msgid "general" msgstr "Général" -#: engine/core/admin.py:106 +#: engine/core/admin.py:110 msgid "relations" msgstr "Relations" -#: engine/core/admin.py:111 +#: engine/core/admin.py:115 msgid "additional info" msgstr "Informations complémentaires" -#: engine/core/admin.py:133 +#: engine/core/admin.py:137 msgid "metadata" msgstr "Métadonnées" -#: engine/core/admin.py:141 +#: engine/core/admin.py:145 msgid "timestamps" msgstr "Horodatage" -#: engine/core/admin.py:158 +#: engine/core/admin.py:162 #, python-format msgid "Activate selected %(verbose_name_plural)s" msgstr "Activer %(verbose_name_plural)s sélectionné" -#: engine/core/admin.py:166 +#: engine/core/admin.py:170 msgid "selected items have been activated." msgstr "Les articles sélectionnés ont été activés !" -#: engine/core/admin.py:174 +#: engine/core/admin.py:178 #, python-format msgid "Deactivate selected %(verbose_name_plural)s" msgstr "Désactiver %(verbose_name_plural)s sélectionné" -#: engine/core/admin.py:184 +#: engine/core/admin.py:188 msgid "selected items have been deactivated." msgstr "Les articles sélectionnés ont été désactivés !" -#: engine/core/admin.py:196 engine/core/graphene/object_types.py:653 -#: engine/core/graphene/object_types.py:660 engine/core/models.py:832 -#: engine/core/models.py:840 +#: engine/core/admin.py:200 engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:673 engine/core/models.py:918 +#: engine/core/models.py:928 msgid "attribute value" msgstr "Valeur de l'attribut" -#: engine/core/admin.py:197 engine/core/graphene/object_types.py:77 -#: engine/core/models.py:841 +#: engine/core/admin.py:201 engine/core/graphene/object_types.py:81 +#: engine/core/models.py:929 msgid "attribute values" msgstr "Valeurs des attributs" -#: engine/core/admin.py:208 +#: engine/core/admin.py:212 engine/core/models.py:2232 msgid "image" msgstr "Image" -#: engine/core/admin.py:209 engine/core/graphene/object_types.py:530 +#: engine/core/admin.py:213 engine/core/graphene/object_types.py:535 msgid "images" msgstr "Images" -#: engine/core/admin.py:220 engine/core/models.py:576 +#: engine/core/admin.py:224 engine/core/models.py:635 msgid "stock" msgstr "Stock" -#: engine/core/admin.py:221 engine/core/graphene/object_types.py:713 +#: engine/core/admin.py:225 engine/core/graphene/object_types.py:735 msgid "stocks" msgstr "Stocks" -#: engine/core/admin.py:232 engine/core/models.py:1938 +#: engine/core/admin.py:236 engine/core/models.py:2046 msgid "order product" msgstr "Commander un produit" -#: engine/core/admin.py:233 engine/core/graphene/object_types.py:441 -#: engine/core/models.py:1939 +#: engine/core/admin.py:237 engine/core/graphene/object_types.py:446 +#: engine/core/models.py:2047 msgid "order products" msgstr "Commander des produits" -#: engine/core/admin.py:251 engine/core/admin.py:252 +#: engine/core/admin.py:255 engine/core/admin.py:256 msgid "children" msgstr "Les enfants" -#: engine/core/admin.py:528 +#: engine/core/admin.py:545 +msgid "video preview" +msgstr "Aperçu vidéo" + +#: engine/core/admin.py:551 msgid "has images" msgstr "Contient des images" -#: engine/core/admin.py:531 +#: engine/core/admin.py:554 #, python-format msgid "Export selected %(verbose_name_plural)s to marketplaces' feeds" msgstr "" "Exporter %(verbose_name_plural)s sélectionné vers les flux des places de " "marché" -#: engine/core/admin.py:542 +#: engine/core/admin.py:565 #, python-format msgid "selected %(verbose_name_plural)s have been marked for export." msgstr "" "Les éléments sélectionnés %(verbose_name_plural)s ont été marqués pour " "l'exportation." -#: engine/core/admin.py:553 +#: engine/core/admin.py:576 #, python-format msgid "Ban selected %(verbose_name_plural)s from marketplaces' feeds" msgstr "" "Interdire %(verbose_name_plural)s sélectionné dans les flux des places de " "marché" -#: engine/core/admin.py:564 +#: engine/core/admin.py:587 #, python-format msgid "selected %(verbose_name_plural)s have been banned from export." msgstr "" "Les produits sélectionnés %(verbose_name_plural)s ont été interdits à " "l'exportation." -#: engine/core/admin.py:1116 +#: engine/core/admin.py:1030 +msgid "Preview" +msgstr "Aperçu" + +#: engine/core/admin.py:1031 +msgid "Metadata" +msgstr "Métadonnées" + +#: engine/core/admin.py:1034 +msgid "preview" +msgstr "Aperçu" + +#: engine/core/admin.py:1043 +msgid "image preview" +msgstr "Aperçu de l'image" + +#: engine/core/admin.py:1166 msgid "Config" msgstr "Config" @@ -232,7 +252,7 @@ msgstr "" "négociation de contenu. La langue peut être sélectionnée avec Accept-" "Language et le paramètre de requête." -#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:36 +#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "Cache I/O" @@ -256,7 +276,7 @@ msgstr "Obtenir les paramètres exposables de l'application" msgid "send a message to the support team" msgstr "Envoyer un message à l'équipe d'assistance" -#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:59 msgid "request a CORSed URL" msgstr "Demander une URL CORSée. Seul https est autorisé." @@ -401,11 +421,11 @@ msgstr "" "Réécrire certains champs d'une catégorie existante en sauvegardant les non-" "éditables" -#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757 -#: engine/core/docs/drf/viewsets.py:1046 -#: engine/core/graphene/object_types.py:119 -#: engine/core/graphene/object_types.py:239 -#: engine/core/graphene/object_types.py:540 +#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:781 +#: engine/core/docs/drf/viewsets.py:1070 +#: engine/core/graphene/object_types.py:123 +#: engine/core/graphene/object_types.py:247 +#: engine/core/graphene/object_types.py:546 msgid "SEO Meta snapshot" msgstr "Méta snapshot SEO" @@ -714,7 +734,7 @@ msgstr "Récupérer un seul produit (vue détaillée)" #: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683 #: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725 -#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763 +#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:787 msgid "Product UUID or slug" msgstr "UUID ou Slug du produit" @@ -741,295 +761,309 @@ msgstr "Supprimer un produit" msgid "lists all permitted feedbacks for a product" msgstr "liste tous les commentaires autorisés pour un produit" -#: engine/core/docs/drf/viewsets.py:758 +#: engine/core/docs/drf/viewsets.py:757 +msgid "retrieve exact products by identifier" +msgstr "Récupérer les produits exacts par identifiant" + +#: engine/core/docs/drf/viewsets.py:759 +msgid "" +"retrieve a list of products by identifier type (uuid, slug, or sku). Send a " +"POST request with `identificator_type` and `identificators` (list of " +"values)." +msgstr "" +"Récupérer une liste de produits par type d'identifiant (uuid, slug ou sku). " +"Envoyer une requête POST avec `identificator_type` et `identificators` " +"(liste de valeurs)." + +#: engine/core/docs/drf/viewsets.py:782 msgid "returns a snapshot of the product's SEO meta data" msgstr "Renvoie un instantané des métadonnées SEO du produit" -#: engine/core/docs/drf/viewsets.py:779 +#: engine/core/docs/drf/viewsets.py:803 msgid "list all addresses" msgstr "Liste de toutes les adresses" -#: engine/core/docs/drf/viewsets.py:789 +#: engine/core/docs/drf/viewsets.py:813 msgid "retrieve a single address" msgstr "Récupérer une seule adresse" -#: engine/core/docs/drf/viewsets.py:799 +#: engine/core/docs/drf/viewsets.py:823 msgid "create a new address" msgstr "Créer une nouvelle adresse" -#: engine/core/docs/drf/viewsets.py:810 +#: engine/core/docs/drf/viewsets.py:834 msgid "delete an address" msgstr "Supprimer une adresse" -#: engine/core/docs/drf/viewsets.py:820 +#: engine/core/docs/drf/viewsets.py:844 msgid "update an entire address" msgstr "Mise à jour d'une adresse entière" -#: engine/core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:855 msgid "partially update an address" msgstr "Mise à jour partielle d'une adresse" -#: engine/core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:866 msgid "autocomplete address suggestions" msgstr "Saisie automatique des adresses" -#: engine/core/docs/drf/viewsets.py:848 +#: engine/core/docs/drf/viewsets.py:872 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" "Chaîne de requête de données brutes, à compléter avec les données du point " "d'extrémité géo-IP" -#: engine/core/docs/drf/viewsets.py:855 +#: engine/core/docs/drf/viewsets.py:879 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "limite la quantité de résultats, 1 < limite < 10, par défaut : 5" -#: engine/core/docs/drf/viewsets.py:871 +#: engine/core/docs/drf/viewsets.py:895 msgid "list all feedbacks (simple view)" msgstr "liste de tous les commentaires (vue simple)" -#: engine/core/docs/drf/viewsets.py:881 +#: engine/core/docs/drf/viewsets.py:905 msgid "retrieve a single feedback (detailed view)" msgstr "récupérer un seul retour d'information (vue détaillée)" -#: engine/core/docs/drf/viewsets.py:888 +#: engine/core/docs/drf/viewsets.py:912 msgid "create a feedback" msgstr "créer un retour d'information" -#: engine/core/docs/drf/viewsets.py:895 +#: engine/core/docs/drf/viewsets.py:919 msgid "delete a feedback" msgstr "supprimer un feedback" -#: engine/core/docs/drf/viewsets.py:902 +#: engine/core/docs/drf/viewsets.py:926 msgid "rewrite an existing feedback saving non-editables" msgstr "" "réécrire un feedback existant en sauvegardant les éléments non modifiables" -#: engine/core/docs/drf/viewsets.py:909 +#: engine/core/docs/drf/viewsets.py:933 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" "Réécrire certains champs d'une catégorie existante en sauvegardant les non-" "éditables" -#: engine/core/docs/drf/viewsets.py:919 +#: engine/core/docs/drf/viewsets.py:943 msgid "list all order–product relations (simple view)" msgstr "lister toutes les relations commande-produit (vue simple)" -#: engine/core/docs/drf/viewsets.py:929 +#: engine/core/docs/drf/viewsets.py:953 msgid "retrieve a single order–product relation (detailed view)" msgstr "récupérer une seule relation commande-produit (vue détaillée)" -#: engine/core/docs/drf/viewsets.py:939 +#: engine/core/docs/drf/viewsets.py:963 msgid "create a new order–product relation" msgstr "créer une nouvelle relation commande-produit" -#: engine/core/docs/drf/viewsets.py:949 +#: engine/core/docs/drf/viewsets.py:973 msgid "replace an existing order–product relation" msgstr "remplacer une relation commande-produit existante" -#: engine/core/docs/drf/viewsets.py:959 +#: engine/core/docs/drf/viewsets.py:983 msgid "partially update an existing order–product relation" msgstr "mettre à jour partiellement une relation commande-produit existante" -#: engine/core/docs/drf/viewsets.py:969 +#: engine/core/docs/drf/viewsets.py:993 msgid "delete an order–product relation" msgstr "supprimer une relation commande-produit" -#: engine/core/docs/drf/viewsets.py:979 +#: engine/core/docs/drf/viewsets.py:1003 msgid "add or remove feedback on an order–product relation" msgstr "" "ajouter ou supprimer un retour d'information sur une relation commande-" "produit" -#: engine/core/docs/drf/viewsets.py:996 +#: engine/core/docs/drf/viewsets.py:1020 msgid "list all brands (simple view)" msgstr "Liste de toutes les marques (vue simple)" -#: engine/core/docs/drf/viewsets.py:1003 +#: engine/core/docs/drf/viewsets.py:1027 msgid "retrieve a single brand (detailed view)" msgstr "Récupérer une seule marque (vue détaillée)" -#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051 +#: engine/core/docs/drf/viewsets.py:1032 engine/core/docs/drf/viewsets.py:1075 msgid "Brand UUID or slug" msgstr "UUID ou slug de la marque" -#: engine/core/docs/drf/viewsets.py:1018 +#: engine/core/docs/drf/viewsets.py:1042 msgid "create a brand" msgstr "Créer une marque" -#: engine/core/docs/drf/viewsets.py:1025 +#: engine/core/docs/drf/viewsets.py:1049 msgid "delete a brand" msgstr "Supprimer une marque" -#: engine/core/docs/drf/viewsets.py:1032 +#: engine/core/docs/drf/viewsets.py:1056 msgid "rewrite an existing brand saving non-editables" msgstr "Réécrire une marque existante en sauvegardant les non-éditables" -#: engine/core/docs/drf/viewsets.py:1039 +#: engine/core/docs/drf/viewsets.py:1063 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "" "Réécrire certains champs d'une catégorie existante en sauvegardant les non-" "éditables" -#: engine/core/docs/drf/viewsets.py:1064 +#: engine/core/docs/drf/viewsets.py:1088 msgid "list all vendors (simple view)" msgstr "Liste de tous les fournisseurs (vue simple)" -#: engine/core/docs/drf/viewsets.py:1074 +#: engine/core/docs/drf/viewsets.py:1098 msgid "retrieve a single vendor (detailed view)" msgstr "Récupérer un seul fournisseur (vue détaillée)" -#: engine/core/docs/drf/viewsets.py:1081 +#: engine/core/docs/drf/viewsets.py:1105 msgid "create a vendor" msgstr "Créer un fournisseur" -#: engine/core/docs/drf/viewsets.py:1088 +#: engine/core/docs/drf/viewsets.py:1112 msgid "delete a vendor" msgstr "Supprimer un fournisseur" -#: engine/core/docs/drf/viewsets.py:1095 +#: engine/core/docs/drf/viewsets.py:1119 msgid "rewrite an existing vendor saving non-editables" msgstr "" "Réécrire un vendeur existant en sauvegardant les éléments non modifiables" -#: engine/core/docs/drf/viewsets.py:1102 +#: engine/core/docs/drf/viewsets.py:1126 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "" "Réécrire certains champs d'une catégorie existante en sauvegardant les non-" "éditables" -#: engine/core/docs/drf/viewsets.py:1112 +#: engine/core/docs/drf/viewsets.py:1136 msgid "list all product images (simple view)" msgstr "Liste de toutes les images de produits (vue simple)" -#: engine/core/docs/drf/viewsets.py:1122 +#: engine/core/docs/drf/viewsets.py:1146 msgid "retrieve a single product image (detailed view)" msgstr "Récupérer l'image d'un seul produit (vue détaillée)" -#: engine/core/docs/drf/viewsets.py:1129 +#: engine/core/docs/drf/viewsets.py:1153 msgid "create a product image" msgstr "Créer une image du produit" -#: engine/core/docs/drf/viewsets.py:1139 +#: engine/core/docs/drf/viewsets.py:1163 msgid "delete a product image" msgstr "Supprimer une image de produit" -#: engine/core/docs/drf/viewsets.py:1146 +#: engine/core/docs/drf/viewsets.py:1170 msgid "rewrite an existing product image saving non-editables" msgstr "" "Réécrire l'image d'un produit existant en sauvegardant les éléments non " "modifiables" -#: engine/core/docs/drf/viewsets.py:1154 +#: engine/core/docs/drf/viewsets.py:1178 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "" "Réécrire certains champs d'une catégorie existante en sauvegardant les non-" "éditables" -#: engine/core/docs/drf/viewsets.py:1165 +#: engine/core/docs/drf/viewsets.py:1189 msgid "list all promo codes (simple view)" msgstr "Liste de tous les codes promo (vue simple)" -#: engine/core/docs/drf/viewsets.py:1175 +#: engine/core/docs/drf/viewsets.py:1199 msgid "retrieve a single promo code (detailed view)" msgstr "Récupérer un seul code promo (vue détaillée)" -#: engine/core/docs/drf/viewsets.py:1182 +#: engine/core/docs/drf/viewsets.py:1206 msgid "create a promo code" msgstr "Créer un code promo" -#: engine/core/docs/drf/viewsets.py:1189 +#: engine/core/docs/drf/viewsets.py:1213 msgid "delete a promo code" msgstr "Supprimer un code promo" -#: engine/core/docs/drf/viewsets.py:1196 +#: engine/core/docs/drf/viewsets.py:1220 msgid "rewrite an existing promo code saving non-editables" msgstr "Réécrire un code promo existant en sauvegardant les non-éditables" -#: engine/core/docs/drf/viewsets.py:1203 +#: engine/core/docs/drf/viewsets.py:1227 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "" "Réécrire certains champs d'une catégorie existante en sauvegardant les non-" "éditables" -#: engine/core/docs/drf/viewsets.py:1213 +#: engine/core/docs/drf/viewsets.py:1237 msgid "list all promotions (simple view)" msgstr "Liste de toutes les promotions (vue simple)" -#: engine/core/docs/drf/viewsets.py:1223 +#: engine/core/docs/drf/viewsets.py:1247 msgid "retrieve a single promotion (detailed view)" msgstr "Récupérer une seule promotion (vue détaillée)" -#: engine/core/docs/drf/viewsets.py:1230 +#: engine/core/docs/drf/viewsets.py:1254 msgid "create a promotion" msgstr "Créer une promotion" -#: engine/core/docs/drf/viewsets.py:1237 +#: engine/core/docs/drf/viewsets.py:1261 msgid "delete a promotion" msgstr "Supprimer une promotion" -#: engine/core/docs/drf/viewsets.py:1244 +#: engine/core/docs/drf/viewsets.py:1268 msgid "rewrite an existing promotion saving non-editables" msgstr "" "Réécrire une promotion existante en sauvegardant les éléments non " "modifiables" -#: engine/core/docs/drf/viewsets.py:1251 +#: engine/core/docs/drf/viewsets.py:1275 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "" "Réécrire certains champs d'une catégorie existante en sauvegardant les non-" "éditables" -#: engine/core/docs/drf/viewsets.py:1261 +#: engine/core/docs/drf/viewsets.py:1285 msgid "list all stocks (simple view)" msgstr "Liste de toutes les actions (vue simple)" -#: engine/core/docs/drf/viewsets.py:1268 +#: engine/core/docs/drf/viewsets.py:1292 msgid "retrieve a single stock (detailed view)" msgstr "Récupérer une seule action (vue détaillée)" -#: engine/core/docs/drf/viewsets.py:1275 +#: engine/core/docs/drf/viewsets.py:1299 msgid "create a stock record" msgstr "Créer une fiche de stock" -#: engine/core/docs/drf/viewsets.py:1282 +#: engine/core/docs/drf/viewsets.py:1306 msgid "delete a stock record" msgstr "Supprimer une fiche de stock" -#: engine/core/docs/drf/viewsets.py:1289 +#: engine/core/docs/drf/viewsets.py:1313 msgid "rewrite an existing stock record saving non-editables" msgstr "" "Réécrire une fiche de stock existante en sauvegardant les éléments non " "modifiables" -#: engine/core/docs/drf/viewsets.py:1297 +#: engine/core/docs/drf/viewsets.py:1321 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "" "Réécrire certains champs d'une catégorie existante en sauvegardant les non-" "éditables" -#: engine/core/docs/drf/viewsets.py:1308 +#: engine/core/docs/drf/viewsets.py:1332 msgid "list all product tags (simple view)" msgstr "Liste de toutes les étiquettes de produits (vue simple)" -#: engine/core/docs/drf/viewsets.py:1318 +#: engine/core/docs/drf/viewsets.py:1342 msgid "retrieve a single product tag (detailed view)" msgstr "Récupérer une seule étiquette de produit (vue détaillée)" -#: engine/core/docs/drf/viewsets.py:1325 +#: engine/core/docs/drf/viewsets.py:1349 msgid "create a product tag" msgstr "Créer une étiquette de produit" -#: engine/core/docs/drf/viewsets.py:1335 +#: engine/core/docs/drf/viewsets.py:1359 msgid "delete a product tag" msgstr "Supprimer une étiquette de produit" -#: engine/core/docs/drf/viewsets.py:1342 +#: engine/core/docs/drf/viewsets.py:1366 msgid "rewrite an existing product tag saving non-editables" msgstr "" "Réécrire une étiquette de produit existante en sauvegardant les éléments non" " modifiables" -#: engine/core/docs/drf/viewsets.py:1350 +#: engine/core/docs/drf/viewsets.py:1374 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "" "Réécrire certains champs d'une catégorie existante en sauvegardant les non-" @@ -1040,238 +1074,236 @@ msgstr "" msgid "no search term provided." msgstr "Aucun terme de recherche n'est fourni." -#: engine/core/filters.py:78 engine/core/filters.py:484 -#: engine/core/filters.py:625 +#: engine/core/filters.py:79 engine/core/filters.py:485 +#: engine/core/filters.py:626 msgid "Search" msgstr "Recherche" -#: engine/core/filters.py:79 engine/core/filters.py:663 -#: engine/core/filters.py:692 +#: engine/core/filters.py:80 engine/core/filters.py:664 +#: engine/core/filters.py:693 msgid "UUID" msgstr "UUID" -#: engine/core/filters.py:80 engine/core/filters.py:487 -#: engine/core/filters.py:627 +#: engine/core/filters.py:81 engine/core/filters.py:488 +#: engine/core/filters.py:628 msgid "Name" msgstr "Nom" -#: engine/core/filters.py:82 engine/core/filters.py:630 +#: engine/core/filters.py:83 engine/core/filters.py:631 msgid "Categories" msgstr "Catégories" -#: engine/core/filters.py:86 +#: engine/core/filters.py:87 msgid "Categories Slugs" msgstr "Catégories Limaces" -#: engine/core/filters.py:88 engine/core/filters.py:495 +#: engine/core/filters.py:89 engine/core/filters.py:496 +#: engine/core/templates/admin_doc/index.html:37 +#: engine/core/templates/admin_doc/template_tag_index.html:12 msgid "Tags" msgstr "Tags" -#: engine/core/filters.py:90 +#: engine/core/filters.py:91 msgid "Min Price" msgstr "Prix minimum" -#: engine/core/filters.py:93 +#: engine/core/filters.py:94 msgid "Max Price" msgstr "Prix maximum" -#: engine/core/filters.py:95 +#: engine/core/filters.py:96 msgid "Is Active" msgstr "Est actif" -#: engine/core/filters.py:96 +#: engine/core/filters.py:97 msgid "Brand" msgstr "Marque" -#: engine/core/filters.py:97 +#: engine/core/filters.py:98 msgid "Attributes" msgstr "Attributs" -#: engine/core/filters.py:99 +#: engine/core/filters.py:100 msgid "Quantity" msgstr "Quantité" -#: engine/core/filters.py:101 engine/core/filters.py:489 -#: engine/core/filters.py:628 engine/core/models.py:316 -#: engine/core/models.py:497 engine/core/models.py:663 +#: engine/core/filters.py:102 engine/core/filters.py:490 +#: engine/core/filters.py:629 engine/core/models.py:339 +#: engine/core/models.py:546 engine/core/models.py:736 msgid "Slug" msgstr "Limace" -#: engine/core/filters.py:102 +#: engine/core/filters.py:103 msgid "Is Digital" msgstr "Is Digital" -#: engine/core/filters.py:104 +#: engine/core/filters.py:105 msgid "Include sub-categories" msgstr "Inclure des sous-catégories" -#: engine/core/filters.py:108 +#: engine/core/filters.py:109 msgid "Include personal ordered" msgstr "Inclure les produits commandés par les particuliers" -#: engine/core/filters.py:110 engine/core/models.py:667 +#: engine/core/filters.py:111 engine/core/models.py:740 msgid "SKU" msgstr "SKU" -#: engine/core/filters.py:212 +#: engine/core/filters.py:213 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" "Il doit y avoir un category_uuid pour utiliser le drapeau " "include_subcategories" -#: engine/core/filters.py:398 +#: engine/core/filters.py:399 msgid "Search (ID, product name or part number)" msgstr "Recherche (ID, nom du produit ou numéro de pièce)" -#: engine/core/filters.py:402 +#: engine/core/filters.py:403 msgid "Bought after (inclusive)" msgstr "Acheté après (inclus)" -#: engine/core/filters.py:405 +#: engine/core/filters.py:406 msgid "Bought before (inclusive)" msgstr "Acheté avant (inclus)" -#: engine/core/filters.py:410 engine/core/filters.py:461 -#: engine/core/filters.py:697 +#: engine/core/filters.py:411 engine/core/filters.py:462 +#: engine/core/filters.py:698 msgid "User email" msgstr "Courriel de l'utilisateur" -#: engine/core/filters.py:413 engine/core/filters.py:464 -#: engine/core/filters.py:672 engine/core/filters.py:694 +#: engine/core/filters.py:414 engine/core/filters.py:465 +#: engine/core/filters.py:673 engine/core/filters.py:695 msgid "User UUID" msgstr "UUID de l'utilisateur" -#: engine/core/filters.py:415 +#: engine/core/filters.py:416 msgid "Status" msgstr "Statut" -#: engine/core/filters.py:419 +#: engine/core/filters.py:420 msgid "Human Readable ID" msgstr "ID lisible par l'homme" -#: engine/core/filters.py:488 +#: engine/core/filters.py:489 msgid "Parent" msgstr "Parent" -#: engine/core/filters.py:492 +#: engine/core/filters.py:493 msgid "Whole category(has at least 1 product or not)" msgstr "Catégorie entière (avec au moins 1 produit ou non)" -#: engine/core/filters.py:496 +#: engine/core/filters.py:497 msgid "Level" msgstr "Niveau" -#: engine/core/filters.py:667 +#: engine/core/filters.py:668 msgid "Product UUID" msgstr "UUID du produit" -#: engine/core/graphene/mutations.py:40 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Clé à rechercher ou à insérer dans la cache" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:43 msgid "data to store in cache" msgstr "Données à stocker dans la mémoire cache" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:46 msgid "timeout in seconds to set the data for into the cache" msgstr "Délai d'attente en secondes pour placer les données dans le cache" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:49 msgid "cached data" msgstr "Données mises en cache" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:64 msgid "camelized JSON data from the requested URL" msgstr "Données JSON camélisées provenant de l'URL demandée" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:248 +#: engine/core/graphene/mutations.py:69 engine/core/views.py:267 msgid "only URLs starting with http(s):// are allowed" msgstr "Seuls les URL commençant par http(s):// sont autorisés." -#: engine/core/graphene/mutations.py:86 +#: engine/core/graphene/mutations.py:87 msgid "add a product to the order" msgstr "Ajouter un produit à la commande" -#: engine/core/graphene/mutations.py:109 engine/core/graphene/mutations.py:138 -#: engine/core/graphene/mutations.py:254 engine/core/graphene/mutations.py:306 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139 +#: engine/core/graphene/mutations.py:256 engine/core/graphene/mutations.py:308 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Ordre {order_uuid} introuvable !" -#: engine/core/graphene/mutations.py:115 engine/core/graphene/mutations.py:166 +#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167 msgid "remove a product from the order" msgstr "Supprimer un produit de la commande" -#: engine/core/graphene/mutations.py:144 +#: engine/core/graphene/mutations.py:145 msgid "remove all products from the order" msgstr "Supprimer tous les produits de la commande" -#: engine/core/graphene/mutations.py:189 +#: engine/core/graphene/mutations.py:190 msgid "buy an order" msgstr "Acheter une commande" -#: engine/core/graphene/mutations.py:220 engine/core/graphene/mutations.py:282 +#: engine/core/graphene/mutations.py:222 engine/core/graphene/mutations.py:284 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" "Veuillez fournir soit order_uuid, soit order_hr_id - les deux s'excluent " "mutuellement !" -#: engine/core/graphene/mutations.py:249 engine/core/graphene/mutations.py:524 -#: engine/core/graphene/mutations.py:573 engine/core/viewsets.py:753 +#: engine/core/graphene/mutations.py:251 engine/core/graphene/mutations.py:526 +#: engine/core/graphene/mutations.py:576 engine/core/viewsets.py:783 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}" -#: engine/core/graphene/mutations.py:260 +#: engine/core/graphene/mutations.py:262 msgid "perform an action on a list of products in the order" msgstr "Effectuer une action sur une liste de produits dans la commande" -#: engine/core/graphene/mutations.py:265 +#: engine/core/graphene/mutations.py:267 msgid "remove/add" msgstr "Supprimer/Ajouter" -#: engine/core/graphene/mutations.py:301 engine/core/graphene/mutations.py:342 +#: engine/core/graphene/mutations.py:303 engine/core/graphene/mutations.py:342 msgid "action must be either add or remove" msgstr "L'action doit être soit \"ajouter\", soit \"supprimer\" !" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:314 msgid "perform an action on a list of products in the wishlist" msgstr "" "Effectuer une action sur une liste de produits dans la liste de souhaits" -#: engine/core/graphene/mutations.py:330 -msgid "please provide wishlist_uuid value" -msgstr "Veuillez indiquer la valeur de `wishlist_uuid`." - -#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:423 -#: engine/core/graphene/mutations.py:451 engine/core/graphene/mutations.py:479 -#: engine/core/graphene/mutations.py:529 +#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:424 +#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480 +#: engine/core/graphene/mutations.py:531 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Wishlist {wishlist_uuid} introuvable !" -#: engine/core/graphene/mutations.py:401 +#: engine/core/graphene/mutations.py:402 msgid "add a product to the wishlist" msgstr "Ajouter un produit à la commande" -#: engine/core/graphene/mutations.py:429 +#: engine/core/graphene/mutations.py:430 msgid "remove a product from the wishlist" msgstr "Supprimer un produit de la commande" -#: engine/core/graphene/mutations.py:457 +#: engine/core/graphene/mutations.py:458 msgid "remove all products from the wishlist" msgstr "Supprimer un produit de la commande" -#: engine/core/graphene/mutations.py:485 +#: engine/core/graphene/mutations.py:486 msgid "buy all products from the wishlist" msgstr "Supprimer un produit de la commande" -#: engine/core/graphene/mutations.py:535 +#: engine/core/graphene/mutations.py:537 msgid "buy a product" msgstr "Acheter une commande" -#: engine/core/graphene/mutations.py:542 +#: engine/core/graphene/mutations.py:544 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" @@ -1279,143 +1311,147 @@ msgstr "" "Veuillez envoyer les attributs sous la forme d'une chaîne formatée comme " "attr1=valeur1,attr2=valeur2." -#: engine/core/graphene/mutations.py:580 +#: engine/core/graphene/mutations.py:583 msgid "add or delete a feedback for orderproduct" msgstr "" "ajouter ou supprimer un retour d'information sur une relation commande-" "produit" -#: engine/core/graphene/mutations.py:606 +#: engine/core/graphene/mutations.py:610 msgid "action must be either `add` or `remove`" msgstr "L'action doit être soit `add` soit `remove` !" -#: engine/core/graphene/mutations.py:609 +#: engine/core/graphene/mutations.py:613 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Le produit {order_product_uuid} n'a pas été trouvé !" -#: engine/core/graphene/mutations.py:616 +#: engine/core/graphene/mutations.py:620 msgid "original address string provided by the user" msgstr "Chaîne d'adresse originale fournie par l'utilisateur" -#: engine/core/graphene/mutations.py:653 engine/core/models.py:986 -#: engine/core/models.py:999 engine/core/models.py:1443 -#: engine/core/models.py:1474 engine/core/models.py:1505 -#: engine/core/viewsets.py:760 +#: engine/core/graphene/mutations.py:662 engine/core/models.py:1079 +#: engine/core/models.py:1092 engine/core/models.py:1544 +#: engine/core/models.py:1575 engine/core/models.py:1606 +#: engine/core/viewsets.py:790 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} n'existe pas : {uuid} !" -#: engine/core/graphene/mutations.py:667 +#: engine/core/graphene/mutations.py:676 msgid "limit must be between 1 and 10" msgstr "La limite doit être comprise entre 1 et 10" -#: engine/core/graphene/mutations.py:716 +#: engine/core/graphene/mutations.py:726 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - fonctionne comme un charme" -#: engine/core/graphene/object_types.py:84 -#: engine/core/graphene/object_types.py:420 -#: engine/core/graphene/object_types.py:471 engine/core/models.py:803 -#: engine/core/models.py:1297 engine/core/models.py:2033 +#: engine/core/graphene/object_types.py:88 +#: engine/core/graphene/object_types.py:425 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:889 +#: engine/core/models.py:1394 engine/core/models.py:2139 msgid "attributes" msgstr "Attributs" -#: engine/core/graphene/object_types.py:97 +#: engine/core/graphene/object_types.py:101 msgid "grouped attributes" msgstr "Attributs groupés" -#: engine/core/graphene/object_types.py:104 +#: engine/core/graphene/object_types.py:108 msgid "groups of attributes" msgstr "Groupes d'attributs" -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:217 -#: engine/core/graphene/object_types.py:255 engine/core/models.py:440 +#: engine/core/graphene/object_types.py:122 +#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:264 engine/core/models.py:489 msgid "categories" msgstr "Catégories" -#: engine/core/graphene/object_types.py:134 engine/core/models.py:511 +#: engine/core/graphene/object_types.py:138 engine/core/models.py:564 msgid "brands" msgstr "Marques" -#: engine/core/graphene/object_types.py:219 +#: engine/core/graphene/object_types.py:226 msgid "category image url" msgstr "Catégories" -#: engine/core/graphene/object_types.py:220 -#: engine/core/graphene/object_types.py:365 engine/core/models.py:278 +#: engine/core/graphene/object_types.py:227 +#: engine/core/graphene/object_types.py:369 engine/core/models.py:301 msgid "markup percentage" msgstr "Markup Percentage" -#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:231 msgid "which attributes and values can be used for filtering this category." msgstr "" "Quels attributs et valeurs peuvent être utilisés pour filtrer cette " "catégorie." -#: engine/core/graphene/object_types.py:230 +#: engine/core/graphene/object_types.py:237 msgid "" "minimum and maximum prices for products in this category, if available." msgstr "" "Prix minimum et maximum pour les produits de cette catégorie, s'ils sont " "disponibles." -#: engine/core/graphene/object_types.py:234 +#: engine/core/graphene/object_types.py:240 +msgid "brands in this category" +msgstr "Marques dans cette catégorie" + +#: engine/core/graphene/object_types.py:242 msgid "tags for this category" msgstr "Tags pour cette catégorie" -#: engine/core/graphene/object_types.py:237 +#: engine/core/graphene/object_types.py:245 msgid "products in this category" msgstr "Produits dans cette catégorie" -#: engine/core/graphene/object_types.py:372 engine/core/models.py:183 +#: engine/core/graphene/object_types.py:376 engine/core/models.py:202 msgid "vendors" msgstr "Vendeurs" -#: engine/core/graphene/object_types.py:376 +#: engine/core/graphene/object_types.py:380 msgid "Latitude (Y coordinate)" msgstr "Latitude (coordonnée Y)" -#: engine/core/graphene/object_types.py:377 +#: engine/core/graphene/object_types.py:381 msgid "Longitude (X coordinate)" msgstr "Longitude (coordonnée X)" -#: engine/core/graphene/object_types.py:406 +#: engine/core/graphene/object_types.py:411 msgid "comment" msgstr "Comment" -#: engine/core/graphene/object_types.py:408 -#: engine/core/graphene/object_types.py:542 +#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:548 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "Valeur d'évaluation de 1 à 10 inclus, ou 0 si elle n'est pas définie." -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:421 msgid "represents feedback from a user." msgstr "Représente le retour d'information d'un utilisateur." -#: engine/core/graphene/object_types.py:421 -#: engine/core/graphene/object_types.py:472 engine/core/models.py:1291 +#: engine/core/graphene/object_types.py:426 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:1388 msgid "notifications" msgstr "Notifications" -#: engine/core/graphene/object_types.py:423 +#: engine/core/graphene/object_types.py:428 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" -#: engine/core/graphene/object_types.py:425 engine/core/models.py:1856 +#: engine/core/graphene/object_types.py:430 engine/core/models.py:1959 msgid "feedback" msgstr "Retour d'information" -#: engine/core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:464 msgid "a list of order products in this order" msgstr "Une liste des produits commandés dans cette commande" -#: engine/core/graphene/object_types.py:461 engine/core/models.py:1261 +#: engine/core/graphene/object_types.py:466 engine/core/models.py:1358 msgid "billing address" msgstr "Adresse de facturation" -#: engine/core/graphene/object_types.py:465 +#: engine/core/graphene/object_types.py:470 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1423,53 +1459,57 @@ msgstr "" "Adresse d'expédition pour cette commande, laisser vide si elle est identique" " à l'adresse de facturation ou si elle n'est pas applicable" -#: engine/core/graphene/object_types.py:468 +#: engine/core/graphene/object_types.py:473 msgid "total price of this order" msgstr "Prix total de la commande" -#: engine/core/graphene/object_types.py:469 +#: engine/core/graphene/object_types.py:474 msgid "total quantity of products in order" msgstr "Quantité totale de produits dans la commande" -#: engine/core/graphene/object_types.py:470 +#: engine/core/graphene/object_types.py:475 msgid "are all products in the order digital" msgstr "Tous les produits de la commande sont-ils numériques ?" -#: engine/core/graphene/object_types.py:474 +#: engine/core/graphene/object_types.py:479 msgid "transactions for this order" msgstr "Transactions pour cette commande" -#: engine/core/graphene/object_types.py:494 engine/core/models.py:1325 +#: engine/core/graphene/object_types.py:499 engine/core/models.py:1422 msgid "orders" msgstr "Commandes" -#: engine/core/graphene/object_types.py:515 +#: engine/core/graphene/object_types.py:520 msgid "image url" msgstr "Image URL" -#: engine/core/graphene/object_types.py:522 +#: engine/core/graphene/object_types.py:527 msgid "product's images" msgstr "Images du produit" -#: engine/core/graphene/object_types.py:529 engine/core/models.py:439 -#: engine/core/models.py:596 +#: engine/core/graphene/object_types.py:534 engine/core/models.py:488 +#: engine/core/models.py:661 msgid "category" msgstr "Catégorie" -#: engine/core/graphene/object_types.py:531 engine/core/models.py:1857 +#: engine/core/graphene/object_types.py:536 engine/core/models.py:1960 msgid "feedbacks" msgstr "Retour d'information" -#: engine/core/graphene/object_types.py:532 engine/core/models.py:510 -#: engine/core/models.py:605 +#: engine/core/graphene/object_types.py:537 engine/core/models.py:563 +#: engine/core/models.py:670 msgid "brand" msgstr "Marque" -#: engine/core/graphene/object_types.py:534 engine/core/models.py:103 +#: engine/core/graphene/object_types.py:538 +msgid "video url" +msgstr "URL de la vidéo" + +#: engine/core/graphene/object_types.py:540 engine/core/models.py:122 msgid "attribute groups" msgstr "Groupes d'attributs" -#: engine/core/graphene/object_types.py:536 +#: engine/core/graphene/object_types.py:542 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1477,7 +1517,7 @@ msgstr "Groupes d'attributs" msgid "price" msgstr "Prix" -#: engine/core/graphene/object_types.py:537 +#: engine/core/graphene/object_types.py:543 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1485,39 +1525,39 @@ msgstr "Prix" msgid "quantity" msgstr "Quantité" -#: engine/core/graphene/object_types.py:538 +#: engine/core/graphene/object_types.py:544 msgid "number of feedbacks" msgstr "Nombre de retours d'information" -#: engine/core/graphene/object_types.py:539 +#: engine/core/graphene/object_types.py:545 msgid "only available for personal orders" msgstr "Produits disponibles uniquement pour les commandes personnelles" -#: engine/core/graphene/object_types.py:544 +#: engine/core/graphene/object_types.py:550 msgid "discount price" msgstr "Prix d'escompte" -#: engine/core/graphene/object_types.py:568 engine/core/models.py:682 +#: engine/core/graphene/object_types.py:575 engine/core/models.py:755 msgid "products" msgstr "Produits" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:691 msgid "promocodes" msgstr "Promocodes" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:706 msgid "products on sale" msgstr "Produits en vente" -#: engine/core/graphene/object_types.py:701 engine/core/models.py:935 +#: engine/core/graphene/object_types.py:720 engine/core/models.py:1028 msgid "promotions" msgstr "Promotions" -#: engine/core/graphene/object_types.py:705 engine/core/models.py:182 +#: engine/core/graphene/object_types.py:727 engine/core/models.py:201 msgid "vendor" msgstr "Vendeur" -#: engine/core/graphene/object_types.py:706 engine/core/models.py:681 +#: engine/core/graphene/object_types.py:728 engine/core/models.py:754 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1525,104 +1565,104 @@ msgstr "Vendeur" msgid "product" msgstr "Produit" -#: engine/core/graphene/object_types.py:718 engine/core/models.py:958 +#: engine/core/graphene/object_types.py:740 engine/core/models.py:1051 msgid "wishlisted products" msgstr "Produits en liste de souhaits" -#: engine/core/graphene/object_types.py:725 engine/core/models.py:975 +#: engine/core/graphene/object_types.py:747 engine/core/models.py:1068 msgid "wishlists" msgstr "Liste de souhaits" -#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:752 msgid "tagged products" msgstr "Produits marqués" -#: engine/core/graphene/object_types.py:738 engine/core/models.py:219 -#: engine/core/models.py:611 +#: engine/core/graphene/object_types.py:760 engine/core/models.py:238 +#: engine/core/models.py:676 msgid "product tags" msgstr "Étiquettes du produit" -#: engine/core/graphene/object_types.py:743 +#: engine/core/graphene/object_types.py:765 msgid "tagged categories" msgstr "Catégories marquées" -#: engine/core/graphene/object_types.py:751 +#: engine/core/graphene/object_types.py:773 msgid "categories tags" msgstr "Tags des catégories" -#: engine/core/graphene/object_types.py:755 +#: engine/core/graphene/object_types.py:777 msgid "project name" msgstr "Nom du projet" -#: engine/core/graphene/object_types.py:756 +#: engine/core/graphene/object_types.py:778 msgid "company name" msgstr "Nom de l'entreprise" -#: engine/core/graphene/object_types.py:757 +#: engine/core/graphene/object_types.py:779 msgid "company address" msgstr "Adresse de l'entreprise" -#: engine/core/graphene/object_types.py:758 +#: engine/core/graphene/object_types.py:780 msgid "company phone number" msgstr "Numéro de téléphone de l'entreprise" -#: engine/core/graphene/object_types.py:761 +#: engine/core/graphene/object_types.py:783 msgid "email from, sometimes it must be used instead of host user value" msgstr "" "'email from', parfois il doit être utilisé à la place de la valeur de " "l'utilisateur de l'hôte" -#: engine/core/graphene/object_types.py:764 +#: engine/core/graphene/object_types.py:786 msgid "email host user" msgstr "Utilisateur de l'hôte de messagerie" -#: engine/core/graphene/object_types.py:765 +#: engine/core/graphene/object_types.py:787 msgid "maximum amount for payment" msgstr "Montant maximum du paiement" -#: engine/core/graphene/object_types.py:766 +#: engine/core/graphene/object_types.py:788 msgid "minimum amount for payment" msgstr "Montant minimum pour le paiement" -#: engine/core/graphene/object_types.py:767 +#: engine/core/graphene/object_types.py:789 msgid "analytics data" msgstr "Données analytiques" -#: engine/core/graphene/object_types.py:768 +#: engine/core/graphene/object_types.py:790 msgid "advertisement data" msgstr "Advertisement data" -#: engine/core/graphene/object_types.py:771 +#: engine/core/graphene/object_types.py:793 msgid "company configuration" msgstr "Configuration" -#: engine/core/graphene/object_types.py:775 +#: engine/core/graphene/object_types.py:797 msgid "language code" msgstr "Code langue" -#: engine/core/graphene/object_types.py:776 +#: engine/core/graphene/object_types.py:798 msgid "language name" msgstr "Nom de la langue" -#: engine/core/graphene/object_types.py:777 +#: engine/core/graphene/object_types.py:799 msgid "language flag, if exists :)" msgstr "Drapeau linguistique, s'il existe :)" -#: engine/core/graphene/object_types.py:780 +#: engine/core/graphene/object_types.py:802 msgid "supported languages" msgstr "Obtenir la liste des langues prises en charge" -#: engine/core/graphene/object_types.py:812 -#: engine/core/graphene/object_types.py:815 -#: engine/core/graphene/object_types.py:818 +#: engine/core/graphene/object_types.py:834 +#: engine/core/graphene/object_types.py:837 +#: engine/core/graphene/object_types.py:840 msgid "products search results" msgstr "Résultats de la recherche de produits" -#: engine/core/graphene/object_types.py:820 +#: engine/core/graphene/object_types.py:842 msgid "posts search results" msgstr "Résultats de la recherche de produits" -#: engine/core/models.py:75 +#: engine/core/models.py:91 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 " @@ -1635,23 +1675,23 @@ msgstr "" "hiérarchique. Cela peut être utile pour catégoriser et gérer les attributs " "plus efficacement dans un système complexe." -#: engine/core/models.py:88 +#: engine/core/models.py:107 msgid "parent of this group" msgstr "Parent de ce groupe" -#: engine/core/models.py:89 +#: engine/core/models.py:108 msgid "parent attribute group" msgstr "Groupe d'attributs parent" -#: engine/core/models.py:93 engine/core/models.py:94 +#: engine/core/models.py:112 engine/core/models.py:113 msgid "attribute group's name" msgstr "Nom du groupe d'attributs" -#: engine/core/models.py:102 engine/core/models.py:763 +#: engine/core/models.py:121 engine/core/models.py:849 msgid "attribute group" msgstr "Groupe d'attributs" -#: engine/core/models.py:108 +#: engine/core/models.py:127 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1671,50 +1711,50 @@ msgstr "" "permet de l'utiliser dans des systèmes qui interagissent avec des vendeurs " "tiers." -#: engine/core/models.py:122 +#: engine/core/models.py:141 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." -#: engine/core/models.py:124 +#: engine/core/models.py:143 msgid "authentication info" msgstr "Informations sur l'authentification" -#: engine/core/models.py:129 +#: engine/core/models.py:148 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" -#: engine/core/models.py:130 +#: engine/core/models.py:149 msgid "vendor markup percentage" msgstr "Pourcentage de marge du vendeur" -#: engine/core/models.py:134 +#: engine/core/models.py:153 msgid "name of this vendor" msgstr "Nom de ce vendeur" -#: engine/core/models.py:135 +#: engine/core/models.py:154 msgid "vendor name" msgstr "Nom du vendeur" -#: engine/core/models.py:150 +#: engine/core/models.py:169 msgid "response file" msgstr "dossier de réponse" -#: engine/core/models.py:151 +#: engine/core/models.py:170 msgid "vendor's last processing response" msgstr "la dernière réponse du vendeur en matière de traitement" -#: engine/core/models.py:157 +#: engine/core/models.py:176 msgid "vendor's integration file path" msgstr "Chemin d'accès au fichier d'intégration du fournisseur" -#: engine/core/models.py:158 +#: engine/core/models.py:177 msgid "integration path" msgstr "Parcours d'intégration" -#: engine/core/models.py:192 +#: engine/core/models.py:211 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1729,27 +1769,27 @@ msgstr "" "biais de mixins et permet de personnaliser les métadonnées à des fins " "administratives." -#: engine/core/models.py:204 engine/core/models.py:235 +#: engine/core/models.py:223 engine/core/models.py:254 msgid "internal tag identifier for the product tag" msgstr "Identifiant interne de l'étiquette du produit" -#: engine/core/models.py:205 engine/core/models.py:236 +#: engine/core/models.py:224 engine/core/models.py:255 msgid "tag name" msgstr "Nom du jour" -#: engine/core/models.py:209 engine/core/models.py:240 +#: engine/core/models.py:228 engine/core/models.py:259 msgid "user-friendly name for the product tag" msgstr "Nom convivial pour l'étiquette du produit" -#: engine/core/models.py:210 engine/core/models.py:241 +#: engine/core/models.py:229 engine/core/models.py:260 msgid "tag display name" msgstr "Nom d'affichage de l'étiquette" -#: engine/core/models.py:218 +#: engine/core/models.py:237 msgid "product tag" msgstr "Étiquette du produit" -#: engine/core/models.py:224 +#: engine/core/models.py:243 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 " @@ -1760,15 +1800,15 @@ msgstr "" " et classer des produits. Elle comprend des attributs pour un identifiant de" " balise interne et un nom d'affichage convivial." -#: engine/core/models.py:249 +#: engine/core/models.py:268 msgid "category tag" msgstr "étiquette de catégorie" -#: engine/core/models.py:250 engine/core/models.py:322 +#: engine/core/models.py:269 engine/core/models.py:345 msgid "category tags" msgstr "balises de catégorie" -#: engine/core/models.py:255 +#: engine/core/models.py:274 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1792,52 +1832,52 @@ msgstr "" "catégories, ainsi que d'attribuer des attributs tels que des images, des " "balises ou une priorité." -#: engine/core/models.py:269 +#: engine/core/models.py:292 msgid "upload an image representing this category" msgstr "Télécharger une image représentant cette catégorie" -#: engine/core/models.py:272 +#: engine/core/models.py:295 msgid "category image" msgstr "Image de catégorie" -#: engine/core/models.py:277 +#: engine/core/models.py:300 msgid "define a markup percentage for products in this category" msgstr "" "Définir un pourcentage de majoration pour les produits de cette catégorie" -#: engine/core/models.py:286 +#: engine/core/models.py:309 msgid "parent of this category to form a hierarchical structure" msgstr "Parent de cette catégorie pour former une structure hiérarchique" -#: engine/core/models.py:287 +#: engine/core/models.py:310 msgid "parent category" msgstr "Catégorie de parents" -#: engine/core/models.py:292 +#: engine/core/models.py:315 msgid "category name" msgstr "Nom de la catégorie" -#: engine/core/models.py:293 +#: engine/core/models.py:316 msgid "provide a name for this category" msgstr "Donnez un nom à cette catégorie" -#: engine/core/models.py:300 +#: engine/core/models.py:323 msgid "add a detailed description for this category" msgstr "Ajouter une description détaillée pour cette catégorie" -#: engine/core/models.py:301 +#: engine/core/models.py:324 msgid "category description" msgstr "Description de la catégorie" -#: engine/core/models.py:321 +#: engine/core/models.py:344 msgid "tags that help describe or group this category" msgstr "les étiquettes qui aident à décrire ou à regrouper cette catégorie" -#: engine/core/models.py:328 engine/core/models.py:503 +#: engine/core/models.py:351 engine/core/models.py:552 msgid "priority" msgstr "Priorité" -#: engine/core/models.py:446 +#: engine/core/models.py:495 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1851,47 +1891,43 @@ msgstr "" "de priorité. Elle permet d'organiser et de représenter les données relatives" " à la marque dans l'application." -#: engine/core/models.py:456 +#: engine/core/models.py:505 msgid "name of this brand" msgstr "Nom de cette marque" -#: engine/core/models.py:457 +#: engine/core/models.py:506 msgid "brand name" msgstr "Nom de marque" -#: engine/core/models.py:464 +#: engine/core/models.py:513 msgid "upload a logo representing this brand" msgstr "Télécharger un logo représentant cette marque" -#: engine/core/models.py:466 +#: engine/core/models.py:515 msgid "brand small image" msgstr "Petite image de marque" -#: engine/core/models.py:472 +#: engine/core/models.py:521 msgid "upload a big logo representing this brand" msgstr "Télécharger un grand logo représentant cette marque" -#: engine/core/models.py:474 +#: engine/core/models.py:523 msgid "brand big image" msgstr "Une grande image de marque" -#: engine/core/models.py:479 +#: engine/core/models.py:528 msgid "add a detailed description of the brand" msgstr "Ajouter une description détaillée de la marque" -#: engine/core/models.py:480 +#: engine/core/models.py:529 msgid "brand description" msgstr "Description de la marque" -#: engine/core/models.py:485 -msgid "optional categories that this brand is associated with" -msgstr "Catégories facultatives auxquelles cette marque est associée" +#: engine/core/models.py:534 engine/core/models.py:535 +msgid "DEPRECATED" +msgstr "OBSOLÈTE" -#: engine/core/models.py:486 -msgid "associated categories" -msgstr "Catégories" - -#: engine/core/models.py:516 +#: engine/core/models.py:569 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1907,72 +1943,72 @@ msgstr "" "Elle fait partie du système de gestion des stocks pour permettre le suivi et" " l'évaluation des produits disponibles auprès de différents fournisseurs." -#: engine/core/models.py:528 +#: engine/core/models.py:581 msgid "the vendor supplying this product stock" msgstr "Le vendeur qui fournit ce stock de produits" -#: engine/core/models.py:529 +#: engine/core/models.py:582 msgid "associated vendor" msgstr "Vendeur associé" -#: engine/core/models.py:533 +#: engine/core/models.py:588 msgid "final price to the customer after markups" msgstr "Prix final pour le client après majoration" -#: engine/core/models.py:534 +#: engine/core/models.py:589 msgid "selling price" msgstr "Prix de vente" -#: engine/core/models.py:539 +#: engine/core/models.py:594 msgid "the product associated with this stock entry" msgstr "Le produit associé à cette entrée de stock" -#: engine/core/models.py:540 engine/core/models.py:828 -#: engine/core/models.py:874 engine/core/models.py:1912 +#: engine/core/models.py:595 engine/core/models.py:914 +#: engine/core/models.py:962 engine/core/models.py:2020 msgid "associated product" msgstr "Produit associé" -#: engine/core/models.py:547 +#: engine/core/models.py:604 msgid "the price paid to the vendor for this product" msgstr "Le prix payé au vendeur pour ce produit" -#: engine/core/models.py:548 +#: engine/core/models.py:605 msgid "vendor purchase price" msgstr "Prix d'achat du vendeur" -#: engine/core/models.py:552 +#: engine/core/models.py:609 msgid "available quantity of the product in stock" msgstr "Quantité disponible du produit en stock" -#: engine/core/models.py:553 +#: engine/core/models.py:610 msgid "quantity in stock" msgstr "Quantité en stock" -#: engine/core/models.py:557 +#: engine/core/models.py:614 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU attribué par le fournisseur pour identifier le produit" -#: engine/core/models.py:558 +#: engine/core/models.py:615 msgid "vendor sku" msgstr "UGS du vendeur" -#: engine/core/models.py:564 +#: engine/core/models.py:621 msgid "digital file associated with this stock if applicable" msgstr "Fichier numérique associé à ce stock, le cas échéant" -#: engine/core/models.py:565 +#: engine/core/models.py:622 msgid "digital file" msgstr "Fichier numérique" -#: engine/core/models.py:569 +#: engine/core/models.py:626 msgid "system attributes" msgstr "Attributs du système" -#: engine/core/models.py:577 +#: engine/core/models.py:636 msgid "stock entries" msgstr "Entrées de stock" -#: engine/core/models.py:582 +#: engine/core/models.py:641 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1994,72 +2030,80 @@ msgstr "" "performances. Elle est utilisée pour définir et manipuler les données " "produit et les informations associées dans une application." -#: engine/core/models.py:595 +#: engine/core/models.py:660 msgid "category this product belongs to" msgstr "Catégorie à laquelle appartient ce produit" -#: engine/core/models.py:604 +#: engine/core/models.py:669 msgid "optionally associate this product with a brand" msgstr "Possibilité d'associer ce produit à une marque" -#: engine/core/models.py:610 +#: engine/core/models.py:675 msgid "tags that help describe or group this product" msgstr "Étiquettes permettant de décrire ou de regrouper ce produit" -#: engine/core/models.py:615 +#: engine/core/models.py:680 msgid "indicates whether this product is digitally delivered" msgstr "Indique si ce produit est livré numériquement" -#: engine/core/models.py:616 +#: engine/core/models.py:681 msgid "is product digital" msgstr "Le produit est-il numérique ?" -#: engine/core/models.py:623 +#: engine/core/models.py:688 msgid "indicates whether this product should be updated from periodic task" msgstr "" "indique si ce produit doit être mis à jour à partir de la tâche périodique" -#: engine/core/models.py:625 +#: engine/core/models.py:690 msgid "is product updatable" msgstr "Le produit est-il actualisable ?" -#: engine/core/models.py:631 +#: engine/core/models.py:696 msgid "provide a clear identifying name for the product" msgstr "Fournir un nom d'identification clair pour le produit" -#: engine/core/models.py:632 +#: engine/core/models.py:697 msgid "product name" msgstr "Nom du produit" -#: engine/core/models.py:638 engine/core/models.py:923 +#: engine/core/models.py:703 engine/core/models.py:1012 msgid "add a detailed description of the product" msgstr "Ajouter une description détaillée du produit" -#: engine/core/models.py:639 +#: engine/core/models.py:704 msgid "product description" msgstr "Description du produit" -#: engine/core/models.py:646 +#: engine/core/models.py:710 +msgid "optional video file for this product" +msgstr "Fichier vidéo optionnel pour ce produit" + +#: engine/core/models.py:711 +msgid "product video" +msgstr "Vidéo du produit" + +#: engine/core/models.py:719 msgid "part number for this product" msgstr "Numéro de pièce pour ce produit" -#: engine/core/models.py:647 +#: engine/core/models.py:720 msgid "part number" msgstr "Numéro de pièce" -#: engine/core/models.py:666 +#: engine/core/models.py:739 msgid "stock keeping unit for this product" msgstr "Unité de gestion des stocks pour ce produit" -#: engine/core/models.py:673 +#: engine/core/models.py:746 msgid "whether to export this product to marketplaces" msgstr "Faut-il exporter ce produit vers les marchés ?" -#: engine/core/models.py:674 +#: engine/core/models.py:747 msgid "Export to Marketplaces" msgstr "Exporter vers les places de marché" -#: engine/core/models.py:749 +#: engine/core/models.py:835 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 " @@ -2076,66 +2120,66 @@ msgstr "" "les entiers, les flottants, les booléens, les tableaux et les objets. Cela " "permet une structuration dynamique et flexible des données." -#: engine/core/models.py:762 +#: engine/core/models.py:848 msgid "group of this attribute" msgstr "Groupe de cet attribut" -#: engine/core/models.py:768 +#: engine/core/models.py:854 msgid "string" msgstr "Chaîne" -#: engine/core/models.py:769 +#: engine/core/models.py:855 msgid "integer" msgstr "Entier" -#: engine/core/models.py:770 +#: engine/core/models.py:856 msgid "float" msgstr "Flotteur" -#: engine/core/models.py:771 +#: engine/core/models.py:857 msgid "boolean" msgstr "Booléen" -#: engine/core/models.py:772 +#: engine/core/models.py:858 msgid "array" msgstr "Tableau" -#: engine/core/models.py:773 +#: engine/core/models.py:859 msgid "object" msgstr "Objet" -#: engine/core/models.py:775 +#: engine/core/models.py:861 msgid "type of the attribute's value" msgstr "Type de la valeur de l'attribut" -#: engine/core/models.py:776 +#: engine/core/models.py:862 msgid "value type" msgstr "Type de valeur" -#: engine/core/models.py:781 +#: engine/core/models.py:867 msgid "name of this attribute" msgstr "Nom de cet attribut" -#: engine/core/models.py:782 +#: engine/core/models.py:868 msgid "attribute's name" msgstr "Nom de l'attribut" -#: engine/core/models.py:787 +#: engine/core/models.py:873 msgid "is filterable" msgstr "est filtrable" -#: engine/core/models.py:789 +#: engine/core/models.py:875 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." -#: engine/core/models.py:802 engine/core/models.py:820 +#: engine/core/models.py:888 engine/core/models.py:906 #: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Attribut" -#: engine/core/models.py:808 +#: engine/core/models.py:894 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" @@ -2146,19 +2190,19 @@ msgstr "" "organisation et une représentation dynamique des caractéristiques du " "produit." -#: engine/core/models.py:819 +#: engine/core/models.py:905 msgid "attribute of this value" msgstr "Attribut de cette valeur" -#: engine/core/models.py:827 +#: engine/core/models.py:913 msgid "the specific product associated with this attribute's value" msgstr "Le produit spécifique associé à la valeur de cet attribut" -#: engine/core/models.py:833 +#: engine/core/models.py:919 msgid "the specific value for this attribute" msgstr "La valeur spécifique de cet attribut" -#: engine/core/models.py:846 +#: engine/core/models.py:934 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -2173,39 +2217,39 @@ msgstr "" " comprend également une fonction d'accessibilité avec un texte alternatif " "pour les images." -#: engine/core/models.py:857 +#: engine/core/models.py:945 msgid "provide alternative text for the image for accessibility" msgstr "Fournir un texte alternatif pour l'image afin d'en faciliter l'accès" -#: engine/core/models.py:858 +#: engine/core/models.py:946 msgid "image alt text" msgstr "Texte alt de l'image" -#: engine/core/models.py:861 +#: engine/core/models.py:949 msgid "upload the image file for this product" msgstr "Télécharger le fichier image pour ce produit" -#: engine/core/models.py:862 engine/core/models.py:893 +#: engine/core/models.py:950 engine/core/models.py:982 msgid "product image" msgstr "Image du produit" -#: engine/core/models.py:867 +#: engine/core/models.py:955 msgid "determines the order in which images are displayed" msgstr "Détermine l'ordre d'affichage des images" -#: engine/core/models.py:868 +#: engine/core/models.py:956 msgid "display priority" msgstr "Priorité à l'affichage" -#: engine/core/models.py:873 +#: engine/core/models.py:961 msgid "the product that this image represents" msgstr "Le produit que cette image représente" -#: engine/core/models.py:894 +#: engine/core/models.py:983 msgid "product images" msgstr "Images du produit" -#: engine/core/models.py:899 +#: engine/core/models.py:988 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -2222,39 +2266,39 @@ msgstr "" "Elle s'intègre au catalogue de produits pour déterminer les articles " "concernés par la campagne." -#: engine/core/models.py:911 +#: engine/core/models.py:1000 msgid "percentage discount for the selected products" msgstr "Pourcentage de réduction pour les produits sélectionnés" -#: engine/core/models.py:912 +#: engine/core/models.py:1001 msgid "discount percentage" msgstr "Pourcentage de réduction" -#: engine/core/models.py:917 +#: engine/core/models.py:1006 msgid "provide a unique name for this promotion" msgstr "Donnez un nom unique à cette promotion" -#: engine/core/models.py:918 +#: engine/core/models.py:1007 msgid "promotion name" msgstr "Nom de la promotion" -#: engine/core/models.py:924 +#: engine/core/models.py:1013 msgid "promotion description" msgstr "Promotion description" -#: engine/core/models.py:929 +#: engine/core/models.py:1018 msgid "select which products are included in this promotion" msgstr "Sélectionnez les produits inclus dans cette promotion" -#: engine/core/models.py:930 +#: engine/core/models.py:1019 msgid "included products" msgstr "Produits inclus" -#: engine/core/models.py:934 +#: engine/core/models.py:1027 msgid "promotion" msgstr "Promotion" -#: engine/core/models.py:945 +#: engine/core/models.py:1038 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2268,23 +2312,23 @@ msgstr "" "opérations permettant d'ajouter et de supprimer plusieurs produits à la " "fois." -#: engine/core/models.py:957 +#: engine/core/models.py:1050 msgid "products that the user has marked as wanted" msgstr "Produits que l'utilisateur a marqués comme souhaités" -#: engine/core/models.py:965 +#: engine/core/models.py:1058 msgid "user who owns this wishlist" msgstr "Utilisateur qui possède cette liste de souhaits" -#: engine/core/models.py:966 +#: engine/core/models.py:1059 msgid "wishlist owner" msgstr "Propriétaire de la liste de souhaits" -#: engine/core/models.py:974 +#: engine/core/models.py:1067 msgid "wishlist" msgstr "Liste de souhaits" -#: engine/core/models.py:1016 +#: engine/core/models.py:1109 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2301,19 +2345,19 @@ msgstr "" "documentaires. Elle étend les fonctionnalités de mixins spécifiques et " "fournit des fonctionnalités personnalisées supplémentaires." -#: engine/core/models.py:1031 +#: engine/core/models.py:1124 msgid "documentary" msgstr "Documentaire" -#: engine/core/models.py:1032 +#: engine/core/models.py:1125 msgid "documentaries" msgstr "Documentaires" -#: engine/core/models.py:1042 +#: engine/core/models.py:1135 msgid "unresolved" msgstr "Non résolu" -#: engine/core/models.py:1047 +#: engine/core/models.py:1140 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2336,59 +2380,59 @@ msgstr "" "adresse à un utilisateur, ce qui facilite le traitement personnalisé des " "données." -#: engine/core/models.py:1062 +#: engine/core/models.py:1155 msgid "address line for the customer" msgstr "Ligne d'adresse du client" -#: engine/core/models.py:1063 +#: engine/core/models.py:1156 msgid "address line" msgstr "Ligne d'adresse" -#: engine/core/models.py:1065 +#: engine/core/models.py:1158 msgid "street" msgstr "Rue" -#: engine/core/models.py:1066 +#: engine/core/models.py:1159 msgid "district" msgstr "District" -#: engine/core/models.py:1067 +#: engine/core/models.py:1160 msgid "city" msgstr "Ville" -#: engine/core/models.py:1068 +#: engine/core/models.py:1161 msgid "region" msgstr "Région" -#: engine/core/models.py:1069 +#: engine/core/models.py:1162 msgid "postal code" msgstr "Code postal" -#: engine/core/models.py:1070 +#: engine/core/models.py:1163 msgid "country" msgstr "Pays" -#: engine/core/models.py:1077 +#: engine/core/models.py:1170 msgid "geolocation point: (longitude, latitude)" msgstr "Point de géolocalisation (longitude, latitude)" -#: engine/core/models.py:1083 +#: engine/core/models.py:1176 msgid "full JSON response from geocoder for this address" msgstr "Réponse JSON complète du géocodeur pour cette adresse" -#: engine/core/models.py:1089 +#: engine/core/models.py:1182 msgid "stored JSON response from the geocoding service" msgstr "Réponse JSON stockée du service de géocodage" -#: engine/core/models.py:1099 +#: engine/core/models.py:1192 msgid "address" msgstr "Adresse" -#: engine/core/models.py:1100 +#: engine/core/models.py:1193 msgid "addresses" msgstr "Adresses" -#: engine/core/models.py:1112 +#: engine/core/models.py:1205 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2406,76 +2450,76 @@ msgstr "" "d'appliquer le code promotionnel à une commande tout en veillant à ce que " "les contraintes soient respectées." -#: engine/core/models.py:1126 +#: engine/core/models.py:1219 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" -#: engine/core/models.py:1127 +#: engine/core/models.py:1220 msgid "promo code identifier" msgstr "Identifiant du code promotionnel" -#: engine/core/models.py:1134 +#: engine/core/models.py:1227 msgid "fixed discount amount applied if percent is not used" msgstr "" "Montant fixe de la remise appliqué si le pourcentage n'est pas utilisé" -#: engine/core/models.py:1135 +#: engine/core/models.py:1228 msgid "fixed discount amount" msgstr "Montant de l'escompte fixe" -#: engine/core/models.py:1141 +#: engine/core/models.py:1234 msgid "percentage discount applied if fixed amount is not used" msgstr "" "Pourcentage de réduction appliqué si le montant fixe n'est pas utilisé" -#: engine/core/models.py:1142 +#: engine/core/models.py:1235 msgid "percentage discount" msgstr "Pourcentage de réduction" -#: engine/core/models.py:1147 +#: engine/core/models.py:1240 msgid "timestamp when the promocode expires" msgstr "Date d'expiration du code promotionnel" -#: engine/core/models.py:1148 +#: engine/core/models.py:1241 msgid "end validity time" msgstr "Heure de fin de validité" -#: engine/core/models.py:1153 +#: engine/core/models.py:1246 msgid "timestamp from which this promocode is valid" msgstr "Date à partir de laquelle ce code promotionnel est valable" -#: engine/core/models.py:1154 +#: engine/core/models.py:1247 msgid "start validity time" msgstr "Heure de début de validité" -#: engine/core/models.py:1159 +#: engine/core/models.py:1252 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é." -#: engine/core/models.py:1160 +#: engine/core/models.py:1253 msgid "usage timestamp" msgstr "Horodatage de l'utilisation" -#: engine/core/models.py:1165 +#: engine/core/models.py:1258 msgid "user assigned to this promocode if applicable" msgstr "Utilisateur assigné à ce code promo, le cas échéant" -#: engine/core/models.py:1166 +#: engine/core/models.py:1259 msgid "assigned user" msgstr "Utilisateur assigné" -#: engine/core/models.py:1173 +#: engine/core/models.py:1266 msgid "promo code" msgstr "Code promo" -#: engine/core/models.py:1174 +#: engine/core/models.py:1267 msgid "promo codes" msgstr "Codes promotionnels" -#: engine/core/models.py:1190 +#: engine/core/models.py:1283 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2483,16 +2527,16 @@ msgstr "" "Un seul type de remise doit être défini (montant ou pourcentage), mais pas " "les deux ni aucun des deux." -#: engine/core/models.py:1212 +#: engine/core/models.py:1305 msgid "promocode already used" msgstr "Le code promotionnel a déjà été utilisé" -#: engine/core/models.py:1234 +#: engine/core/models.py:1327 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Type de réduction non valide pour le code promo {self.uuid} !" -#: engine/core/models.py:1243 +#: engine/core/models.py:1336 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 " @@ -2510,146 +2554,146 @@ msgstr "" " peuvent être mis à jour. De même, la fonctionnalité permet de gérer les " "produits dans le cycle de vie de la commande." -#: engine/core/models.py:1260 +#: engine/core/models.py:1357 msgid "the billing address used for this order" msgstr "L'adresse de facturation utilisée pour cette commande" -#: engine/core/models.py:1268 +#: engine/core/models.py:1365 msgid "optional promo code applied to this order" msgstr "Code promo optionnel appliqué à cette commande" -#: engine/core/models.py:1269 +#: engine/core/models.py:1366 msgid "applied promo code" msgstr "Code promo appliqué" -#: engine/core/models.py:1277 +#: engine/core/models.py:1374 msgid "the shipping address used for this order" msgstr "L'adresse de livraison utilisée pour cette commande" -#: engine/core/models.py:1278 +#: engine/core/models.py:1375 msgid "shipping address" msgstr "Adresse de livraison" -#: engine/core/models.py:1284 +#: engine/core/models.py:1381 msgid "current status of the order in its lifecycle" msgstr "Statut actuel de la commande dans son cycle de vie" -#: engine/core/models.py:1285 +#: engine/core/models.py:1382 msgid "order status" msgstr "Statut de la commande" -#: engine/core/models.py:1290 engine/core/models.py:1889 +#: engine/core/models.py:1387 engine/core/models.py:1997 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." -#: engine/core/models.py:1296 +#: engine/core/models.py:1393 msgid "json representation of order attributes for this order" msgstr "Représentation JSON des attributs de cette commande" -#: engine/core/models.py:1302 +#: engine/core/models.py:1399 msgid "the user who placed the order" msgstr "L'utilisateur qui a passé la commande" -#: engine/core/models.py:1303 +#: engine/core/models.py:1400 msgid "user" msgstr "Utilisateur" -#: engine/core/models.py:1309 +#: engine/core/models.py:1406 msgid "the timestamp when the order was finalized" msgstr "L'heure à laquelle la commande a été finalisée." -#: engine/core/models.py:1310 +#: engine/core/models.py:1407 msgid "buy time" msgstr "Temps d'achat" -#: engine/core/models.py:1317 +#: engine/core/models.py:1414 msgid "a human-readable identifier for the order" msgstr "Un identifiant lisible par l'homme pour la commande" -#: engine/core/models.py:1318 +#: engine/core/models.py:1415 msgid "human readable id" msgstr "ID lisible par l'homme" -#: engine/core/models.py:1324 +#: engine/core/models.py:1421 msgid "order" msgstr "Commande" -#: engine/core/models.py:1371 +#: engine/core/models.py:1468 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 !" -#: engine/core/models.py:1404 +#: engine/core/models.py:1504 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." -#: engine/core/models.py:1410 +#: engine/core/models.py:1510 msgid "you cannot add inactive products to order" msgstr "Vous ne pouvez pas ajouter des produits inactifs à la commande" -#: engine/core/models.py:1432 +#: engine/core/models.py:1533 msgid "you cannot add more products than available in stock" msgstr "" "Vous ne pouvez pas ajouter plus de produits que ceux disponibles en stock" -#: engine/core/models.py:1456 engine/core/models.py:1485 -#: engine/core/models.py:1495 +#: engine/core/models.py:1557 engine/core/models.py:1586 +#: engine/core/models.py:1596 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." -#: engine/core/models.py:1480 +#: engine/core/models.py:1581 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} n'existe pas avec la requête <{query}> !" -#: engine/core/models.py:1519 +#: engine/core/models.py:1620 msgid "promocode does not exist" msgstr "Le code promotionnel n'existe pas" -#: engine/core/models.py:1534 +#: engine/core/models.py:1635 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 !" -#: engine/core/models.py:1555 +#: engine/core/models.py:1656 msgid "address does not exist" msgstr "L'adresse n'existe pas" -#: engine/core/models.py:1577 engine/core/models.py:1656 +#: engine/core/models.py:1678 engine/core/models.py:1757 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." -#: engine/core/models.py:1583 engine/core/models.py:1649 +#: engine/core/models.py:1684 engine/core/models.py:1750 msgid "invalid force value" msgstr "Valeur de force non valide" -#: engine/core/models.py:1589 engine/core/models.py:1660 +#: engine/core/models.py:1690 engine/core/models.py:1761 msgid "you cannot purchase an empty order!" msgstr "Vous ne pouvez pas acheter une commande vide !" -#: engine/core/models.py:1610 +#: engine/core/models.py:1711 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." -#: engine/core/models.py:1624 +#: engine/core/models.py:1725 msgid "a user without a balance cannot buy with balance" msgstr "Un utilisateur sans solde ne peut pas acheter avec un solde !" -#: engine/core/models.py:1630 +#: engine/core/models.py:1731 msgid "insufficient funds to complete the order" msgstr "Insuffisance de fonds pour compléter la commande" -#: engine/core/models.py:1671 +#: engine/core/models.py:1772 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2658,7 +2702,7 @@ msgstr "" "informations suivantes : nom du client, courriel du client, numéro de " "téléphone du client" -#: engine/core/models.py:1682 +#: engine/core/models.py:1783 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2666,7 +2710,7 @@ msgstr "" "Méthode de paiement non valide : {payment_method} de " "{available_payment_methods} !" -#: engine/core/models.py:1813 +#: engine/core/models.py:1916 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2682,34 +2726,34 @@ msgstr "" "La classe utilise des champs de base de données pour modéliser et gérer " "efficacement les données de feedback." -#: engine/core/models.py:1825 +#: engine/core/models.py:1928 msgid "user-provided comments about their experience with the product" msgstr "Commentaires des utilisateurs sur leur expérience du produit" -#: engine/core/models.py:1826 +#: engine/core/models.py:1929 msgid "feedback comments" msgstr "Commentaires" -#: engine/core/models.py:1834 +#: engine/core/models.py:1937 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." -#: engine/core/models.py:1836 +#: engine/core/models.py:1939 msgid "related order product" msgstr "Produit de commande apparenté" -#: engine/core/models.py:1841 +#: engine/core/models.py:1944 msgid "user-assigned rating for the product" msgstr "Note attribuée par l'utilisateur au produit" -#: engine/core/models.py:1842 +#: engine/core/models.py:1945 msgid "product rating" msgstr "Evaluation du produit" -#: engine/core/models.py:1862 +#: engine/core/models.py:1965 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2733,111 +2777,111 @@ msgstr "" "modèle s'intègre aux modèles de commande et de produit et stocke une " "référence à ces derniers." -#: engine/core/models.py:1877 +#: engine/core/models.py:1985 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" -#: engine/core/models.py:1878 +#: engine/core/models.py:1986 msgid "purchase price at order time" msgstr "Prix d'achat au moment de la commande" -#: engine/core/models.py:1883 +#: engine/core/models.py:1991 msgid "internal comments for admins about this ordered product" msgstr "" "Commentaires internes pour les administrateurs sur ce produit commandé" -#: engine/core/models.py:1884 +#: engine/core/models.py:1992 msgid "internal comments" msgstr "Commentaires internes" -#: engine/core/models.py:1890 +#: engine/core/models.py:1998 msgid "user notifications" msgstr "Notifications aux utilisateurs" -#: engine/core/models.py:1895 +#: engine/core/models.py:2003 msgid "json representation of this item's attributes" msgstr "Représentation JSON des attributs de cet élément" -#: engine/core/models.py:1896 +#: engine/core/models.py:2004 msgid "ordered product attributes" msgstr "Attributs du produit ordonnés" -#: engine/core/models.py:1901 +#: engine/core/models.py:2009 msgid "reference to the parent order that contains this product" msgstr "Référence à l'ordre parent qui contient ce produit" -#: engine/core/models.py:1902 +#: engine/core/models.py:2010 msgid "parent order" msgstr "Ordonnance parentale" -#: engine/core/models.py:1911 +#: engine/core/models.py:2019 msgid "the specific product associated with this order line" msgstr "Le produit spécifique associé à cette ligne de commande" -#: engine/core/models.py:1918 +#: engine/core/models.py:2026 msgid "quantity of this specific product in the order" msgstr "Quantité de ce produit spécifique dans la commande" -#: engine/core/models.py:1919 +#: engine/core/models.py:2027 msgid "product quantity" msgstr "Quantité de produits" -#: engine/core/models.py:1926 +#: engine/core/models.py:2034 msgid "current status of this product in the order" msgstr "Statut actuel de ce produit dans la commande" -#: engine/core/models.py:1927 +#: engine/core/models.py:2035 msgid "product line status" msgstr "Statut de la ligne de produits" -#: engine/core/models.py:1998 +#: engine/core/models.py:2106 msgid "order product must have an order" msgstr "Le produit doit être associé à une commande !" -#: engine/core/models.py:2000 +#: engine/core/models.py:2108 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Mauvaise action spécifiée pour le retour d'information : {action} !" -#: engine/core/models.py:2017 +#: engine/core/models.py:2125 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." -#: engine/core/models.py:2026 +#: engine/core/models.py:2132 engine/core/models.py:2227 msgid "name" msgstr "Nom" -#: engine/core/models.py:2028 +#: engine/core/models.py:2134 msgid "URL of the integration" msgstr "URL de l'intégration" -#: engine/core/models.py:2031 +#: engine/core/models.py:2137 msgid "authentication credentials" msgstr "Références d'authentification" -#: engine/core/models.py:2054 +#: engine/core/models.py:2160 msgid "you can only have one default CRM provider" msgstr "Vous ne pouvez avoir qu'un seul fournisseur de CRM par défaut" -#: engine/core/models.py:2064 +#: engine/core/models.py:2170 msgid "CRM" msgstr "CRM" -#: engine/core/models.py:2065 +#: engine/core/models.py:2171 msgid "CRMs" msgstr "CRM" -#: engine/core/models.py:2081 +#: engine/core/models.py:2187 msgid "order CRM link" msgstr "Lien CRM de la commande" -#: engine/core/models.py:2082 +#: engine/core/models.py:2188 msgid "orders CRM links" msgstr "Liens CRM des commandes" -#: engine/core/models.py:2087 +#: engine/core/models.py:2193 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2854,14 +2898,38 @@ 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." -#: engine/core/models.py:2103 +#: engine/core/models.py:2209 msgid "download" msgstr "Télécharger" -#: engine/core/models.py:2104 +#: engine/core/models.py:2210 msgid "downloads" msgstr "Téléchargements" +#: engine/core/models.py:2228 +msgid "descriptive name for the image" +msgstr "Nom descriptif de l'image" + +#: engine/core/models.py:2233 +msgid "image file pasted in the markdown editor" +msgstr "Fichier image collé dans l'éditeur Markdown" + +#: engine/core/models.py:2239 +msgid "alt text" +msgstr "Autre texte" + +#: engine/core/models.py:2240 +msgid "alternative text for accessibility" +msgstr "Texte alternatif pour l'accessibilité" + +#: engine/core/models.py:2244 +msgid "pasted image" +msgstr "Image collée" + +#: engine/core/models.py:2245 +msgid "pasted images" +msgstr "Images collées" + #: engine/core/serializers/utility.py:91 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." @@ -2870,6 +2938,16 @@ msgstr "" "pour ajouter un commentaire." #: engine/core/sitemaps.py:25 +#: engine/core/templates/admin_doc/bookmarklets.html:8 +#: engine/core/templates/admin_doc/index.html:8 +#: engine/core/templates/admin_doc/missing_docutils.html:8 +#: engine/core/templates/admin_doc/model_detail.html:8 +#: engine/core/templates/admin_doc/model_index.html:8 +#: engine/core/templates/admin_doc/template_detail.html:8 +#: engine/core/templates/admin_doc/template_filter_index.html:8 +#: engine/core/templates/admin_doc/template_tag_index.html:8 +#: engine/core/templates/admin_doc/view_detail.html:8 +#: engine/core/templates/admin_doc/view_index.html:8 msgid "Home" msgstr "Accueil" @@ -2922,45 +3000,34 @@ msgstr "Brut" msgid "Dashboard" msgstr "Tableau de bord" -#: engine/core/templates/admin/dashboard/_income_overview.html:7 +#: engine/core/templates/admin/dashboard/_income_overview.html:6 msgid "Income overview" msgstr "Aperçu des revenus" -#: engine/core/templates/admin/dashboard/_income_overview.html:31 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Net" +#: engine/core/templates/admin/dashboard/_income_overview.html:16 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" msgstr "Net revenue" -#: engine/core/templates/admin/dashboard/_income_overview.html:37 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Taxes" -msgstr "Impôts" - -#: engine/core/templates/admin/dashboard/_income_overview.html:43 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 +#: engine/core/templates/admin/dashboard/_income_overview.html:21 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 msgid "Returns" msgstr "Retours" -#: engine/core/templates/admin/dashboard/_income_overview.html:48 -msgid "Gross (pie total)" -msgstr "Recettes brutes" - -#: engine/core/templates/admin/dashboard/_income_overview.html:72 -msgid "No data" -msgstr "Pas de date" - +#: engine/core/templates/admin/dashboard/_income_overview.html:26 #: engine/core/templates/admin/dashboard/_kpis.html:6 msgid "GMV" msgstr "GMV" +#: engine/core/templates/admin/dashboard/_income_overview.html:50 +msgid "No data" +msgstr "Pas de date" + #: engine/core/templates/admin/dashboard/_kpis.html:34 msgid "AOV" msgstr "AOV" -#: engine/core/templates/admin/dashboard/_kpis.html:48 -msgid "Net revenue" -msgstr "Net revenue" - #: engine/core/templates/admin/dashboard/_kpis.html:62 msgid "Refund rate" msgstr "Taux de remboursement" @@ -2973,7 +3040,7 @@ msgstr "Renvoyé" msgid "Low stock" msgstr "Faible stock" -#: engine/core/templates/admin/dashboard/_low_stock.html:29 +#: engine/core/templates/admin/dashboard/_low_stock.html:33 msgid "No low stock items." msgstr "Pas d'articles en rupture de stock." @@ -3030,6 +3097,305 @@ msgstr "Aucune vente par catégorie au cours des 30 derniers jours." msgid "Django site admin" msgstr "Administrateur de site Django" +#: engine/core/templates/admin_doc/bookmarklets.html:4 +#: engine/core/templates/admin_doc/bookmarklets.html:17 +msgid "Documentation bookmarklets" +msgstr "Signets de documentation" + +#: engine/core/templates/admin_doc/bookmarklets.html:10 +#: engine/core/templates/admin_doc/index.html:4 +#: engine/core/templates/admin_doc/index.html:10 +#: engine/core/templates/admin_doc/index.html:15 +#: engine/core/templates/admin_doc/missing_docutils.html:10 +#: engine/core/templates/admin_doc/missing_docutils.html:19 +#: engine/core/templates/admin_doc/model_detail.html:10 +#: engine/core/templates/admin_doc/model_index.html:10 +#: engine/core/templates/admin_doc/template_detail.html:10 +#: engine/core/templates/admin_doc/template_filter_index.html:10 +#: engine/core/templates/admin_doc/template_tag_index.html:10 +#: engine/core/templates/admin_doc/view_detail.html:10 +#: engine/core/templates/admin_doc/view_index.html:10 +msgid "Documentation" +msgstr "Documentation" + +#: engine/core/templates/admin_doc/bookmarklets.html:12 +#: engine/core/templates/admin_doc/index.html:53 +msgid "Bookmarklets" +msgstr "Signets" + +#: engine/core/templates/admin_doc/bookmarklets.html:19 +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Pour installer les bookmarklets, faites glisser le lien vers votre barre " +"d'outils de signets ou cliquez avec le bouton droit sur le lien et ajoutez-" +"le à vos signets. Vous pouvez désormais sélectionner le bookmarklet depuis " +"n'importe quelle page du site." + +#: engine/core/templates/admin_doc/bookmarklets.html:29 +msgid "Documentation for this page" +msgstr "Documentation pour cette page" + +#: engine/core/templates/admin_doc/bookmarklets.html:31 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Vous redirige de n'importe quelle page vers la documentation relative à la " +"vue qui génère cette page." + +#: engine/core/templates/admin_doc/index.html:21 +#: engine/core/templates/admin_doc/model_detail.html:12 +#: engine/core/templates/admin_doc/model_index.html:4 +#: engine/core/templates/admin_doc/model_index.html:12 +msgid "Models" +msgstr "Modèles" + +#: engine/core/templates/admin_doc/index.html:23 +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Les modèles sont des descriptions de tous les objets du système et des " +"champs qui leur sont associés. Chaque modèle comporte une liste de champs " +"accessibles en tant que variables de modèle." + +#: engine/core/templates/admin_doc/index.html:29 +#: engine/core/templates/admin_doc/view_detail.html:12 +#: engine/core/templates/admin_doc/view_index.html:4 +#: engine/core/templates/admin_doc/view_index.html:12 +msgid "Views" +msgstr "Vues" + +#: engine/core/templates/admin_doc/index.html:31 +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Chaque page du site public est générée par une vue. La vue définit le modèle" +" utilisé pour générer la page et les objets disponibles pour ce modèle." + +#: engine/core/templates/admin_doc/index.html:39 +msgid "List of all the template tags and their functions." +msgstr "Liste de toutes les balises de modèle et de leurs fonctions." + +#: engine/core/templates/admin_doc/index.html:45 +#: engine/core/templates/admin_doc/template_filter_index.html:12 +msgid "Filters" +msgstr "Filtres" + +#: engine/core/templates/admin_doc/index.html:47 +msgid "" +"Filters are actions which can be applied to variables in a template to alter" +" the output." +msgstr "" +"Les filtres sont des actions qui peuvent être appliquées aux variables d'un " +"modèle afin de modifier le résultat." + +#: engine/core/templates/admin_doc/index.html:55 +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Outils permettant à votre navigateur d'accéder rapidement aux " +"fonctionnalités d'administration." + +#: engine/core/templates/admin_doc/missing_docutils.html:4 +msgid "Please install docutils" +msgstr "Veuillez installer docutils." + +#: engine/core/templates/admin_doc/missing_docutils.html:20 +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"Le système de documentation administrative nécessite la bibliothèque docutils de Python." + +#: engine/core/templates/admin_doc/missing_docutils.html:21 +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Veuillez demander à vos administrateurs d'installer docutils." + +#: engine/core/templates/admin_doc/model_detail.html:4 +#, python-format +msgid "Model: %(name)s" +msgstr "Modèle : %(name)s" + +#: engine/core/templates/admin_doc/model_detail.html:29 +msgid "Fields" +msgstr "Champs" + +#: engine/core/templates/admin_doc/model_detail.html:36 +msgid "Field" +msgstr "Champ" + +#: engine/core/templates/admin_doc/model_detail.html:37 +msgid "Type" +msgstr "Type" + +#: engine/core/templates/admin_doc/model_detail.html:38 +#: engine/core/templates/admin_doc/model_detail.html:70 +msgid "Description" +msgstr "Description" + +#: engine/core/templates/admin_doc/model_detail.html:61 +msgid "Methods with arguments" +msgstr "Méthodes avec arguments" + +#: engine/core/templates/admin_doc/model_detail.html:68 +msgid "Method" +msgstr "Méthode" + +#: engine/core/templates/admin_doc/model_detail.html:69 +msgid "Arguments" +msgstr "Arguments" + +#: engine/core/templates/admin_doc/model_detail.html:89 +msgid "Back to Model documentation" +msgstr "Retour à la documentation du modèle" + +#: engine/core/templates/admin_doc/model_index.html:17 +msgid "Model documentation" +msgstr "Documentation du modèle" + +#: engine/core/templates/admin_doc/model_index.html:44 +msgid "Model groups" +msgstr "Groupes modèles" + +#: engine/core/templates/admin_doc/template_detail.html:4 +#, python-format +msgid "Template: %(name)s" +msgstr "Modèle : %(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:12 +msgid "Templates" +msgstr "Modèles" + +#: engine/core/templates/admin_doc/template_detail.html:17 +#, python-format +msgid "" +"Template: %(name)s" +msgstr "" +"Modèle : %(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:21 +#, python-format +msgid "Search path for template %(name)s:" +msgstr "" +"Chemin de recherche pour le modèle %(name)s" +" :" + +#: engine/core/templates/admin_doc/template_detail.html:29 +msgid "(does not exist)" +msgstr "(n'existe pas)" + +#: engine/core/templates/admin_doc/template_detail.html:40 +msgid "Back to Documentation" +msgstr "Retour à la documentation" + +#: engine/core/templates/admin_doc/template_filter_index.html:4 +msgid "Template filters" +msgstr "Filtres de modèles" + +#: engine/core/templates/admin_doc/template_filter_index.html:17 +msgid "Template filter documentation" +msgstr "Documentation sur les filtres de modèles" + +#: engine/core/templates/admin_doc/template_filter_index.html:26 +#: engine/core/templates/admin_doc/template_filter_index.html:52 +msgid "Built-in filters" +msgstr "Filtres intégrés" + +#: engine/core/templates/admin_doc/template_filter_index.html:29 +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before using" +" the filter." +msgstr "" +"Pour utiliser ces filtres, insérez %(code)s dans votre modèle " +"avant d'utiliser le filtre." + +#: engine/core/templates/admin_doc/template_tag_index.html:4 +msgid "Template tags" +msgstr "Balises de modèle" + +#: engine/core/templates/admin_doc/template_tag_index.html:17 +msgid "Template tag documentation" +msgstr "Documentation des balises de modèle" + +#: engine/core/templates/admin_doc/template_tag_index.html:26 +#: engine/core/templates/admin_doc/template_tag_index.html:52 +msgid "Built-in tags" +msgstr "Balises intégrées" + +#: engine/core/templates/admin_doc/template_tag_index.html:29 +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using the tag." +msgstr "" +"Pour utiliser ces balises, insérez %(code)s dans votre modèle " +"avant d'utiliser la balise." + +#: engine/core/templates/admin_doc/view_detail.html:4 +#, python-format +msgid "View: %(name)s" +msgstr "Afficher : %(name)s" + +#: engine/core/templates/admin_doc/view_detail.html:28 +msgid "Context:" +msgstr "Contexte :" + +#: engine/core/templates/admin_doc/view_detail.html:33 +msgid "Templates:" +msgstr "Modèles :" + +#: engine/core/templates/admin_doc/view_detail.html:41 +msgid "Back to View documentation" +msgstr "Retour à la documentation" + +#: engine/core/templates/admin_doc/view_index.html:17 +msgid "View documentation" +msgstr "Consulter la documentation" + +#: engine/core/templates/admin_doc/view_index.html:28 +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Vues par espace de noms %(name)s" + +#: engine/core/templates/admin_doc/view_index.html:30 +msgid "Views by empty namespace" +msgstr "Vues par espace de noms vide" + +#: engine/core/templates/admin_doc/view_index.html:40 +#, python-format +msgid "" +"View function: %(full_name)s. Name: %(url_name)s." +msgstr "" +"Fonction d'affichage : %(full_name)s. Nom : " +"%(url_name)s." + +#: engine/core/templates/admin_doc/view_index.html:54 +msgid "Jump to namespace" +msgstr "Aller à l'espace de noms" + +#: engine/core/templates/admin_doc/view_index.html:59 +msgid "Empty namespace" +msgstr "Espace de noms vide" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -3130,7 +3496,7 @@ msgstr "" " complémentaires" #: engine/core/templates/digital_order_delivered_email.html:137 -#: engine/core/templates/json_table_widget.html:6 +#: engine/core/templates/json_table_widget.html:26 msgid "value" msgstr "Valeur" @@ -3150,11 +3516,23 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "Meilleures salutations,
l'équipe %(project_name)s" -#: engine/core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:7 +msgid "Key" +msgstr "Clé" + +#: engine/core/templates/json_table_widget.html:8 +msgid "Value" +msgstr "Valeur" + +#: engine/core/templates/json_table_widget.html:19 msgid "key" msgstr "Clé" -#: engine/core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:32 +msgid "Delete row" +msgstr "Supprimer la ligne" + +#: engine/core/templates/json_table_widget.html:44 msgid "Add Row" msgstr "Ajouter une rangée" @@ -3244,14 +3622,23 @@ msgstr "Vous n'êtes pas autorisé à effectuer cette action." msgid "NOMINATIM_URL must be configured." msgstr "Le paramètre NOMINATIM_URL doit être configuré !" -#: engine/core/validators.py:23 +#: engine/core/validators.py:18 +msgid "could not determine file type" +msgstr "Impossible de déterminer le type de fichier" + +#: engine/core/validators.py:24 +#, python-brace-format +msgid "unsupported video format. supported formats: {supported}" +msgstr "Format vidéo non pris en charge. Formats pris en charge : {supported}" + +#: engine/core/validators.py:45 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "Les dimensions de l'image ne doivent pas dépasser w{max_width} x " "h{max_height} pixels." -#: engine/core/views.py:104 +#: engine/core/views.py:108 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3259,7 +3646,7 @@ msgstr "" "Gère la demande d'index sitemap et renvoie une réponse XML. Il s'assure que " "la réponse inclut l'en-tête de type de contenu approprié pour XML." -#: engine/core/views.py:119 +#: engine/core/views.py:123 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3269,18 +3656,18 @@ msgstr "" "demande, récupère la réponse détaillée appropriée du plan du site et définit" " l'en-tête Content-Type pour XML." -#: engine/core/views.py:155 +#: engine/core/views.py:174 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Renvoie une liste des langues prises en charge et des informations " "correspondantes." -#: engine/core/views.py:182 +#: engine/core/views.py:201 msgid "Returns the parameters of the website as a JSON object." msgstr "Renvoie les paramètres du site web sous la forme d'un objet JSON." -#: engine/core/views.py:198 +#: engine/core/views.py:217 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3288,11 +3675,11 @@ msgstr "" "Gère les opérations de cache telles que la lecture et la définition des " "données de cache avec une clé et un délai spécifiés." -#: engine/core/views.py:220 +#: engine/core/views.py:239 msgid "Handles `contact us` form submissions." msgstr "Gère les soumissions du formulaire `contact us`." -#: engine/core/views.py:236 +#: engine/core/views.py:255 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3300,15 +3687,15 @@ msgstr "" "Gère les demandes de traitement et de validation des URL à partir des " "requêtes POST entrantes." -#: engine/core/views.py:273 +#: engine/core/views.py:292 msgid "Handles global search queries." msgstr "Traite les demandes de recherche globales." -#: engine/core/views.py:289 +#: engine/core/views.py:308 msgid "Handles the logic of buying as a business without registration." msgstr "Gère la logique de l'achat en tant qu'entreprise sans enregistrement." -#: engine/core/views.py:337 +#: engine/core/views.py:356 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3316,31 +3703,31 @@ msgstr "" "Gère le téléchargement d'un bien numérique associé à une commande.\n" "Cette fonction tente de servir le fichier de ressource numérique situé dans le répertoire de stockage du projet. Si le fichier n'est pas trouvé, une erreur HTTP 404 est générée pour indiquer que la ressource n'est pas disponible." -#: engine/core/views.py:348 +#: engine/core/views.py:367 msgid "order_product_uuid is required" msgstr "order_product_uuid est obligatoire" -#: engine/core/views.py:355 +#: engine/core/views.py:374 msgid "order product does not exist" msgstr "le produit de la commande n'existe pas" -#: engine/core/views.py:358 +#: engine/core/views.py:377 msgid "you can only download the digital asset once" msgstr "Vous ne pouvez télécharger le bien numérique qu'une seule fois" -#: engine/core/views.py:362 +#: engine/core/views.py:381 msgid "the order must be paid before downloading the digital asset" msgstr "la commande doit être payée avant le téléchargement du bien numérique" -#: engine/core/views.py:369 +#: engine/core/views.py:388 msgid "the order product does not have a product" msgstr "Le produit de la commande n'a pas de produit" -#: engine/core/views.py:412 +#: engine/core/views.py:431 msgid "favicon not found" msgstr "favicon introuvable" -#: engine/core/views.py:418 +#: engine/core/views.py:437 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3348,7 +3735,7 @@ msgstr "" "Gère les demandes de favicon d'un site web.\n" "Cette fonction tente de servir le fichier favicon situé dans le répertoire statique du projet. Si le fichier favicon n'est pas trouvé, une erreur HTTP 404 est générée pour indiquer que la ressource n'est pas disponible." -#: engine/core/views.py:432 +#: engine/core/views.py:451 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3359,16 +3746,20 @@ msgstr "" " d'index de l'interface d'administration de Django. Elle utilise la fonction" " `redirect` de Django pour gérer la redirection HTTP." -#: engine/core/views.py:445 +#: engine/core/views.py:464 msgid "Returns current version of the Schon. " msgstr "Renvoie la version actuelle d'Schon." -#: engine/core/views.py:674 engine/core/views.py:689 +#: engine/core/views.py:475 +msgid "no image file provided" +msgstr "Aucun fichier image fourni" + +#: engine/core/views.py:710 engine/core/views.py:725 #, python-format msgid "Revenue & Orders (last %(days)d)" msgstr "Recettes et commandes (dernier %(days)d)" -#: engine/core/views.py:870 +#: engine/core/views.py:911 msgid "Returns custom variables for Dashboard. " msgstr "Renvoie les variables personnalisées pour le tableau de bord." @@ -3461,7 +3852,7 @@ msgstr "" " simplifier la mise en œuvre des points d'extrémité de l'API pour les objets" " Brand." -#: engine/core/viewsets.py:458 +#: engine/core/viewsets.py:460 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3479,7 +3870,15 @@ msgstr "" "comprend des méthodes pour récupérer les détails d'un produit, appliquer des" " permissions et accéder aux commentaires connexes d'un produit." -#: engine/core/viewsets.py:605 +#: engine/core/viewsets.py:541 +msgid "identificator_type and identificators are required" +msgstr "identificator_type et identificators sont obligatoires" + +#: engine/core/viewsets.py:554 +msgid "identificator_type must be one of: uuid, slug, sku" +msgstr "identificator_type doit être l'un des suivants : uuid, slug, sku" + +#: engine/core/viewsets.py:635 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3495,7 +3894,7 @@ msgstr "" "ressources relatives aux vendeurs par l'intermédiaire du cadre REST de " "Django." -#: engine/core/viewsets.py:625 +#: engine/core/viewsets.py:655 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3513,7 +3912,7 @@ msgstr "" "la classe de base `schonViewSet` et utilise le système de filtrage de Django" " pour l'interrogation des données." -#: engine/core/viewsets.py:652 +#: engine/core/viewsets.py:682 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3533,7 +3932,7 @@ msgstr "" "autorisations en conséquence lors de l'interaction avec les données de la " "commande." -#: engine/core/viewsets.py:914 +#: engine/core/viewsets.py:944 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3548,11 +3947,11 @@ msgstr "" " En outre, il fournit une action détaillée pour gérer le retour " "d'informations sur les instances OrderProduct." -#: engine/core/viewsets.py:974 +#: engine/core/viewsets.py:1004 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." -#: engine/core/viewsets.py:988 +#: engine/core/viewsets.py:1018 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3560,15 +3959,15 @@ msgstr "" "Gère la récupération et le traitement des instances de PromoCode par le " "biais de diverses actions API." -#: engine/core/viewsets.py:1019 +#: engine/core/viewsets.py:1049 msgid "Represents a view set for managing promotions. " msgstr "Représente un jeu de vues pour la gestion des promotions." -#: engine/core/viewsets.py:1032 +#: engine/core/viewsets.py:1062 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." -#: engine/core/viewsets.py:1046 +#: engine/core/viewsets.py:1076 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3588,7 +3987,7 @@ msgstr "" "ne peuvent gérer que leur propre liste de souhaits, sauf si des permissions " "explicites sont accordées." -#: engine/core/viewsets.py:1183 +#: engine/core/viewsets.py:1213 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3603,12 +4002,12 @@ msgstr "" " HTTP, des dérogations au sérialiseur et une gestion des autorisations basée" " sur le contexte de la demande." -#: engine/core/viewsets.py:1254 +#: engine/core/viewsets.py:1275 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Erreur de géocodage : {e}" -#: engine/core/viewsets.py:1262 +#: engine/core/viewsets.py:1283 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/he_IL/LC_MESSAGES/django.mo b/engine/core/locale/he_IL/LC_MESSAGES/django.mo index 587340f6..cfaad09e 100644 Binary files a/engine/core/locale/he_IL/LC_MESSAGES/django.mo and b/engine/core/locale/he_IL/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/he_IL/LC_MESSAGES/django.po b/engine/core/locale/he_IL/LC_MESSAGES/django.po index 21c3c820..37abf36e 100644 --- a/engine/core/locale/he_IL/LC_MESSAGES/django.po +++ b/engine/core/locale/he_IL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -47,113 +47,133 @@ msgstr "משונה" msgid "when the object was last modified" msgstr "מתי האובייקט נערך לאחרונה" -#: engine/core/admin.py:94 +#: engine/core/admin.py:98 msgid "translations" msgstr "תרגומים" -#: engine/core/admin.py:102 +#: engine/core/admin.py:106 msgid "general" msgstr "כללי" -#: engine/core/admin.py:106 +#: engine/core/admin.py:110 msgid "relations" msgstr "יחסים" -#: engine/core/admin.py:111 +#: engine/core/admin.py:115 msgid "additional info" msgstr "מידע נוסף" -#: engine/core/admin.py:133 +#: engine/core/admin.py:137 msgid "metadata" msgstr "מטא-נתונים" -#: engine/core/admin.py:141 +#: engine/core/admin.py:145 msgid "timestamps" msgstr "חותמות זמן" -#: engine/core/admin.py:158 +#: engine/core/admin.py:162 #, python-format msgid "Activate selected %(verbose_name_plural)s" msgstr "הפעל את %(verbose_name_plural)s שנבחר" -#: engine/core/admin.py:166 +#: engine/core/admin.py:170 msgid "selected items have been activated." msgstr "הפריטים שנבחרו הופעלו!" -#: engine/core/admin.py:174 +#: engine/core/admin.py:178 #, python-format msgid "Deactivate selected %(verbose_name_plural)s" msgstr "השבת את %(verbose_name_plural)s הנבחר" -#: engine/core/admin.py:184 +#: engine/core/admin.py:188 msgid "selected items have been deactivated." msgstr "פריטים נבחרים הושבתו!" -#: engine/core/admin.py:196 engine/core/graphene/object_types.py:653 -#: engine/core/graphene/object_types.py:660 engine/core/models.py:832 -#: engine/core/models.py:840 +#: engine/core/admin.py:200 engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:673 engine/core/models.py:918 +#: engine/core/models.py:928 msgid "attribute value" msgstr "ערך התכונה" -#: engine/core/admin.py:197 engine/core/graphene/object_types.py:77 -#: engine/core/models.py:841 +#: engine/core/admin.py:201 engine/core/graphene/object_types.py:81 +#: engine/core/models.py:929 msgid "attribute values" msgstr "ערכי תכונות" -#: engine/core/admin.py:208 +#: engine/core/admin.py:212 engine/core/models.py:2232 msgid "image" msgstr "תמונה" -#: engine/core/admin.py:209 engine/core/graphene/object_types.py:530 +#: engine/core/admin.py:213 engine/core/graphene/object_types.py:535 msgid "images" msgstr "תמונות" -#: engine/core/admin.py:220 engine/core/models.py:576 +#: engine/core/admin.py:224 engine/core/models.py:635 msgid "stock" msgstr "מלאי" -#: engine/core/admin.py:221 engine/core/graphene/object_types.py:713 +#: engine/core/admin.py:225 engine/core/graphene/object_types.py:735 msgid "stocks" msgstr "מניות" -#: engine/core/admin.py:232 engine/core/models.py:1938 +#: engine/core/admin.py:236 engine/core/models.py:2046 msgid "order product" msgstr "הזמן מוצר" -#: engine/core/admin.py:233 engine/core/graphene/object_types.py:441 -#: engine/core/models.py:1939 +#: engine/core/admin.py:237 engine/core/graphene/object_types.py:446 +#: engine/core/models.py:2047 msgid "order products" msgstr "הזמנת מוצרים" -#: engine/core/admin.py:251 engine/core/admin.py:252 +#: engine/core/admin.py:255 engine/core/admin.py:256 msgid "children" msgstr "ילדים" -#: engine/core/admin.py:528 +#: engine/core/admin.py:545 +msgid "video preview" +msgstr "תצוגה מקדימה של הסרטון" + +#: engine/core/admin.py:551 msgid "has images" msgstr "יש תמונות" -#: engine/core/admin.py:531 +#: engine/core/admin.py:554 #, python-format msgid "Export selected %(verbose_name_plural)s to marketplaces' feeds" msgstr "ייצא את %(verbose_name_plural)s הנבחר לפידים של שווקים" -#: engine/core/admin.py:542 +#: engine/core/admin.py:565 #, python-format msgid "selected %(verbose_name_plural)s have been marked for export." msgstr "ה-%(verbose_name_plural)s שנבחרו סומנו לייצוא." -#: engine/core/admin.py:553 +#: engine/core/admin.py:576 #, python-format msgid "Ban selected %(verbose_name_plural)s from marketplaces' feeds" msgstr "חסום את %(verbose_name_plural)s מהפידים של השווקים" -#: engine/core/admin.py:564 +#: engine/core/admin.py:587 #, python-format msgid "selected %(verbose_name_plural)s have been banned from export." msgstr "%(verbose_name_plural)s שנבחרו נאסרו לייצוא." -#: engine/core/admin.py:1116 +#: engine/core/admin.py:1030 +msgid "Preview" +msgstr "תצוגה מקדימה" + +#: engine/core/admin.py:1031 +msgid "Metadata" +msgstr "מטא-נתונים" + +#: engine/core/admin.py:1034 +msgid "preview" +msgstr "תצוגה מקדימה" + +#: engine/core/admin.py:1043 +msgid "image preview" +msgstr "תצוגה מקדימה של תמונה" + +#: engine/core/admin.py:1166 msgid "Config" msgstr "תצורה" @@ -219,7 +239,7 @@ msgstr "" "סכימת OpenApi3 עבור ממשק API זה. ניתן לבחור את הפורמט באמצעות משא ומתן על " "תוכן. ניתן לבחור את השפה באמצעות Accept-Language ופרמטר שאילתה." -#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:36 +#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "קלט/פלט מטמון" @@ -243,7 +263,7 @@ msgstr "קבל את הפרמטרים החשופים של היישום" msgid "send a message to the support team" msgstr "שלח הודעה לצוות התמיכה" -#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:59 msgid "request a CORSed URL" msgstr "בקש כתובת URL של CORS. מותר להשתמש רק ב-https." @@ -374,11 +394,11 @@ msgstr "שכתוב קטגוריה קיימת תוך שמירת פריטים שא msgid "rewrite some fields of an existing category saving non-editables" msgstr "שכתוב שדות מסוימים בקטגוריה קיימת תוך שמירת שדות שאינם ניתנים לעריכה" -#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757 -#: engine/core/docs/drf/viewsets.py:1046 -#: engine/core/graphene/object_types.py:119 -#: engine/core/graphene/object_types.py:239 -#: engine/core/graphene/object_types.py:540 +#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:781 +#: engine/core/docs/drf/viewsets.py:1070 +#: engine/core/graphene/object_types.py:123 +#: engine/core/graphene/object_types.py:247 +#: engine/core/graphene/object_types.py:546 msgid "SEO Meta snapshot" msgstr "תמונת מצב SEO Meta" @@ -651,7 +671,7 @@ msgstr "איתור מוצר בודד (תצוגה מפורטת)" #: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683 #: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725 -#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763 +#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:787 msgid "Product UUID or slug" msgstr "UUID או Slug של המוצר" @@ -676,271 +696,284 @@ msgstr "מחק מוצר" msgid "lists all permitted feedbacks for a product" msgstr "מפרט את כל המשובים המותרים עבור מוצר" -#: engine/core/docs/drf/viewsets.py:758 +#: engine/core/docs/drf/viewsets.py:757 +msgid "retrieve exact products by identifier" +msgstr "איתור מוצרים מדויקים לפי מזהה" + +#: engine/core/docs/drf/viewsets.py:759 +msgid "" +"retrieve a list of products by identifier type (uuid, slug, or sku). Send a " +"POST request with `identificator_type` and `identificators` (list of " +"values)." +msgstr "" +"איתור רשימת מוצרים לפי סוג מזהה (uuid, slug או sku). שלח בקשת POST עם " +"`identificator_type` ו-`identificators` (רשימת ערכים)." + +#: engine/core/docs/drf/viewsets.py:782 msgid "returns a snapshot of the product's SEO meta data" msgstr "מחזיר תמונת מצב של מטא-נתוני SEO של המוצר" -#: engine/core/docs/drf/viewsets.py:779 +#: engine/core/docs/drf/viewsets.py:803 msgid "list all addresses" msgstr "רשימת כל הכתובות" -#: engine/core/docs/drf/viewsets.py:789 +#: engine/core/docs/drf/viewsets.py:813 msgid "retrieve a single address" msgstr "איתור כתובת אחת" -#: engine/core/docs/drf/viewsets.py:799 +#: engine/core/docs/drf/viewsets.py:823 msgid "create a new address" msgstr "צור כתובת חדשה" -#: engine/core/docs/drf/viewsets.py:810 +#: engine/core/docs/drf/viewsets.py:834 msgid "delete an address" msgstr "מחק כתובת" -#: engine/core/docs/drf/viewsets.py:820 +#: engine/core/docs/drf/viewsets.py:844 msgid "update an entire address" msgstr "עדכון כתובת שלמה" -#: engine/core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:855 msgid "partially update an address" msgstr "עדכון חלקי של כתובת" -#: engine/core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:866 msgid "autocomplete address suggestions" msgstr "השלמת כתובת אוטומטית" -#: engine/core/docs/drf/viewsets.py:848 +#: engine/core/docs/drf/viewsets.py:872 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "מחרוזת שאילתת נתונים גולמיים, אנא הוסף נתונים מנקודת הקצה של geo-IP" -#: engine/core/docs/drf/viewsets.py:855 +#: engine/core/docs/drf/viewsets.py:879 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "מגביל את כמות התוצאות, 1 < limit < 10, ברירת מחדל: 5" -#: engine/core/docs/drf/viewsets.py:871 +#: engine/core/docs/drf/viewsets.py:895 msgid "list all feedbacks (simple view)" msgstr "הצג את כל המשובים (תצוגה פשוטה)" -#: engine/core/docs/drf/viewsets.py:881 +#: engine/core/docs/drf/viewsets.py:905 msgid "retrieve a single feedback (detailed view)" msgstr "איתור משוב בודד (תצוגה מפורטת)" -#: engine/core/docs/drf/viewsets.py:888 +#: engine/core/docs/drf/viewsets.py:912 msgid "create a feedback" msgstr "ליצור משוב" -#: engine/core/docs/drf/viewsets.py:895 +#: engine/core/docs/drf/viewsets.py:919 msgid "delete a feedback" msgstr "מחק משוב" -#: engine/core/docs/drf/viewsets.py:902 +#: engine/core/docs/drf/viewsets.py:926 msgid "rewrite an existing feedback saving non-editables" msgstr "לשכתב משוב קיים תוך שמירת פריטים שאינם ניתנים לעריכה" -#: engine/core/docs/drf/viewsets.py:909 +#: engine/core/docs/drf/viewsets.py:933 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "לשכתב כמה שדות של משוב קיים תוך שמירת שדות שאינם ניתנים לעריכה" -#: engine/core/docs/drf/viewsets.py:919 +#: engine/core/docs/drf/viewsets.py:943 msgid "list all order–product relations (simple view)" msgstr "רשימת כל קשרי ההזמנות-מוצרים (תצוגה פשוטה)" -#: engine/core/docs/drf/viewsets.py:929 +#: engine/core/docs/drf/viewsets.py:953 msgid "retrieve a single order–product relation (detailed view)" msgstr "איתור קשר יחיד בין הזמנה למוצר (תצוגה מפורטת)" -#: engine/core/docs/drf/viewsets.py:939 +#: engine/core/docs/drf/viewsets.py:963 msgid "create a new order–product relation" msgstr "יצירת קשר חדש בין הזמנה למוצר" -#: engine/core/docs/drf/viewsets.py:949 +#: engine/core/docs/drf/viewsets.py:973 msgid "replace an existing order–product relation" msgstr "החלפת קשר בין הזמנה למוצר קיים" -#: engine/core/docs/drf/viewsets.py:959 +#: engine/core/docs/drf/viewsets.py:983 msgid "partially update an existing order–product relation" msgstr "עדכון חלקי של קשר בין הזמנה למוצר קיים" -#: engine/core/docs/drf/viewsets.py:969 +#: engine/core/docs/drf/viewsets.py:993 msgid "delete an order–product relation" msgstr "מחיקת קשר בין הזמנה למוצר" -#: engine/core/docs/drf/viewsets.py:979 +#: engine/core/docs/drf/viewsets.py:1003 msgid "add or remove feedback on an order–product relation" msgstr "הוספה או הסרה של משוב על קשר בין הזמנה למוצר" -#: engine/core/docs/drf/viewsets.py:996 +#: engine/core/docs/drf/viewsets.py:1020 msgid "list all brands (simple view)" msgstr "הצג את כל המותגים (תצוגה פשוטה)" -#: engine/core/docs/drf/viewsets.py:1003 +#: engine/core/docs/drf/viewsets.py:1027 msgid "retrieve a single brand (detailed view)" msgstr "איתור מותג בודד (תצוגה מפורטת)" -#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051 +#: engine/core/docs/drf/viewsets.py:1032 engine/core/docs/drf/viewsets.py:1075 msgid "Brand UUID or slug" msgstr "UUID או סלאג של המותג" -#: engine/core/docs/drf/viewsets.py:1018 +#: engine/core/docs/drf/viewsets.py:1042 msgid "create a brand" msgstr "יצירת מותג" -#: engine/core/docs/drf/viewsets.py:1025 +#: engine/core/docs/drf/viewsets.py:1049 msgid "delete a brand" msgstr "מחק מותג" -#: engine/core/docs/drf/viewsets.py:1032 +#: engine/core/docs/drf/viewsets.py:1056 msgid "rewrite an existing brand saving non-editables" msgstr "שכתוב מותג קיים תוך שמירה על אלמנטים שאינם ניתנים לעריכה" -#: engine/core/docs/drf/viewsets.py:1039 +#: engine/core/docs/drf/viewsets.py:1063 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "שכתוב שדות מסוימים של מותג קיים תוך שמירה על שדות שאינם ניתנים לעריכה" -#: engine/core/docs/drf/viewsets.py:1064 +#: engine/core/docs/drf/viewsets.py:1088 msgid "list all vendors (simple view)" msgstr "הצג את כל הספקים (תצוגה פשוטה)" -#: engine/core/docs/drf/viewsets.py:1074 +#: engine/core/docs/drf/viewsets.py:1098 msgid "retrieve a single vendor (detailed view)" msgstr "איתור ספק בודד (תצוגה מפורטת)" -#: engine/core/docs/drf/viewsets.py:1081 +#: engine/core/docs/drf/viewsets.py:1105 msgid "create a vendor" msgstr "צור ספק" -#: engine/core/docs/drf/viewsets.py:1088 +#: engine/core/docs/drf/viewsets.py:1112 msgid "delete a vendor" msgstr "מחק את הספק" -#: engine/core/docs/drf/viewsets.py:1095 +#: engine/core/docs/drf/viewsets.py:1119 msgid "rewrite an existing vendor saving non-editables" msgstr "שכתוב ספק קיים תוך שמירת פריטים שאינם ניתנים לעריכה" -#: engine/core/docs/drf/viewsets.py:1102 +#: engine/core/docs/drf/viewsets.py:1126 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "שכתוב שדות מסוימים של ספק קיים תוך שמירת שדות שאינם ניתנים לעריכה" -#: engine/core/docs/drf/viewsets.py:1112 +#: engine/core/docs/drf/viewsets.py:1136 msgid "list all product images (simple view)" msgstr "הצג את כל תמונות המוצר (תצוגה פשוטה)" -#: engine/core/docs/drf/viewsets.py:1122 +#: engine/core/docs/drf/viewsets.py:1146 msgid "retrieve a single product image (detailed view)" msgstr "איתור תמונה של מוצר בודד (תצוגה מפורטת)" -#: engine/core/docs/drf/viewsets.py:1129 +#: engine/core/docs/drf/viewsets.py:1153 msgid "create a product image" msgstr "צור תמונה של המוצר" -#: engine/core/docs/drf/viewsets.py:1139 +#: engine/core/docs/drf/viewsets.py:1163 msgid "delete a product image" msgstr "מחיקת תמונת מוצר" -#: engine/core/docs/drf/viewsets.py:1146 +#: engine/core/docs/drf/viewsets.py:1170 msgid "rewrite an existing product image saving non-editables" msgstr "שכתוב תמונה קיימת של מוצר תוך שמירת אלמנטים שאינם ניתנים לעריכה" -#: engine/core/docs/drf/viewsets.py:1154 +#: engine/core/docs/drf/viewsets.py:1178 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "" "שכתוב שדות מסוימים בתמונת מוצר קיימת תוך שמירת שדות שאינם ניתנים לעריכה" -#: engine/core/docs/drf/viewsets.py:1165 +#: engine/core/docs/drf/viewsets.py:1189 msgid "list all promo codes (simple view)" msgstr "הצג את כל קודי המבצע (תצוגה פשוטה)" -#: engine/core/docs/drf/viewsets.py:1175 +#: engine/core/docs/drf/viewsets.py:1199 msgid "retrieve a single promo code (detailed view)" msgstr "איתור קוד קידום מכירות בודד (תצוגה מפורטת)" -#: engine/core/docs/drf/viewsets.py:1182 +#: engine/core/docs/drf/viewsets.py:1206 msgid "create a promo code" msgstr "צור קוד קידום מכירות" -#: engine/core/docs/drf/viewsets.py:1189 +#: engine/core/docs/drf/viewsets.py:1213 msgid "delete a promo code" msgstr "מחק את קוד המבצע" -#: engine/core/docs/drf/viewsets.py:1196 +#: engine/core/docs/drf/viewsets.py:1220 msgid "rewrite an existing promo code saving non-editables" msgstr "שכתוב קוד קידום מכירות קיים תוך שמירה על תוכן שאינו ניתן לעריכה" -#: engine/core/docs/drf/viewsets.py:1203 +#: engine/core/docs/drf/viewsets.py:1227 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "" "שכתוב שדות מסוימים בקוד קידום מכירות קיים תוך שמירה על שדות שאינם ניתנים " "לעריכה" -#: engine/core/docs/drf/viewsets.py:1213 +#: engine/core/docs/drf/viewsets.py:1237 msgid "list all promotions (simple view)" msgstr "הצג את כל המבצעים (תצוגה פשוטה)" -#: engine/core/docs/drf/viewsets.py:1223 +#: engine/core/docs/drf/viewsets.py:1247 msgid "retrieve a single promotion (detailed view)" msgstr "איתור מבצע בודד (תצוגה מפורטת)" -#: engine/core/docs/drf/viewsets.py:1230 +#: engine/core/docs/drf/viewsets.py:1254 msgid "create a promotion" msgstr "צור מבצע" -#: engine/core/docs/drf/viewsets.py:1237 +#: engine/core/docs/drf/viewsets.py:1261 msgid "delete a promotion" msgstr "מחק מבצע" -#: engine/core/docs/drf/viewsets.py:1244 +#: engine/core/docs/drf/viewsets.py:1268 msgid "rewrite an existing promotion saving non-editables" msgstr "שכתוב מבצע קיים תוך שמירת פריטים שאינם ניתנים לעריכה" -#: engine/core/docs/drf/viewsets.py:1251 +#: engine/core/docs/drf/viewsets.py:1275 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "שכתוב שדות מסוימים של מבצע קיים תוך שמירת שדות שאינם ניתנים לעריכה" -#: engine/core/docs/drf/viewsets.py:1261 +#: engine/core/docs/drf/viewsets.py:1285 msgid "list all stocks (simple view)" msgstr "הצג את כל המניות (תצוגה פשוטה)" -#: engine/core/docs/drf/viewsets.py:1268 +#: engine/core/docs/drf/viewsets.py:1292 msgid "retrieve a single stock (detailed view)" msgstr "איתור מניה בודדת (תצוגה מפורטת)" -#: engine/core/docs/drf/viewsets.py:1275 +#: engine/core/docs/drf/viewsets.py:1299 msgid "create a stock record" msgstr "צור רישום מלאי" -#: engine/core/docs/drf/viewsets.py:1282 +#: engine/core/docs/drf/viewsets.py:1306 msgid "delete a stock record" msgstr "מחיקת רשומת מלאי" -#: engine/core/docs/drf/viewsets.py:1289 +#: engine/core/docs/drf/viewsets.py:1313 msgid "rewrite an existing stock record saving non-editables" msgstr "שכתוב רשומת מלאי קיימת תוך שמירת פריטים שאינם ניתנים לעריכה" -#: engine/core/docs/drf/viewsets.py:1297 +#: engine/core/docs/drf/viewsets.py:1321 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "" "שכתוב שדות מסוימים ברשומת מלאי קיימת תוך שמירת שדות שאינם ניתנים לעריכה" -#: engine/core/docs/drf/viewsets.py:1308 +#: engine/core/docs/drf/viewsets.py:1332 msgid "list all product tags (simple view)" msgstr "הצג את כל תגי המוצר (תצוגה פשוטה)" -#: engine/core/docs/drf/viewsets.py:1318 +#: engine/core/docs/drf/viewsets.py:1342 msgid "retrieve a single product tag (detailed view)" msgstr "איתור תגית מוצר בודדת (תצוגה מפורטת)" -#: engine/core/docs/drf/viewsets.py:1325 +#: engine/core/docs/drf/viewsets.py:1349 msgid "create a product tag" msgstr "צור תגית מוצר" -#: engine/core/docs/drf/viewsets.py:1335 +#: engine/core/docs/drf/viewsets.py:1359 msgid "delete a product tag" msgstr "מחק תווית מוצר" -#: engine/core/docs/drf/viewsets.py:1342 +#: engine/core/docs/drf/viewsets.py:1366 msgid "rewrite an existing product tag saving non-editables" msgstr "שכתוב תגית מוצר קיימת תוך שמירת תוכן שאינו ניתן לעריכה" -#: engine/core/docs/drf/viewsets.py:1350 +#: engine/core/docs/drf/viewsets.py:1374 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "" "שכתוב שדות מסוימים בתגית מוצר קיימת תוך שמירת שדות שאינם ניתנים לעריכה" @@ -950,421 +983,427 @@ msgstr "" msgid "no search term provided." msgstr "לא צויין מונח חיפוש." -#: engine/core/filters.py:78 engine/core/filters.py:484 -#: engine/core/filters.py:625 +#: engine/core/filters.py:79 engine/core/filters.py:485 +#: engine/core/filters.py:626 msgid "Search" msgstr "חיפוש" -#: engine/core/filters.py:79 engine/core/filters.py:663 -#: engine/core/filters.py:692 +#: engine/core/filters.py:80 engine/core/filters.py:664 +#: engine/core/filters.py:693 msgid "UUID" msgstr "UUID" -#: engine/core/filters.py:80 engine/core/filters.py:487 -#: engine/core/filters.py:627 +#: engine/core/filters.py:81 engine/core/filters.py:488 +#: engine/core/filters.py:628 msgid "Name" msgstr "שם" -#: engine/core/filters.py:82 engine/core/filters.py:630 +#: engine/core/filters.py:83 engine/core/filters.py:631 msgid "Categories" msgstr "קטגוריות" -#: engine/core/filters.py:86 +#: engine/core/filters.py:87 msgid "Categories Slugs" msgstr "קטגוריות שבלולים" -#: engine/core/filters.py:88 engine/core/filters.py:495 +#: engine/core/filters.py:89 engine/core/filters.py:496 +#: engine/core/templates/admin_doc/index.html:37 +#: engine/core/templates/admin_doc/template_tag_index.html:12 msgid "Tags" msgstr "תגיות" -#: engine/core/filters.py:90 +#: engine/core/filters.py:91 msgid "Min Price" msgstr "מחיר מינימום" -#: engine/core/filters.py:93 +#: engine/core/filters.py:94 msgid "Max Price" msgstr "מחיר מקסימלי" -#: engine/core/filters.py:95 +#: engine/core/filters.py:96 msgid "Is Active" msgstr "פעיל" -#: engine/core/filters.py:96 +#: engine/core/filters.py:97 msgid "Brand" msgstr "מותג" -#: engine/core/filters.py:97 +#: engine/core/filters.py:98 msgid "Attributes" msgstr "תכונות" -#: engine/core/filters.py:99 +#: engine/core/filters.py:100 msgid "Quantity" msgstr "כמות" -#: engine/core/filters.py:101 engine/core/filters.py:489 -#: engine/core/filters.py:628 engine/core/models.py:316 -#: engine/core/models.py:497 engine/core/models.py:663 +#: engine/core/filters.py:102 engine/core/filters.py:490 +#: engine/core/filters.py:629 engine/core/models.py:339 +#: engine/core/models.py:546 engine/core/models.py:736 msgid "Slug" msgstr "שבלול" -#: engine/core/filters.py:102 +#: engine/core/filters.py:103 msgid "Is Digital" msgstr "האם דיגיטלי" -#: engine/core/filters.py:104 +#: engine/core/filters.py:105 msgid "Include sub-categories" msgstr "כלול תת-קטגוריות" -#: engine/core/filters.py:108 +#: engine/core/filters.py:109 msgid "Include personal ordered" msgstr "כלול מוצרים שהוזמנו באופן אישי" -#: engine/core/filters.py:110 engine/core/models.py:667 +#: engine/core/filters.py:111 engine/core/models.py:740 msgid "SKU" msgstr "מספר קטלוגי" -#: engine/core/filters.py:212 +#: engine/core/filters.py:213 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "חייב להיות category_uuid כדי להשתמש בדגל include_subcategories" -#: engine/core/filters.py:398 +#: engine/core/filters.py:399 msgid "Search (ID, product name or part number)" msgstr "חיפוש (מזהה, שם מוצר או מספר חלק)" -#: engine/core/filters.py:402 +#: engine/core/filters.py:403 msgid "Bought after (inclusive)" msgstr "נקנה לאחר (כולל)" -#: engine/core/filters.py:405 +#: engine/core/filters.py:406 msgid "Bought before (inclusive)" msgstr "נקנה לפני כן (כולל)" -#: engine/core/filters.py:410 engine/core/filters.py:461 -#: engine/core/filters.py:697 +#: engine/core/filters.py:411 engine/core/filters.py:462 +#: engine/core/filters.py:698 msgid "User email" msgstr "דוא\"ל המשתמש" -#: engine/core/filters.py:413 engine/core/filters.py:464 -#: engine/core/filters.py:672 engine/core/filters.py:694 +#: engine/core/filters.py:414 engine/core/filters.py:465 +#: engine/core/filters.py:673 engine/core/filters.py:695 msgid "User UUID" msgstr "UUID של המשתמש" -#: engine/core/filters.py:415 +#: engine/core/filters.py:416 msgid "Status" msgstr "סטטוס" -#: engine/core/filters.py:419 +#: engine/core/filters.py:420 msgid "Human Readable ID" msgstr "מזהה קריא על ידי בני אדם" -#: engine/core/filters.py:488 +#: engine/core/filters.py:489 msgid "Parent" msgstr "הורה" -#: engine/core/filters.py:492 +#: engine/core/filters.py:493 msgid "Whole category(has at least 1 product or not)" msgstr "קטגוריה שלמה (יש לפחות מוצר אחד או לא)" -#: engine/core/filters.py:496 +#: engine/core/filters.py:497 msgid "Level" msgstr "רמה" -#: engine/core/filters.py:667 +#: engine/core/filters.py:668 msgid "Product UUID" msgstr "UUID של המוצר" -#: engine/core/graphene/mutations.py:40 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "מפתח לחיפוש או להגדרה במטמון" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:43 msgid "data to store in cache" msgstr "נתונים לאחסון במטמון" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:46 msgid "timeout in seconds to set the data for into the cache" msgstr "פסק זמן בשניות להגדרת הנתונים במטמון" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:49 msgid "cached data" msgstr "נתונים במטמון" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:64 msgid "camelized JSON data from the requested URL" msgstr "נתוני JSON שעברו קמלאיזציה מה-URL המבוקש" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:248 +#: engine/core/graphene/mutations.py:69 engine/core/views.py:267 msgid "only URLs starting with http(s):// are allowed" msgstr "רק כתובות URL המתחילות ב-http(s):// מותרות" -#: engine/core/graphene/mutations.py:86 +#: engine/core/graphene/mutations.py:87 msgid "add a product to the order" msgstr "הוסף מוצר להזמנה" -#: engine/core/graphene/mutations.py:109 engine/core/graphene/mutations.py:138 -#: engine/core/graphene/mutations.py:254 engine/core/graphene/mutations.py:306 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139 +#: engine/core/graphene/mutations.py:256 engine/core/graphene/mutations.py:308 #, python-brace-format msgid "order {order_uuid} not found" msgstr "ההזמנה {order_uuid} לא נמצאה!" -#: engine/core/graphene/mutations.py:115 engine/core/graphene/mutations.py:166 +#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167 msgid "remove a product from the order" msgstr "הסר מוצר מההזמנה" -#: engine/core/graphene/mutations.py:144 +#: engine/core/graphene/mutations.py:145 msgid "remove all products from the order" msgstr "הסר את כל המוצרים מההזמנה" -#: engine/core/graphene/mutations.py:189 +#: engine/core/graphene/mutations.py:190 msgid "buy an order" msgstr "קנה הזמנה" -#: engine/core/graphene/mutations.py:220 engine/core/graphene/mutations.py:282 +#: engine/core/graphene/mutations.py:222 engine/core/graphene/mutations.py:284 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "אנא ספק את order_uuid או order_hr_id - אחד מהם בלבד!" -#: engine/core/graphene/mutations.py:249 engine/core/graphene/mutations.py:524 -#: engine/core/graphene/mutations.py:573 engine/core/viewsets.py:753 +#: engine/core/graphene/mutations.py:251 engine/core/graphene/mutations.py:526 +#: engine/core/graphene/mutations.py:576 engine/core/viewsets.py:783 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "סוג שגוי הגיע משיטת order.buy(): {type(instance)!s}" -#: engine/core/graphene/mutations.py:260 +#: engine/core/graphene/mutations.py:262 msgid "perform an action on a list of products in the order" msgstr "בצע פעולה ברשימת המוצרים בהזמנה" -#: engine/core/graphene/mutations.py:265 +#: engine/core/graphene/mutations.py:267 msgid "remove/add" msgstr "הסר/הוסף" -#: engine/core/graphene/mutations.py:301 engine/core/graphene/mutations.py:342 +#: engine/core/graphene/mutations.py:303 engine/core/graphene/mutations.py:342 msgid "action must be either add or remove" msgstr "הפעולה חייבת להיות \"הוספה\" או \"הסרה\"!" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:314 msgid "perform an action on a list of products in the wishlist" msgstr "בצע פעולה ברשימת המוצרים ברשימת המשאלות" -#: engine/core/graphene/mutations.py:330 -msgid "please provide wishlist_uuid value" -msgstr "אנא ספק את הערך `wishlist_uuid`." - -#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:423 -#: engine/core/graphene/mutations.py:451 engine/core/graphene/mutations.py:479 -#: engine/core/graphene/mutations.py:529 +#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:424 +#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480 +#: engine/core/graphene/mutations.py:531 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "רשימת המשאלות {wishlist_uuid} לא נמצאה!" -#: engine/core/graphene/mutations.py:401 +#: engine/core/graphene/mutations.py:402 msgid "add a product to the wishlist" msgstr "הוסף מוצר להזמנה" -#: engine/core/graphene/mutations.py:429 +#: engine/core/graphene/mutations.py:430 msgid "remove a product from the wishlist" msgstr "הסר מוצר מההזמנה" -#: engine/core/graphene/mutations.py:457 +#: engine/core/graphene/mutations.py:458 msgid "remove all products from the wishlist" msgstr "הסר מוצר מההזמנה" -#: engine/core/graphene/mutations.py:485 +#: engine/core/graphene/mutations.py:486 msgid "buy all products from the wishlist" msgstr "הסר מוצר מההזמנה" -#: engine/core/graphene/mutations.py:535 +#: engine/core/graphene/mutations.py:537 msgid "buy a product" msgstr "קנה הזמנה" -#: engine/core/graphene/mutations.py:542 +#: engine/core/graphene/mutations.py:544 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" msgstr "אנא שלחו את התכונות כמחרוזת מעוצבת כך: attr1=value1,attr2=value2" -#: engine/core/graphene/mutations.py:580 +#: engine/core/graphene/mutations.py:583 msgid "add or delete a feedback for orderproduct" msgstr "הוספה או מחיקה של משוב עבור המוצר שהוזמן" -#: engine/core/graphene/mutations.py:606 +#: engine/core/graphene/mutations.py:610 msgid "action must be either `add` or `remove`" msgstr "הפעולה חייבת להיות `add` או `remove`!" -#: engine/core/graphene/mutations.py:609 +#: engine/core/graphene/mutations.py:613 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "המוצר {order_product_uuid} לא נמצא!" -#: engine/core/graphene/mutations.py:616 +#: engine/core/graphene/mutations.py:620 msgid "original address string provided by the user" msgstr "מחרוזת הכתובת המקורית שסופקה על ידי המשתמש" -#: engine/core/graphene/mutations.py:653 engine/core/models.py:986 -#: engine/core/models.py:999 engine/core/models.py:1443 -#: engine/core/models.py:1474 engine/core/models.py:1505 -#: engine/core/viewsets.py:760 +#: engine/core/graphene/mutations.py:662 engine/core/models.py:1079 +#: engine/core/models.py:1092 engine/core/models.py:1544 +#: engine/core/models.py:1575 engine/core/models.py:1606 +#: engine/core/viewsets.py:790 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} אינו קיים: {uuid}!" -#: engine/core/graphene/mutations.py:667 +#: engine/core/graphene/mutations.py:676 msgid "limit must be between 1 and 10" msgstr "הגבול חייב להיות בין 1 ל-10" -#: engine/core/graphene/mutations.py:716 +#: engine/core/graphene/mutations.py:726 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - עובד כמו קסם" -#: engine/core/graphene/object_types.py:84 -#: engine/core/graphene/object_types.py:420 -#: engine/core/graphene/object_types.py:471 engine/core/models.py:803 -#: engine/core/models.py:1297 engine/core/models.py:2033 +#: engine/core/graphene/object_types.py:88 +#: engine/core/graphene/object_types.py:425 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:889 +#: engine/core/models.py:1394 engine/core/models.py:2139 msgid "attributes" msgstr "תכונות" -#: engine/core/graphene/object_types.py:97 +#: engine/core/graphene/object_types.py:101 msgid "grouped attributes" msgstr "תכונות מקובצות" -#: engine/core/graphene/object_types.py:104 +#: engine/core/graphene/object_types.py:108 msgid "groups of attributes" msgstr "קבוצות תכונות" -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:217 -#: engine/core/graphene/object_types.py:255 engine/core/models.py:440 +#: engine/core/graphene/object_types.py:122 +#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:264 engine/core/models.py:489 msgid "categories" msgstr "קטגוריות" -#: engine/core/graphene/object_types.py:134 engine/core/models.py:511 +#: engine/core/graphene/object_types.py:138 engine/core/models.py:564 msgid "brands" msgstr "מותגים" -#: engine/core/graphene/object_types.py:219 +#: engine/core/graphene/object_types.py:226 msgid "category image url" msgstr "קטגוריות" -#: engine/core/graphene/object_types.py:220 -#: engine/core/graphene/object_types.py:365 engine/core/models.py:278 +#: engine/core/graphene/object_types.py:227 +#: engine/core/graphene/object_types.py:369 engine/core/models.py:301 msgid "markup percentage" msgstr "אחוז הסימון" -#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:231 msgid "which attributes and values can be used for filtering this category." msgstr "אילו תכונות וערכים ניתן להשתמש בהם לסינון קטגוריה זו." -#: engine/core/graphene/object_types.py:230 +#: engine/core/graphene/object_types.py:237 msgid "" "minimum and maximum prices for products in this category, if available." msgstr "מחירים מינימליים ומקסימליים עבור מוצרים בקטגוריה זו, אם זמינים." -#: engine/core/graphene/object_types.py:234 +#: engine/core/graphene/object_types.py:240 +msgid "brands in this category" +msgstr "מותגים בקטגוריה זו" + +#: engine/core/graphene/object_types.py:242 msgid "tags for this category" msgstr "תגיות עבור קטגוריה זו" -#: engine/core/graphene/object_types.py:237 +#: engine/core/graphene/object_types.py:245 msgid "products in this category" msgstr "מוצרים בקטגוריה זו" -#: engine/core/graphene/object_types.py:372 engine/core/models.py:183 +#: engine/core/graphene/object_types.py:376 engine/core/models.py:202 msgid "vendors" msgstr "ספקים" -#: engine/core/graphene/object_types.py:376 +#: engine/core/graphene/object_types.py:380 msgid "Latitude (Y coordinate)" msgstr "קו רוחב (קואורדינטת Y)" -#: engine/core/graphene/object_types.py:377 +#: engine/core/graphene/object_types.py:381 msgid "Longitude (X coordinate)" msgstr "אורך (קואורדינטת X)" -#: engine/core/graphene/object_types.py:406 +#: engine/core/graphene/object_types.py:411 msgid "comment" msgstr "איך" -#: engine/core/graphene/object_types.py:408 -#: engine/core/graphene/object_types.py:542 +#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:548 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "ערך דירוג בין 1 ל-10, כולל, או 0 אם לא הוגדר." -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:421 msgid "represents feedback from a user." msgstr "מייצג משוב ממשתמש." -#: engine/core/graphene/object_types.py:421 -#: engine/core/graphene/object_types.py:472 engine/core/models.py:1291 +#: engine/core/graphene/object_types.py:426 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:1388 msgid "notifications" msgstr "הודעות" -#: engine/core/graphene/object_types.py:423 +#: engine/core/graphene/object_types.py:428 msgid "download url for this order product if applicable" msgstr "כתובת URL להורדת המוצר שהוזמן, אם רלוונטי" -#: engine/core/graphene/object_types.py:425 engine/core/models.py:1856 +#: engine/core/graphene/object_types.py:430 engine/core/models.py:1959 msgid "feedback" msgstr "משוב" -#: engine/core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:464 msgid "a list of order products in this order" msgstr "רשימת המוצרים בהזמנה זו" -#: engine/core/graphene/object_types.py:461 engine/core/models.py:1261 +#: engine/core/graphene/object_types.py:466 engine/core/models.py:1358 msgid "billing address" msgstr "כתובת לחיוב" -#: engine/core/graphene/object_types.py:465 +#: engine/core/graphene/object_types.py:470 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" msgstr "" "כתובת משלוח עבור הזמנה זו, השאר ריק אם זהה לכתובת החיוב או אם לא רלוונטי" -#: engine/core/graphene/object_types.py:468 +#: engine/core/graphene/object_types.py:473 msgid "total price of this order" msgstr "המחיר הכולל של הזמנה זו" -#: engine/core/graphene/object_types.py:469 +#: engine/core/graphene/object_types.py:474 msgid "total quantity of products in order" msgstr "כמות המוצרים הכוללת בהזמנה" -#: engine/core/graphene/object_types.py:470 +#: engine/core/graphene/object_types.py:475 msgid "are all products in the order digital" msgstr "האם כל המוצרים בהזמנה הם דיגיטליים?" -#: engine/core/graphene/object_types.py:474 +#: engine/core/graphene/object_types.py:479 msgid "transactions for this order" msgstr "עסקאות עבור הזמנה זו" -#: engine/core/graphene/object_types.py:494 engine/core/models.py:1325 +#: engine/core/graphene/object_types.py:499 engine/core/models.py:1422 msgid "orders" msgstr "הזמנות" -#: engine/core/graphene/object_types.py:515 +#: engine/core/graphene/object_types.py:520 msgid "image url" msgstr "כתובת URL של התמונה" -#: engine/core/graphene/object_types.py:522 +#: engine/core/graphene/object_types.py:527 msgid "product's images" msgstr "תמונות המוצר" -#: engine/core/graphene/object_types.py:529 engine/core/models.py:439 -#: engine/core/models.py:596 +#: engine/core/graphene/object_types.py:534 engine/core/models.py:488 +#: engine/core/models.py:661 msgid "category" msgstr "קטגוריה" -#: engine/core/graphene/object_types.py:531 engine/core/models.py:1857 +#: engine/core/graphene/object_types.py:536 engine/core/models.py:1960 msgid "feedbacks" msgstr "משובים" -#: engine/core/graphene/object_types.py:532 engine/core/models.py:510 -#: engine/core/models.py:605 +#: engine/core/graphene/object_types.py:537 engine/core/models.py:563 +#: engine/core/models.py:670 msgid "brand" msgstr "מותג" -#: engine/core/graphene/object_types.py:534 engine/core/models.py:103 +#: engine/core/graphene/object_types.py:538 +msgid "video url" +msgstr "כתובת URL של הסרטון" + +#: engine/core/graphene/object_types.py:540 engine/core/models.py:122 msgid "attribute groups" msgstr "קבוצות תכונות" -#: engine/core/graphene/object_types.py:536 +#: engine/core/graphene/object_types.py:542 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1372,7 +1411,7 @@ msgstr "קבוצות תכונות" msgid "price" msgstr "מחיר" -#: engine/core/graphene/object_types.py:537 +#: engine/core/graphene/object_types.py:543 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1380,39 +1419,39 @@ msgstr "מחיר" msgid "quantity" msgstr "כמות" -#: engine/core/graphene/object_types.py:538 +#: engine/core/graphene/object_types.py:544 msgid "number of feedbacks" msgstr "מספר המשובים" -#: engine/core/graphene/object_types.py:539 +#: engine/core/graphene/object_types.py:545 msgid "only available for personal orders" msgstr "מוצרים זמינים רק להזמנות אישיות" -#: engine/core/graphene/object_types.py:544 +#: engine/core/graphene/object_types.py:550 msgid "discount price" msgstr "מחיר מוזל" -#: engine/core/graphene/object_types.py:568 engine/core/models.py:682 +#: engine/core/graphene/object_types.py:575 engine/core/models.py:755 msgid "products" msgstr "מוצרים" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:691 msgid "promocodes" msgstr "קודי קידום מכירות" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:706 msgid "products on sale" msgstr "מוצרים במבצע" -#: engine/core/graphene/object_types.py:701 engine/core/models.py:935 +#: engine/core/graphene/object_types.py:720 engine/core/models.py:1028 msgid "promotions" msgstr "מבצעים" -#: engine/core/graphene/object_types.py:705 engine/core/models.py:182 +#: engine/core/graphene/object_types.py:727 engine/core/models.py:201 msgid "vendor" msgstr "ספק" -#: engine/core/graphene/object_types.py:706 engine/core/models.py:681 +#: engine/core/graphene/object_types.py:728 engine/core/models.py:754 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1420,102 +1459,102 @@ msgstr "ספק" msgid "product" msgstr "מוצר" -#: engine/core/graphene/object_types.py:718 engine/core/models.py:958 +#: engine/core/graphene/object_types.py:740 engine/core/models.py:1051 msgid "wishlisted products" msgstr "מוצרים ברשימת המשאלות" -#: engine/core/graphene/object_types.py:725 engine/core/models.py:975 +#: engine/core/graphene/object_types.py:747 engine/core/models.py:1068 msgid "wishlists" msgstr "רשימות משאלות" -#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:752 msgid "tagged products" msgstr "מוצרים מתויגים" -#: engine/core/graphene/object_types.py:738 engine/core/models.py:219 -#: engine/core/models.py:611 +#: engine/core/graphene/object_types.py:760 engine/core/models.py:238 +#: engine/core/models.py:676 msgid "product tags" msgstr "תגיות מוצר" -#: engine/core/graphene/object_types.py:743 +#: engine/core/graphene/object_types.py:765 msgid "tagged categories" msgstr "קטגוריות מתויגות" -#: engine/core/graphene/object_types.py:751 +#: engine/core/graphene/object_types.py:773 msgid "categories tags" msgstr "תגיות קטגוריות" -#: engine/core/graphene/object_types.py:755 +#: engine/core/graphene/object_types.py:777 msgid "project name" msgstr "שם הפרויקט" -#: engine/core/graphene/object_types.py:756 +#: engine/core/graphene/object_types.py:778 msgid "company name" msgstr "שם החברה" -#: engine/core/graphene/object_types.py:757 +#: engine/core/graphene/object_types.py:779 msgid "company address" msgstr "כתובת החברה" -#: engine/core/graphene/object_types.py:758 +#: engine/core/graphene/object_types.py:780 msgid "company phone number" msgstr "מספר הטלפון של החברה" -#: engine/core/graphene/object_types.py:761 +#: engine/core/graphene/object_types.py:783 msgid "email from, sometimes it must be used instead of host user value" msgstr "'email from', לעיתים יש להשתמש בו במקום בערך המשתמש המארח" -#: engine/core/graphene/object_types.py:764 +#: engine/core/graphene/object_types.py:786 msgid "email host user" msgstr "משתמש מארח דוא\"ל" -#: engine/core/graphene/object_types.py:765 +#: engine/core/graphene/object_types.py:787 msgid "maximum amount for payment" msgstr "סכום מקסימלי לתשלום" -#: engine/core/graphene/object_types.py:766 +#: engine/core/graphene/object_types.py:788 msgid "minimum amount for payment" msgstr "סכום מינימום לתשלום" -#: engine/core/graphene/object_types.py:767 +#: engine/core/graphene/object_types.py:789 msgid "analytics data" msgstr "נתוני ניתוח" -#: engine/core/graphene/object_types.py:768 +#: engine/core/graphene/object_types.py:790 msgid "advertisement data" msgstr "נתוני פרסום" -#: engine/core/graphene/object_types.py:771 +#: engine/core/graphene/object_types.py:793 msgid "company configuration" msgstr "תצורה" -#: engine/core/graphene/object_types.py:775 +#: engine/core/graphene/object_types.py:797 msgid "language code" msgstr "קוד שפה" -#: engine/core/graphene/object_types.py:776 +#: engine/core/graphene/object_types.py:798 msgid "language name" msgstr "שם השפה" -#: engine/core/graphene/object_types.py:777 +#: engine/core/graphene/object_types.py:799 msgid "language flag, if exists :)" msgstr "דגל השפה, אם קיים :)" -#: engine/core/graphene/object_types.py:780 +#: engine/core/graphene/object_types.py:802 msgid "supported languages" msgstr "קבל רשימה של השפות הנתמכות" -#: engine/core/graphene/object_types.py:812 -#: engine/core/graphene/object_types.py:815 -#: engine/core/graphene/object_types.py:818 +#: engine/core/graphene/object_types.py:834 +#: engine/core/graphene/object_types.py:837 +#: engine/core/graphene/object_types.py:840 msgid "products search results" msgstr "תוצאות חיפוש מוצרים" -#: engine/core/graphene/object_types.py:820 +#: engine/core/graphene/object_types.py:842 msgid "posts search results" msgstr "תוצאות חיפוש מוצרים" -#: engine/core/models.py:75 +#: engine/core/models.py:91 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 " @@ -1526,23 +1565,23 @@ msgstr "" "קבוצות תכונות. לקבוצת תכונות יכולה להיות קבוצת אב, היוצרת מבנה היררכי. זה " "יכול להיות שימושי לסיווג וניהול תכונות בצורה יעילה יותר במערכת מורכבת." -#: engine/core/models.py:88 +#: engine/core/models.py:107 msgid "parent of this group" msgstr "הורה של קבוצה זו" -#: engine/core/models.py:89 +#: engine/core/models.py:108 msgid "parent attribute group" msgstr "קבוצת תכונות הורה" -#: engine/core/models.py:93 engine/core/models.py:94 +#: engine/core/models.py:112 engine/core/models.py:113 msgid "attribute group's name" msgstr "שם קבוצת התכונות" -#: engine/core/models.py:102 engine/core/models.py:763 +#: engine/core/models.py:121 engine/core/models.py:849 msgid "attribute group" msgstr "קבוצת תכונות" -#: engine/core/models.py:108 +#: engine/core/models.py:127 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1558,47 +1597,47 @@ msgstr "" "הנרכשים מהספק. מודל זה גם מתחזק מטא-נתונים ואילוצים נוספים, מה שהופך אותו " "מתאים לשימוש במערכות המקיימות אינטראקציה עם ספקים צד שלישי." -#: engine/core/models.py:122 +#: engine/core/models.py:141 msgid "stores credentials and endpoints required for vendor communication" msgstr "מאחסן את פרטי ההזדהות ונקודות הקצה הנדרשים לתקשורת API של הספק" -#: engine/core/models.py:124 +#: engine/core/models.py:143 msgid "authentication info" msgstr "מידע אימות" -#: engine/core/models.py:129 +#: engine/core/models.py:148 msgid "define the markup for products retrieved from this vendor" msgstr "הגדר את הסימון עבור מוצרים שנרכשו מספק זה" -#: engine/core/models.py:130 +#: engine/core/models.py:149 msgid "vendor markup percentage" msgstr "אחוז תוספת הספק" -#: engine/core/models.py:134 +#: engine/core/models.py:153 msgid "name of this vendor" msgstr "שם הספק הזה" -#: engine/core/models.py:135 +#: engine/core/models.py:154 msgid "vendor name" msgstr "שם הספק" -#: engine/core/models.py:150 +#: engine/core/models.py:169 msgid "response file" msgstr "קובץ תגובה" -#: engine/core/models.py:151 +#: engine/core/models.py:170 msgid "vendor's last processing response" msgstr "תגובת העיבוד האחרונה של הספק" -#: engine/core/models.py:157 +#: engine/core/models.py:176 msgid "vendor's integration file path" msgstr "נתיב קובץ האינטגרציה של הספק" -#: engine/core/models.py:158 +#: engine/core/models.py:177 msgid "integration path" msgstr "נתיב אינטגרציה" -#: engine/core/models.py:192 +#: engine/core/models.py:211 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1611,27 +1650,27 @@ msgstr "" "ידידותי למשתמש. היא תומכת בפעולות המיוצאות באמצעות mixins ומספקת התאמה אישית" " של מטא-נתונים למטרות ניהוליות." -#: engine/core/models.py:204 engine/core/models.py:235 +#: engine/core/models.py:223 engine/core/models.py:254 msgid "internal tag identifier for the product tag" msgstr "מזהה תווית פנימי עבור תווית המוצר" -#: engine/core/models.py:205 engine/core/models.py:236 +#: engine/core/models.py:224 engine/core/models.py:255 msgid "tag name" msgstr "שם היום" -#: engine/core/models.py:209 engine/core/models.py:240 +#: engine/core/models.py:228 engine/core/models.py:259 msgid "user-friendly name for the product tag" msgstr "שם ידידותי למשתמש עבור תווית המוצר" -#: engine/core/models.py:210 engine/core/models.py:241 +#: engine/core/models.py:229 engine/core/models.py:260 msgid "tag display name" msgstr "שם תצוגה של התג" -#: engine/core/models.py:218 +#: engine/core/models.py:237 msgid "product tag" msgstr "תגית מוצר" -#: engine/core/models.py:224 +#: engine/core/models.py:243 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 " @@ -1641,15 +1680,15 @@ msgstr "" "להשתמש בה כדי לקשר ולסווג מוצרים. היא כוללת תכונות עבור מזהה תווית פנימי ושם" " תצוגה ידידותי למשתמש." -#: engine/core/models.py:249 +#: engine/core/models.py:268 msgid "category tag" msgstr "תגית קטגוריה" -#: engine/core/models.py:250 engine/core/models.py:322 +#: engine/core/models.py:269 engine/core/models.py:345 msgid "category tags" msgstr "תגיות קטגוריה" -#: engine/core/models.py:255 +#: engine/core/models.py:274 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1668,51 +1707,51 @@ msgstr "" "דומות אחרות בתוך יישום, ומאפשרת למשתמשים או למנהלים לציין את השם, התיאור " "וההיררכיה של הקטגוריות, וכן להקצות תכונות כגון תמונות, תגיות או עדיפות." -#: engine/core/models.py:269 +#: engine/core/models.py:292 msgid "upload an image representing this category" msgstr "העלה תמונה המייצגת קטגוריה זו" -#: engine/core/models.py:272 +#: engine/core/models.py:295 msgid "category image" msgstr "תמונה בקטגוריה" -#: engine/core/models.py:277 +#: engine/core/models.py:300 msgid "define a markup percentage for products in this category" msgstr "הגדר אחוז תוספת מחיר עבור מוצרים בקטגוריה זו" -#: engine/core/models.py:286 +#: engine/core/models.py:309 msgid "parent of this category to form a hierarchical structure" msgstr "הורה של קטגוריה זו כדי ליצור מבנה היררכי" -#: engine/core/models.py:287 +#: engine/core/models.py:310 msgid "parent category" msgstr "קטגוריה ראשית" -#: engine/core/models.py:292 +#: engine/core/models.py:315 msgid "category name" msgstr "שם הקטגוריה" -#: engine/core/models.py:293 +#: engine/core/models.py:316 msgid "provide a name for this category" msgstr "ציין שם לקטגוריה זו" -#: engine/core/models.py:300 +#: engine/core/models.py:323 msgid "add a detailed description for this category" msgstr "הוסף תיאור מפורט לקטגוריה זו" -#: engine/core/models.py:301 +#: engine/core/models.py:324 msgid "category description" msgstr "תיאור הקטגוריה" -#: engine/core/models.py:321 +#: engine/core/models.py:344 msgid "tags that help describe or group this category" msgstr "תגיות המסייעות לתאר או לקבץ קטגוריה זו" -#: engine/core/models.py:328 engine/core/models.py:503 +#: engine/core/models.py:351 engine/core/models.py:552 msgid "priority" msgstr "עדיפות" -#: engine/core/models.py:446 +#: engine/core/models.py:495 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1724,47 +1763,43 @@ msgstr "" " שמו, לוגואים, תיאור, קטגוריות קשורות, סלוגן ייחודי וסדר עדיפות. היא מאפשרת " "ארגון וייצוג של נתונים הקשורים למותג בתוך היישום." -#: engine/core/models.py:456 +#: engine/core/models.py:505 msgid "name of this brand" msgstr "שם המותג" -#: engine/core/models.py:457 +#: engine/core/models.py:506 msgid "brand name" msgstr "שם המותג" -#: engine/core/models.py:464 +#: engine/core/models.py:513 msgid "upload a logo representing this brand" msgstr "העלה לוגו המייצג את המותג הזה" -#: engine/core/models.py:466 +#: engine/core/models.py:515 msgid "brand small image" msgstr "תמונה קטנה של המותג" -#: engine/core/models.py:472 +#: engine/core/models.py:521 msgid "upload a big logo representing this brand" msgstr "העלה לוגו גדול המייצג את המותג הזה" -#: engine/core/models.py:474 +#: engine/core/models.py:523 msgid "brand big image" msgstr "תמונה גדולה של המותג" -#: engine/core/models.py:479 +#: engine/core/models.py:528 msgid "add a detailed description of the brand" msgstr "הוסף תיאור מפורט של המותג" -#: engine/core/models.py:480 +#: engine/core/models.py:529 msgid "brand description" msgstr "תיאור המותג" -#: engine/core/models.py:485 -msgid "optional categories that this brand is associated with" -msgstr "קטגוריות אופציונליות שהמותג הזה קשור אליהן" +#: engine/core/models.py:534 engine/core/models.py:535 +msgid "DEPRECATED" +msgstr "מיושן" -#: engine/core/models.py:486 -msgid "associated categories" -msgstr "קטגוריות" - -#: engine/core/models.py:516 +#: engine/core/models.py:569 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1778,72 +1813,72 @@ msgstr "" "רכישה, כמות, SKU ונכסים דיגיטליים. היא מהווה חלק ממערכת ניהול המלאי ומאפשרת " "מעקב והערכה של מוצרים הזמינים מספקים שונים." -#: engine/core/models.py:528 +#: engine/core/models.py:581 msgid "the vendor supplying this product stock" msgstr "הספק המספק את מלאי המוצר הזה" -#: engine/core/models.py:529 +#: engine/core/models.py:582 msgid "associated vendor" msgstr "ספק נלווה" -#: engine/core/models.py:533 +#: engine/core/models.py:588 msgid "final price to the customer after markups" msgstr "המחיר הסופי ללקוח לאחר תוספות" -#: engine/core/models.py:534 +#: engine/core/models.py:589 msgid "selling price" msgstr "מחיר המכירה" -#: engine/core/models.py:539 +#: engine/core/models.py:594 msgid "the product associated with this stock entry" msgstr "המוצר הקשור לרישום המלאי הזה" -#: engine/core/models.py:540 engine/core/models.py:828 -#: engine/core/models.py:874 engine/core/models.py:1912 +#: engine/core/models.py:595 engine/core/models.py:914 +#: engine/core/models.py:962 engine/core/models.py:2020 msgid "associated product" msgstr "מוצר נלווה" -#: engine/core/models.py:547 +#: engine/core/models.py:604 msgid "the price paid to the vendor for this product" msgstr "המחיר ששולם למוכר עבור מוצר זה" -#: engine/core/models.py:548 +#: engine/core/models.py:605 msgid "vendor purchase price" msgstr "מחיר הרכישה של הספק" -#: engine/core/models.py:552 +#: engine/core/models.py:609 msgid "available quantity of the product in stock" msgstr "כמות המוצר הזמינה במלאי" -#: engine/core/models.py:553 +#: engine/core/models.py:610 msgid "quantity in stock" msgstr "כמות במלאי" -#: engine/core/models.py:557 +#: engine/core/models.py:614 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU שהוקצה על ידי הספק לזיהוי המוצר" -#: engine/core/models.py:558 +#: engine/core/models.py:615 msgid "vendor sku" msgstr "מק\"ט הספק" -#: engine/core/models.py:564 +#: engine/core/models.py:621 msgid "digital file associated with this stock if applicable" msgstr "קובץ דיגיטלי הקשור למלאי זה, אם רלוונטי" -#: engine/core/models.py:565 +#: engine/core/models.py:622 msgid "digital file" msgstr "קובץ דיגיטלי" -#: engine/core/models.py:569 +#: engine/core/models.py:626 msgid "system attributes" msgstr "מאפייני המערכת" -#: engine/core/models.py:577 +#: engine/core/models.py:636 msgid "stock entries" msgstr "רישומים במלאי" -#: engine/core/models.py:582 +#: engine/core/models.py:641 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1861,71 +1896,79 @@ msgstr "" "ומנהלת את המטמון עבור תכונות הנגישות בתדירות גבוהה כדי לשפר את הביצועים. הוא" " משמש להגדרה ולעיבוד נתוני מוצר והמידע הקשור אליו בתוך יישום." -#: engine/core/models.py:595 +#: engine/core/models.py:660 msgid "category this product belongs to" msgstr "הקטגוריה אליה שייך מוצר זה" -#: engine/core/models.py:604 +#: engine/core/models.py:669 msgid "optionally associate this product with a brand" msgstr "באופן אופציונלי, ניתן לשייך מוצר זה למותג" -#: engine/core/models.py:610 +#: engine/core/models.py:675 msgid "tags that help describe or group this product" msgstr "תגיות המסייעות לתאר או לקבץ מוצר זה" -#: engine/core/models.py:615 +#: engine/core/models.py:680 msgid "indicates whether this product is digitally delivered" msgstr "מציין אם מוצר זה נמסר באופן דיגיטלי" -#: engine/core/models.py:616 +#: engine/core/models.py:681 msgid "is product digital" msgstr "האם המוצר הוא דיגיטלי?" -#: engine/core/models.py:623 +#: engine/core/models.py:688 msgid "indicates whether this product should be updated from periodic task" msgstr "מציין אם יש לעדכן מוצר זה ממשימה תקופתית" -#: engine/core/models.py:625 +#: engine/core/models.py:690 msgid "is product updatable" msgstr "האם ניתן לעדכן את המוצר?" -#: engine/core/models.py:631 +#: engine/core/models.py:696 msgid "provide a clear identifying name for the product" msgstr "ספק שם מזהה ברור למוצר" -#: engine/core/models.py:632 +#: engine/core/models.py:697 msgid "product name" msgstr "שם המוצר" -#: engine/core/models.py:638 engine/core/models.py:923 +#: engine/core/models.py:703 engine/core/models.py:1012 msgid "add a detailed description of the product" msgstr "הוסף תיאור מפורט של המוצר" -#: engine/core/models.py:639 +#: engine/core/models.py:704 msgid "product description" msgstr "תיאור המוצר" -#: engine/core/models.py:646 +#: engine/core/models.py:710 +msgid "optional video file for this product" +msgstr "קובץ וידאו אופציונלי עבור מוצר זה" + +#: engine/core/models.py:711 +msgid "product video" +msgstr "סרטון מוצר" + +#: engine/core/models.py:719 msgid "part number for this product" msgstr "מספר חלק עבור מוצר זה" -#: engine/core/models.py:647 +#: engine/core/models.py:720 msgid "part number" msgstr "מספר חלק" -#: engine/core/models.py:666 +#: engine/core/models.py:739 msgid "stock keeping unit for this product" msgstr "יחידת אחסון מלאי עבור מוצר זה" -#: engine/core/models.py:673 +#: engine/core/models.py:746 msgid "whether to export this product to marketplaces" msgstr "האם לייצא מוצר זה לשווקים" -#: engine/core/models.py:674 +#: engine/core/models.py:747 msgid "Export to Marketplaces" msgstr "ייצוא לשווקים" -#: engine/core/models.py:749 +#: engine/core/models.py:835 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 " @@ -1940,64 +1983,64 @@ msgstr "" "מספר שלם, מספר צף, בוליאני, מערך ואובייקט. הדבר מאפשר בניית נתונים דינמית " "וגמישה." -#: engine/core/models.py:762 +#: engine/core/models.py:848 msgid "group of this attribute" msgstr "קבוצה של תכונה זו" -#: engine/core/models.py:768 +#: engine/core/models.py:854 msgid "string" msgstr "מחרוזת" -#: engine/core/models.py:769 +#: engine/core/models.py:855 msgid "integer" msgstr "יושרה" -#: engine/core/models.py:770 +#: engine/core/models.py:856 msgid "float" msgstr "צף" -#: engine/core/models.py:771 +#: engine/core/models.py:857 msgid "boolean" msgstr "בוליאני" -#: engine/core/models.py:772 +#: engine/core/models.py:858 msgid "array" msgstr "מערך" -#: engine/core/models.py:773 +#: engine/core/models.py:859 msgid "object" msgstr "אובייקט" -#: engine/core/models.py:775 +#: engine/core/models.py:861 msgid "type of the attribute's value" msgstr "סוג ערך התכונה" -#: engine/core/models.py:776 +#: engine/core/models.py:862 msgid "value type" msgstr "סוג ערך" -#: engine/core/models.py:781 +#: engine/core/models.py:867 msgid "name of this attribute" msgstr "שם התכונה הזו" -#: engine/core/models.py:782 +#: engine/core/models.py:868 msgid "attribute's name" msgstr "שם התכונה" -#: engine/core/models.py:787 +#: engine/core/models.py:873 msgid "is filterable" msgstr "ניתן לסינון" -#: engine/core/models.py:789 +#: engine/core/models.py:875 msgid "designates whether this attribute can be used for filtering or not" msgstr "מציין אם ניתן להשתמש בתכונה זו לצורך סינון או לא" -#: engine/core/models.py:802 engine/core/models.py:820 +#: engine/core/models.py:888 engine/core/models.py:906 #: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "תכונה" -#: engine/core/models.py:808 +#: engine/core/models.py:894 msgid "" "Represents a specific value for an attribute that is linked to a product. It" " links the 'attribute' to a unique 'value', allowing better organization and" @@ -2006,19 +2049,19 @@ msgstr "" "מייצג ערך ספציפי עבור תכונה המקושרת למוצר. הוא מקשר את ה\"תכונה\" ל\"ערך\" " "ייחודי, ומאפשר ארגון טוב יותר וייצוג דינמי של מאפייני המוצר." -#: engine/core/models.py:819 +#: engine/core/models.py:905 msgid "attribute of this value" msgstr "תכונה של ערך זה" -#: engine/core/models.py:827 +#: engine/core/models.py:913 msgid "the specific product associated with this attribute's value" msgstr "המוצר הספציפי הקשור לערך של תכונה זו" -#: engine/core/models.py:833 +#: engine/core/models.py:919 msgid "the specific value for this attribute" msgstr "הערך הספציפי עבור תכונה זו" -#: engine/core/models.py:846 +#: engine/core/models.py:934 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -2030,39 +2073,39 @@ msgstr "" "כולל פונקציונליות להעלאת קבצי תמונה, שיוכם למוצרים ספציפיים וקביעת סדר " "התצוגה שלהם. היא כוללת גם תכונת נגישות עם טקסט חלופי לתמונות." -#: engine/core/models.py:857 +#: engine/core/models.py:945 msgid "provide alternative text for the image for accessibility" msgstr "ספק טקסט חלופי לתמונה לצורך נגישות" -#: engine/core/models.py:858 +#: engine/core/models.py:946 msgid "image alt text" msgstr "טקסט חלופי לתמונה" -#: engine/core/models.py:861 +#: engine/core/models.py:949 msgid "upload the image file for this product" msgstr "העלה את קובץ התמונה עבור מוצר זה" -#: engine/core/models.py:862 engine/core/models.py:893 +#: engine/core/models.py:950 engine/core/models.py:982 msgid "product image" msgstr "תמונת מוצר" -#: engine/core/models.py:867 +#: engine/core/models.py:955 msgid "determines the order in which images are displayed" msgstr "קובע את סדר הצגת התמונות" -#: engine/core/models.py:868 +#: engine/core/models.py:956 msgid "display priority" msgstr "עדיפות תצוגה" -#: engine/core/models.py:873 +#: engine/core/models.py:961 msgid "the product that this image represents" msgstr "המוצר שהדימוי הזה מייצג" -#: engine/core/models.py:894 +#: engine/core/models.py:983 msgid "product images" msgstr "תמונות מוצרים" -#: engine/core/models.py:899 +#: engine/core/models.py:988 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -2076,39 +2119,39 @@ msgstr "" "להגדרת שיעור ההנחה, מתן פרטים על המבצע וקישורו למוצרים הרלוונטיים. היא " "משתלבת בקטלוג המוצרים כדי לקבוע את הפריטים המושפעים בקמפיין." -#: engine/core/models.py:911 +#: engine/core/models.py:1000 msgid "percentage discount for the selected products" msgstr "אחוז ההנחה עבור המוצרים שנבחרו" -#: engine/core/models.py:912 +#: engine/core/models.py:1001 msgid "discount percentage" msgstr "אחוז ההנחה" -#: engine/core/models.py:917 +#: engine/core/models.py:1006 msgid "provide a unique name for this promotion" msgstr "ציין שם ייחודי לקידום מכירות זה" -#: engine/core/models.py:918 +#: engine/core/models.py:1007 msgid "promotion name" msgstr "שם המבצע" -#: engine/core/models.py:924 +#: engine/core/models.py:1013 msgid "promotion description" msgstr "תיאור המבצע" -#: engine/core/models.py:929 +#: engine/core/models.py:1018 msgid "select which products are included in this promotion" msgstr "בחר אילו מוצרים כלולים במבצע זה" -#: engine/core/models.py:930 +#: engine/core/models.py:1019 msgid "included products" msgstr "מוצרים כלולים" -#: engine/core/models.py:934 +#: engine/core/models.py:1027 msgid "promotion" msgstr "קידום" -#: engine/core/models.py:945 +#: engine/core/models.py:1038 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2119,23 +2162,23 @@ msgstr "" "פונקציונליות לניהול אוסף מוצרים, תומכת בפעולות כגון הוספה והסרה של מוצרים, " "וכן תומכת בפעולות להוספה והסרה של מספר מוצרים בבת אחת." -#: engine/core/models.py:957 +#: engine/core/models.py:1050 msgid "products that the user has marked as wanted" msgstr "מוצרים שהמשתמש סימן כנחשקים" -#: engine/core/models.py:965 +#: engine/core/models.py:1058 msgid "user who owns this wishlist" msgstr "המשתמש שבבעלותו רשימת המשאלות הזו" -#: engine/core/models.py:966 +#: engine/core/models.py:1059 msgid "wishlist owner" msgstr "בעל רשימת המשאלות" -#: engine/core/models.py:974 +#: engine/core/models.py:1067 msgid "wishlist" msgstr "רשימת משאלות" -#: engine/core/models.py:1016 +#: engine/core/models.py:1109 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2149,19 +2192,19 @@ msgstr "" "בסוג הקובץ ובנתיב האחסון של קבצי התיעוד. היא מרחיבה את הפונקציונליות של " "מיקסים ספציפיים ומספקת תכונות מותאמות אישית נוספות." -#: engine/core/models.py:1031 +#: engine/core/models.py:1124 msgid "documentary" msgstr "סרט תיעודי" -#: engine/core/models.py:1032 +#: engine/core/models.py:1125 msgid "documentaries" msgstr "סרטים תיעודיים" -#: engine/core/models.py:1042 +#: engine/core/models.py:1135 msgid "unresolved" msgstr "לא פתור" -#: engine/core/models.py:1047 +#: engine/core/models.py:1140 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2180,59 +2223,59 @@ msgstr "" "נוספים. הסוג גם מאפשר לקשר כתובת למשתמש, מה שמקל על טיפול בנתונים מותאמים " "אישית." -#: engine/core/models.py:1062 +#: engine/core/models.py:1155 msgid "address line for the customer" msgstr "שורת כתובת עבור הלקוח" -#: engine/core/models.py:1063 +#: engine/core/models.py:1156 msgid "address line" msgstr "שורת כתובת" -#: engine/core/models.py:1065 +#: engine/core/models.py:1158 msgid "street" msgstr "רחוב" -#: engine/core/models.py:1066 +#: engine/core/models.py:1159 msgid "district" msgstr "מחוז" -#: engine/core/models.py:1067 +#: engine/core/models.py:1160 msgid "city" msgstr "עיר" -#: engine/core/models.py:1068 +#: engine/core/models.py:1161 msgid "region" msgstr "אזור" -#: engine/core/models.py:1069 +#: engine/core/models.py:1162 msgid "postal code" msgstr "מיקוד" -#: engine/core/models.py:1070 +#: engine/core/models.py:1163 msgid "country" msgstr "מדינה" -#: engine/core/models.py:1077 +#: engine/core/models.py:1170 msgid "geolocation point: (longitude, latitude)" msgstr "נקודת מיקום גיאוגרפי (אורך, רוחב)" -#: engine/core/models.py:1083 +#: engine/core/models.py:1176 msgid "full JSON response from geocoder for this address" msgstr "תגובה JSON מלאה מ-geocoder עבור כתובת זו" -#: engine/core/models.py:1089 +#: engine/core/models.py:1182 msgid "stored JSON response from the geocoding service" msgstr "תגובת JSON שמורה משירות הגיאו-קידוד" -#: engine/core/models.py:1099 +#: engine/core/models.py:1192 msgid "address" msgstr "כתובת" -#: engine/core/models.py:1100 +#: engine/core/models.py:1193 msgid "addresses" msgstr "כתובות" -#: engine/core/models.py:1112 +#: engine/core/models.py:1205 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2247,87 +2290,87 @@ msgstr "" "יש) ומצב השימוש בו. היא כוללת פונקציונליות לאימות והחלת קוד הקידום על הזמנה," " תוך הקפדה על עמידה באילוצים." -#: engine/core/models.py:1126 +#: engine/core/models.py:1219 msgid "unique code used by a user to redeem a discount" msgstr "קוד ייחודי המשמש את המשתמש למימוש הנחה" -#: engine/core/models.py:1127 +#: engine/core/models.py:1220 msgid "promo code identifier" msgstr "מזהה קוד קידום מכירות" -#: engine/core/models.py:1134 +#: engine/core/models.py:1227 msgid "fixed discount amount applied if percent is not used" msgstr "סכום הנחה קבוע המוחל אם לא נעשה שימוש באחוזים" -#: engine/core/models.py:1135 +#: engine/core/models.py:1228 msgid "fixed discount amount" msgstr "סכום הנחה קבוע" -#: engine/core/models.py:1141 +#: engine/core/models.py:1234 msgid "percentage discount applied if fixed amount is not used" msgstr "אחוז ההנחה שיחול אם לא ייעשה שימוש בסכום הקבוע" -#: engine/core/models.py:1142 +#: engine/core/models.py:1235 msgid "percentage discount" msgstr "אחוז ההנחה" -#: engine/core/models.py:1147 +#: engine/core/models.py:1240 msgid "timestamp when the promocode expires" msgstr "חותמת זמן לתוקף הקוד המקדם מכירות" -#: engine/core/models.py:1148 +#: engine/core/models.py:1241 msgid "end validity time" msgstr "תוקף הסוף" -#: engine/core/models.py:1153 +#: engine/core/models.py:1246 msgid "timestamp from which this promocode is valid" msgstr "תאריך התחילה של תוקף קוד המבצע" -#: engine/core/models.py:1154 +#: engine/core/models.py:1247 msgid "start validity time" msgstr "תחילת תוקף" -#: engine/core/models.py:1159 +#: engine/core/models.py:1252 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "חותמת זמן שבה נעשה שימוש בקוד המבצע, ריק אם טרם נעשה בו שימוש" -#: engine/core/models.py:1160 +#: engine/core/models.py:1253 msgid "usage timestamp" msgstr "חותמת זמן שימוש" -#: engine/core/models.py:1165 +#: engine/core/models.py:1258 msgid "user assigned to this promocode if applicable" msgstr "משתמש שהוקצה לקוד קידום מכירות זה, אם רלוונטי" -#: engine/core/models.py:1166 +#: engine/core/models.py:1259 msgid "assigned user" msgstr "משתמש שהוקצה" -#: engine/core/models.py:1173 +#: engine/core/models.py:1266 msgid "promo code" msgstr "קוד קידום מכירות" -#: engine/core/models.py:1174 +#: engine/core/models.py:1267 msgid "promo codes" msgstr "קודי קידום מכירות" -#: engine/core/models.py:1190 +#: engine/core/models.py:1283 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "" "יש להגדיר סוג הנחה אחד בלבד (סכום או אחוז), אך לא את שניהם או אף אחד מהם." -#: engine/core/models.py:1212 +#: engine/core/models.py:1305 msgid "promocode already used" msgstr "קוד המבצע כבר נוצל" -#: engine/core/models.py:1234 +#: engine/core/models.py:1327 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "סוג הנחה לא חוקי עבור קוד קידום מכירות {self.uuid}!" -#: engine/core/models.py:1243 +#: engine/core/models.py:1336 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2342,135 +2385,135 @@ msgstr "" "כתובות ולעדכן פרטי משלוח או חיוב. כמו כן, הפונקציונליות תומכת בניהול המוצרים" " במחזור החיים של ההזמנה." -#: engine/core/models.py:1260 +#: engine/core/models.py:1357 msgid "the billing address used for this order" msgstr "כתובת החיוב המשמשת להזמנה זו" -#: engine/core/models.py:1268 +#: engine/core/models.py:1365 msgid "optional promo code applied to this order" msgstr "קוד קידום מכירות אופציונלי שהוחל על הזמנה זו" -#: engine/core/models.py:1269 +#: engine/core/models.py:1366 msgid "applied promo code" msgstr "קוד קידום מכירות שהוחל" -#: engine/core/models.py:1277 +#: engine/core/models.py:1374 msgid "the shipping address used for this order" msgstr "כתובת המשלוח המשמשת להזמנה זו" -#: engine/core/models.py:1278 +#: engine/core/models.py:1375 msgid "shipping address" msgstr "כתובת למשלוח" -#: engine/core/models.py:1284 +#: engine/core/models.py:1381 msgid "current status of the order in its lifecycle" msgstr "הסטטוס הנוכחי של ההזמנה במחזור החיים שלה" -#: engine/core/models.py:1285 +#: engine/core/models.py:1382 msgid "order status" msgstr "סטטוס ההזמנה" -#: engine/core/models.py:1290 engine/core/models.py:1889 +#: engine/core/models.py:1387 engine/core/models.py:1997 msgid "json structure of notifications to display to users" msgstr "" "מבנה JSON של הודעות שיוצגו למשתמשים, בממשק המשתמש המנהלי נעשה שימוש בתצוגת " "טבלה." -#: engine/core/models.py:1296 +#: engine/core/models.py:1393 msgid "json representation of order attributes for this order" msgstr "ייצוג JSON של תכונות ההזמנה עבור הזמנה זו" -#: engine/core/models.py:1302 +#: engine/core/models.py:1399 msgid "the user who placed the order" msgstr "המשתמש שהזמין את ההזמנה" -#: engine/core/models.py:1303 +#: engine/core/models.py:1400 msgid "user" msgstr "משתמש" -#: engine/core/models.py:1309 +#: engine/core/models.py:1406 msgid "the timestamp when the order was finalized" msgstr "החותמת הזמן שבה הושלמה ההזמנה" -#: engine/core/models.py:1310 +#: engine/core/models.py:1407 msgid "buy time" msgstr "לקנות זמן" -#: engine/core/models.py:1317 +#: engine/core/models.py:1414 msgid "a human-readable identifier for the order" msgstr "מזהה קריא לאדם עבור ההזמנה" -#: engine/core/models.py:1318 +#: engine/core/models.py:1415 msgid "human readable id" msgstr "מזהה קריא על ידי בני אדם" -#: engine/core/models.py:1324 +#: engine/core/models.py:1421 msgid "order" msgstr "הזמנה" -#: engine/core/models.py:1371 +#: engine/core/models.py:1468 msgid "a user must have only one pending order at a time" msgstr "למשתמש יכול להיות רק הזמנה אחת בהמתנה בכל פעם!" -#: engine/core/models.py:1404 +#: engine/core/models.py:1504 msgid "you cannot add products to an order that is not a pending one" msgstr "לא ניתן להוסיף מוצרים להזמנה שאינה בהמתנה." -#: engine/core/models.py:1410 +#: engine/core/models.py:1510 msgid "you cannot add inactive products to order" msgstr "לא ניתן להוסיף מוצרים לא פעילים להזמנה" -#: engine/core/models.py:1432 +#: engine/core/models.py:1533 msgid "you cannot add more products than available in stock" msgstr "לא ניתן להוסיף מוצרים מעבר למלאי הזמין" -#: engine/core/models.py:1456 engine/core/models.py:1485 -#: engine/core/models.py:1495 +#: engine/core/models.py:1557 engine/core/models.py:1586 +#: engine/core/models.py:1596 msgid "you cannot remove products from an order that is not a pending one" msgstr "לא ניתן להסיר מוצרים מהזמנה שאינה בהמתנה." -#: engine/core/models.py:1480 +#: engine/core/models.py:1581 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} אינו קיים בשאילתה <{query}>!" -#: engine/core/models.py:1519 +#: engine/core/models.py:1620 msgid "promocode does not exist" msgstr "קוד קידום מכירות אינו קיים" -#: engine/core/models.py:1534 +#: engine/core/models.py:1635 msgid "you can only buy physical products with shipping address specified" msgstr "ניתן לרכוש מוצרים פיזיים רק עם ציון כתובת משלוח!" -#: engine/core/models.py:1555 +#: engine/core/models.py:1656 msgid "address does not exist" msgstr "הכתובת אינה קיימת" -#: engine/core/models.py:1577 engine/core/models.py:1656 +#: engine/core/models.py:1678 engine/core/models.py:1757 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "לא ניתן לבצע רכישה כרגע, אנא נסה שוב בעוד מספר דקות." -#: engine/core/models.py:1583 engine/core/models.py:1649 +#: engine/core/models.py:1684 engine/core/models.py:1750 msgid "invalid force value" msgstr "ערך כוח לא חוקי" -#: engine/core/models.py:1589 engine/core/models.py:1660 +#: engine/core/models.py:1690 engine/core/models.py:1761 msgid "you cannot purchase an empty order!" msgstr "אי אפשר לרכוש הזמנה ריקה!" -#: engine/core/models.py:1610 +#: engine/core/models.py:1711 msgid "you cannot buy an order without a user" msgstr "אי אפשר לקנות הזמנה בלי משתמש!" -#: engine/core/models.py:1624 +#: engine/core/models.py:1725 msgid "a user without a balance cannot buy with balance" msgstr "משתמש ללא יתרה לא יכול לקנות עם יתרה!" -#: engine/core/models.py:1630 +#: engine/core/models.py:1731 msgid "insufficient funds to complete the order" msgstr "אין מספיק כסף כדי להשלים את ההזמנה" -#: engine/core/models.py:1671 +#: engine/core/models.py:1772 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2478,13 +2521,13 @@ msgstr "" "אינך יכול לרכוש ללא רישום, אנא ספק את הפרטים הבאים: שם הלקוח, דוא\"ל הלקוח, " "מספר הטלפון של הלקוח" -#: engine/core/models.py:1682 +#: engine/core/models.py:1783 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "אמצעי תשלום לא חוקי: {payment_method} מ-{available_payment_methods}!" -#: engine/core/models.py:1813 +#: engine/core/models.py:1916 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2497,32 +2540,32 @@ msgstr "" "הקשור בהזמנה ודירוג שהוקצה על ידי המשתמש. המחלקה משתמשת בשדות מסד נתונים כדי" " למדל ולנהל ביעילות נתוני משוב." -#: engine/core/models.py:1825 +#: engine/core/models.py:1928 msgid "user-provided comments about their experience with the product" msgstr "הערות שסיפקו המשתמשים על חווייתם עם המוצר" -#: engine/core/models.py:1826 +#: engine/core/models.py:1929 msgid "feedback comments" msgstr "הערות משוב" -#: engine/core/models.py:1834 +#: engine/core/models.py:1937 msgid "" "references the specific product in an order that this feedback is about" msgstr "מתייחס למוצר הספציפי בהזמנה שעליה מתייחס משוב זה." -#: engine/core/models.py:1836 +#: engine/core/models.py:1939 msgid "related order product" msgstr "מוצר בהזמנה קשורה" -#: engine/core/models.py:1841 +#: engine/core/models.py:1944 msgid "user-assigned rating for the product" msgstr "דירוג שהוקצה על ידי המשתמש למוצר" -#: engine/core/models.py:1842 +#: engine/core/models.py:1945 msgid "product rating" msgstr "דירוג מוצר" -#: engine/core/models.py:1862 +#: engine/core/models.py:1965 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2541,108 +2584,108 @@ msgstr "" "הכולל או יצירת כתובת URL להורדה עבור מוצרים דיגיטליים. המודל משתלב עם מודלי " "Order ו-Product ומאחסן הפניה אליהם." -#: engine/core/models.py:1877 +#: engine/core/models.py:1985 msgid "the price paid by the customer for this product at purchase time" msgstr "המחיר ששילם הלקוח עבור מוצר זה בעת הרכישה" -#: engine/core/models.py:1878 +#: engine/core/models.py:1986 msgid "purchase price at order time" msgstr "מחיר הרכישה בעת ההזמנה" -#: engine/core/models.py:1883 +#: engine/core/models.py:1991 msgid "internal comments for admins about this ordered product" msgstr "הערות פנימיות למנהלים אודות מוצר זה שהוזמן" -#: engine/core/models.py:1884 +#: engine/core/models.py:1992 msgid "internal comments" msgstr "הערות פנימיות" -#: engine/core/models.py:1890 +#: engine/core/models.py:1998 msgid "user notifications" msgstr "הודעות למשתמשים" -#: engine/core/models.py:1895 +#: engine/core/models.py:2003 msgid "json representation of this item's attributes" msgstr "ייצוג JSON של תכונות פריט זה" -#: engine/core/models.py:1896 +#: engine/core/models.py:2004 msgid "ordered product attributes" msgstr "תכונות המוצר שהוזמן" -#: engine/core/models.py:1901 +#: engine/core/models.py:2009 msgid "reference to the parent order that contains this product" msgstr "הפניה להזמנה הראשית המכילה מוצר זה" -#: engine/core/models.py:1902 +#: engine/core/models.py:2010 msgid "parent order" msgstr "הזמנת הורים" -#: engine/core/models.py:1911 +#: engine/core/models.py:2019 msgid "the specific product associated with this order line" msgstr "המוצר הספציפי הקשור לשורת הזמנה זו" -#: engine/core/models.py:1918 +#: engine/core/models.py:2026 msgid "quantity of this specific product in the order" msgstr "כמות המוצר הספציפי הזה בהזמנה" -#: engine/core/models.py:1919 +#: engine/core/models.py:2027 msgid "product quantity" msgstr "כמות המוצר" -#: engine/core/models.py:1926 +#: engine/core/models.py:2034 msgid "current status of this product in the order" msgstr "הסטטוס הנוכחי של מוצר זה בהזמנה" -#: engine/core/models.py:1927 +#: engine/core/models.py:2035 msgid "product line status" msgstr "סטטוס קו המוצרים" -#: engine/core/models.py:1998 +#: engine/core/models.py:2106 msgid "order product must have an order" msgstr "המוצר בהזמנה חייב להיות קשור להזמנה!" -#: engine/core/models.py:2000 +#: engine/core/models.py:2108 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "פעולה שגויה שצוינה עבור משוב: {action}!" -#: engine/core/models.py:2017 +#: engine/core/models.py:2125 msgid "you cannot feedback an order which is not received" msgstr "אינך יכול להחזיר הזמנה שלא התקבלה" -#: engine/core/models.py:2026 +#: engine/core/models.py:2132 engine/core/models.py:2227 msgid "name" msgstr "שם" -#: engine/core/models.py:2028 +#: engine/core/models.py:2134 msgid "URL of the integration" msgstr "כתובת ה-URL של האינטגרציה" -#: engine/core/models.py:2031 +#: engine/core/models.py:2137 msgid "authentication credentials" msgstr "אישורי אימות" -#: engine/core/models.py:2054 +#: engine/core/models.py:2160 msgid "you can only have one default CRM provider" msgstr "ניתן להגדיר ספק CRM ברירת מחדל אחד בלבד" -#: engine/core/models.py:2064 +#: engine/core/models.py:2170 msgid "CRM" msgstr "CRM" -#: engine/core/models.py:2065 +#: engine/core/models.py:2171 msgid "CRMs" msgstr "CRM" -#: engine/core/models.py:2081 +#: engine/core/models.py:2187 msgid "order CRM link" msgstr "קישור CRM של ההזמנה" -#: engine/core/models.py:2082 +#: engine/core/models.py:2188 msgid "orders CRM links" msgstr "קישורי CRM של הזמנות" -#: engine/core/models.py:2087 +#: engine/core/models.py:2193 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2657,20 +2700,54 @@ msgstr "" " היא כוללת שיטה ליצירת כתובת URL להורדת הנכס כאשר ההזמנה הקשורה נמצאת במצב " "'הושלמה'." -#: engine/core/models.py:2103 +#: engine/core/models.py:2209 msgid "download" msgstr "הורדה" -#: engine/core/models.py:2104 +#: engine/core/models.py:2210 msgid "downloads" msgstr "הורדות" +#: engine/core/models.py:2228 +msgid "descriptive name for the image" +msgstr "שם תיאורי לתמונה" + +#: engine/core/models.py:2233 +msgid "image file pasted in the markdown editor" +msgstr "קובץ תמונה שהודבק בעורך הסימון" + +#: engine/core/models.py:2239 +msgid "alt text" +msgstr "טקסט אחר" + +#: engine/core/models.py:2240 +msgid "alternative text for accessibility" +msgstr "טקסט חלופי לנגישות" + +#: engine/core/models.py:2244 +msgid "pasted image" +msgstr "תמונה שהודבקה" + +#: engine/core/models.py:2245 +msgid "pasted images" +msgstr "תמונות שהודבקו" + #: engine/core/serializers/utility.py:91 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "עליך לספק תגובה, דירוג ומספר זיהוי מוצר (uuid) כדי להוסיף משוב." #: engine/core/sitemaps.py:25 +#: engine/core/templates/admin_doc/bookmarklets.html:8 +#: engine/core/templates/admin_doc/index.html:8 +#: engine/core/templates/admin_doc/missing_docutils.html:8 +#: engine/core/templates/admin_doc/model_detail.html:8 +#: engine/core/templates/admin_doc/model_index.html:8 +#: engine/core/templates/admin_doc/template_detail.html:8 +#: engine/core/templates/admin_doc/template_filter_index.html:8 +#: engine/core/templates/admin_doc/template_tag_index.html:8 +#: engine/core/templates/admin_doc/view_detail.html:8 +#: engine/core/templates/admin_doc/view_index.html:8 msgid "Home" msgstr "בית" @@ -2723,45 +2800,34 @@ msgstr "גרוס" msgid "Dashboard" msgstr "לוח מחוונים" -#: engine/core/templates/admin/dashboard/_income_overview.html:7 +#: engine/core/templates/admin/dashboard/_income_overview.html:6 msgid "Income overview" msgstr "סקירת הכנסות" -#: engine/core/templates/admin/dashboard/_income_overview.html:31 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Net" +#: engine/core/templates/admin/dashboard/_income_overview.html:16 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" msgstr "הכנסות נטו" -#: engine/core/templates/admin/dashboard/_income_overview.html:37 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Taxes" -msgstr "מסים" - -#: engine/core/templates/admin/dashboard/_income_overview.html:43 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 +#: engine/core/templates/admin/dashboard/_income_overview.html:21 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 msgid "Returns" msgstr "החזרות" -#: engine/core/templates/admin/dashboard/_income_overview.html:48 -msgid "Gross (pie total)" -msgstr "הכנסות ברוטו" - -#: engine/core/templates/admin/dashboard/_income_overview.html:72 -msgid "No data" -msgstr "בנתונים" - +#: engine/core/templates/admin/dashboard/_income_overview.html:26 #: engine/core/templates/admin/dashboard/_kpis.html:6 msgid "GMV" msgstr "GMV" +#: engine/core/templates/admin/dashboard/_income_overview.html:50 +msgid "No data" +msgstr "בנתונים" + #: engine/core/templates/admin/dashboard/_kpis.html:34 msgid "AOV" msgstr "AOV" -#: engine/core/templates/admin/dashboard/_kpis.html:48 -msgid "Net revenue" -msgstr "הכנסות נטו" - #: engine/core/templates/admin/dashboard/_kpis.html:62 msgid "Refund rate" msgstr "שיעור ההחזר" @@ -2774,7 +2840,7 @@ msgstr "הוחזר" msgid "Low stock" msgstr "מלאי נמוך" -#: engine/core/templates/admin/dashboard/_low_stock.html:29 +#: engine/core/templates/admin/dashboard/_low_stock.html:33 msgid "No low stock items." msgstr "אין פריטים במלאי נמוך." @@ -2831,6 +2897,293 @@ msgstr "אין מכירות בקטגוריה זו ב-30 הימים האחרונ msgid "Django site admin" msgstr "מנהל אתר Django" +#: engine/core/templates/admin_doc/bookmarklets.html:4 +#: engine/core/templates/admin_doc/bookmarklets.html:17 +msgid "Documentation bookmarklets" +msgstr "סימניות תיעוד" + +#: engine/core/templates/admin_doc/bookmarklets.html:10 +#: engine/core/templates/admin_doc/index.html:4 +#: engine/core/templates/admin_doc/index.html:10 +#: engine/core/templates/admin_doc/index.html:15 +#: engine/core/templates/admin_doc/missing_docutils.html:10 +#: engine/core/templates/admin_doc/missing_docutils.html:19 +#: engine/core/templates/admin_doc/model_detail.html:10 +#: engine/core/templates/admin_doc/model_index.html:10 +#: engine/core/templates/admin_doc/template_detail.html:10 +#: engine/core/templates/admin_doc/template_filter_index.html:10 +#: engine/core/templates/admin_doc/template_tag_index.html:10 +#: engine/core/templates/admin_doc/view_detail.html:10 +#: engine/core/templates/admin_doc/view_index.html:10 +msgid "Documentation" +msgstr "תיעוד" + +#: engine/core/templates/admin_doc/bookmarklets.html:12 +#: engine/core/templates/admin_doc/index.html:53 +msgid "Bookmarklets" +msgstr "סימניות" + +#: engine/core/templates/admin_doc/bookmarklets.html:19 +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"כדי להתקין סימניות, גרור את הקישור לסרגל הסימניות שלך, או לחץ לחיצה ימנית על" +" הקישור והוסף אותו לסימניות שלך. כעת תוכל לבחור את הסימנייה מכל דף באתר." + +#: engine/core/templates/admin_doc/bookmarklets.html:29 +msgid "Documentation for this page" +msgstr "תיעוד עבור דף זה" + +#: engine/core/templates/admin_doc/bookmarklets.html:31 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "מעביר אותך מכל דף לתיעוד של התצוגה שיוצרת את הדף." + +#: engine/core/templates/admin_doc/index.html:21 +#: engine/core/templates/admin_doc/model_detail.html:12 +#: engine/core/templates/admin_doc/model_index.html:4 +#: engine/core/templates/admin_doc/model_index.html:12 +msgid "Models" +msgstr "דוגמניות" + +#: engine/core/templates/admin_doc/index.html:23 +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"מודלים הם תיאורים של כל האובייקטים במערכת והשדות הקשורים אליהם. לכל מודל יש " +"רשימת שדות שניתן לגשת אליהם כמשתני תבנית." + +#: engine/core/templates/admin_doc/index.html:29 +#: engine/core/templates/admin_doc/view_detail.html:12 +#: engine/core/templates/admin_doc/view_index.html:4 +#: engine/core/templates/admin_doc/view_index.html:12 +msgid "Views" +msgstr "צפיות" + +#: engine/core/templates/admin_doc/index.html:31 +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"כל דף באתר הציבורי נוצר על ידי תצוגה. התצוגה מגדירה איזה תבנית משמשת ליצירת " +"הדף ואילו אובייקטים זמינים לתבנית זו." + +#: engine/core/templates/admin_doc/index.html:39 +msgid "List of all the template tags and their functions." +msgstr "רשימת כל תגיות התבנית ותפקידיהן." + +#: engine/core/templates/admin_doc/index.html:45 +#: engine/core/templates/admin_doc/template_filter_index.html:12 +msgid "Filters" +msgstr "מסננים" + +#: engine/core/templates/admin_doc/index.html:47 +msgid "" +"Filters are actions which can be applied to variables in a template to alter" +" the output." +msgstr "מסננים הם פעולות שניתן להחיל על משתנים בתבנית כדי לשנות את הפלט." + +#: engine/core/templates/admin_doc/index.html:55 +msgid "Tools for your browser to quickly access admin functionality." +msgstr "כלים לדפדפן שלך לגישה מהירה לפונקציונליות הניהול." + +#: engine/core/templates/admin_doc/missing_docutils.html:4 +msgid "Please install docutils" +msgstr "אנא התקן את docutils" + +#: engine/core/templates/admin_doc/missing_docutils.html:20 +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"מערכת תיעוד הניהול דורשת את ספריית docutils של Python." + +#: engine/core/templates/admin_doc/missing_docutils.html:21 +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"אנא בקש מהמנהלים שלך להתקין docutils." + +#: engine/core/templates/admin_doc/model_detail.html:4 +#, python-format +msgid "Model: %(name)s" +msgstr "דגם: %(name)s" + +#: engine/core/templates/admin_doc/model_detail.html:29 +msgid "Fields" +msgstr "שדות" + +#: engine/core/templates/admin_doc/model_detail.html:36 +msgid "Field" +msgstr "שדה" + +#: engine/core/templates/admin_doc/model_detail.html:37 +msgid "Type" +msgstr "סוג" + +#: engine/core/templates/admin_doc/model_detail.html:38 +#: engine/core/templates/admin_doc/model_detail.html:70 +msgid "Description" +msgstr "תיאור" + +#: engine/core/templates/admin_doc/model_detail.html:61 +msgid "Methods with arguments" +msgstr "שיטות עם ארגומנטים" + +#: engine/core/templates/admin_doc/model_detail.html:68 +msgid "Method" +msgstr "שיטה" + +#: engine/core/templates/admin_doc/model_detail.html:69 +msgid "Arguments" +msgstr "טיעונים" + +#: engine/core/templates/admin_doc/model_detail.html:89 +msgid "Back to Model documentation" +msgstr "חזרה לתיעוד הדגם" + +#: engine/core/templates/admin_doc/model_index.html:17 +msgid "Model documentation" +msgstr "תיעוד מודל" + +#: engine/core/templates/admin_doc/model_index.html:44 +msgid "Model groups" +msgstr "קבוצות מודל" + +#: engine/core/templates/admin_doc/template_detail.html:4 +#, python-format +msgid "Template: %(name)s" +msgstr "תבנית: %(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:12 +msgid "Templates" +msgstr "תבניות" + +#: engine/core/templates/admin_doc/template_detail.html:17 +#, python-format +msgid "" +"Template: %(name)s" +msgstr "" +"תבנית: %(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:21 +#, python-format +msgid "Search path for template %(name)s:" +msgstr "נתיב חיפוש עבור תבנית %(name)s:" + +#: engine/core/templates/admin_doc/template_detail.html:29 +msgid "(does not exist)" +msgstr "(לא קיים)" + +#: engine/core/templates/admin_doc/template_detail.html:40 +msgid "Back to Documentation" +msgstr "חזרה לתיעוד" + +#: engine/core/templates/admin_doc/template_filter_index.html:4 +msgid "Template filters" +msgstr "מסנני תבניות" + +#: engine/core/templates/admin_doc/template_filter_index.html:17 +msgid "Template filter documentation" +msgstr "תיעוד מסנן תבניות" + +#: engine/core/templates/admin_doc/template_filter_index.html:26 +#: engine/core/templates/admin_doc/template_filter_index.html:52 +msgid "Built-in filters" +msgstr "מסננים מובנים" + +#: engine/core/templates/admin_doc/template_filter_index.html:29 +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before using" +" the filter." +msgstr "" +"כדי להשתמש במסננים אלה, הוסף את הקוד %(code)s לתבנית שלך לפני " +"השימוש במסנן." + +#: engine/core/templates/admin_doc/template_tag_index.html:4 +msgid "Template tags" +msgstr "תגיות תבנית" + +#: engine/core/templates/admin_doc/template_tag_index.html:17 +msgid "Template tag documentation" +msgstr "תיעוד תגיות תבנית" + +#: engine/core/templates/admin_doc/template_tag_index.html:26 +#: engine/core/templates/admin_doc/template_tag_index.html:52 +msgid "Built-in tags" +msgstr "תגיות מובנות" + +#: engine/core/templates/admin_doc/template_tag_index.html:29 +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using the tag." +msgstr "" +"כדי להשתמש בתגים אלה, הוסף את הקוד %(code)s לתבנית שלך לפני " +"השימוש בתג." + +#: engine/core/templates/admin_doc/view_detail.html:4 +#, python-format +msgid "View: %(name)s" +msgstr "תצוגה: %(name)s" + +#: engine/core/templates/admin_doc/view_detail.html:28 +msgid "Context:" +msgstr "הקשר:" + +#: engine/core/templates/admin_doc/view_detail.html:33 +msgid "Templates:" +msgstr "תבניות:" + +#: engine/core/templates/admin_doc/view_detail.html:41 +msgid "Back to View documentation" +msgstr "חזרה לתיעוד" + +#: engine/core/templates/admin_doc/view_index.html:17 +msgid "View documentation" +msgstr "הצג תיעוד" + +#: engine/core/templates/admin_doc/view_index.html:28 +#, python-format +msgid "Views by namespace %(name)s" +msgstr "תצוגות לפי מרחב שמות %(name)s" + +#: engine/core/templates/admin_doc/view_index.html:30 +msgid "Views by empty namespace" +msgstr "תצוגות לפי מרחב שמות ריק" + +#: engine/core/templates/admin_doc/view_index.html:40 +#, python-format +msgid "" +"View function: %(full_name)s. Name: %(url_name)s." +msgstr "" +"פונקציית תצוגה: %(full_name)s. שם: %(url_name)s." + +#: engine/core/templates/admin_doc/view_index.html:54 +msgid "Jump to namespace" +msgstr "קפוץ למרחב השמות" + +#: engine/core/templates/admin_doc/view_index.html:59 +msgid "Empty namespace" +msgstr "מרחב שמות ריק" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -2925,7 +3278,7 @@ msgid "" msgstr "מידע נוסף" #: engine/core/templates/digital_order_delivered_email.html:137 -#: engine/core/templates/json_table_widget.html:6 +#: engine/core/templates/json_table_widget.html:26 msgid "value" msgstr "ערך" @@ -2943,11 +3296,23 @@ msgstr "אם יש לך שאלות, אל תהסס לפנות לתמיכה שלנ msgid "best regards,
the %(project_name)s team" msgstr "בברכה,
צוות %(project_name)s" -#: engine/core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:7 +msgid "Key" +msgstr "מפתח" + +#: engine/core/templates/json_table_widget.html:8 +msgid "Value" +msgstr "ערך" + +#: engine/core/templates/json_table_widget.html:19 msgid "key" msgstr "מפתח" -#: engine/core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:32 +msgid "Delete row" +msgstr "מחק שורה" + +#: engine/core/templates/json_table_widget.html:44 msgid "Add Row" msgstr "הוסף שורה" @@ -3028,12 +3393,21 @@ msgstr "אין לך הרשאה לבצע פעולה זו." msgid "NOMINATIM_URL must be configured." msgstr "יש להגדיר את הפרמטר NOMINATIM_URL!" -#: engine/core/validators.py:23 +#: engine/core/validators.py:18 +msgid "could not determine file type" +msgstr "לא ניתן לקבוע את סוג הקובץ" + +#: engine/core/validators.py:24 +#, python-brace-format +msgid "unsupported video format. supported formats: {supported}" +msgstr "פורמט וידאו לא נתמך. פורמטים נתמכים: {supported}" + +#: engine/core/validators.py:45 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "מידות התמונה לא יעלו על w{max_width} x h{max_height} פיקסלים!" -#: engine/core/views.py:104 +#: engine/core/views.py:108 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3041,7 +3415,7 @@ msgstr "" "מטפל בבקשה לאינדקס מפת האתר ומחזיר תגובה בפורמט XML. הוא מבטיח שהתגובה תכלול" " את כותרת סוג התוכן המתאימה ל-XML." -#: engine/core/views.py:119 +#: engine/core/views.py:123 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3050,41 +3424,41 @@ msgstr "" "מטפל בתגובה לתצוגה מפורטת של מפת אתר. פונקציה זו מעבדת את הבקשה, משיגה את " "התגובה המתאימה לפרטי מפת האתר, וקובעת את כותרת Content-Type עבור XML." -#: engine/core/views.py:155 +#: engine/core/views.py:174 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "מחזיר רשימה של שפות נתמכות והמידע המתאים להן." -#: engine/core/views.py:182 +#: engine/core/views.py:201 msgid "Returns the parameters of the website as a JSON object." msgstr "מחזיר את הפרמטרים של האתר כאובייקט JSON." -#: engine/core/views.py:198 +#: engine/core/views.py:217 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." msgstr "" "מטפל בפעולות מטמון כגון קריאה והגדרת נתוני מטמון עם מפתח וזמן המתנה מוגדרים." -#: engine/core/views.py:220 +#: engine/core/views.py:239 msgid "Handles `contact us` form submissions." msgstr "מטפל בהגשת טפסי \"צור קשר\"." -#: engine/core/views.py:236 +#: engine/core/views.py:255 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." msgstr "מטפל בבקשות לעיבוד ואימות כתובות URL מבקשות POST נכנסות." -#: engine/core/views.py:273 +#: engine/core/views.py:292 msgid "Handles global search queries." msgstr "מטפל בשאילתות חיפוש גלובליות." -#: engine/core/views.py:289 +#: engine/core/views.py:308 msgid "Handles the logic of buying as a business without registration." msgstr "מטפל בהיגיון הרכישה כעסק ללא רישום." -#: engine/core/views.py:337 +#: engine/core/views.py:356 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3093,31 +3467,31 @@ msgstr "" "הדיגיטלי הנמצא בספריית האחסון של הפרויקט. אם הקובץ לא נמצא, מתקבלת שגיאת " "HTTP 404 המציינת שהמשאב אינו זמין." -#: engine/core/views.py:348 +#: engine/core/views.py:367 msgid "order_product_uuid is required" msgstr "order_product_uuid נדרש" -#: engine/core/views.py:355 +#: engine/core/views.py:374 msgid "order product does not exist" msgstr "המוצר שהוזמן אינו קיים" -#: engine/core/views.py:358 +#: engine/core/views.py:377 msgid "you can only download the digital asset once" msgstr "ניתן להוריד את הנכס הדיגיטלי פעם אחת בלבד" -#: engine/core/views.py:362 +#: engine/core/views.py:381 msgid "the order must be paid before downloading the digital asset" msgstr "יש לשלם את ההזמנה לפני הורדת הנכס הדיגיטלי" -#: engine/core/views.py:369 +#: engine/core/views.py:388 msgid "the order product does not have a product" msgstr "למוצר ההזמנה אין מוצר" -#: engine/core/views.py:412 +#: engine/core/views.py:431 msgid "favicon not found" msgstr "לא נמצא סמל מועדף" -#: engine/core/views.py:418 +#: engine/core/views.py:437 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3126,7 +3500,7 @@ msgstr "" "המועדף הנמצא בספרייה הסטטית של הפרויקט. אם קובץ הסמל המועדף לא נמצא, מתקבלת " "שגיאת HTTP 404 המציינת שהמשאב אינו זמין." -#: engine/core/views.py:432 +#: engine/core/views.py:451 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3136,16 +3510,20 @@ msgstr "" " אותן לדף האינדקס של ממשק המנהל של Django. היא משתמשת בפונקציית `redirect` " "של Django לטיפול בהפניה HTTP." -#: engine/core/views.py:445 +#: engine/core/views.py:464 msgid "Returns current version of the Schon. " msgstr "מחזיר את הגרסה הנוכחית של Schon." -#: engine/core/views.py:674 engine/core/views.py:689 +#: engine/core/views.py:475 +msgid "no image file provided" +msgstr "לא סופק קובץ תמונה" + +#: engine/core/views.py:710 engine/core/views.py:725 #, python-format msgid "Revenue & Orders (last %(days)d)" msgstr "הכנסות והזמנות (אחרון %(days)d)" -#: engine/core/views.py:870 +#: engine/core/views.py:911 msgid "Returns custom variables for Dashboard. " msgstr "מחזיר משתנים מותאמים אישית עבור לוח המחוונים." @@ -3226,7 +3604,7 @@ msgstr "" "לשאילתה, סינון וסידור אובייקטים של מותג. היא משתמשת במערך ViewSet של Django " "כדי לפשט את היישום של נקודות קצה API לאובייקטים של מותג." -#: engine/core/viewsets.py:458 +#: engine/core/viewsets.py:460 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3242,7 +3620,15 @@ msgstr "" "עבור פעולות RESTful API. כוללת שיטות לאחזור פרטי מוצר, החלת הרשאות וגישה " "למשוב הקשור למוצר." -#: engine/core/viewsets.py:605 +#: engine/core/viewsets.py:541 +msgid "identificator_type and identificators are required" +msgstr "identificator_type ו-identificators נדרשים" + +#: engine/core/viewsets.py:554 +msgid "identificator_type must be one of: uuid, slug, sku" +msgstr "identificator_type חייב להיות אחד מהבאים: uuid, slug, sku" + +#: engine/core/viewsets.py:635 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3255,7 +3641,7 @@ msgstr "" " המשמשות לטיפול בפעולות שונות. מטרת מחלקה זו היא לספק גישה יעילה למשאבים " "הקשורים לספק באמצעות מסגרת Django REST." -#: engine/core/viewsets.py:625 +#: engine/core/viewsets.py:655 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3270,7 +3656,7 @@ msgstr "" " היא מרחיבה את `schonViewSet` הבסיסי ומשתמשת במערכת הסינון של Django לשאילתת" " נתונים." -#: engine/core/viewsets.py:652 +#: engine/core/viewsets.py:682 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3287,7 +3673,7 @@ msgstr "" "בהתאם לפעולה הספציפית המתבצעת ומאכוף הרשאות בהתאם בעת אינטראקציה עם נתוני " "הזמנה." -#: engine/core/viewsets.py:914 +#: engine/core/viewsets.py:944 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3300,25 +3686,25 @@ msgstr "" "הרשאות והחלפת סריאלייזר בהתאם לפעולה המבוקשת. בנוסף, הוא מספק פעולה מפורטת " "לטיפול במשוב על מופעים של OrderProduct." -#: engine/core/viewsets.py:974 +#: engine/core/viewsets.py:1004 msgid "Manages operations related to Product images in the application. " msgstr "מנהל פעולות הקשורות לתמונות מוצרים ביישום." -#: engine/core/viewsets.py:988 +#: engine/core/viewsets.py:1018 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "מנהל את אחזור וטיפול במקרי PromoCode באמצעות פעולות API שונות." -#: engine/core/viewsets.py:1019 +#: engine/core/viewsets.py:1049 msgid "Represents a view set for managing promotions. " msgstr "מייצג קבוצת תצוגות לניהול מבצעים." -#: engine/core/viewsets.py:1032 +#: engine/core/viewsets.py:1062 msgid "Handles operations related to Stock data in the system." msgstr "מטפל בפעולות הקשורות לנתוני המלאי במערכת." -#: engine/core/viewsets.py:1046 +#: engine/core/viewsets.py:1076 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3335,7 +3721,7 @@ msgstr "" "שמשתמשים יוכלו לנהל רק את רשימות המשאלות שלהם, אלא אם כן ניתנו הרשאות " "מפורשות." -#: engine/core/viewsets.py:1183 +#: engine/core/viewsets.py:1213 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3348,12 +3734,12 @@ msgstr "" "לישויות כתובת. היא כוללת התנהגויות מיוחדות עבור שיטות HTTP שונות, עקיפת " "סריאלייזר וטיפול בהרשאות בהתבסס על הקשר הבקשה." -#: engine/core/viewsets.py:1254 +#: engine/core/viewsets.py:1275 #, python-brace-format msgid "Geocoding error: {e}" msgstr "שגיאת קידוד גיאוגרפי: {e}" -#: engine/core/viewsets.py:1262 +#: engine/core/viewsets.py:1283 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/hi_IN/LC_MESSAGES/django.po b/engine/core/locale/hi_IN/LC_MESSAGES/django.po index 8acf0ebf..f60eeda2 100644 --- a/engine/core/locale/hi_IN/LC_MESSAGES/django.po +++ b/engine/core/locale/hi_IN/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:26+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -45,113 +45,133 @@ msgstr "" msgid "when the object was last modified" msgstr "" -#: engine/core/admin.py:94 +#: engine/core/admin.py:98 msgid "translations" msgstr "" -#: engine/core/admin.py:102 +#: engine/core/admin.py:106 msgid "general" msgstr "" -#: engine/core/admin.py:106 +#: engine/core/admin.py:110 msgid "relations" msgstr "" -#: engine/core/admin.py:111 +#: engine/core/admin.py:115 msgid "additional info" msgstr "" -#: engine/core/admin.py:133 +#: engine/core/admin.py:137 msgid "metadata" msgstr "" -#: engine/core/admin.py:141 +#: engine/core/admin.py:145 msgid "timestamps" msgstr "" -#: engine/core/admin.py:158 +#: engine/core/admin.py:162 #, python-format msgid "Activate selected %(verbose_name_plural)s" msgstr "" -#: engine/core/admin.py:166 +#: engine/core/admin.py:170 msgid "selected items have been activated." msgstr "" -#: engine/core/admin.py:174 +#: engine/core/admin.py:178 #, python-format msgid "Deactivate selected %(verbose_name_plural)s" msgstr "" -#: engine/core/admin.py:184 +#: engine/core/admin.py:188 msgid "selected items have been deactivated." msgstr "" -#: engine/core/admin.py:196 engine/core/graphene/object_types.py:653 -#: engine/core/graphene/object_types.py:660 engine/core/models.py:832 -#: engine/core/models.py:840 +#: engine/core/admin.py:200 engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:673 engine/core/models.py:918 +#: engine/core/models.py:928 msgid "attribute value" msgstr "" -#: engine/core/admin.py:197 engine/core/graphene/object_types.py:77 -#: engine/core/models.py:841 +#: engine/core/admin.py:201 engine/core/graphene/object_types.py:81 +#: engine/core/models.py:929 msgid "attribute values" msgstr "" -#: engine/core/admin.py:208 +#: engine/core/admin.py:212 engine/core/models.py:2232 msgid "image" msgstr "" -#: engine/core/admin.py:209 engine/core/graphene/object_types.py:530 +#: engine/core/admin.py:213 engine/core/graphene/object_types.py:535 msgid "images" msgstr "" -#: engine/core/admin.py:220 engine/core/models.py:576 +#: engine/core/admin.py:224 engine/core/models.py:635 msgid "stock" msgstr "" -#: engine/core/admin.py:221 engine/core/graphene/object_types.py:713 +#: engine/core/admin.py:225 engine/core/graphene/object_types.py:735 msgid "stocks" msgstr "" -#: engine/core/admin.py:232 engine/core/models.py:1938 +#: engine/core/admin.py:236 engine/core/models.py:2046 msgid "order product" msgstr "" -#: engine/core/admin.py:233 engine/core/graphene/object_types.py:441 -#: engine/core/models.py:1939 +#: engine/core/admin.py:237 engine/core/graphene/object_types.py:446 +#: engine/core/models.py:2047 msgid "order products" msgstr "" -#: engine/core/admin.py:251 engine/core/admin.py:252 +#: engine/core/admin.py:255 engine/core/admin.py:256 msgid "children" msgstr "" -#: engine/core/admin.py:528 +#: engine/core/admin.py:545 +msgid "video preview" +msgstr "" + +#: engine/core/admin.py:551 msgid "has images" msgstr "" -#: engine/core/admin.py:531 +#: engine/core/admin.py:554 #, python-format msgid "Export selected %(verbose_name_plural)s to marketplaces' feeds" msgstr "" -#: engine/core/admin.py:542 +#: engine/core/admin.py:565 #, python-format msgid "selected %(verbose_name_plural)s have been marked for export." msgstr "" -#: engine/core/admin.py:553 +#: engine/core/admin.py:576 #, python-format msgid "Ban selected %(verbose_name_plural)s from marketplaces' feeds" msgstr "" -#: engine/core/admin.py:564 +#: engine/core/admin.py:587 #, python-format msgid "selected %(verbose_name_plural)s have been banned from export." msgstr "" -#: engine/core/admin.py:1116 +#: engine/core/admin.py:1030 +msgid "Preview" +msgstr "" + +#: engine/core/admin.py:1031 +msgid "Metadata" +msgstr "" + +#: engine/core/admin.py:1034 +msgid "preview" +msgstr "" + +#: engine/core/admin.py:1043 +msgid "image preview" +msgstr "" + +#: engine/core/admin.py:1166 msgid "Config" msgstr "" @@ -214,7 +234,7 @@ msgid "" "parameter both." msgstr "" -#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:36 +#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "" @@ -236,7 +256,7 @@ msgstr "" msgid "send a message to the support team" msgstr "" -#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:59 msgid "request a CORSed URL" msgstr "" @@ -362,11 +382,11 @@ msgstr "" msgid "rewrite some fields of an existing category saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757 -#: engine/core/docs/drf/viewsets.py:1046 -#: engine/core/graphene/object_types.py:119 -#: engine/core/graphene/object_types.py:239 -#: engine/core/graphene/object_types.py:540 +#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:781 +#: engine/core/docs/drf/viewsets.py:1070 +#: engine/core/graphene/object_types.py:123 +#: engine/core/graphene/object_types.py:247 +#: engine/core/graphene/object_types.py:546 msgid "SEO Meta snapshot" msgstr "" @@ -629,7 +649,7 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683 #: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725 -#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763 +#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:787 msgid "Product UUID or slug" msgstr "" @@ -654,267 +674,277 @@ msgstr "" msgid "lists all permitted feedbacks for a product" msgstr "" -#: engine/core/docs/drf/viewsets.py:758 +#: engine/core/docs/drf/viewsets.py:757 +msgid "retrieve exact products by identifier" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:759 +msgid "" +"retrieve a list of products by identifier type (uuid, slug, or sku). Send a " +"POST request with `identificator_type` and `identificators` (list of values)." +msgstr "" + +#: engine/core/docs/drf/viewsets.py:782 msgid "returns a snapshot of the product's SEO meta data" msgstr "" -#: engine/core/docs/drf/viewsets.py:779 +#: engine/core/docs/drf/viewsets.py:803 msgid "list all addresses" msgstr "" -#: engine/core/docs/drf/viewsets.py:789 +#: engine/core/docs/drf/viewsets.py:813 msgid "retrieve a single address" msgstr "" -#: engine/core/docs/drf/viewsets.py:799 +#: engine/core/docs/drf/viewsets.py:823 msgid "create a new address" msgstr "" -#: engine/core/docs/drf/viewsets.py:810 +#: engine/core/docs/drf/viewsets.py:834 msgid "delete an address" msgstr "" -#: engine/core/docs/drf/viewsets.py:820 +#: engine/core/docs/drf/viewsets.py:844 msgid "update an entire address" msgstr "" -#: engine/core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:855 msgid "partially update an address" msgstr "" -#: engine/core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:866 msgid "autocomplete address suggestions" msgstr "" -#: engine/core/docs/drf/viewsets.py:848 +#: engine/core/docs/drf/viewsets.py:872 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" -#: engine/core/docs/drf/viewsets.py:855 +#: engine/core/docs/drf/viewsets.py:879 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "" -#: engine/core/docs/drf/viewsets.py:871 +#: engine/core/docs/drf/viewsets.py:895 msgid "list all feedbacks (simple view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:881 +#: engine/core/docs/drf/viewsets.py:905 msgid "retrieve a single feedback (detailed view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:888 +#: engine/core/docs/drf/viewsets.py:912 msgid "create a feedback" msgstr "" -#: engine/core/docs/drf/viewsets.py:895 +#: engine/core/docs/drf/viewsets.py:919 msgid "delete a feedback" msgstr "" -#: engine/core/docs/drf/viewsets.py:902 +#: engine/core/docs/drf/viewsets.py:926 msgid "rewrite an existing feedback saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:909 +#: engine/core/docs/drf/viewsets.py:933 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:919 +#: engine/core/docs/drf/viewsets.py:943 msgid "list all order–product relations (simple view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:929 +#: engine/core/docs/drf/viewsets.py:953 msgid "retrieve a single order–product relation (detailed view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:939 +#: engine/core/docs/drf/viewsets.py:963 msgid "create a new order–product relation" msgstr "" -#: engine/core/docs/drf/viewsets.py:949 +#: engine/core/docs/drf/viewsets.py:973 msgid "replace an existing order–product relation" msgstr "" -#: engine/core/docs/drf/viewsets.py:959 +#: engine/core/docs/drf/viewsets.py:983 msgid "partially update an existing order–product relation" msgstr "" -#: engine/core/docs/drf/viewsets.py:969 +#: engine/core/docs/drf/viewsets.py:993 msgid "delete an order–product relation" msgstr "" -#: engine/core/docs/drf/viewsets.py:979 +#: engine/core/docs/drf/viewsets.py:1003 msgid "add or remove feedback on an order–product relation" msgstr "" -#: engine/core/docs/drf/viewsets.py:996 +#: engine/core/docs/drf/viewsets.py:1020 msgid "list all brands (simple view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1003 +#: engine/core/docs/drf/viewsets.py:1027 msgid "retrieve a single brand (detailed view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051 +#: engine/core/docs/drf/viewsets.py:1032 engine/core/docs/drf/viewsets.py:1075 msgid "Brand UUID or slug" msgstr "" -#: engine/core/docs/drf/viewsets.py:1018 +#: engine/core/docs/drf/viewsets.py:1042 msgid "create a brand" msgstr "" -#: engine/core/docs/drf/viewsets.py:1025 +#: engine/core/docs/drf/viewsets.py:1049 msgid "delete a brand" msgstr "" -#: engine/core/docs/drf/viewsets.py:1032 +#: engine/core/docs/drf/viewsets.py:1056 msgid "rewrite an existing brand saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1039 +#: engine/core/docs/drf/viewsets.py:1063 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1064 +#: engine/core/docs/drf/viewsets.py:1088 msgid "list all vendors (simple view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1074 +#: engine/core/docs/drf/viewsets.py:1098 msgid "retrieve a single vendor (detailed view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1081 +#: engine/core/docs/drf/viewsets.py:1105 msgid "create a vendor" msgstr "" -#: engine/core/docs/drf/viewsets.py:1088 +#: engine/core/docs/drf/viewsets.py:1112 msgid "delete a vendor" msgstr "" -#: engine/core/docs/drf/viewsets.py:1095 +#: engine/core/docs/drf/viewsets.py:1119 msgid "rewrite an existing vendor saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1102 +#: engine/core/docs/drf/viewsets.py:1126 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1112 +#: engine/core/docs/drf/viewsets.py:1136 msgid "list all product images (simple view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1122 +#: engine/core/docs/drf/viewsets.py:1146 msgid "retrieve a single product image (detailed view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1129 +#: engine/core/docs/drf/viewsets.py:1153 msgid "create a product image" msgstr "" -#: engine/core/docs/drf/viewsets.py:1139 +#: engine/core/docs/drf/viewsets.py:1163 msgid "delete a product image" msgstr "" -#: engine/core/docs/drf/viewsets.py:1146 +#: engine/core/docs/drf/viewsets.py:1170 msgid "rewrite an existing product image saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1154 +#: engine/core/docs/drf/viewsets.py:1178 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1165 +#: engine/core/docs/drf/viewsets.py:1189 msgid "list all promo codes (simple view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1175 +#: engine/core/docs/drf/viewsets.py:1199 msgid "retrieve a single promo code (detailed view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1182 +#: engine/core/docs/drf/viewsets.py:1206 msgid "create a promo code" msgstr "" -#: engine/core/docs/drf/viewsets.py:1189 +#: engine/core/docs/drf/viewsets.py:1213 msgid "delete a promo code" msgstr "" -#: engine/core/docs/drf/viewsets.py:1196 +#: engine/core/docs/drf/viewsets.py:1220 msgid "rewrite an existing promo code saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1203 +#: engine/core/docs/drf/viewsets.py:1227 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1213 +#: engine/core/docs/drf/viewsets.py:1237 msgid "list all promotions (simple view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1223 +#: engine/core/docs/drf/viewsets.py:1247 msgid "retrieve a single promotion (detailed view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1230 +#: engine/core/docs/drf/viewsets.py:1254 msgid "create a promotion" msgstr "" -#: engine/core/docs/drf/viewsets.py:1237 +#: engine/core/docs/drf/viewsets.py:1261 msgid "delete a promotion" msgstr "" -#: engine/core/docs/drf/viewsets.py:1244 +#: engine/core/docs/drf/viewsets.py:1268 msgid "rewrite an existing promotion saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1251 +#: engine/core/docs/drf/viewsets.py:1275 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1261 +#: engine/core/docs/drf/viewsets.py:1285 msgid "list all stocks (simple view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1268 +#: engine/core/docs/drf/viewsets.py:1292 msgid "retrieve a single stock (detailed view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1275 +#: engine/core/docs/drf/viewsets.py:1299 msgid "create a stock record" msgstr "" -#: engine/core/docs/drf/viewsets.py:1282 +#: engine/core/docs/drf/viewsets.py:1306 msgid "delete a stock record" msgstr "" -#: engine/core/docs/drf/viewsets.py:1289 +#: engine/core/docs/drf/viewsets.py:1313 msgid "rewrite an existing stock record saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1297 +#: engine/core/docs/drf/viewsets.py:1321 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1308 +#: engine/core/docs/drf/viewsets.py:1332 msgid "list all product tags (simple view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1318 +#: engine/core/docs/drf/viewsets.py:1342 msgid "retrieve a single product tag (detailed view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1325 +#: engine/core/docs/drf/viewsets.py:1349 msgid "create a product tag" msgstr "" -#: engine/core/docs/drf/viewsets.py:1335 +#: engine/core/docs/drf/viewsets.py:1359 msgid "delete a product tag" msgstr "" -#: engine/core/docs/drf/viewsets.py:1342 +#: engine/core/docs/drf/viewsets.py:1366 msgid "rewrite an existing product tag saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1350 +#: engine/core/docs/drf/viewsets.py:1374 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "" @@ -923,419 +953,425 @@ msgstr "" msgid "no search term provided." msgstr "" -#: engine/core/filters.py:78 engine/core/filters.py:484 -#: engine/core/filters.py:625 +#: engine/core/filters.py:79 engine/core/filters.py:485 +#: engine/core/filters.py:626 msgid "Search" msgstr "" -#: engine/core/filters.py:79 engine/core/filters.py:663 -#: engine/core/filters.py:692 +#: engine/core/filters.py:80 engine/core/filters.py:664 +#: engine/core/filters.py:693 msgid "UUID" msgstr "" -#: engine/core/filters.py:80 engine/core/filters.py:487 -#: engine/core/filters.py:627 +#: engine/core/filters.py:81 engine/core/filters.py:488 +#: engine/core/filters.py:628 msgid "Name" msgstr "" -#: engine/core/filters.py:82 engine/core/filters.py:630 +#: engine/core/filters.py:83 engine/core/filters.py:631 msgid "Categories" msgstr "" -#: engine/core/filters.py:86 +#: engine/core/filters.py:87 msgid "Categories Slugs" msgstr "" -#: engine/core/filters.py:88 engine/core/filters.py:495 +#: engine/core/filters.py:89 engine/core/filters.py:496 +#: engine/core/templates/admin_doc/index.html:37 +#: engine/core/templates/admin_doc/template_tag_index.html:12 msgid "Tags" msgstr "" -#: engine/core/filters.py:90 +#: engine/core/filters.py:91 msgid "Min Price" msgstr "" -#: engine/core/filters.py:93 +#: engine/core/filters.py:94 msgid "Max Price" msgstr "" -#: engine/core/filters.py:95 +#: engine/core/filters.py:96 msgid "Is Active" msgstr "" -#: engine/core/filters.py:96 +#: engine/core/filters.py:97 msgid "Brand" msgstr "" -#: engine/core/filters.py:97 +#: engine/core/filters.py:98 msgid "Attributes" msgstr "" -#: engine/core/filters.py:99 +#: engine/core/filters.py:100 msgid "Quantity" msgstr "" -#: engine/core/filters.py:101 engine/core/filters.py:489 -#: engine/core/filters.py:628 engine/core/models.py:316 -#: engine/core/models.py:497 engine/core/models.py:663 +#: engine/core/filters.py:102 engine/core/filters.py:490 +#: engine/core/filters.py:629 engine/core/models.py:339 +#: engine/core/models.py:546 engine/core/models.py:736 msgid "Slug" msgstr "" -#: engine/core/filters.py:102 +#: engine/core/filters.py:103 msgid "Is Digital" msgstr "" -#: engine/core/filters.py:104 +#: engine/core/filters.py:105 msgid "Include sub-categories" msgstr "" -#: engine/core/filters.py:108 +#: engine/core/filters.py:109 msgid "Include personal ordered" msgstr "" -#: engine/core/filters.py:110 engine/core/models.py:667 +#: engine/core/filters.py:111 engine/core/models.py:740 msgid "SKU" msgstr "" -#: engine/core/filters.py:212 +#: engine/core/filters.py:213 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" -#: engine/core/filters.py:398 +#: engine/core/filters.py:399 msgid "Search (ID, product name or part number)" msgstr "" -#: engine/core/filters.py:402 +#: engine/core/filters.py:403 msgid "Bought after (inclusive)" msgstr "" -#: engine/core/filters.py:405 +#: engine/core/filters.py:406 msgid "Bought before (inclusive)" msgstr "" -#: engine/core/filters.py:410 engine/core/filters.py:461 -#: engine/core/filters.py:697 +#: engine/core/filters.py:411 engine/core/filters.py:462 +#: engine/core/filters.py:698 msgid "User email" msgstr "" -#: engine/core/filters.py:413 engine/core/filters.py:464 -#: engine/core/filters.py:672 engine/core/filters.py:694 +#: engine/core/filters.py:414 engine/core/filters.py:465 +#: engine/core/filters.py:673 engine/core/filters.py:695 msgid "User UUID" msgstr "" -#: engine/core/filters.py:415 +#: engine/core/filters.py:416 msgid "Status" msgstr "" -#: engine/core/filters.py:419 +#: engine/core/filters.py:420 msgid "Human Readable ID" msgstr "" -#: engine/core/filters.py:488 +#: engine/core/filters.py:489 msgid "Parent" msgstr "" -#: engine/core/filters.py:492 +#: engine/core/filters.py:493 msgid "Whole category(has at least 1 product or not)" msgstr "" -#: engine/core/filters.py:496 +#: engine/core/filters.py:497 msgid "Level" msgstr "" -#: engine/core/filters.py:667 +#: engine/core/filters.py:668 msgid "Product UUID" msgstr "" -#: engine/core/graphene/mutations.py:40 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:43 msgid "data to store in cache" msgstr "" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:46 msgid "timeout in seconds to set the data for into the cache" msgstr "" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:49 msgid "cached data" msgstr "" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:64 msgid "camelized JSON data from the requested URL" msgstr "" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:248 +#: engine/core/graphene/mutations.py:69 engine/core/views.py:267 msgid "only URLs starting with http(s):// are allowed" msgstr "" -#: engine/core/graphene/mutations.py:86 +#: engine/core/graphene/mutations.py:87 msgid "add a product to the order" msgstr "" -#: engine/core/graphene/mutations.py:109 engine/core/graphene/mutations.py:138 -#: engine/core/graphene/mutations.py:254 engine/core/graphene/mutations.py:306 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139 +#: engine/core/graphene/mutations.py:256 engine/core/graphene/mutations.py:308 #, python-brace-format msgid "order {order_uuid} not found" msgstr "" -#: engine/core/graphene/mutations.py:115 engine/core/graphene/mutations.py:166 +#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167 msgid "remove a product from the order" msgstr "" -#: engine/core/graphene/mutations.py:144 +#: engine/core/graphene/mutations.py:145 msgid "remove all products from the order" msgstr "" -#: engine/core/graphene/mutations.py:189 +#: engine/core/graphene/mutations.py:190 msgid "buy an order" msgstr "" -#: engine/core/graphene/mutations.py:220 engine/core/graphene/mutations.py:282 +#: engine/core/graphene/mutations.py:222 engine/core/graphene/mutations.py:284 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" -#: engine/core/graphene/mutations.py:249 engine/core/graphene/mutations.py:524 -#: engine/core/graphene/mutations.py:573 engine/core/viewsets.py:753 +#: engine/core/graphene/mutations.py:251 engine/core/graphene/mutations.py:526 +#: engine/core/graphene/mutations.py:576 engine/core/viewsets.py:783 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" -#: engine/core/graphene/mutations.py:260 +#: engine/core/graphene/mutations.py:262 msgid "perform an action on a list of products in the order" msgstr "" -#: engine/core/graphene/mutations.py:265 +#: engine/core/graphene/mutations.py:267 msgid "remove/add" msgstr "" -#: engine/core/graphene/mutations.py:301 engine/core/graphene/mutations.py:342 +#: engine/core/graphene/mutations.py:303 engine/core/graphene/mutations.py:342 msgid "action must be either add or remove" msgstr "" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:314 msgid "perform an action on a list of products in the wishlist" msgstr "" -#: engine/core/graphene/mutations.py:330 -msgid "please provide wishlist_uuid value" -msgstr "" - -#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:423 -#: engine/core/graphene/mutations.py:451 engine/core/graphene/mutations.py:479 -#: engine/core/graphene/mutations.py:529 +#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:424 +#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480 +#: engine/core/graphene/mutations.py:531 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "" -#: engine/core/graphene/mutations.py:401 +#: engine/core/graphene/mutations.py:402 msgid "add a product to the wishlist" msgstr "" -#: engine/core/graphene/mutations.py:429 +#: engine/core/graphene/mutations.py:430 msgid "remove a product from the wishlist" msgstr "" -#: engine/core/graphene/mutations.py:457 +#: engine/core/graphene/mutations.py:458 msgid "remove all products from the wishlist" msgstr "" -#: engine/core/graphene/mutations.py:485 +#: engine/core/graphene/mutations.py:486 msgid "buy all products from the wishlist" msgstr "" -#: engine/core/graphene/mutations.py:535 +#: engine/core/graphene/mutations.py:537 msgid "buy a product" msgstr "" -#: engine/core/graphene/mutations.py:542 +#: engine/core/graphene/mutations.py:544 msgid "" "please send the attributes as the string formatted like attr1=value1," "attr2=value2" msgstr "" -#: engine/core/graphene/mutations.py:580 +#: engine/core/graphene/mutations.py:583 msgid "add or delete a feedback for orderproduct" msgstr "" -#: engine/core/graphene/mutations.py:606 +#: engine/core/graphene/mutations.py:610 msgid "action must be either `add` or `remove`" msgstr "" -#: engine/core/graphene/mutations.py:609 +#: engine/core/graphene/mutations.py:613 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "" -#: engine/core/graphene/mutations.py:616 +#: engine/core/graphene/mutations.py:620 msgid "original address string provided by the user" msgstr "" -#: engine/core/graphene/mutations.py:653 engine/core/models.py:986 -#: engine/core/models.py:999 engine/core/models.py:1443 -#: engine/core/models.py:1474 engine/core/models.py:1505 -#: engine/core/viewsets.py:760 +#: engine/core/graphene/mutations.py:662 engine/core/models.py:1079 +#: engine/core/models.py:1092 engine/core/models.py:1544 +#: engine/core/models.py:1575 engine/core/models.py:1606 +#: engine/core/viewsets.py:790 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "" -#: engine/core/graphene/mutations.py:667 +#: engine/core/graphene/mutations.py:676 msgid "limit must be between 1 and 10" msgstr "" -#: engine/core/graphene/mutations.py:716 +#: engine/core/graphene/mutations.py:726 msgid "elasticsearch - works like a charm" msgstr "" -#: engine/core/graphene/object_types.py:84 -#: engine/core/graphene/object_types.py:420 -#: engine/core/graphene/object_types.py:471 engine/core/models.py:803 -#: engine/core/models.py:1297 engine/core/models.py:2033 +#: engine/core/graphene/object_types.py:88 +#: engine/core/graphene/object_types.py:425 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:889 +#: engine/core/models.py:1394 engine/core/models.py:2139 msgid "attributes" msgstr "" -#: engine/core/graphene/object_types.py:97 +#: engine/core/graphene/object_types.py:101 msgid "grouped attributes" msgstr "" -#: engine/core/graphene/object_types.py:104 +#: engine/core/graphene/object_types.py:108 msgid "groups of attributes" msgstr "" -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:217 -#: engine/core/graphene/object_types.py:255 engine/core/models.py:440 +#: engine/core/graphene/object_types.py:122 +#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:264 engine/core/models.py:489 msgid "categories" msgstr "" -#: engine/core/graphene/object_types.py:134 engine/core/models.py:511 +#: engine/core/graphene/object_types.py:138 engine/core/models.py:564 msgid "brands" msgstr "" -#: engine/core/graphene/object_types.py:219 +#: engine/core/graphene/object_types.py:226 msgid "category image url" msgstr "" -#: engine/core/graphene/object_types.py:220 -#: engine/core/graphene/object_types.py:365 engine/core/models.py:278 +#: engine/core/graphene/object_types.py:227 +#: engine/core/graphene/object_types.py:369 engine/core/models.py:301 msgid "markup percentage" msgstr "" -#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:231 msgid "which attributes and values can be used for filtering this category." msgstr "" -#: engine/core/graphene/object_types.py:230 +#: engine/core/graphene/object_types.py:237 msgid "minimum and maximum prices for products in this category, if available." msgstr "" -#: engine/core/graphene/object_types.py:234 +#: engine/core/graphene/object_types.py:240 +msgid "brands in this category" +msgstr "" + +#: engine/core/graphene/object_types.py:242 msgid "tags for this category" msgstr "" -#: engine/core/graphene/object_types.py:237 +#: engine/core/graphene/object_types.py:245 msgid "products in this category" msgstr "" -#: engine/core/graphene/object_types.py:372 engine/core/models.py:183 +#: engine/core/graphene/object_types.py:376 engine/core/models.py:202 msgid "vendors" msgstr "" -#: engine/core/graphene/object_types.py:376 +#: engine/core/graphene/object_types.py:380 msgid "Latitude (Y coordinate)" msgstr "" -#: engine/core/graphene/object_types.py:377 +#: engine/core/graphene/object_types.py:381 msgid "Longitude (X coordinate)" msgstr "" -#: engine/core/graphene/object_types.py:406 +#: engine/core/graphene/object_types.py:411 msgid "comment" msgstr "" -#: engine/core/graphene/object_types.py:408 -#: engine/core/graphene/object_types.py:542 +#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:548 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "" -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:421 msgid "represents feedback from a user." msgstr "" -#: engine/core/graphene/object_types.py:421 -#: engine/core/graphene/object_types.py:472 engine/core/models.py:1291 +#: engine/core/graphene/object_types.py:426 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:1388 msgid "notifications" msgstr "" -#: engine/core/graphene/object_types.py:423 +#: engine/core/graphene/object_types.py:428 msgid "download url for this order product if applicable" msgstr "" -#: engine/core/graphene/object_types.py:425 engine/core/models.py:1856 +#: engine/core/graphene/object_types.py:430 engine/core/models.py:1959 msgid "feedback" msgstr "" -#: engine/core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:464 msgid "a list of order products in this order" msgstr "" -#: engine/core/graphene/object_types.py:461 engine/core/models.py:1261 +#: engine/core/graphene/object_types.py:466 engine/core/models.py:1358 msgid "billing address" msgstr "" -#: engine/core/graphene/object_types.py:465 +#: engine/core/graphene/object_types.py:470 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" msgstr "" -#: engine/core/graphene/object_types.py:468 +#: engine/core/graphene/object_types.py:473 msgid "total price of this order" msgstr "" -#: engine/core/graphene/object_types.py:469 +#: engine/core/graphene/object_types.py:474 msgid "total quantity of products in order" msgstr "" -#: engine/core/graphene/object_types.py:470 +#: engine/core/graphene/object_types.py:475 msgid "are all products in the order digital" msgstr "" -#: engine/core/graphene/object_types.py:474 +#: engine/core/graphene/object_types.py:479 msgid "transactions for this order" msgstr "" -#: engine/core/graphene/object_types.py:494 engine/core/models.py:1325 +#: engine/core/graphene/object_types.py:499 engine/core/models.py:1422 msgid "orders" msgstr "" -#: engine/core/graphene/object_types.py:515 +#: engine/core/graphene/object_types.py:520 msgid "image url" msgstr "" -#: engine/core/graphene/object_types.py:522 +#: engine/core/graphene/object_types.py:527 msgid "product's images" msgstr "" -#: engine/core/graphene/object_types.py:529 engine/core/models.py:439 -#: engine/core/models.py:596 +#: engine/core/graphene/object_types.py:534 engine/core/models.py:488 +#: engine/core/models.py:661 msgid "category" msgstr "" -#: engine/core/graphene/object_types.py:531 engine/core/models.py:1857 +#: engine/core/graphene/object_types.py:536 engine/core/models.py:1960 msgid "feedbacks" msgstr "" -#: engine/core/graphene/object_types.py:532 engine/core/models.py:510 -#: engine/core/models.py:605 +#: engine/core/graphene/object_types.py:537 engine/core/models.py:563 +#: engine/core/models.py:670 msgid "brand" msgstr "" -#: engine/core/graphene/object_types.py:534 engine/core/models.py:103 +#: engine/core/graphene/object_types.py:538 +msgid "video url" +msgstr "" + +#: engine/core/graphene/object_types.py:540 engine/core/models.py:122 msgid "attribute groups" msgstr "" -#: engine/core/graphene/object_types.py:536 +#: engine/core/graphene/object_types.py:542 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1343,7 +1379,7 @@ msgstr "" msgid "price" msgstr "" -#: engine/core/graphene/object_types.py:537 +#: engine/core/graphene/object_types.py:543 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1351,39 +1387,39 @@ msgstr "" msgid "quantity" msgstr "" -#: engine/core/graphene/object_types.py:538 +#: engine/core/graphene/object_types.py:544 msgid "number of feedbacks" msgstr "" -#: engine/core/graphene/object_types.py:539 +#: engine/core/graphene/object_types.py:545 msgid "only available for personal orders" msgstr "" -#: engine/core/graphene/object_types.py:544 +#: engine/core/graphene/object_types.py:550 msgid "discount price" msgstr "" -#: engine/core/graphene/object_types.py:568 engine/core/models.py:682 +#: engine/core/graphene/object_types.py:575 engine/core/models.py:755 msgid "products" msgstr "" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:691 msgid "promocodes" msgstr "" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:706 msgid "products on sale" msgstr "" -#: engine/core/graphene/object_types.py:701 engine/core/models.py:935 +#: engine/core/graphene/object_types.py:720 engine/core/models.py:1028 msgid "promotions" msgstr "" -#: engine/core/graphene/object_types.py:705 engine/core/models.py:182 +#: engine/core/graphene/object_types.py:727 engine/core/models.py:201 msgid "vendor" msgstr "" -#: engine/core/graphene/object_types.py:706 engine/core/models.py:681 +#: engine/core/graphene/object_types.py:728 engine/core/models.py:754 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1391,102 +1427,102 @@ msgstr "" msgid "product" msgstr "" -#: engine/core/graphene/object_types.py:718 engine/core/models.py:958 +#: engine/core/graphene/object_types.py:740 engine/core/models.py:1051 msgid "wishlisted products" msgstr "" -#: engine/core/graphene/object_types.py:725 engine/core/models.py:975 +#: engine/core/graphene/object_types.py:747 engine/core/models.py:1068 msgid "wishlists" msgstr "" -#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:752 msgid "tagged products" msgstr "" -#: engine/core/graphene/object_types.py:738 engine/core/models.py:219 -#: engine/core/models.py:611 +#: engine/core/graphene/object_types.py:760 engine/core/models.py:238 +#: engine/core/models.py:676 msgid "product tags" msgstr "" -#: engine/core/graphene/object_types.py:743 +#: engine/core/graphene/object_types.py:765 msgid "tagged categories" msgstr "" -#: engine/core/graphene/object_types.py:751 +#: engine/core/graphene/object_types.py:773 msgid "categories tags" msgstr "" -#: engine/core/graphene/object_types.py:755 +#: engine/core/graphene/object_types.py:777 msgid "project name" msgstr "" -#: engine/core/graphene/object_types.py:756 +#: engine/core/graphene/object_types.py:778 msgid "company name" msgstr "" -#: engine/core/graphene/object_types.py:757 +#: engine/core/graphene/object_types.py:779 msgid "company address" msgstr "" -#: engine/core/graphene/object_types.py:758 +#: engine/core/graphene/object_types.py:780 msgid "company phone number" msgstr "" -#: engine/core/graphene/object_types.py:761 +#: engine/core/graphene/object_types.py:783 msgid "email from, sometimes it must be used instead of host user value" msgstr "" -#: engine/core/graphene/object_types.py:764 +#: engine/core/graphene/object_types.py:786 msgid "email host user" msgstr "" -#: engine/core/graphene/object_types.py:765 +#: engine/core/graphene/object_types.py:787 msgid "maximum amount for payment" msgstr "" -#: engine/core/graphene/object_types.py:766 +#: engine/core/graphene/object_types.py:788 msgid "minimum amount for payment" msgstr "" -#: engine/core/graphene/object_types.py:767 +#: engine/core/graphene/object_types.py:789 msgid "analytics data" msgstr "" -#: engine/core/graphene/object_types.py:768 +#: engine/core/graphene/object_types.py:790 msgid "advertisement data" msgstr "" -#: engine/core/graphene/object_types.py:771 +#: engine/core/graphene/object_types.py:793 msgid "company configuration" msgstr "" -#: engine/core/graphene/object_types.py:775 +#: engine/core/graphene/object_types.py:797 msgid "language code" msgstr "" -#: engine/core/graphene/object_types.py:776 +#: engine/core/graphene/object_types.py:798 msgid "language name" msgstr "" -#: engine/core/graphene/object_types.py:777 +#: engine/core/graphene/object_types.py:799 msgid "language flag, if exists :)" msgstr "" -#: engine/core/graphene/object_types.py:780 +#: engine/core/graphene/object_types.py:802 msgid "supported languages" msgstr "" -#: engine/core/graphene/object_types.py:812 -#: engine/core/graphene/object_types.py:815 -#: engine/core/graphene/object_types.py:818 +#: engine/core/graphene/object_types.py:834 +#: engine/core/graphene/object_types.py:837 +#: engine/core/graphene/object_types.py:840 msgid "products search results" msgstr "" -#: engine/core/graphene/object_types.py:820 +#: engine/core/graphene/object_types.py:842 msgid "posts search results" msgstr "" -#: engine/core/models.py:75 +#: engine/core/models.py:91 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 " @@ -1494,23 +1530,23 @@ msgid "" "categorizing and managing attributes more effectively in acomplex system." msgstr "" -#: engine/core/models.py:88 +#: engine/core/models.py:107 msgid "parent of this group" msgstr "" -#: engine/core/models.py:89 +#: engine/core/models.py:108 msgid "parent attribute group" msgstr "" -#: engine/core/models.py:93 engine/core/models.py:94 +#: engine/core/models.py:112 engine/core/models.py:113 msgid "attribute group's name" msgstr "" -#: engine/core/models.py:102 engine/core/models.py:763 +#: engine/core/models.py:121 engine/core/models.py:849 msgid "attribute group" msgstr "" -#: engine/core/models.py:108 +#: engine/core/models.py:127 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1521,47 +1557,47 @@ msgid "" "use in systems that interact with third-party vendors." msgstr "" -#: engine/core/models.py:122 +#: engine/core/models.py:141 msgid "stores credentials and endpoints required for vendor communication" msgstr "" -#: engine/core/models.py:124 +#: engine/core/models.py:143 msgid "authentication info" msgstr "" -#: engine/core/models.py:129 +#: engine/core/models.py:148 msgid "define the markup for products retrieved from this vendor" msgstr "" -#: engine/core/models.py:130 +#: engine/core/models.py:149 msgid "vendor markup percentage" msgstr "" -#: engine/core/models.py:134 +#: engine/core/models.py:153 msgid "name of this vendor" msgstr "" -#: engine/core/models.py:135 +#: engine/core/models.py:154 msgid "vendor name" msgstr "" -#: engine/core/models.py:150 +#: engine/core/models.py:169 msgid "response file" msgstr "" -#: engine/core/models.py:151 +#: engine/core/models.py:170 msgid "vendor's last processing response" msgstr "" -#: engine/core/models.py:157 +#: engine/core/models.py:176 msgid "vendor's integration file path" msgstr "" -#: engine/core/models.py:158 +#: engine/core/models.py:177 msgid "integration path" msgstr "" -#: engine/core/models.py:192 +#: engine/core/models.py:211 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1570,42 +1606,42 @@ msgid "" "metadata customization for administrative purposes." msgstr "" -#: engine/core/models.py:204 engine/core/models.py:235 +#: engine/core/models.py:223 engine/core/models.py:254 msgid "internal tag identifier for the product tag" msgstr "" -#: engine/core/models.py:205 engine/core/models.py:236 +#: engine/core/models.py:224 engine/core/models.py:255 msgid "tag name" msgstr "" -#: engine/core/models.py:209 engine/core/models.py:240 +#: engine/core/models.py:228 engine/core/models.py:259 msgid "user-friendly name for the product tag" msgstr "" -#: engine/core/models.py:210 engine/core/models.py:241 +#: engine/core/models.py:229 engine/core/models.py:260 msgid "tag display name" msgstr "" -#: engine/core/models.py:218 +#: engine/core/models.py:237 msgid "product tag" msgstr "" -#: engine/core/models.py:224 +#: engine/core/models.py:243 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 "" -#: engine/core/models.py:249 +#: engine/core/models.py:268 msgid "category tag" msgstr "" -#: engine/core/models.py:250 engine/core/models.py:322 +#: engine/core/models.py:269 engine/core/models.py:345 msgid "category tags" msgstr "" -#: engine/core/models.py:255 +#: engine/core/models.py:274 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1618,51 +1654,51 @@ msgid "" "priority." msgstr "" -#: engine/core/models.py:269 +#: engine/core/models.py:292 msgid "upload an image representing this category" msgstr "" -#: engine/core/models.py:272 +#: engine/core/models.py:295 msgid "category image" msgstr "" -#: engine/core/models.py:277 +#: engine/core/models.py:300 msgid "define a markup percentage for products in this category" msgstr "" -#: engine/core/models.py:286 +#: engine/core/models.py:309 msgid "parent of this category to form a hierarchical structure" msgstr "" -#: engine/core/models.py:287 +#: engine/core/models.py:310 msgid "parent category" msgstr "" -#: engine/core/models.py:292 +#: engine/core/models.py:315 msgid "category name" msgstr "" -#: engine/core/models.py:293 +#: engine/core/models.py:316 msgid "provide a name for this category" msgstr "" -#: engine/core/models.py:300 +#: engine/core/models.py:323 msgid "add a detailed description for this category" msgstr "" -#: engine/core/models.py:301 +#: engine/core/models.py:324 msgid "category description" msgstr "" -#: engine/core/models.py:321 +#: engine/core/models.py:344 msgid "tags that help describe or group this category" msgstr "" -#: engine/core/models.py:328 engine/core/models.py:503 +#: engine/core/models.py:351 engine/core/models.py:552 msgid "priority" msgstr "" -#: engine/core/models.py:446 +#: engine/core/models.py:495 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1670,47 +1706,43 @@ msgid "" "organization and representation of brand-related data within the application." msgstr "" -#: engine/core/models.py:456 +#: engine/core/models.py:505 msgid "name of this brand" msgstr "" -#: engine/core/models.py:457 +#: engine/core/models.py:506 msgid "brand name" msgstr "" -#: engine/core/models.py:464 +#: engine/core/models.py:513 msgid "upload a logo representing this brand" msgstr "" -#: engine/core/models.py:466 +#: engine/core/models.py:515 msgid "brand small image" msgstr "" -#: engine/core/models.py:472 +#: engine/core/models.py:521 msgid "upload a big logo representing this brand" msgstr "" -#: engine/core/models.py:474 +#: engine/core/models.py:523 msgid "brand big image" msgstr "" -#: engine/core/models.py:479 +#: engine/core/models.py:528 msgid "add a detailed description of the brand" msgstr "" -#: engine/core/models.py:480 +#: engine/core/models.py:529 msgid "brand description" msgstr "" -#: engine/core/models.py:485 -msgid "optional categories that this brand is associated with" +#: engine/core/models.py:534 engine/core/models.py:535 +msgid "DEPRECATED" msgstr "" -#: engine/core/models.py:486 -msgid "associated categories" -msgstr "" - -#: engine/core/models.py:516 +#: engine/core/models.py:569 msgid "" "Represents the stock of a product managed in the system. This class provides " "details about the relationship between vendors, products, and their stock " @@ -1720,72 +1752,72 @@ msgid "" "from various vendors." msgstr "" -#: engine/core/models.py:528 +#: engine/core/models.py:581 msgid "the vendor supplying this product stock" msgstr "" -#: engine/core/models.py:529 +#: engine/core/models.py:582 msgid "associated vendor" msgstr "" -#: engine/core/models.py:533 +#: engine/core/models.py:588 msgid "final price to the customer after markups" msgstr "" -#: engine/core/models.py:534 +#: engine/core/models.py:589 msgid "selling price" msgstr "" -#: engine/core/models.py:539 +#: engine/core/models.py:594 msgid "the product associated with this stock entry" msgstr "" -#: engine/core/models.py:540 engine/core/models.py:828 -#: engine/core/models.py:874 engine/core/models.py:1912 +#: engine/core/models.py:595 engine/core/models.py:914 +#: engine/core/models.py:962 engine/core/models.py:2020 msgid "associated product" msgstr "" -#: engine/core/models.py:547 +#: engine/core/models.py:604 msgid "the price paid to the vendor for this product" msgstr "" -#: engine/core/models.py:548 +#: engine/core/models.py:605 msgid "vendor purchase price" msgstr "" -#: engine/core/models.py:552 +#: engine/core/models.py:609 msgid "available quantity of the product in stock" msgstr "" -#: engine/core/models.py:553 +#: engine/core/models.py:610 msgid "quantity in stock" msgstr "" -#: engine/core/models.py:557 +#: engine/core/models.py:614 msgid "vendor-assigned SKU for identifying the product" msgstr "" -#: engine/core/models.py:558 +#: engine/core/models.py:615 msgid "vendor sku" msgstr "" -#: engine/core/models.py:564 +#: engine/core/models.py:621 msgid "digital file associated with this stock if applicable" msgstr "" -#: engine/core/models.py:565 +#: engine/core/models.py:622 msgid "digital file" msgstr "" -#: engine/core/models.py:569 +#: engine/core/models.py:626 msgid "system attributes" msgstr "" -#: engine/core/models.py:577 +#: engine/core/models.py:636 msgid "stock entries" msgstr "" -#: engine/core/models.py:582 +#: engine/core/models.py:641 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1797,71 +1829,79 @@ msgid "" "product data and its associated information within an application." msgstr "" -#: engine/core/models.py:595 +#: engine/core/models.py:660 msgid "category this product belongs to" msgstr "" -#: engine/core/models.py:604 +#: engine/core/models.py:669 msgid "optionally associate this product with a brand" msgstr "" -#: engine/core/models.py:610 +#: engine/core/models.py:675 msgid "tags that help describe or group this product" msgstr "" -#: engine/core/models.py:615 +#: engine/core/models.py:680 msgid "indicates whether this product is digitally delivered" msgstr "" -#: engine/core/models.py:616 +#: engine/core/models.py:681 msgid "is product digital" msgstr "" -#: engine/core/models.py:623 +#: engine/core/models.py:688 msgid "indicates whether this product should be updated from periodic task" msgstr "" -#: engine/core/models.py:625 +#: engine/core/models.py:690 msgid "is product updatable" msgstr "" -#: engine/core/models.py:631 +#: engine/core/models.py:696 msgid "provide a clear identifying name for the product" msgstr "" -#: engine/core/models.py:632 +#: engine/core/models.py:697 msgid "product name" msgstr "" -#: engine/core/models.py:638 engine/core/models.py:923 +#: engine/core/models.py:703 engine/core/models.py:1012 msgid "add a detailed description of the product" msgstr "" -#: engine/core/models.py:639 +#: engine/core/models.py:704 msgid "product description" msgstr "" -#: engine/core/models.py:646 +#: engine/core/models.py:710 +msgid "optional video file for this product" +msgstr "" + +#: engine/core/models.py:711 +msgid "product video" +msgstr "" + +#: engine/core/models.py:719 msgid "part number for this product" msgstr "" -#: engine/core/models.py:647 +#: engine/core/models.py:720 msgid "part number" msgstr "" -#: engine/core/models.py:666 +#: engine/core/models.py:739 msgid "stock keeping unit for this product" msgstr "" -#: engine/core/models.py:673 +#: engine/core/models.py:746 msgid "whether to export this product to marketplaces" msgstr "" -#: engine/core/models.py:674 +#: engine/core/models.py:747 msgid "Export to Marketplaces" msgstr "" -#: engine/core/models.py:749 +#: engine/core/models.py:835 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 " @@ -1871,83 +1911,83 @@ msgid "" "for dynamic and flexible data structuring." msgstr "" -#: engine/core/models.py:762 +#: engine/core/models.py:848 msgid "group of this attribute" msgstr "" -#: engine/core/models.py:768 +#: engine/core/models.py:854 msgid "string" msgstr "" -#: engine/core/models.py:769 +#: engine/core/models.py:855 msgid "integer" msgstr "" -#: engine/core/models.py:770 +#: engine/core/models.py:856 msgid "float" msgstr "" -#: engine/core/models.py:771 +#: engine/core/models.py:857 msgid "boolean" msgstr "" -#: engine/core/models.py:772 +#: engine/core/models.py:858 msgid "array" msgstr "" -#: engine/core/models.py:773 +#: engine/core/models.py:859 msgid "object" msgstr "" -#: engine/core/models.py:775 +#: engine/core/models.py:861 msgid "type of the attribute's value" msgstr "" -#: engine/core/models.py:776 +#: engine/core/models.py:862 msgid "value type" msgstr "" -#: engine/core/models.py:781 +#: engine/core/models.py:867 msgid "name of this attribute" msgstr "" -#: engine/core/models.py:782 +#: engine/core/models.py:868 msgid "attribute's name" msgstr "" -#: engine/core/models.py:787 +#: engine/core/models.py:873 msgid "is filterable" msgstr "" -#: engine/core/models.py:789 +#: engine/core/models.py:875 msgid "designates whether this attribute can be used for filtering or not" msgstr "" -#: engine/core/models.py:802 engine/core/models.py:820 +#: engine/core/models.py:888 engine/core/models.py:906 #: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "" -#: engine/core/models.py:808 +#: engine/core/models.py:894 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 "" -#: engine/core/models.py:819 +#: engine/core/models.py:905 msgid "attribute of this value" msgstr "" -#: engine/core/models.py:827 +#: engine/core/models.py:913 msgid "the specific product associated with this attribute's value" msgstr "" -#: engine/core/models.py:833 +#: engine/core/models.py:919 msgid "the specific value for this attribute" msgstr "" -#: engine/core/models.py:846 +#: engine/core/models.py:934 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for " @@ -1956,39 +1996,39 @@ msgid "" "with alternative text for the images." msgstr "" -#: engine/core/models.py:857 +#: engine/core/models.py:945 msgid "provide alternative text for the image for accessibility" msgstr "" -#: engine/core/models.py:858 +#: engine/core/models.py:946 msgid "image alt text" msgstr "" -#: engine/core/models.py:861 +#: engine/core/models.py:949 msgid "upload the image file for this product" msgstr "" -#: engine/core/models.py:862 engine/core/models.py:893 +#: engine/core/models.py:950 engine/core/models.py:982 msgid "product image" msgstr "" -#: engine/core/models.py:867 +#: engine/core/models.py:955 msgid "determines the order in which images are displayed" msgstr "" -#: engine/core/models.py:868 +#: engine/core/models.py:956 msgid "display priority" msgstr "" -#: engine/core/models.py:873 +#: engine/core/models.py:961 msgid "the product that this image represents" msgstr "" -#: engine/core/models.py:894 +#: engine/core/models.py:983 msgid "product images" msgstr "" -#: engine/core/models.py:899 +#: engine/core/models.py:988 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1998,39 +2038,39 @@ msgid "" "affected items in the campaign." msgstr "" -#: engine/core/models.py:911 +#: engine/core/models.py:1000 msgid "percentage discount for the selected products" msgstr "" -#: engine/core/models.py:912 +#: engine/core/models.py:1001 msgid "discount percentage" msgstr "" -#: engine/core/models.py:917 +#: engine/core/models.py:1006 msgid "provide a unique name for this promotion" msgstr "" -#: engine/core/models.py:918 +#: engine/core/models.py:1007 msgid "promotion name" msgstr "" -#: engine/core/models.py:924 +#: engine/core/models.py:1013 msgid "promotion description" msgstr "" -#: engine/core/models.py:929 +#: engine/core/models.py:1018 msgid "select which products are included in this promotion" msgstr "" -#: engine/core/models.py:930 +#: engine/core/models.py:1019 msgid "included products" msgstr "" -#: engine/core/models.py:934 +#: engine/core/models.py:1027 msgid "promotion" msgstr "" -#: engine/core/models.py:945 +#: engine/core/models.py:1038 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2038,23 +2078,23 @@ msgid "" "operations for adding and removing multiple products at once." msgstr "" -#: engine/core/models.py:957 +#: engine/core/models.py:1050 msgid "products that the user has marked as wanted" msgstr "" -#: engine/core/models.py:965 +#: engine/core/models.py:1058 msgid "user who owns this wishlist" msgstr "" -#: engine/core/models.py:966 +#: engine/core/models.py:1059 msgid "wishlist owner" msgstr "" -#: engine/core/models.py:974 +#: engine/core/models.py:1067 msgid "wishlist" msgstr "" -#: engine/core/models.py:1016 +#: engine/core/models.py:1109 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2064,19 +2104,19 @@ msgid "" "custom features." msgstr "" -#: engine/core/models.py:1031 +#: engine/core/models.py:1124 msgid "documentary" msgstr "" -#: engine/core/models.py:1032 +#: engine/core/models.py:1125 msgid "documentaries" msgstr "" -#: engine/core/models.py:1042 +#: engine/core/models.py:1135 msgid "unresolved" msgstr "" -#: engine/core/models.py:1047 +#: engine/core/models.py:1140 msgid "" "Represents an address entity that includes location details and associations " "with a user. Provides functionality for geographic and address data storage, " @@ -2088,59 +2128,59 @@ msgid "" "address with a user, facilitating personalized data handling." msgstr "" -#: engine/core/models.py:1062 +#: engine/core/models.py:1155 msgid "address line for the customer" msgstr "" -#: engine/core/models.py:1063 +#: engine/core/models.py:1156 msgid "address line" msgstr "" -#: engine/core/models.py:1065 +#: engine/core/models.py:1158 msgid "street" msgstr "" -#: engine/core/models.py:1066 +#: engine/core/models.py:1159 msgid "district" msgstr "" -#: engine/core/models.py:1067 +#: engine/core/models.py:1160 msgid "city" msgstr "" -#: engine/core/models.py:1068 +#: engine/core/models.py:1161 msgid "region" msgstr "" -#: engine/core/models.py:1069 +#: engine/core/models.py:1162 msgid "postal code" msgstr "" -#: engine/core/models.py:1070 +#: engine/core/models.py:1163 msgid "country" msgstr "" -#: engine/core/models.py:1077 +#: engine/core/models.py:1170 msgid "geolocation point: (longitude, latitude)" msgstr "" -#: engine/core/models.py:1083 +#: engine/core/models.py:1176 msgid "full JSON response from geocoder for this address" msgstr "" -#: engine/core/models.py:1089 +#: engine/core/models.py:1182 msgid "stored JSON response from the geocoding service" msgstr "" -#: engine/core/models.py:1099 +#: engine/core/models.py:1192 msgid "address" msgstr "" -#: engine/core/models.py:1100 +#: engine/core/models.py:1193 msgid "addresses" msgstr "" -#: engine/core/models.py:1112 +#: engine/core/models.py:1205 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2150,86 +2190,86 @@ msgid "" "apply the promo code to an order while ensuring constraints are met." msgstr "" -#: engine/core/models.py:1126 +#: engine/core/models.py:1219 msgid "unique code used by a user to redeem a discount" msgstr "" -#: engine/core/models.py:1127 +#: engine/core/models.py:1220 msgid "promo code identifier" msgstr "" -#: engine/core/models.py:1134 +#: engine/core/models.py:1227 msgid "fixed discount amount applied if percent is not used" msgstr "" -#: engine/core/models.py:1135 +#: engine/core/models.py:1228 msgid "fixed discount amount" msgstr "" -#: engine/core/models.py:1141 +#: engine/core/models.py:1234 msgid "percentage discount applied if fixed amount is not used" msgstr "" -#: engine/core/models.py:1142 +#: engine/core/models.py:1235 msgid "percentage discount" msgstr "" -#: engine/core/models.py:1147 +#: engine/core/models.py:1240 msgid "timestamp when the promocode expires" msgstr "" -#: engine/core/models.py:1148 +#: engine/core/models.py:1241 msgid "end validity time" msgstr "" -#: engine/core/models.py:1153 +#: engine/core/models.py:1246 msgid "timestamp from which this promocode is valid" msgstr "" -#: engine/core/models.py:1154 +#: engine/core/models.py:1247 msgid "start validity time" msgstr "" -#: engine/core/models.py:1159 +#: engine/core/models.py:1252 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" -#: engine/core/models.py:1160 +#: engine/core/models.py:1253 msgid "usage timestamp" msgstr "" -#: engine/core/models.py:1165 +#: engine/core/models.py:1258 msgid "user assigned to this promocode if applicable" msgstr "" -#: engine/core/models.py:1166 +#: engine/core/models.py:1259 msgid "assigned user" msgstr "" -#: engine/core/models.py:1173 +#: engine/core/models.py:1266 msgid "promo code" msgstr "" -#: engine/core/models.py:1174 +#: engine/core/models.py:1267 msgid "promo codes" msgstr "" -#: engine/core/models.py:1190 +#: engine/core/models.py:1283 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "" -#: engine/core/models.py:1212 +#: engine/core/models.py:1305 msgid "promocode already used" msgstr "" -#: engine/core/models.py:1234 +#: engine/core/models.py:1327 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "" -#: engine/core/models.py:1243 +#: engine/core/models.py:1336 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 " @@ -2239,145 +2279,145 @@ msgid "" "supports managing the products in the order lifecycle." msgstr "" -#: engine/core/models.py:1260 +#: engine/core/models.py:1357 msgid "the billing address used for this order" msgstr "" -#: engine/core/models.py:1268 +#: engine/core/models.py:1365 msgid "optional promo code applied to this order" msgstr "" -#: engine/core/models.py:1269 +#: engine/core/models.py:1366 msgid "applied promo code" msgstr "" -#: engine/core/models.py:1277 +#: engine/core/models.py:1374 msgid "the shipping address used for this order" msgstr "" -#: engine/core/models.py:1278 +#: engine/core/models.py:1375 msgid "shipping address" msgstr "" -#: engine/core/models.py:1284 +#: engine/core/models.py:1381 msgid "current status of the order in its lifecycle" msgstr "" -#: engine/core/models.py:1285 +#: engine/core/models.py:1382 msgid "order status" msgstr "" -#: engine/core/models.py:1290 engine/core/models.py:1889 +#: engine/core/models.py:1387 engine/core/models.py:1997 msgid "json structure of notifications to display to users" msgstr "" -#: engine/core/models.py:1296 +#: engine/core/models.py:1393 msgid "json representation of order attributes for this order" msgstr "" -#: engine/core/models.py:1302 +#: engine/core/models.py:1399 msgid "the user who placed the order" msgstr "" -#: engine/core/models.py:1303 +#: engine/core/models.py:1400 msgid "user" msgstr "" -#: engine/core/models.py:1309 +#: engine/core/models.py:1406 msgid "the timestamp when the order was finalized" msgstr "" -#: engine/core/models.py:1310 +#: engine/core/models.py:1407 msgid "buy time" msgstr "" -#: engine/core/models.py:1317 +#: engine/core/models.py:1414 msgid "a human-readable identifier for the order" msgstr "" -#: engine/core/models.py:1318 +#: engine/core/models.py:1415 msgid "human readable id" msgstr "" -#: engine/core/models.py:1324 +#: engine/core/models.py:1421 msgid "order" msgstr "" -#: engine/core/models.py:1371 +#: engine/core/models.py:1468 msgid "a user must have only one pending order at a time" msgstr "" -#: engine/core/models.py:1404 +#: engine/core/models.py:1504 msgid "you cannot add products to an order that is not a pending one" msgstr "" -#: engine/core/models.py:1410 +#: engine/core/models.py:1510 msgid "you cannot add inactive products to order" msgstr "" -#: engine/core/models.py:1432 +#: engine/core/models.py:1533 msgid "you cannot add more products than available in stock" msgstr "" -#: engine/core/models.py:1456 engine/core/models.py:1485 -#: engine/core/models.py:1495 +#: engine/core/models.py:1557 engine/core/models.py:1586 +#: engine/core/models.py:1596 msgid "you cannot remove products from an order that is not a pending one" msgstr "" -#: engine/core/models.py:1480 +#: engine/core/models.py:1581 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "" -#: engine/core/models.py:1519 +#: engine/core/models.py:1620 msgid "promocode does not exist" msgstr "" -#: engine/core/models.py:1534 +#: engine/core/models.py:1635 msgid "you can only buy physical products with shipping address specified" msgstr "" -#: engine/core/models.py:1555 +#: engine/core/models.py:1656 msgid "address does not exist" msgstr "" -#: engine/core/models.py:1577 engine/core/models.py:1656 +#: engine/core/models.py:1678 engine/core/models.py:1757 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" -#: engine/core/models.py:1583 engine/core/models.py:1649 +#: engine/core/models.py:1684 engine/core/models.py:1750 msgid "invalid force value" msgstr "" -#: engine/core/models.py:1589 engine/core/models.py:1660 +#: engine/core/models.py:1690 engine/core/models.py:1761 msgid "you cannot purchase an empty order!" msgstr "" -#: engine/core/models.py:1610 +#: engine/core/models.py:1711 msgid "you cannot buy an order without a user" msgstr "" -#: engine/core/models.py:1624 +#: engine/core/models.py:1725 msgid "a user without a balance cannot buy with balance" msgstr "" -#: engine/core/models.py:1630 +#: engine/core/models.py:1731 msgid "insufficient funds to complete the order" msgstr "" -#: engine/core/models.py:1671 +#: engine/core/models.py:1772 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "" -#: engine/core/models.py:1682 +#: engine/core/models.py:1783 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" -#: engine/core/models.py:1813 +#: engine/core/models.py:1916 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2386,31 +2426,31 @@ msgid "" "fields to effectively model and manage feedback data." msgstr "" -#: engine/core/models.py:1825 +#: engine/core/models.py:1928 msgid "user-provided comments about their experience with the product" msgstr "" -#: engine/core/models.py:1826 +#: engine/core/models.py:1929 msgid "feedback comments" msgstr "" -#: engine/core/models.py:1834 +#: engine/core/models.py:1937 msgid "references the specific product in an order that this feedback is about" msgstr "" -#: engine/core/models.py:1836 +#: engine/core/models.py:1939 msgid "related order product" msgstr "" -#: engine/core/models.py:1841 +#: engine/core/models.py:1944 msgid "user-assigned rating for the product" msgstr "" -#: engine/core/models.py:1842 +#: engine/core/models.py:1945 msgid "product rating" msgstr "" -#: engine/core/models.py:1862 +#: engine/core/models.py:1965 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2423,108 +2463,108 @@ msgid "" "Product models and stores a reference to them." msgstr "" -#: engine/core/models.py:1877 +#: engine/core/models.py:1985 msgid "the price paid by the customer for this product at purchase time" msgstr "" -#: engine/core/models.py:1878 +#: engine/core/models.py:1986 msgid "purchase price at order time" msgstr "" -#: engine/core/models.py:1883 +#: engine/core/models.py:1991 msgid "internal comments for admins about this ordered product" msgstr "" -#: engine/core/models.py:1884 +#: engine/core/models.py:1992 msgid "internal comments" msgstr "" -#: engine/core/models.py:1890 +#: engine/core/models.py:1998 msgid "user notifications" msgstr "" -#: engine/core/models.py:1895 +#: engine/core/models.py:2003 msgid "json representation of this item's attributes" msgstr "" -#: engine/core/models.py:1896 +#: engine/core/models.py:2004 msgid "ordered product attributes" msgstr "" -#: engine/core/models.py:1901 +#: engine/core/models.py:2009 msgid "reference to the parent order that contains this product" msgstr "" -#: engine/core/models.py:1902 +#: engine/core/models.py:2010 msgid "parent order" msgstr "" -#: engine/core/models.py:1911 +#: engine/core/models.py:2019 msgid "the specific product associated with this order line" msgstr "" -#: engine/core/models.py:1918 +#: engine/core/models.py:2026 msgid "quantity of this specific product in the order" msgstr "" -#: engine/core/models.py:1919 +#: engine/core/models.py:2027 msgid "product quantity" msgstr "" -#: engine/core/models.py:1926 +#: engine/core/models.py:2034 msgid "current status of this product in the order" msgstr "" -#: engine/core/models.py:1927 +#: engine/core/models.py:2035 msgid "product line status" msgstr "" -#: engine/core/models.py:1998 +#: engine/core/models.py:2106 msgid "order product must have an order" msgstr "" -#: engine/core/models.py:2000 +#: engine/core/models.py:2108 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "" -#: engine/core/models.py:2017 +#: engine/core/models.py:2125 msgid "you cannot feedback an order which is not received" msgstr "" -#: engine/core/models.py:2026 +#: engine/core/models.py:2132 engine/core/models.py:2227 msgid "name" msgstr "" -#: engine/core/models.py:2028 +#: engine/core/models.py:2134 msgid "URL of the integration" msgstr "" -#: engine/core/models.py:2031 +#: engine/core/models.py:2137 msgid "authentication credentials" msgstr "" -#: engine/core/models.py:2054 +#: engine/core/models.py:2160 msgid "you can only have one default CRM provider" msgstr "" -#: engine/core/models.py:2064 +#: engine/core/models.py:2170 msgid "CRM" msgstr "" -#: engine/core/models.py:2065 +#: engine/core/models.py:2171 msgid "CRMs" msgstr "" -#: engine/core/models.py:2081 +#: engine/core/models.py:2187 msgid "order CRM link" msgstr "" -#: engine/core/models.py:2082 +#: engine/core/models.py:2188 msgid "orders CRM links" msgstr "" -#: engine/core/models.py:2087 +#: engine/core/models.py:2193 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2534,20 +2574,54 @@ msgid "" "the asset when the associated order is in a completed status." msgstr "" -#: engine/core/models.py:2103 +#: engine/core/models.py:2209 msgid "download" msgstr "" -#: engine/core/models.py:2104 +#: engine/core/models.py:2210 msgid "downloads" msgstr "" +#: engine/core/models.py:2228 +msgid "descriptive name for the image" +msgstr "" + +#: engine/core/models.py:2233 +msgid "image file pasted in the markdown editor" +msgstr "" + +#: engine/core/models.py:2239 +msgid "alt text" +msgstr "" + +#: engine/core/models.py:2240 +msgid "alternative text for accessibility" +msgstr "" + +#: engine/core/models.py:2244 +msgid "pasted image" +msgstr "" + +#: engine/core/models.py:2245 +msgid "pasted images" +msgstr "" + #: engine/core/serializers/utility.py:91 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" #: engine/core/sitemaps.py:25 +#: engine/core/templates/admin_doc/bookmarklets.html:8 +#: engine/core/templates/admin_doc/index.html:8 +#: engine/core/templates/admin_doc/missing_docutils.html:8 +#: engine/core/templates/admin_doc/model_detail.html:8 +#: engine/core/templates/admin_doc/model_index.html:8 +#: engine/core/templates/admin_doc/template_detail.html:8 +#: engine/core/templates/admin_doc/template_filter_index.html:8 +#: engine/core/templates/admin_doc/template_tag_index.html:8 +#: engine/core/templates/admin_doc/view_detail.html:8 +#: engine/core/templates/admin_doc/view_index.html:8 msgid "Home" msgstr "" @@ -2600,43 +2674,32 @@ msgstr "" msgid "Dashboard" msgstr "" -#: engine/core/templates/admin/dashboard/_income_overview.html:7 +#: engine/core/templates/admin/dashboard/_income_overview.html:6 msgid "Income overview" msgstr "" -#: engine/core/templates/admin/dashboard/_income_overview.html:31 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Net" +#: engine/core/templates/admin/dashboard/_income_overview.html:16 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" msgstr "" -#: engine/core/templates/admin/dashboard/_income_overview.html:37 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Taxes" -msgstr "" - -#: engine/core/templates/admin/dashboard/_income_overview.html:43 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 +#: engine/core/templates/admin/dashboard/_income_overview.html:21 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 msgid "Returns" msgstr "" -#: engine/core/templates/admin/dashboard/_income_overview.html:48 -msgid "Gross (pie total)" -msgstr "" - -#: engine/core/templates/admin/dashboard/_income_overview.html:72 -msgid "No data" -msgstr "" - +#: engine/core/templates/admin/dashboard/_income_overview.html:26 #: engine/core/templates/admin/dashboard/_kpis.html:6 msgid "GMV" msgstr "" -#: engine/core/templates/admin/dashboard/_kpis.html:34 -msgid "AOV" +#: engine/core/templates/admin/dashboard/_income_overview.html:50 +msgid "No data" msgstr "" -#: engine/core/templates/admin/dashboard/_kpis.html:48 -msgid "Net revenue" +#: engine/core/templates/admin/dashboard/_kpis.html:34 +msgid "AOV" msgstr "" #: engine/core/templates/admin/dashboard/_kpis.html:62 @@ -2651,7 +2714,7 @@ msgstr "" msgid "Low stock" msgstr "" -#: engine/core/templates/admin/dashboard/_low_stock.html:29 +#: engine/core/templates/admin/dashboard/_low_stock.html:33 msgid "No low stock items." msgstr "" @@ -2708,6 +2771,274 @@ msgstr "" msgid "Django site admin" msgstr "" +#: engine/core/templates/admin_doc/bookmarklets.html:4 +#: engine/core/templates/admin_doc/bookmarklets.html:17 +msgid "Documentation bookmarklets" +msgstr "" + +#: engine/core/templates/admin_doc/bookmarklets.html:10 +#: engine/core/templates/admin_doc/index.html:4 +#: engine/core/templates/admin_doc/index.html:10 +#: engine/core/templates/admin_doc/index.html:15 +#: engine/core/templates/admin_doc/missing_docutils.html:10 +#: engine/core/templates/admin_doc/missing_docutils.html:19 +#: engine/core/templates/admin_doc/model_detail.html:10 +#: engine/core/templates/admin_doc/model_index.html:10 +#: engine/core/templates/admin_doc/template_detail.html:10 +#: engine/core/templates/admin_doc/template_filter_index.html:10 +#: engine/core/templates/admin_doc/template_tag_index.html:10 +#: engine/core/templates/admin_doc/view_detail.html:10 +#: engine/core/templates/admin_doc/view_index.html:10 +msgid "Documentation" +msgstr "" + +#: engine/core/templates/admin_doc/bookmarklets.html:12 +#: engine/core/templates/admin_doc/index.html:53 +msgid "Bookmarklets" +msgstr "" + +#: engine/core/templates/admin_doc/bookmarklets.html:19 +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +#: engine/core/templates/admin_doc/bookmarklets.html:29 +msgid "Documentation for this page" +msgstr "" + +#: engine/core/templates/admin_doc/bookmarklets.html:31 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" + +#: engine/core/templates/admin_doc/index.html:21 +#: engine/core/templates/admin_doc/model_detail.html:12 +#: engine/core/templates/admin_doc/model_index.html:4 +#: engine/core/templates/admin_doc/model_index.html:12 +msgid "Models" +msgstr "" + +#: engine/core/templates/admin_doc/index.html:23 +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +#: engine/core/templates/admin_doc/index.html:29 +#: engine/core/templates/admin_doc/view_detail.html:12 +#: engine/core/templates/admin_doc/view_index.html:4 +#: engine/core/templates/admin_doc/view_index.html:12 +msgid "Views" +msgstr "" + +#: engine/core/templates/admin_doc/index.html:31 +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +#: engine/core/templates/admin_doc/index.html:39 +msgid "List of all the template tags and their functions." +msgstr "" + +#: engine/core/templates/admin_doc/index.html:45 +#: engine/core/templates/admin_doc/template_filter_index.html:12 +msgid "Filters" +msgstr "" + +#: engine/core/templates/admin_doc/index.html:47 +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +#: engine/core/templates/admin_doc/index.html:55 +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +#: engine/core/templates/admin_doc/missing_docutils.html:4 +msgid "Please install docutils" +msgstr "" + +#: engine/core/templates/admin_doc/missing_docutils.html:20 +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#: engine/core/templates/admin_doc/missing_docutils.html:21 +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#: engine/core/templates/admin_doc/model_detail.html:4 +#, python-format +msgid "Model: %(name)s" +msgstr "" + +#: engine/core/templates/admin_doc/model_detail.html:29 +msgid "Fields" +msgstr "" + +#: engine/core/templates/admin_doc/model_detail.html:36 +msgid "Field" +msgstr "" + +#: engine/core/templates/admin_doc/model_detail.html:37 +msgid "Type" +msgstr "" + +#: engine/core/templates/admin_doc/model_detail.html:38 +#: engine/core/templates/admin_doc/model_detail.html:70 +msgid "Description" +msgstr "" + +#: engine/core/templates/admin_doc/model_detail.html:61 +msgid "Methods with arguments" +msgstr "" + +#: engine/core/templates/admin_doc/model_detail.html:68 +msgid "Method" +msgstr "" + +#: engine/core/templates/admin_doc/model_detail.html:69 +msgid "Arguments" +msgstr "" + +#: engine/core/templates/admin_doc/model_detail.html:89 +msgid "Back to Model documentation" +msgstr "" + +#: engine/core/templates/admin_doc/model_index.html:17 +msgid "Model documentation" +msgstr "" + +#: engine/core/templates/admin_doc/model_index.html:44 +msgid "Model groups" +msgstr "" + +#: engine/core/templates/admin_doc/template_detail.html:4 +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#: engine/core/templates/admin_doc/template_detail.html:12 +msgid "Templates" +msgstr "" + +#: engine/core/templates/admin_doc/template_detail.html:17 +#, python-format +msgid "" +"Template: %(name)s" +msgstr "" + +#: engine/core/templates/admin_doc/template_detail.html:21 +#, python-format +msgid "Search path for template %(name)s:" +msgstr "" + +#: engine/core/templates/admin_doc/template_detail.html:29 +msgid "(does not exist)" +msgstr "" + +#: engine/core/templates/admin_doc/template_detail.html:40 +msgid "Back to Documentation" +msgstr "" + +#: engine/core/templates/admin_doc/template_filter_index.html:4 +msgid "Template filters" +msgstr "" + +#: engine/core/templates/admin_doc/template_filter_index.html:17 +msgid "Template filter documentation" +msgstr "" + +#: engine/core/templates/admin_doc/template_filter_index.html:26 +#: engine/core/templates/admin_doc/template_filter_index.html:52 +msgid "Built-in filters" +msgstr "" + +#: engine/core/templates/admin_doc/template_filter_index.html:29 +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before using " +"the filter." +msgstr "" + +#: engine/core/templates/admin_doc/template_tag_index.html:4 +msgid "Template tags" +msgstr "" + +#: engine/core/templates/admin_doc/template_tag_index.html:17 +msgid "Template tag documentation" +msgstr "" + +#: engine/core/templates/admin_doc/template_tag_index.html:26 +#: engine/core/templates/admin_doc/template_tag_index.html:52 +msgid "Built-in tags" +msgstr "" + +#: engine/core/templates/admin_doc/template_tag_index.html:29 +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using the tag." +msgstr "" + +#: engine/core/templates/admin_doc/view_detail.html:4 +#, python-format +msgid "View: %(name)s" +msgstr "" + +#: engine/core/templates/admin_doc/view_detail.html:28 +msgid "Context:" +msgstr "" + +#: engine/core/templates/admin_doc/view_detail.html:33 +msgid "Templates:" +msgstr "" + +#: engine/core/templates/admin_doc/view_detail.html:41 +msgid "Back to View documentation" +msgstr "" + +#: engine/core/templates/admin_doc/view_index.html:17 +msgid "View documentation" +msgstr "" + +#: engine/core/templates/admin_doc/view_index.html:28 +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +#: engine/core/templates/admin_doc/view_index.html:30 +msgid "Views by empty namespace" +msgstr "" + +#: engine/core/templates/admin_doc/view_index.html:40 +#, python-format +msgid "" +"View function: %(full_name)s. Name: %(url_name)s." +msgstr "" + +#: engine/core/templates/admin_doc/view_index.html:54 +msgid "Jump to namespace" +msgstr "" + +#: engine/core/templates/admin_doc/view_index.html:59 +msgid "Empty namespace" +msgstr "" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -2800,7 +3131,7 @@ msgid "" msgstr "" #: engine/core/templates/digital_order_delivered_email.html:137 -#: engine/core/templates/json_table_widget.html:6 +#: engine/core/templates/json_table_widget.html:26 msgid "value" msgstr "" @@ -2818,11 +3149,23 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "" -#: engine/core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:7 +msgid "Key" +msgstr "" + +#: engine/core/templates/json_table_widget.html:8 +msgid "Value" +msgstr "" + +#: engine/core/templates/json_table_widget.html:19 msgid "key" msgstr "" -#: engine/core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:32 +msgid "Delete row" +msgstr "" + +#: engine/core/templates/json_table_widget.html:44 msgid "Add Row" msgstr "" @@ -2904,58 +3247,67 @@ msgstr "" msgid "NOMINATIM_URL must be configured." msgstr "" -#: engine/core/validators.py:23 +#: engine/core/validators.py:18 +msgid "could not determine file type" +msgstr "" + +#: engine/core/validators.py:24 +#, python-brace-format +msgid "unsupported video format. supported formats: {supported}" +msgstr "" + +#: engine/core/validators.py:45 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" -#: engine/core/views.py:104 +#: engine/core/views.py:108 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." msgstr "" -#: engine/core/views.py:119 +#: engine/core/views.py:123 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " "Content-Type header for XML." msgstr "" -#: engine/core/views.py:155 +#: engine/core/views.py:174 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" -#: engine/core/views.py:182 +#: engine/core/views.py:201 msgid "Returns the parameters of the website as a JSON object." msgstr "" -#: engine/core/views.py:198 +#: engine/core/views.py:217 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." msgstr "" -#: engine/core/views.py:220 +#: engine/core/views.py:239 msgid "Handles `contact us` form submissions." msgstr "" -#: engine/core/views.py:236 +#: engine/core/views.py:255 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." msgstr "" -#: engine/core/views.py:273 +#: engine/core/views.py:292 msgid "Handles global search queries." msgstr "" -#: engine/core/views.py:289 +#: engine/core/views.py:308 msgid "Handles the logic of buying as a business without registration." msgstr "" -#: engine/core/views.py:337 +#: engine/core/views.py:356 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the " @@ -2963,31 +3315,31 @@ msgid "" "error is raised to indicate the resource is unavailable." msgstr "" -#: engine/core/views.py:348 +#: engine/core/views.py:367 msgid "order_product_uuid is required" msgstr "" -#: engine/core/views.py:355 +#: engine/core/views.py:374 msgid "order product does not exist" msgstr "" -#: engine/core/views.py:358 +#: engine/core/views.py:377 msgid "you can only download the digital asset once" msgstr "" -#: engine/core/views.py:362 +#: engine/core/views.py:381 msgid "the order must be paid before downloading the digital asset" msgstr "" -#: engine/core/views.py:369 +#: engine/core/views.py:388 msgid "the order product does not have a product" msgstr "" -#: engine/core/views.py:412 +#: engine/core/views.py:431 msgid "favicon not found" msgstr "" -#: engine/core/views.py:418 +#: engine/core/views.py:437 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static " @@ -2995,23 +3347,27 @@ msgid "" "error is raised to indicate the resource is unavailable." msgstr "" -#: engine/core/views.py:432 +#: engine/core/views.py:451 msgid "" "Redirects the request to the admin index page. The function handles incoming " "HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." msgstr "" -#: engine/core/views.py:445 +#: engine/core/views.py:464 msgid "Returns current version of the Schon. " msgstr "" -#: engine/core/views.py:674 engine/core/views.py:689 +#: engine/core/views.py:475 +msgid "no image file provided" +msgstr "" + +#: engine/core/views.py:710 engine/core/views.py:725 #, python-format msgid "Revenue & Orders (last %(days)d)" msgstr "" -#: engine/core/views.py:870 +#: engine/core/views.py:911 msgid "Returns custom variables for Dashboard. " msgstr "" @@ -3068,7 +3424,7 @@ msgid "" "endpoints for Brand objects." msgstr "" -#: engine/core/viewsets.py:458 +#: engine/core/viewsets.py:460 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3079,7 +3435,15 @@ msgid "" "product." msgstr "" -#: engine/core/viewsets.py:605 +#: engine/core/viewsets.py:541 +msgid "identificator_type and identificators are required" +msgstr "" + +#: engine/core/viewsets.py:554 +msgid "identificator_type must be one of: uuid, slug, sku" +msgstr "" + +#: engine/core/viewsets.py:635 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3088,7 +3452,7 @@ msgid "" "Vendor-related resources through the Django REST framework." msgstr "" -#: engine/core/viewsets.py:625 +#: engine/core/viewsets.py:655 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3098,7 +3462,7 @@ msgid "" "use of Django's filtering system for querying data." msgstr "" -#: engine/core/viewsets.py:652 +#: engine/core/viewsets.py:682 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3109,7 +3473,7 @@ msgid "" "enforces permissions accordingly while interacting with order data." msgstr "" -#: engine/core/viewsets.py:914 +#: engine/core/viewsets.py:944 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3118,25 +3482,25 @@ msgid "" "feedback on OrderProduct instances" msgstr "" -#: engine/core/viewsets.py:974 +#: engine/core/viewsets.py:1004 msgid "Manages operations related to Product images in the application. " msgstr "" -#: engine/core/viewsets.py:988 +#: engine/core/viewsets.py:1018 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "" -#: engine/core/viewsets.py:1019 +#: engine/core/viewsets.py:1049 msgid "Represents a view set for managing promotions. " msgstr "" -#: engine/core/viewsets.py:1032 +#: engine/core/viewsets.py:1062 msgid "Handles operations related to Stock data in the system." msgstr "" -#: engine/core/viewsets.py:1046 +#: engine/core/viewsets.py:1076 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3147,7 +3511,7 @@ msgid "" "are granted." msgstr "" -#: engine/core/viewsets.py:1183 +#: engine/core/viewsets.py:1213 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3156,12 +3520,12 @@ msgid "" "on the request context." msgstr "" -#: engine/core/viewsets.py:1254 +#: engine/core/viewsets.py:1275 #, python-brace-format msgid "Geocoding error: {e}" msgstr "" -#: engine/core/viewsets.py:1262 +#: engine/core/viewsets.py:1283 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/hr_HR/LC_MESSAGES/django.po b/engine/core/locale/hr_HR/LC_MESSAGES/django.po index 454cae48..40c64198 100644 --- a/engine/core/locale/hr_HR/LC_MESSAGES/django.po +++ b/engine/core/locale/hr_HR/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 01:44+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -49,113 +49,133 @@ msgstr "" msgid "when the object was last modified" msgstr "" -#: engine/core/admin.py:94 +#: engine/core/admin.py:98 msgid "translations" msgstr "" -#: engine/core/admin.py:102 +#: engine/core/admin.py:106 msgid "general" msgstr "" -#: engine/core/admin.py:106 +#: engine/core/admin.py:110 msgid "relations" msgstr "" -#: engine/core/admin.py:111 +#: engine/core/admin.py:115 msgid "additional info" msgstr "" -#: engine/core/admin.py:133 +#: engine/core/admin.py:137 msgid "metadata" msgstr "" -#: engine/core/admin.py:141 +#: engine/core/admin.py:145 msgid "timestamps" msgstr "" -#: engine/core/admin.py:158 +#: engine/core/admin.py:162 #, python-format msgid "Activate selected %(verbose_name_plural)s" msgstr "" -#: engine/core/admin.py:166 +#: engine/core/admin.py:170 msgid "selected items have been activated." msgstr "" -#: engine/core/admin.py:174 +#: engine/core/admin.py:178 #, python-format msgid "Deactivate selected %(verbose_name_plural)s" msgstr "" -#: engine/core/admin.py:184 +#: engine/core/admin.py:188 msgid "selected items have been deactivated." msgstr "" -#: engine/core/admin.py:196 engine/core/graphene/object_types.py:653 -#: engine/core/graphene/object_types.py:660 engine/core/models.py:832 -#: engine/core/models.py:840 +#: engine/core/admin.py:200 engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:673 engine/core/models.py:918 +#: engine/core/models.py:928 msgid "attribute value" msgstr "" -#: engine/core/admin.py:197 engine/core/graphene/object_types.py:77 -#: engine/core/models.py:841 +#: engine/core/admin.py:201 engine/core/graphene/object_types.py:81 +#: engine/core/models.py:929 msgid "attribute values" msgstr "" -#: engine/core/admin.py:208 +#: engine/core/admin.py:212 engine/core/models.py:2232 msgid "image" msgstr "" -#: engine/core/admin.py:209 engine/core/graphene/object_types.py:530 +#: engine/core/admin.py:213 engine/core/graphene/object_types.py:535 msgid "images" msgstr "" -#: engine/core/admin.py:220 engine/core/models.py:576 +#: engine/core/admin.py:224 engine/core/models.py:635 msgid "stock" msgstr "" -#: engine/core/admin.py:221 engine/core/graphene/object_types.py:713 +#: engine/core/admin.py:225 engine/core/graphene/object_types.py:735 msgid "stocks" msgstr "" -#: engine/core/admin.py:232 engine/core/models.py:1938 +#: engine/core/admin.py:236 engine/core/models.py:2046 msgid "order product" msgstr "" -#: engine/core/admin.py:233 engine/core/graphene/object_types.py:441 -#: engine/core/models.py:1939 +#: engine/core/admin.py:237 engine/core/graphene/object_types.py:446 +#: engine/core/models.py:2047 msgid "order products" msgstr "" -#: engine/core/admin.py:251 engine/core/admin.py:252 +#: engine/core/admin.py:255 engine/core/admin.py:256 msgid "children" msgstr "" -#: engine/core/admin.py:528 +#: engine/core/admin.py:545 +msgid "video preview" +msgstr "" + +#: engine/core/admin.py:551 msgid "has images" msgstr "" -#: engine/core/admin.py:531 +#: engine/core/admin.py:554 #, python-format msgid "Export selected %(verbose_name_plural)s to marketplaces' feeds" msgstr "" -#: engine/core/admin.py:542 +#: engine/core/admin.py:565 #, python-format msgid "selected %(verbose_name_plural)s have been marked for export." msgstr "" -#: engine/core/admin.py:553 +#: engine/core/admin.py:576 #, python-format msgid "Ban selected %(verbose_name_plural)s from marketplaces' feeds" msgstr "" -#: engine/core/admin.py:564 +#: engine/core/admin.py:587 #, python-format msgid "selected %(verbose_name_plural)s have been banned from export." msgstr "" -#: engine/core/admin.py:1116 +#: engine/core/admin.py:1030 +msgid "Preview" +msgstr "" + +#: engine/core/admin.py:1031 +msgid "Metadata" +msgstr "" + +#: engine/core/admin.py:1034 +msgid "preview" +msgstr "" + +#: engine/core/admin.py:1043 +msgid "image preview" +msgstr "" + +#: engine/core/admin.py:1166 msgid "Config" msgstr "" @@ -218,7 +238,7 @@ msgid "" "parameter both." msgstr "" -#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:36 +#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "" @@ -240,7 +260,7 @@ msgstr "" msgid "send a message to the support team" msgstr "" -#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:59 msgid "request a CORSed URL" msgstr "" @@ -366,11 +386,11 @@ msgstr "" msgid "rewrite some fields of an existing category saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757 -#: engine/core/docs/drf/viewsets.py:1046 -#: engine/core/graphene/object_types.py:119 -#: engine/core/graphene/object_types.py:239 -#: engine/core/graphene/object_types.py:540 +#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:781 +#: engine/core/docs/drf/viewsets.py:1070 +#: engine/core/graphene/object_types.py:123 +#: engine/core/graphene/object_types.py:247 +#: engine/core/graphene/object_types.py:546 msgid "SEO Meta snapshot" msgstr "" @@ -633,7 +653,7 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683 #: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725 -#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763 +#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:787 msgid "Product UUID or slug" msgstr "" @@ -658,267 +678,277 @@ msgstr "" msgid "lists all permitted feedbacks for a product" msgstr "" -#: engine/core/docs/drf/viewsets.py:758 +#: engine/core/docs/drf/viewsets.py:757 +msgid "retrieve exact products by identifier" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:759 +msgid "" +"retrieve a list of products by identifier type (uuid, slug, or sku). Send a " +"POST request with `identificator_type` and `identificators` (list of values)." +msgstr "" + +#: engine/core/docs/drf/viewsets.py:782 msgid "returns a snapshot of the product's SEO meta data" msgstr "" -#: engine/core/docs/drf/viewsets.py:779 +#: engine/core/docs/drf/viewsets.py:803 msgid "list all addresses" msgstr "" -#: engine/core/docs/drf/viewsets.py:789 +#: engine/core/docs/drf/viewsets.py:813 msgid "retrieve a single address" msgstr "" -#: engine/core/docs/drf/viewsets.py:799 +#: engine/core/docs/drf/viewsets.py:823 msgid "create a new address" msgstr "" -#: engine/core/docs/drf/viewsets.py:810 +#: engine/core/docs/drf/viewsets.py:834 msgid "delete an address" msgstr "" -#: engine/core/docs/drf/viewsets.py:820 +#: engine/core/docs/drf/viewsets.py:844 msgid "update an entire address" msgstr "" -#: engine/core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:855 msgid "partially update an address" msgstr "" -#: engine/core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:866 msgid "autocomplete address suggestions" msgstr "" -#: engine/core/docs/drf/viewsets.py:848 +#: engine/core/docs/drf/viewsets.py:872 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" -#: engine/core/docs/drf/viewsets.py:855 +#: engine/core/docs/drf/viewsets.py:879 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "" -#: engine/core/docs/drf/viewsets.py:871 +#: engine/core/docs/drf/viewsets.py:895 msgid "list all feedbacks (simple view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:881 +#: engine/core/docs/drf/viewsets.py:905 msgid "retrieve a single feedback (detailed view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:888 +#: engine/core/docs/drf/viewsets.py:912 msgid "create a feedback" msgstr "" -#: engine/core/docs/drf/viewsets.py:895 +#: engine/core/docs/drf/viewsets.py:919 msgid "delete a feedback" msgstr "" -#: engine/core/docs/drf/viewsets.py:902 +#: engine/core/docs/drf/viewsets.py:926 msgid "rewrite an existing feedback saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:909 +#: engine/core/docs/drf/viewsets.py:933 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:919 +#: engine/core/docs/drf/viewsets.py:943 msgid "list all order–product relations (simple view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:929 +#: engine/core/docs/drf/viewsets.py:953 msgid "retrieve a single order–product relation (detailed view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:939 +#: engine/core/docs/drf/viewsets.py:963 msgid "create a new order–product relation" msgstr "" -#: engine/core/docs/drf/viewsets.py:949 +#: engine/core/docs/drf/viewsets.py:973 msgid "replace an existing order–product relation" msgstr "" -#: engine/core/docs/drf/viewsets.py:959 +#: engine/core/docs/drf/viewsets.py:983 msgid "partially update an existing order–product relation" msgstr "" -#: engine/core/docs/drf/viewsets.py:969 +#: engine/core/docs/drf/viewsets.py:993 msgid "delete an order–product relation" msgstr "" -#: engine/core/docs/drf/viewsets.py:979 +#: engine/core/docs/drf/viewsets.py:1003 msgid "add or remove feedback on an order–product relation" msgstr "" -#: engine/core/docs/drf/viewsets.py:996 +#: engine/core/docs/drf/viewsets.py:1020 msgid "list all brands (simple view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1003 +#: engine/core/docs/drf/viewsets.py:1027 msgid "retrieve a single brand (detailed view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051 +#: engine/core/docs/drf/viewsets.py:1032 engine/core/docs/drf/viewsets.py:1075 msgid "Brand UUID or slug" msgstr "" -#: engine/core/docs/drf/viewsets.py:1018 +#: engine/core/docs/drf/viewsets.py:1042 msgid "create a brand" msgstr "" -#: engine/core/docs/drf/viewsets.py:1025 +#: engine/core/docs/drf/viewsets.py:1049 msgid "delete a brand" msgstr "" -#: engine/core/docs/drf/viewsets.py:1032 +#: engine/core/docs/drf/viewsets.py:1056 msgid "rewrite an existing brand saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1039 +#: engine/core/docs/drf/viewsets.py:1063 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1064 +#: engine/core/docs/drf/viewsets.py:1088 msgid "list all vendors (simple view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1074 +#: engine/core/docs/drf/viewsets.py:1098 msgid "retrieve a single vendor (detailed view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1081 +#: engine/core/docs/drf/viewsets.py:1105 msgid "create a vendor" msgstr "" -#: engine/core/docs/drf/viewsets.py:1088 +#: engine/core/docs/drf/viewsets.py:1112 msgid "delete a vendor" msgstr "" -#: engine/core/docs/drf/viewsets.py:1095 +#: engine/core/docs/drf/viewsets.py:1119 msgid "rewrite an existing vendor saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1102 +#: engine/core/docs/drf/viewsets.py:1126 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1112 +#: engine/core/docs/drf/viewsets.py:1136 msgid "list all product images (simple view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1122 +#: engine/core/docs/drf/viewsets.py:1146 msgid "retrieve a single product image (detailed view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1129 +#: engine/core/docs/drf/viewsets.py:1153 msgid "create a product image" msgstr "" -#: engine/core/docs/drf/viewsets.py:1139 +#: engine/core/docs/drf/viewsets.py:1163 msgid "delete a product image" msgstr "" -#: engine/core/docs/drf/viewsets.py:1146 +#: engine/core/docs/drf/viewsets.py:1170 msgid "rewrite an existing product image saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1154 +#: engine/core/docs/drf/viewsets.py:1178 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1165 +#: engine/core/docs/drf/viewsets.py:1189 msgid "list all promo codes (simple view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1175 +#: engine/core/docs/drf/viewsets.py:1199 msgid "retrieve a single promo code (detailed view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1182 +#: engine/core/docs/drf/viewsets.py:1206 msgid "create a promo code" msgstr "" -#: engine/core/docs/drf/viewsets.py:1189 +#: engine/core/docs/drf/viewsets.py:1213 msgid "delete a promo code" msgstr "" -#: engine/core/docs/drf/viewsets.py:1196 +#: engine/core/docs/drf/viewsets.py:1220 msgid "rewrite an existing promo code saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1203 +#: engine/core/docs/drf/viewsets.py:1227 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1213 +#: engine/core/docs/drf/viewsets.py:1237 msgid "list all promotions (simple view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1223 +#: engine/core/docs/drf/viewsets.py:1247 msgid "retrieve a single promotion (detailed view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1230 +#: engine/core/docs/drf/viewsets.py:1254 msgid "create a promotion" msgstr "" -#: engine/core/docs/drf/viewsets.py:1237 +#: engine/core/docs/drf/viewsets.py:1261 msgid "delete a promotion" msgstr "" -#: engine/core/docs/drf/viewsets.py:1244 +#: engine/core/docs/drf/viewsets.py:1268 msgid "rewrite an existing promotion saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1251 +#: engine/core/docs/drf/viewsets.py:1275 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1261 +#: engine/core/docs/drf/viewsets.py:1285 msgid "list all stocks (simple view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1268 +#: engine/core/docs/drf/viewsets.py:1292 msgid "retrieve a single stock (detailed view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1275 +#: engine/core/docs/drf/viewsets.py:1299 msgid "create a stock record" msgstr "" -#: engine/core/docs/drf/viewsets.py:1282 +#: engine/core/docs/drf/viewsets.py:1306 msgid "delete a stock record" msgstr "" -#: engine/core/docs/drf/viewsets.py:1289 +#: engine/core/docs/drf/viewsets.py:1313 msgid "rewrite an existing stock record saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1297 +#: engine/core/docs/drf/viewsets.py:1321 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1308 +#: engine/core/docs/drf/viewsets.py:1332 msgid "list all product tags (simple view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1318 +#: engine/core/docs/drf/viewsets.py:1342 msgid "retrieve a single product tag (detailed view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1325 +#: engine/core/docs/drf/viewsets.py:1349 msgid "create a product tag" msgstr "" -#: engine/core/docs/drf/viewsets.py:1335 +#: engine/core/docs/drf/viewsets.py:1359 msgid "delete a product tag" msgstr "" -#: engine/core/docs/drf/viewsets.py:1342 +#: engine/core/docs/drf/viewsets.py:1366 msgid "rewrite an existing product tag saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1350 +#: engine/core/docs/drf/viewsets.py:1374 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "" @@ -927,419 +957,425 @@ msgstr "" msgid "no search term provided." msgstr "" -#: engine/core/filters.py:78 engine/core/filters.py:484 -#: engine/core/filters.py:625 +#: engine/core/filters.py:79 engine/core/filters.py:485 +#: engine/core/filters.py:626 msgid "Search" msgstr "" -#: engine/core/filters.py:79 engine/core/filters.py:663 -#: engine/core/filters.py:692 +#: engine/core/filters.py:80 engine/core/filters.py:664 +#: engine/core/filters.py:693 msgid "UUID" msgstr "" -#: engine/core/filters.py:80 engine/core/filters.py:487 -#: engine/core/filters.py:627 +#: engine/core/filters.py:81 engine/core/filters.py:488 +#: engine/core/filters.py:628 msgid "Name" msgstr "" -#: engine/core/filters.py:82 engine/core/filters.py:630 +#: engine/core/filters.py:83 engine/core/filters.py:631 msgid "Categories" msgstr "" -#: engine/core/filters.py:86 +#: engine/core/filters.py:87 msgid "Categories Slugs" msgstr "" -#: engine/core/filters.py:88 engine/core/filters.py:495 +#: engine/core/filters.py:89 engine/core/filters.py:496 +#: engine/core/templates/admin_doc/index.html:37 +#: engine/core/templates/admin_doc/template_tag_index.html:12 msgid "Tags" msgstr "" -#: engine/core/filters.py:90 +#: engine/core/filters.py:91 msgid "Min Price" msgstr "" -#: engine/core/filters.py:93 +#: engine/core/filters.py:94 msgid "Max Price" msgstr "" -#: engine/core/filters.py:95 +#: engine/core/filters.py:96 msgid "Is Active" msgstr "" -#: engine/core/filters.py:96 +#: engine/core/filters.py:97 msgid "Brand" msgstr "" -#: engine/core/filters.py:97 +#: engine/core/filters.py:98 msgid "Attributes" msgstr "" -#: engine/core/filters.py:99 +#: engine/core/filters.py:100 msgid "Quantity" msgstr "" -#: engine/core/filters.py:101 engine/core/filters.py:489 -#: engine/core/filters.py:628 engine/core/models.py:316 -#: engine/core/models.py:497 engine/core/models.py:663 +#: engine/core/filters.py:102 engine/core/filters.py:490 +#: engine/core/filters.py:629 engine/core/models.py:339 +#: engine/core/models.py:546 engine/core/models.py:736 msgid "Slug" msgstr "" -#: engine/core/filters.py:102 +#: engine/core/filters.py:103 msgid "Is Digital" msgstr "" -#: engine/core/filters.py:104 +#: engine/core/filters.py:105 msgid "Include sub-categories" msgstr "" -#: engine/core/filters.py:108 +#: engine/core/filters.py:109 msgid "Include personal ordered" msgstr "" -#: engine/core/filters.py:110 engine/core/models.py:667 +#: engine/core/filters.py:111 engine/core/models.py:740 msgid "SKU" msgstr "" -#: engine/core/filters.py:212 +#: engine/core/filters.py:213 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" -#: engine/core/filters.py:398 +#: engine/core/filters.py:399 msgid "Search (ID, product name or part number)" msgstr "" -#: engine/core/filters.py:402 +#: engine/core/filters.py:403 msgid "Bought after (inclusive)" msgstr "" -#: engine/core/filters.py:405 +#: engine/core/filters.py:406 msgid "Bought before (inclusive)" msgstr "" -#: engine/core/filters.py:410 engine/core/filters.py:461 -#: engine/core/filters.py:697 +#: engine/core/filters.py:411 engine/core/filters.py:462 +#: engine/core/filters.py:698 msgid "User email" msgstr "" -#: engine/core/filters.py:413 engine/core/filters.py:464 -#: engine/core/filters.py:672 engine/core/filters.py:694 +#: engine/core/filters.py:414 engine/core/filters.py:465 +#: engine/core/filters.py:673 engine/core/filters.py:695 msgid "User UUID" msgstr "" -#: engine/core/filters.py:415 +#: engine/core/filters.py:416 msgid "Status" msgstr "" -#: engine/core/filters.py:419 +#: engine/core/filters.py:420 msgid "Human Readable ID" msgstr "" -#: engine/core/filters.py:488 +#: engine/core/filters.py:489 msgid "Parent" msgstr "" -#: engine/core/filters.py:492 +#: engine/core/filters.py:493 msgid "Whole category(has at least 1 product or not)" msgstr "" -#: engine/core/filters.py:496 +#: engine/core/filters.py:497 msgid "Level" msgstr "" -#: engine/core/filters.py:667 +#: engine/core/filters.py:668 msgid "Product UUID" msgstr "" -#: engine/core/graphene/mutations.py:40 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:43 msgid "data to store in cache" msgstr "" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:46 msgid "timeout in seconds to set the data for into the cache" msgstr "" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:49 msgid "cached data" msgstr "" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:64 msgid "camelized JSON data from the requested URL" msgstr "" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:248 +#: engine/core/graphene/mutations.py:69 engine/core/views.py:267 msgid "only URLs starting with http(s):// are allowed" msgstr "" -#: engine/core/graphene/mutations.py:86 +#: engine/core/graphene/mutations.py:87 msgid "add a product to the order" msgstr "" -#: engine/core/graphene/mutations.py:109 engine/core/graphene/mutations.py:138 -#: engine/core/graphene/mutations.py:254 engine/core/graphene/mutations.py:306 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139 +#: engine/core/graphene/mutations.py:256 engine/core/graphene/mutations.py:308 #, python-brace-format msgid "order {order_uuid} not found" msgstr "" -#: engine/core/graphene/mutations.py:115 engine/core/graphene/mutations.py:166 +#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167 msgid "remove a product from the order" msgstr "" -#: engine/core/graphene/mutations.py:144 +#: engine/core/graphene/mutations.py:145 msgid "remove all products from the order" msgstr "" -#: engine/core/graphene/mutations.py:189 +#: engine/core/graphene/mutations.py:190 msgid "buy an order" msgstr "" -#: engine/core/graphene/mutations.py:220 engine/core/graphene/mutations.py:282 +#: engine/core/graphene/mutations.py:222 engine/core/graphene/mutations.py:284 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" -#: engine/core/graphene/mutations.py:249 engine/core/graphene/mutations.py:524 -#: engine/core/graphene/mutations.py:573 engine/core/viewsets.py:753 +#: engine/core/graphene/mutations.py:251 engine/core/graphene/mutations.py:526 +#: engine/core/graphene/mutations.py:576 engine/core/viewsets.py:783 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" -#: engine/core/graphene/mutations.py:260 +#: engine/core/graphene/mutations.py:262 msgid "perform an action on a list of products in the order" msgstr "" -#: engine/core/graphene/mutations.py:265 +#: engine/core/graphene/mutations.py:267 msgid "remove/add" msgstr "" -#: engine/core/graphene/mutations.py:301 engine/core/graphene/mutations.py:342 +#: engine/core/graphene/mutations.py:303 engine/core/graphene/mutations.py:342 msgid "action must be either add or remove" msgstr "" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:314 msgid "perform an action on a list of products in the wishlist" msgstr "" -#: engine/core/graphene/mutations.py:330 -msgid "please provide wishlist_uuid value" -msgstr "" - -#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:423 -#: engine/core/graphene/mutations.py:451 engine/core/graphene/mutations.py:479 -#: engine/core/graphene/mutations.py:529 +#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:424 +#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480 +#: engine/core/graphene/mutations.py:531 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "" -#: engine/core/graphene/mutations.py:401 +#: engine/core/graphene/mutations.py:402 msgid "add a product to the wishlist" msgstr "" -#: engine/core/graphene/mutations.py:429 +#: engine/core/graphene/mutations.py:430 msgid "remove a product from the wishlist" msgstr "" -#: engine/core/graphene/mutations.py:457 +#: engine/core/graphene/mutations.py:458 msgid "remove all products from the wishlist" msgstr "" -#: engine/core/graphene/mutations.py:485 +#: engine/core/graphene/mutations.py:486 msgid "buy all products from the wishlist" msgstr "" -#: engine/core/graphene/mutations.py:535 +#: engine/core/graphene/mutations.py:537 msgid "buy a product" msgstr "" -#: engine/core/graphene/mutations.py:542 +#: engine/core/graphene/mutations.py:544 msgid "" "please send the attributes as the string formatted like attr1=value1," "attr2=value2" msgstr "" -#: engine/core/graphene/mutations.py:580 +#: engine/core/graphene/mutations.py:583 msgid "add or delete a feedback for orderproduct" msgstr "" -#: engine/core/graphene/mutations.py:606 +#: engine/core/graphene/mutations.py:610 msgid "action must be either `add` or `remove`" msgstr "" -#: engine/core/graphene/mutations.py:609 +#: engine/core/graphene/mutations.py:613 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "" -#: engine/core/graphene/mutations.py:616 +#: engine/core/graphene/mutations.py:620 msgid "original address string provided by the user" msgstr "" -#: engine/core/graphene/mutations.py:653 engine/core/models.py:986 -#: engine/core/models.py:999 engine/core/models.py:1443 -#: engine/core/models.py:1474 engine/core/models.py:1505 -#: engine/core/viewsets.py:760 +#: engine/core/graphene/mutations.py:662 engine/core/models.py:1079 +#: engine/core/models.py:1092 engine/core/models.py:1544 +#: engine/core/models.py:1575 engine/core/models.py:1606 +#: engine/core/viewsets.py:790 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "" -#: engine/core/graphene/mutations.py:667 +#: engine/core/graphene/mutations.py:676 msgid "limit must be between 1 and 10" msgstr "" -#: engine/core/graphene/mutations.py:716 +#: engine/core/graphene/mutations.py:726 msgid "elasticsearch - works like a charm" msgstr "" -#: engine/core/graphene/object_types.py:84 -#: engine/core/graphene/object_types.py:420 -#: engine/core/graphene/object_types.py:471 engine/core/models.py:803 -#: engine/core/models.py:1297 engine/core/models.py:2033 +#: engine/core/graphene/object_types.py:88 +#: engine/core/graphene/object_types.py:425 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:889 +#: engine/core/models.py:1394 engine/core/models.py:2139 msgid "attributes" msgstr "" -#: engine/core/graphene/object_types.py:97 +#: engine/core/graphene/object_types.py:101 msgid "grouped attributes" msgstr "" -#: engine/core/graphene/object_types.py:104 +#: engine/core/graphene/object_types.py:108 msgid "groups of attributes" msgstr "" -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:217 -#: engine/core/graphene/object_types.py:255 engine/core/models.py:440 +#: engine/core/graphene/object_types.py:122 +#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:264 engine/core/models.py:489 msgid "categories" msgstr "" -#: engine/core/graphene/object_types.py:134 engine/core/models.py:511 +#: engine/core/graphene/object_types.py:138 engine/core/models.py:564 msgid "brands" msgstr "" -#: engine/core/graphene/object_types.py:219 +#: engine/core/graphene/object_types.py:226 msgid "category image url" msgstr "" -#: engine/core/graphene/object_types.py:220 -#: engine/core/graphene/object_types.py:365 engine/core/models.py:278 +#: engine/core/graphene/object_types.py:227 +#: engine/core/graphene/object_types.py:369 engine/core/models.py:301 msgid "markup percentage" msgstr "" -#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:231 msgid "which attributes and values can be used for filtering this category." msgstr "" -#: engine/core/graphene/object_types.py:230 +#: engine/core/graphene/object_types.py:237 msgid "minimum and maximum prices for products in this category, if available." msgstr "" -#: engine/core/graphene/object_types.py:234 +#: engine/core/graphene/object_types.py:240 +msgid "brands in this category" +msgstr "" + +#: engine/core/graphene/object_types.py:242 msgid "tags for this category" msgstr "" -#: engine/core/graphene/object_types.py:237 +#: engine/core/graphene/object_types.py:245 msgid "products in this category" msgstr "" -#: engine/core/graphene/object_types.py:372 engine/core/models.py:183 +#: engine/core/graphene/object_types.py:376 engine/core/models.py:202 msgid "vendors" msgstr "" -#: engine/core/graphene/object_types.py:376 +#: engine/core/graphene/object_types.py:380 msgid "Latitude (Y coordinate)" msgstr "" -#: engine/core/graphene/object_types.py:377 +#: engine/core/graphene/object_types.py:381 msgid "Longitude (X coordinate)" msgstr "" -#: engine/core/graphene/object_types.py:406 +#: engine/core/graphene/object_types.py:411 msgid "comment" msgstr "" -#: engine/core/graphene/object_types.py:408 -#: engine/core/graphene/object_types.py:542 +#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:548 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "" -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:421 msgid "represents feedback from a user." msgstr "" -#: engine/core/graphene/object_types.py:421 -#: engine/core/graphene/object_types.py:472 engine/core/models.py:1291 +#: engine/core/graphene/object_types.py:426 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:1388 msgid "notifications" msgstr "" -#: engine/core/graphene/object_types.py:423 +#: engine/core/graphene/object_types.py:428 msgid "download url for this order product if applicable" msgstr "" -#: engine/core/graphene/object_types.py:425 engine/core/models.py:1856 +#: engine/core/graphene/object_types.py:430 engine/core/models.py:1959 msgid "feedback" msgstr "" -#: engine/core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:464 msgid "a list of order products in this order" msgstr "" -#: engine/core/graphene/object_types.py:461 engine/core/models.py:1261 +#: engine/core/graphene/object_types.py:466 engine/core/models.py:1358 msgid "billing address" msgstr "" -#: engine/core/graphene/object_types.py:465 +#: engine/core/graphene/object_types.py:470 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" msgstr "" -#: engine/core/graphene/object_types.py:468 +#: engine/core/graphene/object_types.py:473 msgid "total price of this order" msgstr "" -#: engine/core/graphene/object_types.py:469 +#: engine/core/graphene/object_types.py:474 msgid "total quantity of products in order" msgstr "" -#: engine/core/graphene/object_types.py:470 +#: engine/core/graphene/object_types.py:475 msgid "are all products in the order digital" msgstr "" -#: engine/core/graphene/object_types.py:474 +#: engine/core/graphene/object_types.py:479 msgid "transactions for this order" msgstr "" -#: engine/core/graphene/object_types.py:494 engine/core/models.py:1325 +#: engine/core/graphene/object_types.py:499 engine/core/models.py:1422 msgid "orders" msgstr "" -#: engine/core/graphene/object_types.py:515 +#: engine/core/graphene/object_types.py:520 msgid "image url" msgstr "" -#: engine/core/graphene/object_types.py:522 +#: engine/core/graphene/object_types.py:527 msgid "product's images" msgstr "" -#: engine/core/graphene/object_types.py:529 engine/core/models.py:439 -#: engine/core/models.py:596 +#: engine/core/graphene/object_types.py:534 engine/core/models.py:488 +#: engine/core/models.py:661 msgid "category" msgstr "" -#: engine/core/graphene/object_types.py:531 engine/core/models.py:1857 +#: engine/core/graphene/object_types.py:536 engine/core/models.py:1960 msgid "feedbacks" msgstr "" -#: engine/core/graphene/object_types.py:532 engine/core/models.py:510 -#: engine/core/models.py:605 +#: engine/core/graphene/object_types.py:537 engine/core/models.py:563 +#: engine/core/models.py:670 msgid "brand" msgstr "" -#: engine/core/graphene/object_types.py:534 engine/core/models.py:103 +#: engine/core/graphene/object_types.py:538 +msgid "video url" +msgstr "" + +#: engine/core/graphene/object_types.py:540 engine/core/models.py:122 msgid "attribute groups" msgstr "" -#: engine/core/graphene/object_types.py:536 +#: engine/core/graphene/object_types.py:542 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1347,7 +1383,7 @@ msgstr "" msgid "price" msgstr "" -#: engine/core/graphene/object_types.py:537 +#: engine/core/graphene/object_types.py:543 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1355,39 +1391,39 @@ msgstr "" msgid "quantity" msgstr "" -#: engine/core/graphene/object_types.py:538 +#: engine/core/graphene/object_types.py:544 msgid "number of feedbacks" msgstr "" -#: engine/core/graphene/object_types.py:539 +#: engine/core/graphene/object_types.py:545 msgid "only available for personal orders" msgstr "" -#: engine/core/graphene/object_types.py:544 +#: engine/core/graphene/object_types.py:550 msgid "discount price" msgstr "" -#: engine/core/graphene/object_types.py:568 engine/core/models.py:682 +#: engine/core/graphene/object_types.py:575 engine/core/models.py:755 msgid "products" msgstr "" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:691 msgid "promocodes" msgstr "" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:706 msgid "products on sale" msgstr "" -#: engine/core/graphene/object_types.py:701 engine/core/models.py:935 +#: engine/core/graphene/object_types.py:720 engine/core/models.py:1028 msgid "promotions" msgstr "" -#: engine/core/graphene/object_types.py:705 engine/core/models.py:182 +#: engine/core/graphene/object_types.py:727 engine/core/models.py:201 msgid "vendor" msgstr "" -#: engine/core/graphene/object_types.py:706 engine/core/models.py:681 +#: engine/core/graphene/object_types.py:728 engine/core/models.py:754 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1395,102 +1431,102 @@ msgstr "" msgid "product" msgstr "" -#: engine/core/graphene/object_types.py:718 engine/core/models.py:958 +#: engine/core/graphene/object_types.py:740 engine/core/models.py:1051 msgid "wishlisted products" msgstr "" -#: engine/core/graphene/object_types.py:725 engine/core/models.py:975 +#: engine/core/graphene/object_types.py:747 engine/core/models.py:1068 msgid "wishlists" msgstr "" -#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:752 msgid "tagged products" msgstr "" -#: engine/core/graphene/object_types.py:738 engine/core/models.py:219 -#: engine/core/models.py:611 +#: engine/core/graphene/object_types.py:760 engine/core/models.py:238 +#: engine/core/models.py:676 msgid "product tags" msgstr "" -#: engine/core/graphene/object_types.py:743 +#: engine/core/graphene/object_types.py:765 msgid "tagged categories" msgstr "" -#: engine/core/graphene/object_types.py:751 +#: engine/core/graphene/object_types.py:773 msgid "categories tags" msgstr "" -#: engine/core/graphene/object_types.py:755 +#: engine/core/graphene/object_types.py:777 msgid "project name" msgstr "" -#: engine/core/graphene/object_types.py:756 +#: engine/core/graphene/object_types.py:778 msgid "company name" msgstr "" -#: engine/core/graphene/object_types.py:757 +#: engine/core/graphene/object_types.py:779 msgid "company address" msgstr "" -#: engine/core/graphene/object_types.py:758 +#: engine/core/graphene/object_types.py:780 msgid "company phone number" msgstr "" -#: engine/core/graphene/object_types.py:761 +#: engine/core/graphene/object_types.py:783 msgid "email from, sometimes it must be used instead of host user value" msgstr "" -#: engine/core/graphene/object_types.py:764 +#: engine/core/graphene/object_types.py:786 msgid "email host user" msgstr "" -#: engine/core/graphene/object_types.py:765 +#: engine/core/graphene/object_types.py:787 msgid "maximum amount for payment" msgstr "" -#: engine/core/graphene/object_types.py:766 +#: engine/core/graphene/object_types.py:788 msgid "minimum amount for payment" msgstr "" -#: engine/core/graphene/object_types.py:767 +#: engine/core/graphene/object_types.py:789 msgid "analytics data" msgstr "" -#: engine/core/graphene/object_types.py:768 +#: engine/core/graphene/object_types.py:790 msgid "advertisement data" msgstr "" -#: engine/core/graphene/object_types.py:771 +#: engine/core/graphene/object_types.py:793 msgid "company configuration" msgstr "" -#: engine/core/graphene/object_types.py:775 +#: engine/core/graphene/object_types.py:797 msgid "language code" msgstr "" -#: engine/core/graphene/object_types.py:776 +#: engine/core/graphene/object_types.py:798 msgid "language name" msgstr "" -#: engine/core/graphene/object_types.py:777 +#: engine/core/graphene/object_types.py:799 msgid "language flag, if exists :)" msgstr "" -#: engine/core/graphene/object_types.py:780 +#: engine/core/graphene/object_types.py:802 msgid "supported languages" msgstr "" -#: engine/core/graphene/object_types.py:812 -#: engine/core/graphene/object_types.py:815 -#: engine/core/graphene/object_types.py:818 +#: engine/core/graphene/object_types.py:834 +#: engine/core/graphene/object_types.py:837 +#: engine/core/graphene/object_types.py:840 msgid "products search results" msgstr "" -#: engine/core/graphene/object_types.py:820 +#: engine/core/graphene/object_types.py:842 msgid "posts search results" msgstr "" -#: engine/core/models.py:75 +#: engine/core/models.py:91 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 " @@ -1498,23 +1534,23 @@ msgid "" "categorizing and managing attributes more effectively in acomplex system." msgstr "" -#: engine/core/models.py:88 +#: engine/core/models.py:107 msgid "parent of this group" msgstr "" -#: engine/core/models.py:89 +#: engine/core/models.py:108 msgid "parent attribute group" msgstr "" -#: engine/core/models.py:93 engine/core/models.py:94 +#: engine/core/models.py:112 engine/core/models.py:113 msgid "attribute group's name" msgstr "" -#: engine/core/models.py:102 engine/core/models.py:763 +#: engine/core/models.py:121 engine/core/models.py:849 msgid "attribute group" msgstr "" -#: engine/core/models.py:108 +#: engine/core/models.py:127 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1525,47 +1561,47 @@ msgid "" "use in systems that interact with third-party vendors." msgstr "" -#: engine/core/models.py:122 +#: engine/core/models.py:141 msgid "stores credentials and endpoints required for vendor communication" msgstr "" -#: engine/core/models.py:124 +#: engine/core/models.py:143 msgid "authentication info" msgstr "" -#: engine/core/models.py:129 +#: engine/core/models.py:148 msgid "define the markup for products retrieved from this vendor" msgstr "" -#: engine/core/models.py:130 +#: engine/core/models.py:149 msgid "vendor markup percentage" msgstr "" -#: engine/core/models.py:134 +#: engine/core/models.py:153 msgid "name of this vendor" msgstr "" -#: engine/core/models.py:135 +#: engine/core/models.py:154 msgid "vendor name" msgstr "" -#: engine/core/models.py:150 +#: engine/core/models.py:169 msgid "response file" msgstr "" -#: engine/core/models.py:151 +#: engine/core/models.py:170 msgid "vendor's last processing response" msgstr "" -#: engine/core/models.py:157 +#: engine/core/models.py:176 msgid "vendor's integration file path" msgstr "" -#: engine/core/models.py:158 +#: engine/core/models.py:177 msgid "integration path" msgstr "" -#: engine/core/models.py:192 +#: engine/core/models.py:211 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1574,42 +1610,42 @@ msgid "" "metadata customization for administrative purposes." msgstr "" -#: engine/core/models.py:204 engine/core/models.py:235 +#: engine/core/models.py:223 engine/core/models.py:254 msgid "internal tag identifier for the product tag" msgstr "" -#: engine/core/models.py:205 engine/core/models.py:236 +#: engine/core/models.py:224 engine/core/models.py:255 msgid "tag name" msgstr "" -#: engine/core/models.py:209 engine/core/models.py:240 +#: engine/core/models.py:228 engine/core/models.py:259 msgid "user-friendly name for the product tag" msgstr "" -#: engine/core/models.py:210 engine/core/models.py:241 +#: engine/core/models.py:229 engine/core/models.py:260 msgid "tag display name" msgstr "" -#: engine/core/models.py:218 +#: engine/core/models.py:237 msgid "product tag" msgstr "" -#: engine/core/models.py:224 +#: engine/core/models.py:243 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 "" -#: engine/core/models.py:249 +#: engine/core/models.py:268 msgid "category tag" msgstr "" -#: engine/core/models.py:250 engine/core/models.py:322 +#: engine/core/models.py:269 engine/core/models.py:345 msgid "category tags" msgstr "" -#: engine/core/models.py:255 +#: engine/core/models.py:274 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1622,51 +1658,51 @@ msgid "" "priority." msgstr "" -#: engine/core/models.py:269 +#: engine/core/models.py:292 msgid "upload an image representing this category" msgstr "" -#: engine/core/models.py:272 +#: engine/core/models.py:295 msgid "category image" msgstr "" -#: engine/core/models.py:277 +#: engine/core/models.py:300 msgid "define a markup percentage for products in this category" msgstr "" -#: engine/core/models.py:286 +#: engine/core/models.py:309 msgid "parent of this category to form a hierarchical structure" msgstr "" -#: engine/core/models.py:287 +#: engine/core/models.py:310 msgid "parent category" msgstr "" -#: engine/core/models.py:292 +#: engine/core/models.py:315 msgid "category name" msgstr "" -#: engine/core/models.py:293 +#: engine/core/models.py:316 msgid "provide a name for this category" msgstr "" -#: engine/core/models.py:300 +#: engine/core/models.py:323 msgid "add a detailed description for this category" msgstr "" -#: engine/core/models.py:301 +#: engine/core/models.py:324 msgid "category description" msgstr "" -#: engine/core/models.py:321 +#: engine/core/models.py:344 msgid "tags that help describe or group this category" msgstr "" -#: engine/core/models.py:328 engine/core/models.py:503 +#: engine/core/models.py:351 engine/core/models.py:552 msgid "priority" msgstr "" -#: engine/core/models.py:446 +#: engine/core/models.py:495 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1674,47 +1710,43 @@ msgid "" "organization and representation of brand-related data within the application." msgstr "" -#: engine/core/models.py:456 +#: engine/core/models.py:505 msgid "name of this brand" msgstr "" -#: engine/core/models.py:457 +#: engine/core/models.py:506 msgid "brand name" msgstr "" -#: engine/core/models.py:464 +#: engine/core/models.py:513 msgid "upload a logo representing this brand" msgstr "" -#: engine/core/models.py:466 +#: engine/core/models.py:515 msgid "brand small image" msgstr "" -#: engine/core/models.py:472 +#: engine/core/models.py:521 msgid "upload a big logo representing this brand" msgstr "" -#: engine/core/models.py:474 +#: engine/core/models.py:523 msgid "brand big image" msgstr "" -#: engine/core/models.py:479 +#: engine/core/models.py:528 msgid "add a detailed description of the brand" msgstr "" -#: engine/core/models.py:480 +#: engine/core/models.py:529 msgid "brand description" msgstr "" -#: engine/core/models.py:485 -msgid "optional categories that this brand is associated with" +#: engine/core/models.py:534 engine/core/models.py:535 +msgid "DEPRECATED" msgstr "" -#: engine/core/models.py:486 -msgid "associated categories" -msgstr "" - -#: engine/core/models.py:516 +#: engine/core/models.py:569 msgid "" "Represents the stock of a product managed in the system. This class provides " "details about the relationship between vendors, products, and their stock " @@ -1724,72 +1756,72 @@ msgid "" "from various vendors." msgstr "" -#: engine/core/models.py:528 +#: engine/core/models.py:581 msgid "the vendor supplying this product stock" msgstr "" -#: engine/core/models.py:529 +#: engine/core/models.py:582 msgid "associated vendor" msgstr "" -#: engine/core/models.py:533 +#: engine/core/models.py:588 msgid "final price to the customer after markups" msgstr "" -#: engine/core/models.py:534 +#: engine/core/models.py:589 msgid "selling price" msgstr "" -#: engine/core/models.py:539 +#: engine/core/models.py:594 msgid "the product associated with this stock entry" msgstr "" -#: engine/core/models.py:540 engine/core/models.py:828 -#: engine/core/models.py:874 engine/core/models.py:1912 +#: engine/core/models.py:595 engine/core/models.py:914 +#: engine/core/models.py:962 engine/core/models.py:2020 msgid "associated product" msgstr "" -#: engine/core/models.py:547 +#: engine/core/models.py:604 msgid "the price paid to the vendor for this product" msgstr "" -#: engine/core/models.py:548 +#: engine/core/models.py:605 msgid "vendor purchase price" msgstr "" -#: engine/core/models.py:552 +#: engine/core/models.py:609 msgid "available quantity of the product in stock" msgstr "" -#: engine/core/models.py:553 +#: engine/core/models.py:610 msgid "quantity in stock" msgstr "" -#: engine/core/models.py:557 +#: engine/core/models.py:614 msgid "vendor-assigned SKU for identifying the product" msgstr "" -#: engine/core/models.py:558 +#: engine/core/models.py:615 msgid "vendor sku" msgstr "" -#: engine/core/models.py:564 +#: engine/core/models.py:621 msgid "digital file associated with this stock if applicable" msgstr "" -#: engine/core/models.py:565 +#: engine/core/models.py:622 msgid "digital file" msgstr "" -#: engine/core/models.py:569 +#: engine/core/models.py:626 msgid "system attributes" msgstr "" -#: engine/core/models.py:577 +#: engine/core/models.py:636 msgid "stock entries" msgstr "" -#: engine/core/models.py:582 +#: engine/core/models.py:641 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1801,71 +1833,79 @@ msgid "" "product data and its associated information within an application." msgstr "" -#: engine/core/models.py:595 +#: engine/core/models.py:660 msgid "category this product belongs to" msgstr "" -#: engine/core/models.py:604 +#: engine/core/models.py:669 msgid "optionally associate this product with a brand" msgstr "" -#: engine/core/models.py:610 +#: engine/core/models.py:675 msgid "tags that help describe or group this product" msgstr "" -#: engine/core/models.py:615 +#: engine/core/models.py:680 msgid "indicates whether this product is digitally delivered" msgstr "" -#: engine/core/models.py:616 +#: engine/core/models.py:681 msgid "is product digital" msgstr "" -#: engine/core/models.py:623 +#: engine/core/models.py:688 msgid "indicates whether this product should be updated from periodic task" msgstr "" -#: engine/core/models.py:625 +#: engine/core/models.py:690 msgid "is product updatable" msgstr "" -#: engine/core/models.py:631 +#: engine/core/models.py:696 msgid "provide a clear identifying name for the product" msgstr "" -#: engine/core/models.py:632 +#: engine/core/models.py:697 msgid "product name" msgstr "" -#: engine/core/models.py:638 engine/core/models.py:923 +#: engine/core/models.py:703 engine/core/models.py:1012 msgid "add a detailed description of the product" msgstr "" -#: engine/core/models.py:639 +#: engine/core/models.py:704 msgid "product description" msgstr "" -#: engine/core/models.py:646 +#: engine/core/models.py:710 +msgid "optional video file for this product" +msgstr "" + +#: engine/core/models.py:711 +msgid "product video" +msgstr "" + +#: engine/core/models.py:719 msgid "part number for this product" msgstr "" -#: engine/core/models.py:647 +#: engine/core/models.py:720 msgid "part number" msgstr "" -#: engine/core/models.py:666 +#: engine/core/models.py:739 msgid "stock keeping unit for this product" msgstr "" -#: engine/core/models.py:673 +#: engine/core/models.py:746 msgid "whether to export this product to marketplaces" msgstr "" -#: engine/core/models.py:674 +#: engine/core/models.py:747 msgid "Export to Marketplaces" msgstr "" -#: engine/core/models.py:749 +#: engine/core/models.py:835 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 " @@ -1875,83 +1915,83 @@ msgid "" "for dynamic and flexible data structuring." msgstr "" -#: engine/core/models.py:762 +#: engine/core/models.py:848 msgid "group of this attribute" msgstr "" -#: engine/core/models.py:768 +#: engine/core/models.py:854 msgid "string" msgstr "" -#: engine/core/models.py:769 +#: engine/core/models.py:855 msgid "integer" msgstr "" -#: engine/core/models.py:770 +#: engine/core/models.py:856 msgid "float" msgstr "" -#: engine/core/models.py:771 +#: engine/core/models.py:857 msgid "boolean" msgstr "" -#: engine/core/models.py:772 +#: engine/core/models.py:858 msgid "array" msgstr "" -#: engine/core/models.py:773 +#: engine/core/models.py:859 msgid "object" msgstr "" -#: engine/core/models.py:775 +#: engine/core/models.py:861 msgid "type of the attribute's value" msgstr "" -#: engine/core/models.py:776 +#: engine/core/models.py:862 msgid "value type" msgstr "" -#: engine/core/models.py:781 +#: engine/core/models.py:867 msgid "name of this attribute" msgstr "" -#: engine/core/models.py:782 +#: engine/core/models.py:868 msgid "attribute's name" msgstr "" -#: engine/core/models.py:787 +#: engine/core/models.py:873 msgid "is filterable" msgstr "" -#: engine/core/models.py:789 +#: engine/core/models.py:875 msgid "designates whether this attribute can be used for filtering or not" msgstr "" -#: engine/core/models.py:802 engine/core/models.py:820 +#: engine/core/models.py:888 engine/core/models.py:906 #: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "" -#: engine/core/models.py:808 +#: engine/core/models.py:894 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 "" -#: engine/core/models.py:819 +#: engine/core/models.py:905 msgid "attribute of this value" msgstr "" -#: engine/core/models.py:827 +#: engine/core/models.py:913 msgid "the specific product associated with this attribute's value" msgstr "" -#: engine/core/models.py:833 +#: engine/core/models.py:919 msgid "the specific value for this attribute" msgstr "" -#: engine/core/models.py:846 +#: engine/core/models.py:934 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for " @@ -1960,39 +2000,39 @@ msgid "" "with alternative text for the images." msgstr "" -#: engine/core/models.py:857 +#: engine/core/models.py:945 msgid "provide alternative text for the image for accessibility" msgstr "" -#: engine/core/models.py:858 +#: engine/core/models.py:946 msgid "image alt text" msgstr "" -#: engine/core/models.py:861 +#: engine/core/models.py:949 msgid "upload the image file for this product" msgstr "" -#: engine/core/models.py:862 engine/core/models.py:893 +#: engine/core/models.py:950 engine/core/models.py:982 msgid "product image" msgstr "" -#: engine/core/models.py:867 +#: engine/core/models.py:955 msgid "determines the order in which images are displayed" msgstr "" -#: engine/core/models.py:868 +#: engine/core/models.py:956 msgid "display priority" msgstr "" -#: engine/core/models.py:873 +#: engine/core/models.py:961 msgid "the product that this image represents" msgstr "" -#: engine/core/models.py:894 +#: engine/core/models.py:983 msgid "product images" msgstr "" -#: engine/core/models.py:899 +#: engine/core/models.py:988 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -2002,39 +2042,39 @@ msgid "" "affected items in the campaign." msgstr "" -#: engine/core/models.py:911 +#: engine/core/models.py:1000 msgid "percentage discount for the selected products" msgstr "" -#: engine/core/models.py:912 +#: engine/core/models.py:1001 msgid "discount percentage" msgstr "" -#: engine/core/models.py:917 +#: engine/core/models.py:1006 msgid "provide a unique name for this promotion" msgstr "" -#: engine/core/models.py:918 +#: engine/core/models.py:1007 msgid "promotion name" msgstr "" -#: engine/core/models.py:924 +#: engine/core/models.py:1013 msgid "promotion description" msgstr "" -#: engine/core/models.py:929 +#: engine/core/models.py:1018 msgid "select which products are included in this promotion" msgstr "" -#: engine/core/models.py:930 +#: engine/core/models.py:1019 msgid "included products" msgstr "" -#: engine/core/models.py:934 +#: engine/core/models.py:1027 msgid "promotion" msgstr "" -#: engine/core/models.py:945 +#: engine/core/models.py:1038 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2042,23 +2082,23 @@ msgid "" "operations for adding and removing multiple products at once." msgstr "" -#: engine/core/models.py:957 +#: engine/core/models.py:1050 msgid "products that the user has marked as wanted" msgstr "" -#: engine/core/models.py:965 +#: engine/core/models.py:1058 msgid "user who owns this wishlist" msgstr "" -#: engine/core/models.py:966 +#: engine/core/models.py:1059 msgid "wishlist owner" msgstr "" -#: engine/core/models.py:974 +#: engine/core/models.py:1067 msgid "wishlist" msgstr "" -#: engine/core/models.py:1016 +#: engine/core/models.py:1109 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2068,19 +2108,19 @@ msgid "" "custom features." msgstr "" -#: engine/core/models.py:1031 +#: engine/core/models.py:1124 msgid "documentary" msgstr "" -#: engine/core/models.py:1032 +#: engine/core/models.py:1125 msgid "documentaries" msgstr "" -#: engine/core/models.py:1042 +#: engine/core/models.py:1135 msgid "unresolved" msgstr "" -#: engine/core/models.py:1047 +#: engine/core/models.py:1140 msgid "" "Represents an address entity that includes location details and associations " "with a user. Provides functionality for geographic and address data storage, " @@ -2092,59 +2132,59 @@ msgid "" "address with a user, facilitating personalized data handling." msgstr "" -#: engine/core/models.py:1062 +#: engine/core/models.py:1155 msgid "address line for the customer" msgstr "" -#: engine/core/models.py:1063 +#: engine/core/models.py:1156 msgid "address line" msgstr "" -#: engine/core/models.py:1065 +#: engine/core/models.py:1158 msgid "street" msgstr "" -#: engine/core/models.py:1066 +#: engine/core/models.py:1159 msgid "district" msgstr "" -#: engine/core/models.py:1067 +#: engine/core/models.py:1160 msgid "city" msgstr "" -#: engine/core/models.py:1068 +#: engine/core/models.py:1161 msgid "region" msgstr "" -#: engine/core/models.py:1069 +#: engine/core/models.py:1162 msgid "postal code" msgstr "" -#: engine/core/models.py:1070 +#: engine/core/models.py:1163 msgid "country" msgstr "" -#: engine/core/models.py:1077 +#: engine/core/models.py:1170 msgid "geolocation point: (longitude, latitude)" msgstr "" -#: engine/core/models.py:1083 +#: engine/core/models.py:1176 msgid "full JSON response from geocoder for this address" msgstr "" -#: engine/core/models.py:1089 +#: engine/core/models.py:1182 msgid "stored JSON response from the geocoding service" msgstr "" -#: engine/core/models.py:1099 +#: engine/core/models.py:1192 msgid "address" msgstr "" -#: engine/core/models.py:1100 +#: engine/core/models.py:1193 msgid "addresses" msgstr "" -#: engine/core/models.py:1112 +#: engine/core/models.py:1205 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2154,86 +2194,86 @@ msgid "" "apply the promo code to an order while ensuring constraints are met." msgstr "" -#: engine/core/models.py:1126 +#: engine/core/models.py:1219 msgid "unique code used by a user to redeem a discount" msgstr "" -#: engine/core/models.py:1127 +#: engine/core/models.py:1220 msgid "promo code identifier" msgstr "" -#: engine/core/models.py:1134 +#: engine/core/models.py:1227 msgid "fixed discount amount applied if percent is not used" msgstr "" -#: engine/core/models.py:1135 +#: engine/core/models.py:1228 msgid "fixed discount amount" msgstr "" -#: engine/core/models.py:1141 +#: engine/core/models.py:1234 msgid "percentage discount applied if fixed amount is not used" msgstr "" -#: engine/core/models.py:1142 +#: engine/core/models.py:1235 msgid "percentage discount" msgstr "" -#: engine/core/models.py:1147 +#: engine/core/models.py:1240 msgid "timestamp when the promocode expires" msgstr "" -#: engine/core/models.py:1148 +#: engine/core/models.py:1241 msgid "end validity time" msgstr "" -#: engine/core/models.py:1153 +#: engine/core/models.py:1246 msgid "timestamp from which this promocode is valid" msgstr "" -#: engine/core/models.py:1154 +#: engine/core/models.py:1247 msgid "start validity time" msgstr "" -#: engine/core/models.py:1159 +#: engine/core/models.py:1252 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" -#: engine/core/models.py:1160 +#: engine/core/models.py:1253 msgid "usage timestamp" msgstr "" -#: engine/core/models.py:1165 +#: engine/core/models.py:1258 msgid "user assigned to this promocode if applicable" msgstr "" -#: engine/core/models.py:1166 +#: engine/core/models.py:1259 msgid "assigned user" msgstr "" -#: engine/core/models.py:1173 +#: engine/core/models.py:1266 msgid "promo code" msgstr "" -#: engine/core/models.py:1174 +#: engine/core/models.py:1267 msgid "promo codes" msgstr "" -#: engine/core/models.py:1190 +#: engine/core/models.py:1283 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "" -#: engine/core/models.py:1212 +#: engine/core/models.py:1305 msgid "promocode already used" msgstr "" -#: engine/core/models.py:1234 +#: engine/core/models.py:1327 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "" -#: engine/core/models.py:1243 +#: engine/core/models.py:1336 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 " @@ -2243,145 +2283,145 @@ msgid "" "supports managing the products in the order lifecycle." msgstr "" -#: engine/core/models.py:1260 +#: engine/core/models.py:1357 msgid "the billing address used for this order" msgstr "" -#: engine/core/models.py:1268 +#: engine/core/models.py:1365 msgid "optional promo code applied to this order" msgstr "" -#: engine/core/models.py:1269 +#: engine/core/models.py:1366 msgid "applied promo code" msgstr "" -#: engine/core/models.py:1277 +#: engine/core/models.py:1374 msgid "the shipping address used for this order" msgstr "" -#: engine/core/models.py:1278 +#: engine/core/models.py:1375 msgid "shipping address" msgstr "" -#: engine/core/models.py:1284 +#: engine/core/models.py:1381 msgid "current status of the order in its lifecycle" msgstr "" -#: engine/core/models.py:1285 +#: engine/core/models.py:1382 msgid "order status" msgstr "" -#: engine/core/models.py:1290 engine/core/models.py:1889 +#: engine/core/models.py:1387 engine/core/models.py:1997 msgid "json structure of notifications to display to users" msgstr "" -#: engine/core/models.py:1296 +#: engine/core/models.py:1393 msgid "json representation of order attributes for this order" msgstr "" -#: engine/core/models.py:1302 +#: engine/core/models.py:1399 msgid "the user who placed the order" msgstr "" -#: engine/core/models.py:1303 +#: engine/core/models.py:1400 msgid "user" msgstr "" -#: engine/core/models.py:1309 +#: engine/core/models.py:1406 msgid "the timestamp when the order was finalized" msgstr "" -#: engine/core/models.py:1310 +#: engine/core/models.py:1407 msgid "buy time" msgstr "" -#: engine/core/models.py:1317 +#: engine/core/models.py:1414 msgid "a human-readable identifier for the order" msgstr "" -#: engine/core/models.py:1318 +#: engine/core/models.py:1415 msgid "human readable id" msgstr "" -#: engine/core/models.py:1324 +#: engine/core/models.py:1421 msgid "order" msgstr "" -#: engine/core/models.py:1371 +#: engine/core/models.py:1468 msgid "a user must have only one pending order at a time" msgstr "" -#: engine/core/models.py:1404 +#: engine/core/models.py:1504 msgid "you cannot add products to an order that is not a pending one" msgstr "" -#: engine/core/models.py:1410 +#: engine/core/models.py:1510 msgid "you cannot add inactive products to order" msgstr "" -#: engine/core/models.py:1432 +#: engine/core/models.py:1533 msgid "you cannot add more products than available in stock" msgstr "" -#: engine/core/models.py:1456 engine/core/models.py:1485 -#: engine/core/models.py:1495 +#: engine/core/models.py:1557 engine/core/models.py:1586 +#: engine/core/models.py:1596 msgid "you cannot remove products from an order that is not a pending one" msgstr "" -#: engine/core/models.py:1480 +#: engine/core/models.py:1581 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "" -#: engine/core/models.py:1519 +#: engine/core/models.py:1620 msgid "promocode does not exist" msgstr "" -#: engine/core/models.py:1534 +#: engine/core/models.py:1635 msgid "you can only buy physical products with shipping address specified" msgstr "" -#: engine/core/models.py:1555 +#: engine/core/models.py:1656 msgid "address does not exist" msgstr "" -#: engine/core/models.py:1577 engine/core/models.py:1656 +#: engine/core/models.py:1678 engine/core/models.py:1757 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" -#: engine/core/models.py:1583 engine/core/models.py:1649 +#: engine/core/models.py:1684 engine/core/models.py:1750 msgid "invalid force value" msgstr "" -#: engine/core/models.py:1589 engine/core/models.py:1660 +#: engine/core/models.py:1690 engine/core/models.py:1761 msgid "you cannot purchase an empty order!" msgstr "" -#: engine/core/models.py:1610 +#: engine/core/models.py:1711 msgid "you cannot buy an order without a user" msgstr "" -#: engine/core/models.py:1624 +#: engine/core/models.py:1725 msgid "a user without a balance cannot buy with balance" msgstr "" -#: engine/core/models.py:1630 +#: engine/core/models.py:1731 msgid "insufficient funds to complete the order" msgstr "" -#: engine/core/models.py:1671 +#: engine/core/models.py:1772 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "" -#: engine/core/models.py:1682 +#: engine/core/models.py:1783 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" -#: engine/core/models.py:1813 +#: engine/core/models.py:1916 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2390,31 +2430,31 @@ msgid "" "fields to effectively model and manage feedback data." msgstr "" -#: engine/core/models.py:1825 +#: engine/core/models.py:1928 msgid "user-provided comments about their experience with the product" msgstr "" -#: engine/core/models.py:1826 +#: engine/core/models.py:1929 msgid "feedback comments" msgstr "" -#: engine/core/models.py:1834 +#: engine/core/models.py:1937 msgid "references the specific product in an order that this feedback is about" msgstr "" -#: engine/core/models.py:1836 +#: engine/core/models.py:1939 msgid "related order product" msgstr "" -#: engine/core/models.py:1841 +#: engine/core/models.py:1944 msgid "user-assigned rating for the product" msgstr "" -#: engine/core/models.py:1842 +#: engine/core/models.py:1945 msgid "product rating" msgstr "" -#: engine/core/models.py:1862 +#: engine/core/models.py:1965 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2427,108 +2467,108 @@ msgid "" "Product models and stores a reference to them." msgstr "" -#: engine/core/models.py:1877 +#: engine/core/models.py:1985 msgid "the price paid by the customer for this product at purchase time" msgstr "" -#: engine/core/models.py:1878 +#: engine/core/models.py:1986 msgid "purchase price at order time" msgstr "" -#: engine/core/models.py:1883 +#: engine/core/models.py:1991 msgid "internal comments for admins about this ordered product" msgstr "" -#: engine/core/models.py:1884 +#: engine/core/models.py:1992 msgid "internal comments" msgstr "" -#: engine/core/models.py:1890 +#: engine/core/models.py:1998 msgid "user notifications" msgstr "" -#: engine/core/models.py:1895 +#: engine/core/models.py:2003 msgid "json representation of this item's attributes" msgstr "" -#: engine/core/models.py:1896 +#: engine/core/models.py:2004 msgid "ordered product attributes" msgstr "" -#: engine/core/models.py:1901 +#: engine/core/models.py:2009 msgid "reference to the parent order that contains this product" msgstr "" -#: engine/core/models.py:1902 +#: engine/core/models.py:2010 msgid "parent order" msgstr "" -#: engine/core/models.py:1911 +#: engine/core/models.py:2019 msgid "the specific product associated with this order line" msgstr "" -#: engine/core/models.py:1918 +#: engine/core/models.py:2026 msgid "quantity of this specific product in the order" msgstr "" -#: engine/core/models.py:1919 +#: engine/core/models.py:2027 msgid "product quantity" msgstr "" -#: engine/core/models.py:1926 +#: engine/core/models.py:2034 msgid "current status of this product in the order" msgstr "" -#: engine/core/models.py:1927 +#: engine/core/models.py:2035 msgid "product line status" msgstr "" -#: engine/core/models.py:1998 +#: engine/core/models.py:2106 msgid "order product must have an order" msgstr "" -#: engine/core/models.py:2000 +#: engine/core/models.py:2108 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "" -#: engine/core/models.py:2017 +#: engine/core/models.py:2125 msgid "you cannot feedback an order which is not received" msgstr "" -#: engine/core/models.py:2026 +#: engine/core/models.py:2132 engine/core/models.py:2227 msgid "name" msgstr "" -#: engine/core/models.py:2028 +#: engine/core/models.py:2134 msgid "URL of the integration" msgstr "" -#: engine/core/models.py:2031 +#: engine/core/models.py:2137 msgid "authentication credentials" msgstr "" -#: engine/core/models.py:2054 +#: engine/core/models.py:2160 msgid "you can only have one default CRM provider" msgstr "" -#: engine/core/models.py:2064 +#: engine/core/models.py:2170 msgid "CRM" msgstr "" -#: engine/core/models.py:2065 +#: engine/core/models.py:2171 msgid "CRMs" msgstr "" -#: engine/core/models.py:2081 +#: engine/core/models.py:2187 msgid "order CRM link" msgstr "" -#: engine/core/models.py:2082 +#: engine/core/models.py:2188 msgid "orders CRM links" msgstr "" -#: engine/core/models.py:2087 +#: engine/core/models.py:2193 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2538,20 +2578,54 @@ msgid "" "the asset when the associated order is in a completed status." msgstr "" -#: engine/core/models.py:2103 +#: engine/core/models.py:2209 msgid "download" msgstr "" -#: engine/core/models.py:2104 +#: engine/core/models.py:2210 msgid "downloads" msgstr "" +#: engine/core/models.py:2228 +msgid "descriptive name for the image" +msgstr "" + +#: engine/core/models.py:2233 +msgid "image file pasted in the markdown editor" +msgstr "" + +#: engine/core/models.py:2239 +msgid "alt text" +msgstr "" + +#: engine/core/models.py:2240 +msgid "alternative text for accessibility" +msgstr "" + +#: engine/core/models.py:2244 +msgid "pasted image" +msgstr "" + +#: engine/core/models.py:2245 +msgid "pasted images" +msgstr "" + #: engine/core/serializers/utility.py:91 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" #: engine/core/sitemaps.py:25 +#: engine/core/templates/admin_doc/bookmarklets.html:8 +#: engine/core/templates/admin_doc/index.html:8 +#: engine/core/templates/admin_doc/missing_docutils.html:8 +#: engine/core/templates/admin_doc/model_detail.html:8 +#: engine/core/templates/admin_doc/model_index.html:8 +#: engine/core/templates/admin_doc/template_detail.html:8 +#: engine/core/templates/admin_doc/template_filter_index.html:8 +#: engine/core/templates/admin_doc/template_tag_index.html:8 +#: engine/core/templates/admin_doc/view_detail.html:8 +#: engine/core/templates/admin_doc/view_index.html:8 msgid "Home" msgstr "" @@ -2604,43 +2678,32 @@ msgstr "" msgid "Dashboard" msgstr "" -#: engine/core/templates/admin/dashboard/_income_overview.html:7 +#: engine/core/templates/admin/dashboard/_income_overview.html:6 msgid "Income overview" msgstr "" -#: engine/core/templates/admin/dashboard/_income_overview.html:31 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Net" +#: engine/core/templates/admin/dashboard/_income_overview.html:16 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" msgstr "" -#: engine/core/templates/admin/dashboard/_income_overview.html:37 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Taxes" -msgstr "" - -#: engine/core/templates/admin/dashboard/_income_overview.html:43 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 +#: engine/core/templates/admin/dashboard/_income_overview.html:21 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 msgid "Returns" msgstr "" -#: engine/core/templates/admin/dashboard/_income_overview.html:48 -msgid "Gross (pie total)" -msgstr "" - -#: engine/core/templates/admin/dashboard/_income_overview.html:72 -msgid "No data" -msgstr "" - +#: engine/core/templates/admin/dashboard/_income_overview.html:26 #: engine/core/templates/admin/dashboard/_kpis.html:6 msgid "GMV" msgstr "" -#: engine/core/templates/admin/dashboard/_kpis.html:34 -msgid "AOV" +#: engine/core/templates/admin/dashboard/_income_overview.html:50 +msgid "No data" msgstr "" -#: engine/core/templates/admin/dashboard/_kpis.html:48 -msgid "Net revenue" +#: engine/core/templates/admin/dashboard/_kpis.html:34 +msgid "AOV" msgstr "" #: engine/core/templates/admin/dashboard/_kpis.html:62 @@ -2655,7 +2718,7 @@ msgstr "" msgid "Low stock" msgstr "" -#: engine/core/templates/admin/dashboard/_low_stock.html:29 +#: engine/core/templates/admin/dashboard/_low_stock.html:33 msgid "No low stock items." msgstr "" @@ -2712,6 +2775,274 @@ msgstr "" msgid "Django site admin" msgstr "" +#: engine/core/templates/admin_doc/bookmarklets.html:4 +#: engine/core/templates/admin_doc/bookmarklets.html:17 +msgid "Documentation bookmarklets" +msgstr "" + +#: engine/core/templates/admin_doc/bookmarklets.html:10 +#: engine/core/templates/admin_doc/index.html:4 +#: engine/core/templates/admin_doc/index.html:10 +#: engine/core/templates/admin_doc/index.html:15 +#: engine/core/templates/admin_doc/missing_docutils.html:10 +#: engine/core/templates/admin_doc/missing_docutils.html:19 +#: engine/core/templates/admin_doc/model_detail.html:10 +#: engine/core/templates/admin_doc/model_index.html:10 +#: engine/core/templates/admin_doc/template_detail.html:10 +#: engine/core/templates/admin_doc/template_filter_index.html:10 +#: engine/core/templates/admin_doc/template_tag_index.html:10 +#: engine/core/templates/admin_doc/view_detail.html:10 +#: engine/core/templates/admin_doc/view_index.html:10 +msgid "Documentation" +msgstr "" + +#: engine/core/templates/admin_doc/bookmarklets.html:12 +#: engine/core/templates/admin_doc/index.html:53 +msgid "Bookmarklets" +msgstr "" + +#: engine/core/templates/admin_doc/bookmarklets.html:19 +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +#: engine/core/templates/admin_doc/bookmarklets.html:29 +msgid "Documentation for this page" +msgstr "" + +#: engine/core/templates/admin_doc/bookmarklets.html:31 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" + +#: engine/core/templates/admin_doc/index.html:21 +#: engine/core/templates/admin_doc/model_detail.html:12 +#: engine/core/templates/admin_doc/model_index.html:4 +#: engine/core/templates/admin_doc/model_index.html:12 +msgid "Models" +msgstr "" + +#: engine/core/templates/admin_doc/index.html:23 +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +#: engine/core/templates/admin_doc/index.html:29 +#: engine/core/templates/admin_doc/view_detail.html:12 +#: engine/core/templates/admin_doc/view_index.html:4 +#: engine/core/templates/admin_doc/view_index.html:12 +msgid "Views" +msgstr "" + +#: engine/core/templates/admin_doc/index.html:31 +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +#: engine/core/templates/admin_doc/index.html:39 +msgid "List of all the template tags and their functions." +msgstr "" + +#: engine/core/templates/admin_doc/index.html:45 +#: engine/core/templates/admin_doc/template_filter_index.html:12 +msgid "Filters" +msgstr "" + +#: engine/core/templates/admin_doc/index.html:47 +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +#: engine/core/templates/admin_doc/index.html:55 +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +#: engine/core/templates/admin_doc/missing_docutils.html:4 +msgid "Please install docutils" +msgstr "" + +#: engine/core/templates/admin_doc/missing_docutils.html:20 +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#: engine/core/templates/admin_doc/missing_docutils.html:21 +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#: engine/core/templates/admin_doc/model_detail.html:4 +#, python-format +msgid "Model: %(name)s" +msgstr "" + +#: engine/core/templates/admin_doc/model_detail.html:29 +msgid "Fields" +msgstr "" + +#: engine/core/templates/admin_doc/model_detail.html:36 +msgid "Field" +msgstr "" + +#: engine/core/templates/admin_doc/model_detail.html:37 +msgid "Type" +msgstr "" + +#: engine/core/templates/admin_doc/model_detail.html:38 +#: engine/core/templates/admin_doc/model_detail.html:70 +msgid "Description" +msgstr "" + +#: engine/core/templates/admin_doc/model_detail.html:61 +msgid "Methods with arguments" +msgstr "" + +#: engine/core/templates/admin_doc/model_detail.html:68 +msgid "Method" +msgstr "" + +#: engine/core/templates/admin_doc/model_detail.html:69 +msgid "Arguments" +msgstr "" + +#: engine/core/templates/admin_doc/model_detail.html:89 +msgid "Back to Model documentation" +msgstr "" + +#: engine/core/templates/admin_doc/model_index.html:17 +msgid "Model documentation" +msgstr "" + +#: engine/core/templates/admin_doc/model_index.html:44 +msgid "Model groups" +msgstr "" + +#: engine/core/templates/admin_doc/template_detail.html:4 +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#: engine/core/templates/admin_doc/template_detail.html:12 +msgid "Templates" +msgstr "" + +#: engine/core/templates/admin_doc/template_detail.html:17 +#, python-format +msgid "" +"Template: %(name)s" +msgstr "" + +#: engine/core/templates/admin_doc/template_detail.html:21 +#, python-format +msgid "Search path for template %(name)s:" +msgstr "" + +#: engine/core/templates/admin_doc/template_detail.html:29 +msgid "(does not exist)" +msgstr "" + +#: engine/core/templates/admin_doc/template_detail.html:40 +msgid "Back to Documentation" +msgstr "" + +#: engine/core/templates/admin_doc/template_filter_index.html:4 +msgid "Template filters" +msgstr "" + +#: engine/core/templates/admin_doc/template_filter_index.html:17 +msgid "Template filter documentation" +msgstr "" + +#: engine/core/templates/admin_doc/template_filter_index.html:26 +#: engine/core/templates/admin_doc/template_filter_index.html:52 +msgid "Built-in filters" +msgstr "" + +#: engine/core/templates/admin_doc/template_filter_index.html:29 +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before using " +"the filter." +msgstr "" + +#: engine/core/templates/admin_doc/template_tag_index.html:4 +msgid "Template tags" +msgstr "" + +#: engine/core/templates/admin_doc/template_tag_index.html:17 +msgid "Template tag documentation" +msgstr "" + +#: engine/core/templates/admin_doc/template_tag_index.html:26 +#: engine/core/templates/admin_doc/template_tag_index.html:52 +msgid "Built-in tags" +msgstr "" + +#: engine/core/templates/admin_doc/template_tag_index.html:29 +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using the tag." +msgstr "" + +#: engine/core/templates/admin_doc/view_detail.html:4 +#, python-format +msgid "View: %(name)s" +msgstr "" + +#: engine/core/templates/admin_doc/view_detail.html:28 +msgid "Context:" +msgstr "" + +#: engine/core/templates/admin_doc/view_detail.html:33 +msgid "Templates:" +msgstr "" + +#: engine/core/templates/admin_doc/view_detail.html:41 +msgid "Back to View documentation" +msgstr "" + +#: engine/core/templates/admin_doc/view_index.html:17 +msgid "View documentation" +msgstr "" + +#: engine/core/templates/admin_doc/view_index.html:28 +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +#: engine/core/templates/admin_doc/view_index.html:30 +msgid "Views by empty namespace" +msgstr "" + +#: engine/core/templates/admin_doc/view_index.html:40 +#, python-format +msgid "" +"View function: %(full_name)s. Name: %(url_name)s." +msgstr "" + +#: engine/core/templates/admin_doc/view_index.html:54 +msgid "Jump to namespace" +msgstr "" + +#: engine/core/templates/admin_doc/view_index.html:59 +msgid "Empty namespace" +msgstr "" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -2804,7 +3135,7 @@ msgid "" msgstr "" #: engine/core/templates/digital_order_delivered_email.html:137 -#: engine/core/templates/json_table_widget.html:6 +#: engine/core/templates/json_table_widget.html:26 msgid "value" msgstr "" @@ -2822,11 +3153,23 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "" -#: engine/core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:7 +msgid "Key" +msgstr "" + +#: engine/core/templates/json_table_widget.html:8 +msgid "Value" +msgstr "" + +#: engine/core/templates/json_table_widget.html:19 msgid "key" msgstr "" -#: engine/core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:32 +msgid "Delete row" +msgstr "" + +#: engine/core/templates/json_table_widget.html:44 msgid "Add Row" msgstr "" @@ -2908,58 +3251,67 @@ msgstr "" msgid "NOMINATIM_URL must be configured." msgstr "" -#: engine/core/validators.py:23 +#: engine/core/validators.py:18 +msgid "could not determine file type" +msgstr "" + +#: engine/core/validators.py:24 +#, python-brace-format +msgid "unsupported video format. supported formats: {supported}" +msgstr "" + +#: engine/core/validators.py:45 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" -#: engine/core/views.py:104 +#: engine/core/views.py:108 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." msgstr "" -#: engine/core/views.py:119 +#: engine/core/views.py:123 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " "Content-Type header for XML." msgstr "" -#: engine/core/views.py:155 +#: engine/core/views.py:174 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" -#: engine/core/views.py:182 +#: engine/core/views.py:201 msgid "Returns the parameters of the website as a JSON object." msgstr "" -#: engine/core/views.py:198 +#: engine/core/views.py:217 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." msgstr "" -#: engine/core/views.py:220 +#: engine/core/views.py:239 msgid "Handles `contact us` form submissions." msgstr "" -#: engine/core/views.py:236 +#: engine/core/views.py:255 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." msgstr "" -#: engine/core/views.py:273 +#: engine/core/views.py:292 msgid "Handles global search queries." msgstr "" -#: engine/core/views.py:289 +#: engine/core/views.py:308 msgid "Handles the logic of buying as a business without registration." msgstr "" -#: engine/core/views.py:337 +#: engine/core/views.py:356 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the " @@ -2967,31 +3319,31 @@ msgid "" "error is raised to indicate the resource is unavailable." msgstr "" -#: engine/core/views.py:348 +#: engine/core/views.py:367 msgid "order_product_uuid is required" msgstr "" -#: engine/core/views.py:355 +#: engine/core/views.py:374 msgid "order product does not exist" msgstr "" -#: engine/core/views.py:358 +#: engine/core/views.py:377 msgid "you can only download the digital asset once" msgstr "" -#: engine/core/views.py:362 +#: engine/core/views.py:381 msgid "the order must be paid before downloading the digital asset" msgstr "" -#: engine/core/views.py:369 +#: engine/core/views.py:388 msgid "the order product does not have a product" msgstr "" -#: engine/core/views.py:412 +#: engine/core/views.py:431 msgid "favicon not found" msgstr "" -#: engine/core/views.py:418 +#: engine/core/views.py:437 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static " @@ -2999,23 +3351,27 @@ msgid "" "error is raised to indicate the resource is unavailable." msgstr "" -#: engine/core/views.py:432 +#: engine/core/views.py:451 msgid "" "Redirects the request to the admin index page. The function handles incoming " "HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." msgstr "" -#: engine/core/views.py:445 +#: engine/core/views.py:464 msgid "Returns current version of the Schon. " msgstr "" -#: engine/core/views.py:674 engine/core/views.py:689 +#: engine/core/views.py:475 +msgid "no image file provided" +msgstr "" + +#: engine/core/views.py:710 engine/core/views.py:725 #, python-format msgid "Revenue & Orders (last %(days)d)" msgstr "" -#: engine/core/views.py:870 +#: engine/core/views.py:911 msgid "Returns custom variables for Dashboard. " msgstr "" @@ -3072,7 +3428,7 @@ msgid "" "endpoints for Brand objects." msgstr "" -#: engine/core/viewsets.py:458 +#: engine/core/viewsets.py:460 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3083,7 +3439,15 @@ msgid "" "product." msgstr "" -#: engine/core/viewsets.py:605 +#: engine/core/viewsets.py:541 +msgid "identificator_type and identificators are required" +msgstr "" + +#: engine/core/viewsets.py:554 +msgid "identificator_type must be one of: uuid, slug, sku" +msgstr "" + +#: engine/core/viewsets.py:635 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3092,7 +3456,7 @@ msgid "" "Vendor-related resources through the Django REST framework." msgstr "" -#: engine/core/viewsets.py:625 +#: engine/core/viewsets.py:655 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3102,7 +3466,7 @@ msgid "" "use of Django's filtering system for querying data." msgstr "" -#: engine/core/viewsets.py:652 +#: engine/core/viewsets.py:682 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3113,7 +3477,7 @@ msgid "" "enforces permissions accordingly while interacting with order data." msgstr "" -#: engine/core/viewsets.py:914 +#: engine/core/viewsets.py:944 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3122,25 +3486,25 @@ msgid "" "feedback on OrderProduct instances" msgstr "" -#: engine/core/viewsets.py:974 +#: engine/core/viewsets.py:1004 msgid "Manages operations related to Product images in the application. " msgstr "" -#: engine/core/viewsets.py:988 +#: engine/core/viewsets.py:1018 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "" -#: engine/core/viewsets.py:1019 +#: engine/core/viewsets.py:1049 msgid "Represents a view set for managing promotions. " msgstr "" -#: engine/core/viewsets.py:1032 +#: engine/core/viewsets.py:1062 msgid "Handles operations related to Stock data in the system." msgstr "" -#: engine/core/viewsets.py:1046 +#: engine/core/viewsets.py:1076 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3151,7 +3515,7 @@ msgid "" "are granted." msgstr "" -#: engine/core/viewsets.py:1183 +#: engine/core/viewsets.py:1213 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3160,12 +3524,12 @@ msgid "" "on the request context." msgstr "" -#: engine/core/viewsets.py:1254 +#: engine/core/viewsets.py:1275 #, python-brace-format msgid "Geocoding error: {e}" msgstr "" -#: engine/core/viewsets.py:1262 +#: engine/core/viewsets.py:1283 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/id_ID/LC_MESSAGES/django.mo b/engine/core/locale/id_ID/LC_MESSAGES/django.mo index 947ef658..1e1fec04 100644 Binary files a/engine/core/locale/id_ID/LC_MESSAGES/django.mo and b/engine/core/locale/id_ID/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/id_ID/LC_MESSAGES/django.po b/engine/core/locale/id_ID/LC_MESSAGES/django.po index a987750f..aeae8f01 100644 --- a/engine/core/locale/id_ID/LC_MESSAGES/django.po +++ b/engine/core/locale/id_ID/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -50,114 +50,134 @@ msgstr "Dimodifikasi" msgid "when the object was last modified" msgstr "Kapan objek terakhir kali diedit" -#: engine/core/admin.py:94 +#: engine/core/admin.py:98 msgid "translations" msgstr "Terjemahan" -#: engine/core/admin.py:102 +#: engine/core/admin.py:106 msgid "general" msgstr "Umum" -#: engine/core/admin.py:106 +#: engine/core/admin.py:110 msgid "relations" msgstr "Hubungan" -#: engine/core/admin.py:111 +#: engine/core/admin.py:115 msgid "additional info" msgstr "info tambahan" -#: engine/core/admin.py:133 +#: engine/core/admin.py:137 msgid "metadata" msgstr "Metadata" -#: engine/core/admin.py:141 +#: engine/core/admin.py:145 msgid "timestamps" msgstr "Stempel waktu" -#: engine/core/admin.py:158 +#: engine/core/admin.py:162 #, python-format msgid "Activate selected %(verbose_name_plural)s" msgstr "Aktifkan yang terpilih %(verbose_name_plural)s" -#: engine/core/admin.py:166 +#: engine/core/admin.py:170 msgid "selected items have been activated." msgstr "Item yang dipilih telah diaktifkan!" -#: engine/core/admin.py:174 +#: engine/core/admin.py:178 #, python-format msgid "Deactivate selected %(verbose_name_plural)s" msgstr "Nonaktifkan yang dipilih %(verbose_name_plural)s" -#: engine/core/admin.py:184 +#: engine/core/admin.py:188 msgid "selected items have been deactivated." msgstr "Item yang dipilih telah dinonaktifkan!" -#: engine/core/admin.py:196 engine/core/graphene/object_types.py:653 -#: engine/core/graphene/object_types.py:660 engine/core/models.py:832 -#: engine/core/models.py:840 +#: engine/core/admin.py:200 engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:673 engine/core/models.py:918 +#: engine/core/models.py:928 msgid "attribute value" msgstr "Nilai Atribut" -#: engine/core/admin.py:197 engine/core/graphene/object_types.py:77 -#: engine/core/models.py:841 +#: engine/core/admin.py:201 engine/core/graphene/object_types.py:81 +#: engine/core/models.py:929 msgid "attribute values" msgstr "Nilai Atribut" -#: engine/core/admin.py:208 +#: engine/core/admin.py:212 engine/core/models.py:2232 msgid "image" msgstr "Gambar" -#: engine/core/admin.py:209 engine/core/graphene/object_types.py:530 +#: engine/core/admin.py:213 engine/core/graphene/object_types.py:535 msgid "images" msgstr "Gambar" -#: engine/core/admin.py:220 engine/core/models.py:576 +#: engine/core/admin.py:224 engine/core/models.py:635 msgid "stock" msgstr "Stok" -#: engine/core/admin.py:221 engine/core/graphene/object_types.py:713 +#: engine/core/admin.py:225 engine/core/graphene/object_types.py:735 msgid "stocks" msgstr "Saham" -#: engine/core/admin.py:232 engine/core/models.py:1938 +#: engine/core/admin.py:236 engine/core/models.py:2046 msgid "order product" msgstr "Pesan Produk" -#: engine/core/admin.py:233 engine/core/graphene/object_types.py:441 -#: engine/core/models.py:1939 +#: engine/core/admin.py:237 engine/core/graphene/object_types.py:446 +#: engine/core/models.py:2047 msgid "order products" msgstr "Pesan Produk" -#: engine/core/admin.py:251 engine/core/admin.py:252 +#: engine/core/admin.py:255 engine/core/admin.py:256 msgid "children" msgstr "Anak-anak" -#: engine/core/admin.py:528 +#: engine/core/admin.py:545 +msgid "video preview" +msgstr "Pratinjau video" + +#: engine/core/admin.py:551 msgid "has images" msgstr "Memiliki gambar" -#: engine/core/admin.py:531 +#: engine/core/admin.py:554 #, python-format msgid "Export selected %(verbose_name_plural)s to marketplaces' feeds" msgstr "Ekspor %(verbose_name_plural)s yang dipilih ke feed pasar online." -#: engine/core/admin.py:542 +#: engine/core/admin.py:565 #, python-format msgid "selected %(verbose_name_plural)s have been marked for export." msgstr "Item terpilih %(verbose_name_plural)s telah ditandai untuk diekspor." -#: engine/core/admin.py:553 +#: engine/core/admin.py:576 #, python-format msgid "Ban selected %(verbose_name_plural)s from marketplaces' feeds" msgstr "Blokir %(verbose_name_plural)s yang dipilih dari umpan pasar." -#: engine/core/admin.py:564 +#: engine/core/admin.py:587 #, python-format msgid "selected %(verbose_name_plural)s have been banned from export." msgstr "" "Produk terpilih %(verbose_name_plural)s telah dilarang untuk diekspor." -#: engine/core/admin.py:1116 +#: engine/core/admin.py:1030 +msgid "Preview" +msgstr "Pratinjau" + +#: engine/core/admin.py:1031 +msgid "Metadata" +msgstr "Metadata" + +#: engine/core/admin.py:1034 +msgid "preview" +msgstr "Pratinjau" + +#: engine/core/admin.py:1043 +msgid "image preview" +msgstr "Pratinjau gambar" + +#: engine/core/admin.py:1166 msgid "Config" msgstr "Konfigurasi" @@ -223,7 +243,7 @@ msgstr "" "Skema OpenApi3 untuk API ini. Format dapat dipilih melalui negosiasi konten." " Bahasa dapat dipilih dengan parameter Accept-Language dan parameter kueri." -#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:36 +#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "I/O Cache" @@ -247,7 +267,7 @@ msgstr "Dapatkan parameter aplikasi yang dapat diekspos" msgid "send a message to the support team" msgstr "Kirim pesan ke tim dukungan" -#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:59 msgid "request a CORSed URL" msgstr "Meminta URL CORSed. Hanya https yang diizinkan." @@ -394,11 +414,11 @@ msgstr "" "Menulis ulang beberapa bidang dari kategori yang sudah ada sehingga tidak " "dapat diedit" -#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757 -#: engine/core/docs/drf/viewsets.py:1046 -#: engine/core/graphene/object_types.py:119 -#: engine/core/graphene/object_types.py:239 -#: engine/core/graphene/object_types.py:540 +#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:781 +#: engine/core/docs/drf/viewsets.py:1070 +#: engine/core/graphene/object_types.py:123 +#: engine/core/graphene/object_types.py:247 +#: engine/core/graphene/object_types.py:546 msgid "SEO Meta snapshot" msgstr "Cuplikan Meta SEO" @@ -706,7 +726,7 @@ msgstr "Mengambil satu produk (tampilan detail)" #: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683 #: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725 -#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763 +#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:787 msgid "Product UUID or slug" msgstr "UUID Produk atau Siput" @@ -735,297 +755,311 @@ msgstr "Menghapus produk" msgid "lists all permitted feedbacks for a product" msgstr "mencantumkan semua umpan balik yang diizinkan untuk suatu produk" -#: engine/core/docs/drf/viewsets.py:758 +#: engine/core/docs/drf/viewsets.py:757 +msgid "retrieve exact products by identifier" +msgstr "Mendapatkan produk yang tepat berdasarkan identifikasi." + +#: engine/core/docs/drf/viewsets.py:759 +msgid "" +"retrieve a list of products by identifier type (uuid, slug, or sku). Send a " +"POST request with `identificator_type` and `identificators` (list of " +"values)." +msgstr "" +"Mendapatkan daftar produk berdasarkan jenis identifikasi (UUID, slug, atau " +"SKU). Kirim permintaan POST dengan `jenis_identifikasi` dan `identifikasi` " +"(daftar nilai)." + +#: engine/core/docs/drf/viewsets.py:782 msgid "returns a snapshot of the product's SEO meta data" msgstr "Mengembalikan cuplikan data meta SEO produk" -#: engine/core/docs/drf/viewsets.py:779 +#: engine/core/docs/drf/viewsets.py:803 msgid "list all addresses" msgstr "Daftar semua alamat" -#: engine/core/docs/drf/viewsets.py:789 +#: engine/core/docs/drf/viewsets.py:813 msgid "retrieve a single address" msgstr "Mengambil satu alamat" -#: engine/core/docs/drf/viewsets.py:799 +#: engine/core/docs/drf/viewsets.py:823 msgid "create a new address" msgstr "Membuat alamat baru" -#: engine/core/docs/drf/viewsets.py:810 +#: engine/core/docs/drf/viewsets.py:834 msgid "delete an address" msgstr "Menghapus alamat" -#: engine/core/docs/drf/viewsets.py:820 +#: engine/core/docs/drf/viewsets.py:844 msgid "update an entire address" msgstr "Memperbarui seluruh alamat" -#: engine/core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:855 msgid "partially update an address" msgstr "Memperbarui sebagian alamat" -#: engine/core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:866 msgid "autocomplete address suggestions" msgstr "Masukan alamat pelengkapan otomatis" -#: engine/core/docs/drf/viewsets.py:848 +#: engine/core/docs/drf/viewsets.py:872 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" "String kueri data mentah, harap tambahkan dengan data dari titik akhir geo-" "IP" -#: engine/core/docs/drf/viewsets.py:855 +#: engine/core/docs/drf/viewsets.py:879 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "membatasi jumlah hasil, 1 " msgstr "{name} tidak ada dengan kueri <{query}>!" -#: engine/core/models.py:1519 +#: engine/core/models.py:1620 msgid "promocode does not exist" msgstr "Kode promosi tidak ada" -#: engine/core/models.py:1534 +#: engine/core/models.py:1635 msgid "you can only buy physical products with shipping address specified" msgstr "" "Anda hanya dapat membeli produk fisik dengan alamat pengiriman yang " "ditentukan!" -#: engine/core/models.py:1555 +#: engine/core/models.py:1656 msgid "address does not exist" msgstr "Alamat tidak ada" -#: engine/core/models.py:1577 engine/core/models.py:1656 +#: engine/core/models.py:1678 engine/core/models.py:1757 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." -#: engine/core/models.py:1583 engine/core/models.py:1649 +#: engine/core/models.py:1684 engine/core/models.py:1750 msgid "invalid force value" msgstr "Nilai gaya tidak valid" -#: engine/core/models.py:1589 engine/core/models.py:1660 +#: engine/core/models.py:1690 engine/core/models.py:1761 msgid "you cannot purchase an empty order!" msgstr "Anda tidak dapat membeli pesanan kosong!" -#: engine/core/models.py:1610 +#: engine/core/models.py:1711 msgid "you cannot buy an order without a user" msgstr "Anda tidak dapat membeli pesanan tanpa pengguna!" -#: engine/core/models.py:1624 +#: engine/core/models.py:1725 msgid "a user without a balance cannot buy with balance" msgstr "Pengguna tanpa saldo tidak dapat membeli dengan saldo!" -#: engine/core/models.py:1630 +#: engine/core/models.py:1731 msgid "insufficient funds to complete the order" msgstr "Dana tidak mencukupi untuk menyelesaikan pesanan" -#: engine/core/models.py:1671 +#: engine/core/models.py:1772 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2619,7 +2663,7 @@ msgstr "" "Anda tidak dapat membeli tanpa registrasi, berikan informasi berikut: nama " "pelanggan, email pelanggan, nomor telepon pelanggan" -#: engine/core/models.py:1682 +#: engine/core/models.py:1783 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2627,7 +2671,7 @@ msgstr "" "Metode pembayaran tidak valid: {payment_method} dari " "{available_payment_methods}!" -#: engine/core/models.py:1813 +#: engine/core/models.py:1916 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2642,33 +2686,33 @@ msgstr "" "ditetapkan pengguna. Kelas ini menggunakan bidang basis data untuk " "memodelkan dan mengelola data umpan balik secara efektif." -#: engine/core/models.py:1825 +#: engine/core/models.py:1928 msgid "user-provided comments about their experience with the product" msgstr "" "Komentar yang diberikan pengguna tentang pengalaman mereka dengan produk" -#: engine/core/models.py:1826 +#: engine/core/models.py:1929 msgid "feedback comments" msgstr "Komentar umpan balik" -#: engine/core/models.py:1834 +#: engine/core/models.py:1937 msgid "" "references the specific product in an order that this feedback is about" msgstr "Merujuk ke produk tertentu sesuai dengan urutan umpan balik ini" -#: engine/core/models.py:1836 +#: engine/core/models.py:1939 msgid "related order product" msgstr "Produk pesanan terkait" -#: engine/core/models.py:1841 +#: engine/core/models.py:1944 msgid "user-assigned rating for the product" msgstr "Peringkat yang ditetapkan pengguna untuk produk" -#: engine/core/models.py:1842 +#: engine/core/models.py:1945 msgid "product rating" msgstr "Peringkat produk" -#: engine/core/models.py:1862 +#: engine/core/models.py:1965 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2690,110 +2734,110 @@ msgstr "" "URL unduhan untuk produk digital. Model ini terintegrasi dengan model " "Pesanan dan Produk dan menyimpan referensi ke keduanya." -#: engine/core/models.py:1877 +#: engine/core/models.py:1985 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" -#: engine/core/models.py:1878 +#: engine/core/models.py:1986 msgid "purchase price at order time" msgstr "Harga pembelian pada saat pemesanan" -#: engine/core/models.py:1883 +#: engine/core/models.py:1991 msgid "internal comments for admins about this ordered product" msgstr "Komentar internal untuk admin tentang produk yang dipesan ini" -#: engine/core/models.py:1884 +#: engine/core/models.py:1992 msgid "internal comments" msgstr "Komentar internal" -#: engine/core/models.py:1890 +#: engine/core/models.py:1998 msgid "user notifications" msgstr "Pemberitahuan pengguna" -#: engine/core/models.py:1895 +#: engine/core/models.py:2003 msgid "json representation of this item's attributes" msgstr "Representasi JSON dari atribut item ini" -#: engine/core/models.py:1896 +#: engine/core/models.py:2004 msgid "ordered product attributes" msgstr "Atribut produk yang dipesan" -#: engine/core/models.py:1901 +#: engine/core/models.py:2009 msgid "reference to the parent order that contains this product" msgstr "Referensi ke pesanan induk yang berisi produk ini" -#: engine/core/models.py:1902 +#: engine/core/models.py:2010 msgid "parent order" msgstr "Urutan induk" -#: engine/core/models.py:1911 +#: engine/core/models.py:2019 msgid "the specific product associated with this order line" msgstr "Produk spesifik yang terkait dengan baris pesanan ini" -#: engine/core/models.py:1918 +#: engine/core/models.py:2026 msgid "quantity of this specific product in the order" msgstr "Jumlah produk spesifik ini dalam pesanan" -#: engine/core/models.py:1919 +#: engine/core/models.py:2027 msgid "product quantity" msgstr "Kuantitas produk" -#: engine/core/models.py:1926 +#: engine/core/models.py:2034 msgid "current status of this product in the order" msgstr "Status saat ini dari produk ini dalam pesanan" -#: engine/core/models.py:1927 +#: engine/core/models.py:2035 msgid "product line status" msgstr "Status lini produk" -#: engine/core/models.py:1998 +#: engine/core/models.py:2106 msgid "order product must have an order" msgstr "Pesananproduk harus memiliki pesanan terkait!" -#: engine/core/models.py:2000 +#: engine/core/models.py:2108 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Tindakan yang salah ditentukan untuk umpan balik: {action}!" -#: engine/core/models.py:2017 +#: engine/core/models.py:2125 msgid "you cannot feedback an order which is not received" msgstr "" "Anda tidak dapat memberikan umpan balik atas pesanan yang tidak diterima" -#: engine/core/models.py:2026 +#: engine/core/models.py:2132 engine/core/models.py:2227 msgid "name" msgstr "Nama" -#: engine/core/models.py:2028 +#: engine/core/models.py:2134 msgid "URL of the integration" msgstr "URL integrasi" -#: engine/core/models.py:2031 +#: engine/core/models.py:2137 msgid "authentication credentials" msgstr "Kredensial otentikasi" -#: engine/core/models.py:2054 +#: engine/core/models.py:2160 msgid "you can only have one default CRM provider" msgstr "Anda hanya dapat memiliki satu penyedia CRM default" -#: engine/core/models.py:2064 +#: engine/core/models.py:2170 msgid "CRM" msgstr "CRM" -#: engine/core/models.py:2065 +#: engine/core/models.py:2171 msgid "CRMs" msgstr "CRM" -#: engine/core/models.py:2081 +#: engine/core/models.py:2187 msgid "order CRM link" msgstr "Tautan CRM pesanan" -#: engine/core/models.py:2082 +#: engine/core/models.py:2188 msgid "orders CRM links" msgstr "Tautan CRM Pesanan" -#: engine/core/models.py:2087 +#: engine/core/models.py:2193 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2810,14 +2854,38 @@ msgstr "" "untuk menghasilkan URL untuk mengunduh aset ketika pesanan terkait dalam " "status selesai." -#: engine/core/models.py:2103 +#: engine/core/models.py:2209 msgid "download" msgstr "Unduh" -#: engine/core/models.py:2104 +#: engine/core/models.py:2210 msgid "downloads" msgstr "Unduhan" +#: engine/core/models.py:2228 +msgid "descriptive name for the image" +msgstr "Nama deskriptif untuk gambar" + +#: engine/core/models.py:2233 +msgid "image file pasted in the markdown editor" +msgstr "Berkas gambar yang disisipkan di editor Markdown" + +#: engine/core/models.py:2239 +msgid "alt text" +msgstr "Teks lain" + +#: engine/core/models.py:2240 +msgid "alternative text for accessibility" +msgstr "Teks alternatif untuk aksesibilitas" + +#: engine/core/models.py:2244 +msgid "pasted image" +msgstr "Gambar yang ditempelkan" + +#: engine/core/models.py:2245 +msgid "pasted images" +msgstr "Gambar yang disalin" + #: engine/core/serializers/utility.py:91 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." @@ -2826,6 +2894,16 @@ msgstr "" "menambahkan umpan balik." #: engine/core/sitemaps.py:25 +#: engine/core/templates/admin_doc/bookmarklets.html:8 +#: engine/core/templates/admin_doc/index.html:8 +#: engine/core/templates/admin_doc/missing_docutils.html:8 +#: engine/core/templates/admin_doc/model_detail.html:8 +#: engine/core/templates/admin_doc/model_index.html:8 +#: engine/core/templates/admin_doc/template_detail.html:8 +#: engine/core/templates/admin_doc/template_filter_index.html:8 +#: engine/core/templates/admin_doc/template_tag_index.html:8 +#: engine/core/templates/admin_doc/view_detail.html:8 +#: engine/core/templates/admin_doc/view_index.html:8 msgid "Home" msgstr "Beranda" @@ -2878,45 +2956,34 @@ msgstr "Kotor" msgid "Dashboard" msgstr "Dasbor" -#: engine/core/templates/admin/dashboard/_income_overview.html:7 +#: engine/core/templates/admin/dashboard/_income_overview.html:6 msgid "Income overview" msgstr "Ikhtisar pendapatan" -#: engine/core/templates/admin/dashboard/_income_overview.html:31 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Net" +#: engine/core/templates/admin/dashboard/_income_overview.html:16 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" msgstr "Pendapatan bersih" -#: engine/core/templates/admin/dashboard/_income_overview.html:37 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Taxes" -msgstr "Pajak" - -#: engine/core/templates/admin/dashboard/_income_overview.html:43 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 +#: engine/core/templates/admin/dashboard/_income_overview.html:21 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 msgid "Returns" msgstr "Pengembalian" -#: engine/core/templates/admin/dashboard/_income_overview.html:48 -msgid "Gross (pie total)" -msgstr "Pendapatan kotor" - -#: engine/core/templates/admin/dashboard/_income_overview.html:72 -msgid "No data" -msgstr "Tidak ada tanggal" - +#: engine/core/templates/admin/dashboard/_income_overview.html:26 #: engine/core/templates/admin/dashboard/_kpis.html:6 msgid "GMV" msgstr "GMV" +#: engine/core/templates/admin/dashboard/_income_overview.html:50 +msgid "No data" +msgstr "Tidak ada tanggal" + #: engine/core/templates/admin/dashboard/_kpis.html:34 msgid "AOV" msgstr "AOV" -#: engine/core/templates/admin/dashboard/_kpis.html:48 -msgid "Net revenue" -msgstr "Pendapatan bersih" - #: engine/core/templates/admin/dashboard/_kpis.html:62 msgid "Refund rate" msgstr "Tingkat pengembalian dana" @@ -2929,7 +2996,7 @@ msgstr "Kembali" msgid "Low stock" msgstr "Stok rendah" -#: engine/core/templates/admin/dashboard/_low_stock.html:29 +#: engine/core/templates/admin/dashboard/_low_stock.html:33 msgid "No low stock items." msgstr "Tidak ada stok barang yang rendah." @@ -2986,6 +3053,302 @@ msgstr "Tidak ada penjualan kategori dalam 30 hari terakhir." msgid "Django site admin" msgstr "Admin situs Django" +#: engine/core/templates/admin_doc/bookmarklets.html:4 +#: engine/core/templates/admin_doc/bookmarklets.html:17 +msgid "Documentation bookmarklets" +msgstr "Bookmarklet dokumentasi" + +#: engine/core/templates/admin_doc/bookmarklets.html:10 +#: engine/core/templates/admin_doc/index.html:4 +#: engine/core/templates/admin_doc/index.html:10 +#: engine/core/templates/admin_doc/index.html:15 +#: engine/core/templates/admin_doc/missing_docutils.html:10 +#: engine/core/templates/admin_doc/missing_docutils.html:19 +#: engine/core/templates/admin_doc/model_detail.html:10 +#: engine/core/templates/admin_doc/model_index.html:10 +#: engine/core/templates/admin_doc/template_detail.html:10 +#: engine/core/templates/admin_doc/template_filter_index.html:10 +#: engine/core/templates/admin_doc/template_tag_index.html:10 +#: engine/core/templates/admin_doc/view_detail.html:10 +#: engine/core/templates/admin_doc/view_index.html:10 +msgid "Documentation" +msgstr "Dokumentasi" + +#: engine/core/templates/admin_doc/bookmarklets.html:12 +#: engine/core/templates/admin_doc/index.html:53 +msgid "Bookmarklets" +msgstr "Bookmarklet" + +#: engine/core/templates/admin_doc/bookmarklets.html:19 +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Untuk menginstal bookmarklet, seret tautan ke bilah bookmark Anda, atau klik" +" kanan tautan dan tambahkan ke bookmark Anda. Sekarang Anda dapat memilih " +"bookmarklet dari halaman mana pun di situs ini." + +#: engine/core/templates/admin_doc/bookmarklets.html:29 +msgid "Documentation for this page" +msgstr "Dokumentasi untuk halaman ini" + +#: engine/core/templates/admin_doc/bookmarklets.html:31 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Membawa Anda dari halaman mana pun ke dokumentasi untuk tampilan yang " +"menghasilkan halaman tersebut." + +#: engine/core/templates/admin_doc/index.html:21 +#: engine/core/templates/admin_doc/model_detail.html:12 +#: engine/core/templates/admin_doc/model_index.html:4 +#: engine/core/templates/admin_doc/model_index.html:12 +msgid "Models" +msgstr "Model" + +#: engine/core/templates/admin_doc/index.html:23 +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Model adalah deskripsi dari semua objek dalam sistem dan bidang-bidang yang " +"terkait dengannya. Setiap model memiliki daftar bidang yang dapat diakses " +"sebagai variabel templat." + +#: engine/core/templates/admin_doc/index.html:29 +#: engine/core/templates/admin_doc/view_detail.html:12 +#: engine/core/templates/admin_doc/view_index.html:4 +#: engine/core/templates/admin_doc/view_index.html:12 +msgid "Views" +msgstr "Pandangan" + +#: engine/core/templates/admin_doc/index.html:31 +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Setiap halaman di situs publik dihasilkan oleh sebuah tampilan. Tampilan " +"tersebut menentukan templat mana yang digunakan untuk menghasilkan halaman " +"dan objek-objek mana yang tersedia untuk templat tersebut." + +#: engine/core/templates/admin_doc/index.html:39 +msgid "List of all the template tags and their functions." +msgstr "Daftar semua tag template dan fungsinya." + +#: engine/core/templates/admin_doc/index.html:45 +#: engine/core/templates/admin_doc/template_filter_index.html:12 +msgid "Filters" +msgstr "Filter" + +#: engine/core/templates/admin_doc/index.html:47 +msgid "" +"Filters are actions which can be applied to variables in a template to alter" +" the output." +msgstr "" +"Filter adalah tindakan yang dapat diterapkan pada variabel dalam templat " +"untuk mengubah output." + +#: engine/core/templates/admin_doc/index.html:55 +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Alat untuk browser Anda agar dapat mengakses fungsi admin dengan cepat." + +#: engine/core/templates/admin_doc/missing_docutils.html:4 +msgid "Please install docutils" +msgstr "Silakan instal docutils" + +#: engine/core/templates/admin_doc/missing_docutils.html:20 +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"Sistem dokumentasi admin memerlukan perpustakaan docutils dari Python." + +#: engine/core/templates/admin_doc/missing_docutils.html:21 +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Mohon minta administrator Anda untuk menginstal docutils." + +#: engine/core/templates/admin_doc/model_detail.html:4 +#, python-format +msgid "Model: %(name)s" +msgstr "Model: %(name)s" + +#: engine/core/templates/admin_doc/model_detail.html:29 +msgid "Fields" +msgstr "Bidang" + +#: engine/core/templates/admin_doc/model_detail.html:36 +msgid "Field" +msgstr "Lapangan" + +#: engine/core/templates/admin_doc/model_detail.html:37 +msgid "Type" +msgstr "Jenis" + +#: engine/core/templates/admin_doc/model_detail.html:38 +#: engine/core/templates/admin_doc/model_detail.html:70 +msgid "Description" +msgstr "Deskripsi" + +#: engine/core/templates/admin_doc/model_detail.html:61 +msgid "Methods with arguments" +msgstr "Metode dengan argumen" + +#: engine/core/templates/admin_doc/model_detail.html:68 +msgid "Method" +msgstr "Metode" + +#: engine/core/templates/admin_doc/model_detail.html:69 +msgid "Arguments" +msgstr "Argumen" + +#: engine/core/templates/admin_doc/model_detail.html:89 +msgid "Back to Model documentation" +msgstr "Kembali ke Dokumentasi Model" + +#: engine/core/templates/admin_doc/model_index.html:17 +msgid "Model documentation" +msgstr "Dokumentasi model" + +#: engine/core/templates/admin_doc/model_index.html:44 +msgid "Model groups" +msgstr "Kelompok model" + +#: engine/core/templates/admin_doc/template_detail.html:4 +#, python-format +msgid "Template: %(name)s" +msgstr "Template: %(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:12 +msgid "Templates" +msgstr "Template" + +#: engine/core/templates/admin_doc/template_detail.html:17 +#, python-format +msgid "" +"Template: %(name)s" +msgstr "" +"Template: %(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:21 +#, python-format +msgid "Search path for template %(name)s:" +msgstr "Jalur pencarian untuk templat %(name)s:" + +#: engine/core/templates/admin_doc/template_detail.html:29 +msgid "(does not exist)" +msgstr "(tidak ada)" + +#: engine/core/templates/admin_doc/template_detail.html:40 +msgid "Back to Documentation" +msgstr "Kembali ke Dokumentasi" + +#: engine/core/templates/admin_doc/template_filter_index.html:4 +msgid "Template filters" +msgstr "Filter templat" + +#: engine/core/templates/admin_doc/template_filter_index.html:17 +msgid "Template filter documentation" +msgstr "Dokumentasi filter template" + +#: engine/core/templates/admin_doc/template_filter_index.html:26 +#: engine/core/templates/admin_doc/template_filter_index.html:52 +msgid "Built-in filters" +msgstr "Filter bawaan" + +#: engine/core/templates/admin_doc/template_filter_index.html:29 +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before using" +" the filter." +msgstr "" +"Untuk menggunakan filter ini, masukkan %(code)s di templat Anda " +"sebelum menggunakan filter." + +#: engine/core/templates/admin_doc/template_tag_index.html:4 +msgid "Template tags" +msgstr "Tag templat" + +#: engine/core/templates/admin_doc/template_tag_index.html:17 +msgid "Template tag documentation" +msgstr "Dokumentasi tag templat" + +#: engine/core/templates/admin_doc/template_tag_index.html:26 +#: engine/core/templates/admin_doc/template_tag_index.html:52 +msgid "Built-in tags" +msgstr "Tag bawaan" + +#: engine/core/templates/admin_doc/template_tag_index.html:29 +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using the tag." +msgstr "" +"Untuk menggunakan tag-tag ini, masukkan %(code)s di templat Anda " +"sebelum menggunakan tag tersebut." + +#: engine/core/templates/admin_doc/view_detail.html:4 +#, python-format +msgid "View: %(name)s" +msgstr "Tampilan: %(name)s" + +#: engine/core/templates/admin_doc/view_detail.html:28 +msgid "Context:" +msgstr "Kontekst:" + +#: engine/core/templates/admin_doc/view_detail.html:33 +msgid "Templates:" +msgstr "Template:" + +#: engine/core/templates/admin_doc/view_detail.html:41 +msgid "Back to View documentation" +msgstr "Kembali ke Lihat dokumentasi" + +#: engine/core/templates/admin_doc/view_index.html:17 +msgid "View documentation" +msgstr "Lihat dokumentasi" + +#: engine/core/templates/admin_doc/view_index.html:28 +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Pandangan berdasarkan namespace %(name)s" + +#: engine/core/templates/admin_doc/view_index.html:30 +msgid "Views by empty namespace" +msgstr "Pandangan oleh namespace kosong" + +#: engine/core/templates/admin_doc/view_index.html:40 +#, python-format +msgid "" +"View function: %(full_name)s. Name: %(url_name)s." +msgstr "" +"Fungsi tampilan: %(full_name)s. Nama: " +"%(url_name)s." + +#: engine/core/templates/admin_doc/view_index.html:54 +msgid "Jump to namespace" +msgstr "Lompat ke namespace" + +#: engine/core/templates/admin_doc/view_index.html:59 +msgid "Empty namespace" +msgstr "Nama ruang kosong" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -3086,7 +3449,7 @@ msgstr "" " informasi" #: engine/core/templates/digital_order_delivered_email.html:137 -#: engine/core/templates/json_table_widget.html:6 +#: engine/core/templates/json_table_widget.html:26 msgid "value" msgstr "Nilai" @@ -3106,11 +3469,23 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "Salam hormat, tim %(project_name)s" -#: engine/core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:7 +msgid "Key" +msgstr "Kunci" + +#: engine/core/templates/json_table_widget.html:8 +msgid "Value" +msgstr "Nilai" + +#: engine/core/templates/json_table_widget.html:19 msgid "key" msgstr "Kunci" -#: engine/core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:32 +msgid "Delete row" +msgstr "Hapus baris" + +#: engine/core/templates/json_table_widget.html:44 msgid "Add Row" msgstr "Tambahkan Baris" @@ -3197,13 +3572,22 @@ msgstr "Anda tidak memiliki izin untuk melakukan tindakan ini." msgid "NOMINATIM_URL must be configured." msgstr "Parameter NOMINATIM_URL harus dikonfigurasi!" -#: engine/core/validators.py:23 +#: engine/core/validators.py:18 +msgid "could not determine file type" +msgstr "Tidak dapat menentukan jenis file" + +#: engine/core/validators.py:24 +#, python-brace-format +msgid "unsupported video format. supported formats: {supported}" +msgstr "Format video tidak didukung. Format yang didukung: {supported}" + +#: engine/core/validators.py:45 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "Dimensi gambar tidak boleh melebihi w{max_width} x h{max_height} piksel!" -#: engine/core/views.py:104 +#: engine/core/views.py:108 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3211,7 +3595,7 @@ msgstr "" "Menangani permintaan indeks peta situs dan mengembalikan respons XML. " "Memastikan respons menyertakan header jenis konten yang sesuai untuk XML." -#: engine/core/views.py:119 +#: engine/core/views.py:123 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3221,16 +3605,16 @@ msgstr "" "permintaan, mengambil respons detail peta situs yang sesuai, dan menetapkan " "header Jenis Konten untuk XML." -#: engine/core/views.py:155 +#: engine/core/views.py:174 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "Mengembalikan daftar bahasa yang didukung dan informasi terkait." -#: engine/core/views.py:182 +#: engine/core/views.py:201 msgid "Returns the parameters of the website as a JSON object." msgstr "Mengembalikan parameter situs web sebagai objek JSON." -#: engine/core/views.py:198 +#: engine/core/views.py:217 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3238,11 +3622,11 @@ msgstr "" "Menangani operasi cache seperti membaca dan mengatur data cache dengan kunci" " dan batas waktu tertentu." -#: engine/core/views.py:220 +#: engine/core/views.py:239 msgid "Handles `contact us` form submissions." msgstr "Menangani pengiriman formulir `hubungi kami`." -#: engine/core/views.py:236 +#: engine/core/views.py:255 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3250,15 +3634,15 @@ msgstr "" "Menangani permintaan untuk memproses dan memvalidasi URL dari permintaan " "POST yang masuk." -#: engine/core/views.py:273 +#: engine/core/views.py:292 msgid "Handles global search queries." msgstr "Menangani kueri penelusuran global." -#: engine/core/views.py:289 +#: engine/core/views.py:308 msgid "Handles the logic of buying as a business without registration." msgstr "Menangani logika pembelian sebagai bisnis tanpa registrasi." -#: engine/core/views.py:337 +#: engine/core/views.py:356 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3266,31 +3650,31 @@ msgstr "" "Menangani pengunduhan aset digital yang terkait dengan pesanan.\n" "Fungsi ini mencoba untuk menyajikan file aset digital yang terletak di direktori penyimpanan proyek. Jika file tidak ditemukan, kesalahan HTTP 404 akan muncul untuk mengindikasikan bahwa sumber daya tidak tersedia." -#: engine/core/views.py:348 +#: engine/core/views.py:367 msgid "order_product_uuid is required" msgstr "order_product_uuid diperlukan" -#: engine/core/views.py:355 +#: engine/core/views.py:374 msgid "order product does not exist" msgstr "produk pesanan tidak ada" -#: engine/core/views.py:358 +#: engine/core/views.py:377 msgid "you can only download the digital asset once" msgstr "Anda hanya dapat mengunduh aset digital sekali saja" -#: engine/core/views.py:362 +#: engine/core/views.py:381 msgid "the order must be paid before downloading the digital asset" msgstr "pesanan harus dibayar sebelum mengunduh aset digital" -#: engine/core/views.py:369 +#: engine/core/views.py:388 msgid "the order product does not have a product" msgstr "Produk pesanan tidak memiliki produk" -#: engine/core/views.py:412 +#: engine/core/views.py:431 msgid "favicon not found" msgstr "favicon tidak ditemukan" -#: engine/core/views.py:418 +#: engine/core/views.py:437 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3298,7 +3682,7 @@ msgstr "" "Menangani permintaan favicon dari sebuah situs web.\n" "Fungsi ini mencoba menyajikan file favicon yang terletak di direktori statis proyek. Jika file favicon tidak ditemukan, kesalahan HTTP 404 akan dimunculkan untuk mengindikasikan bahwa sumber daya tidak tersedia." -#: engine/core/views.py:432 +#: engine/core/views.py:451 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3309,16 +3693,20 @@ msgstr "" "admin Django. Fungsi ini menggunakan fungsi `redirect` Django untuk " "menangani pengalihan HTTP." -#: engine/core/views.py:445 +#: engine/core/views.py:464 msgid "Returns current version of the Schon. " msgstr "Mengembalikan versi Schon saat ini." -#: engine/core/views.py:674 engine/core/views.py:689 +#: engine/core/views.py:475 +msgid "no image file provided" +msgstr "Tidak ada file gambar yang disediakan." + +#: engine/core/views.py:710 engine/core/views.py:725 #, python-format msgid "Revenue & Orders (last %(days)d)" msgstr "Pendapatan & Pesanan (terakhir %(days)d)" -#: engine/core/views.py:870 +#: engine/core/views.py:911 msgid "Returns custom variables for Dashboard. " msgstr "Mengembalikan variabel khusus untuk Dasbor." @@ -3406,7 +3794,7 @@ msgstr "" "serialisasi objek Brand. Kelas ini menggunakan kerangka kerja ViewSet Django" " untuk menyederhanakan implementasi titik akhir API untuk objek Brand." -#: engine/core/viewsets.py:458 +#: engine/core/viewsets.py:460 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3424,7 +3812,15 @@ msgstr "" " mengambil detail produk, menerapkan izin, dan mengakses umpan balik terkait" " produk." -#: engine/core/viewsets.py:605 +#: engine/core/viewsets.py:541 +msgid "identificator_type and identificators are required" +msgstr "Jenis identifikasi dan identifikasi diperlukan" + +#: engine/core/viewsets.py:554 +msgid "identificator_type must be one of: uuid, slug, sku" +msgstr "Jenis identifikasi harus salah satu dari: UUID, slug, SKU" + +#: engine/core/viewsets.py:635 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3439,7 +3835,7 @@ msgstr "" "adalah untuk menyediakan akses yang efisien ke sumber daya yang berhubungan " "dengan Vendor melalui kerangka kerja Django REST." -#: engine/core/viewsets.py:625 +#: engine/core/viewsets.py:655 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3456,7 +3852,7 @@ msgstr "" "yang dapat diakses. Kelas ini memperluas `SchonViewSet` dasar dan " "menggunakan sistem penyaringan Django untuk meminta data." -#: engine/core/viewsets.py:652 +#: engine/core/viewsets.py:682 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3475,7 +3871,7 @@ msgstr "" "beberapa serializer berdasarkan tindakan spesifik yang dilakukan dan " "memberlakukan izin yang sesuai saat berinteraksi dengan data pesanan." -#: engine/core/viewsets.py:914 +#: engine/core/viewsets.py:944 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3489,11 +3885,11 @@ msgstr "" "serializer berdasarkan tindakan yang diminta. Selain itu, ini menyediakan " "tindakan terperinci untuk menangani umpan balik pada instance OrderProduct" -#: engine/core/viewsets.py:974 +#: engine/core/viewsets.py:1004 msgid "Manages operations related to Product images in the application. " msgstr "Mengelola operasi yang terkait dengan gambar Produk dalam aplikasi." -#: engine/core/viewsets.py:988 +#: engine/core/viewsets.py:1018 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3501,15 +3897,15 @@ msgstr "" "Mengelola pengambilan dan penanganan contoh PromoCode melalui berbagai " "tindakan API." -#: engine/core/viewsets.py:1019 +#: engine/core/viewsets.py:1049 msgid "Represents a view set for managing promotions. " msgstr "Merupakan set tampilan untuk mengelola promosi." -#: engine/core/viewsets.py:1032 +#: engine/core/viewsets.py:1062 msgid "Handles operations related to Stock data in the system." msgstr "Menangani operasi yang terkait dengan data Stok di dalam sistem." -#: engine/core/viewsets.py:1046 +#: engine/core/viewsets.py:1076 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3527,7 +3923,7 @@ msgstr "" "diintegrasikan untuk memastikan bahwa pengguna hanya dapat mengelola daftar " "keinginan mereka sendiri kecuali jika izin eksplisit diberikan." -#: engine/core/viewsets.py:1183 +#: engine/core/viewsets.py:1213 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3541,12 +3937,12 @@ msgstr "" "khusus untuk metode HTTP yang berbeda, penggantian serializer, dan " "penanganan izin berdasarkan konteks permintaan." -#: engine/core/viewsets.py:1254 +#: engine/core/viewsets.py:1275 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Kesalahan pengodean geografis: {e}" -#: engine/core/viewsets.py:1262 +#: engine/core/viewsets.py:1283 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/it_IT/LC_MESSAGES/django.mo b/engine/core/locale/it_IT/LC_MESSAGES/django.mo index 219f1cad..6766f43e 100644 Binary files a/engine/core/locale/it_IT/LC_MESSAGES/django.mo and b/engine/core/locale/it_IT/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/it_IT/LC_MESSAGES/django.po b/engine/core/locale/it_IT/LC_MESSAGES/django.po index fcc58be4..86c86771 100644 --- a/engine/core/locale/it_IT/LC_MESSAGES/django.po +++ b/engine/core/locale/it_IT/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -51,117 +51,137 @@ msgstr "Modificato" msgid "when the object was last modified" msgstr "Quando l'oggetto è stato modificato per l'ultima volta" -#: engine/core/admin.py:94 +#: engine/core/admin.py:98 msgid "translations" msgstr "Traduzioni" -#: engine/core/admin.py:102 +#: engine/core/admin.py:106 msgid "general" msgstr "Generale" -#: engine/core/admin.py:106 +#: engine/core/admin.py:110 msgid "relations" msgstr "Relazioni" -#: engine/core/admin.py:111 +#: engine/core/admin.py:115 msgid "additional info" msgstr "informazioni aggiuntive" -#: engine/core/admin.py:133 +#: engine/core/admin.py:137 msgid "metadata" msgstr "Metadati" -#: engine/core/admin.py:141 +#: engine/core/admin.py:145 msgid "timestamps" msgstr "Timestamp" -#: engine/core/admin.py:158 +#: engine/core/admin.py:162 #, python-format msgid "Activate selected %(verbose_name_plural)s" msgstr "Attiva %(verbose_name_plural)s selezionato" -#: engine/core/admin.py:166 +#: engine/core/admin.py:170 msgid "selected items have been activated." msgstr "Gli articoli selezionati sono stati attivati!" -#: engine/core/admin.py:174 +#: engine/core/admin.py:178 #, python-format msgid "Deactivate selected %(verbose_name_plural)s" msgstr "Disattiva %(verbose_name_plural)s selezionato" -#: engine/core/admin.py:184 +#: engine/core/admin.py:188 msgid "selected items have been deactivated." msgstr "Gli articoli selezionati sono stati disattivati!" -#: engine/core/admin.py:196 engine/core/graphene/object_types.py:653 -#: engine/core/graphene/object_types.py:660 engine/core/models.py:832 -#: engine/core/models.py:840 +#: engine/core/admin.py:200 engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:673 engine/core/models.py:918 +#: engine/core/models.py:928 msgid "attribute value" msgstr "Valore dell'attributo" -#: engine/core/admin.py:197 engine/core/graphene/object_types.py:77 -#: engine/core/models.py:841 +#: engine/core/admin.py:201 engine/core/graphene/object_types.py:81 +#: engine/core/models.py:929 msgid "attribute values" msgstr "Valori degli attributi" -#: engine/core/admin.py:208 +#: engine/core/admin.py:212 engine/core/models.py:2232 msgid "image" msgstr "Immagine" -#: engine/core/admin.py:209 engine/core/graphene/object_types.py:530 +#: engine/core/admin.py:213 engine/core/graphene/object_types.py:535 msgid "images" msgstr "Immagini" -#: engine/core/admin.py:220 engine/core/models.py:576 +#: engine/core/admin.py:224 engine/core/models.py:635 msgid "stock" msgstr "Stock" -#: engine/core/admin.py:221 engine/core/graphene/object_types.py:713 +#: engine/core/admin.py:225 engine/core/graphene/object_types.py:735 msgid "stocks" msgstr "Le scorte" -#: engine/core/admin.py:232 engine/core/models.py:1938 +#: engine/core/admin.py:236 engine/core/models.py:2046 msgid "order product" msgstr "Ordina il prodotto" -#: engine/core/admin.py:233 engine/core/graphene/object_types.py:441 -#: engine/core/models.py:1939 +#: engine/core/admin.py:237 engine/core/graphene/object_types.py:446 +#: engine/core/models.py:2047 msgid "order products" msgstr "Ordinare i prodotti" -#: engine/core/admin.py:251 engine/core/admin.py:252 +#: engine/core/admin.py:255 engine/core/admin.py:256 msgid "children" msgstr "I bambini" -#: engine/core/admin.py:528 +#: engine/core/admin.py:545 +msgid "video preview" +msgstr "Anteprima video" + +#: engine/core/admin.py:551 msgid "has images" msgstr "Ha immagini" -#: engine/core/admin.py:531 +#: engine/core/admin.py:554 #, python-format msgid "Export selected %(verbose_name_plural)s to marketplaces' feeds" msgstr "Esporta %(verbose_name_plural)s selezionato nei feed dei marketplace" -#: engine/core/admin.py:542 +#: engine/core/admin.py:565 #, python-format msgid "selected %(verbose_name_plural)s have been marked for export." msgstr "" "I file selezionati %(verbose_name_plural)s sono stati contrassegnati per " "l'esportazione." -#: engine/core/admin.py:553 +#: engine/core/admin.py:576 #, python-format msgid "Ban selected %(verbose_name_plural)s from marketplaces' feeds" msgstr "Escludi %(verbose_name_plural)s dai feed dei marketplace" -#: engine/core/admin.py:564 +#: engine/core/admin.py:587 #, python-format msgid "selected %(verbose_name_plural)s have been banned from export." msgstr "" "I prodotti selezionati %(verbose_name_plural)s sono stati vietati " "all'esportazione." -#: engine/core/admin.py:1116 +#: engine/core/admin.py:1030 +msgid "Preview" +msgstr "Anteprima" + +#: engine/core/admin.py:1031 +msgid "Metadata" +msgstr "Metadati" + +#: engine/core/admin.py:1034 +msgid "preview" +msgstr "Anteprima" + +#: engine/core/admin.py:1043 +msgid "image preview" +msgstr "Anteprima immagine" + +#: engine/core/admin.py:1166 msgid "Config" msgstr "Configurazione" @@ -228,7 +248,7 @@ msgstr "" " negoziazione dei contenuti. La lingua può essere selezionata sia con " "Accept-Language che con il parametro query." -#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:36 +#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "I/O della cache" @@ -252,7 +272,7 @@ msgstr "Ottenere i parametri esponibili dell'applicazione" msgid "send a message to the support team" msgstr "Inviate un messaggio al team di assistenza" -#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:59 msgid "request a CORSed URL" msgstr "Richiedere un URL CORSed. È consentito solo https." @@ -396,11 +416,11 @@ msgstr "" "Riscrivere alcuni campi di una categoria esistente salvando gli elementi non" " modificabili" -#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757 -#: engine/core/docs/drf/viewsets.py:1046 -#: engine/core/graphene/object_types.py:119 -#: engine/core/graphene/object_types.py:239 -#: engine/core/graphene/object_types.py:540 +#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:781 +#: engine/core/docs/drf/viewsets.py:1070 +#: engine/core/graphene/object_types.py:123 +#: engine/core/graphene/object_types.py:247 +#: engine/core/graphene/object_types.py:546 msgid "SEO Meta snapshot" msgstr "Meta-immagine SEO" @@ -708,7 +728,7 @@ msgstr "Recuperare un singolo prodotto (vista dettagliata)" #: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683 #: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725 -#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763 +#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:787 msgid "Product UUID or slug" msgstr "UUID o Slug del prodotto" @@ -736,290 +756,304 @@ msgstr "Eliminare un prodotto" msgid "lists all permitted feedbacks for a product" msgstr "elenca tutti i feedback consentiti per un prodotto" -#: engine/core/docs/drf/viewsets.py:758 +#: engine/core/docs/drf/viewsets.py:757 +msgid "retrieve exact products by identifier" +msgstr "Recupera i prodotti esatti tramite identificatore" + +#: engine/core/docs/drf/viewsets.py:759 +msgid "" +"retrieve a list of products by identifier type (uuid, slug, or sku). Send a " +"POST request with `identificator_type` and `identificators` (list of " +"values)." +msgstr "" +"recuperare un elenco di prodotti in base al tipo di identificatore (uuid, " +"slug o sku). Inviare una richiesta POST con `identificator_type` e " +"`identificators` (elenco di valori)." + +#: engine/core/docs/drf/viewsets.py:782 msgid "returns a snapshot of the product's SEO meta data" msgstr "Restituisce un'istantanea dei meta-dati SEO del prodotto." -#: engine/core/docs/drf/viewsets.py:779 +#: engine/core/docs/drf/viewsets.py:803 msgid "list all addresses" msgstr "Elenco di tutti gli indirizzi" -#: engine/core/docs/drf/viewsets.py:789 +#: engine/core/docs/drf/viewsets.py:813 msgid "retrieve a single address" msgstr "Recuperare un singolo indirizzo" -#: engine/core/docs/drf/viewsets.py:799 +#: engine/core/docs/drf/viewsets.py:823 msgid "create a new address" msgstr "Creare un nuovo indirizzo" -#: engine/core/docs/drf/viewsets.py:810 +#: engine/core/docs/drf/viewsets.py:834 msgid "delete an address" msgstr "Cancellare un indirizzo" -#: engine/core/docs/drf/viewsets.py:820 +#: engine/core/docs/drf/viewsets.py:844 msgid "update an entire address" msgstr "Aggiornare un intero indirizzo" -#: engine/core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:855 msgid "partially update an address" msgstr "Aggiornare parzialmente un indirizzo" -#: engine/core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:866 msgid "autocomplete address suggestions" msgstr "Inserimento automatico dell'indirizzo" -#: engine/core/docs/drf/viewsets.py:848 +#: engine/core/docs/drf/viewsets.py:872 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" "Stringa di query dei dati grezzi, da aggiungere ai dati dell'endpoint geo-IP" -#: engine/core/docs/drf/viewsets.py:855 +#: engine/core/docs/drf/viewsets.py:879 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "limita la quantità di risultati, 1 < limite < 10, default: 5" -#: engine/core/docs/drf/viewsets.py:871 +#: engine/core/docs/drf/viewsets.py:895 msgid "list all feedbacks (simple view)" msgstr "elencare tutti i feedback (vista semplice)" -#: engine/core/docs/drf/viewsets.py:881 +#: engine/core/docs/drf/viewsets.py:905 msgid "retrieve a single feedback (detailed view)" msgstr "recuperare un singolo feedback (vista dettagliata)" -#: engine/core/docs/drf/viewsets.py:888 +#: engine/core/docs/drf/viewsets.py:912 msgid "create a feedback" msgstr "creare un feedback" -#: engine/core/docs/drf/viewsets.py:895 +#: engine/core/docs/drf/viewsets.py:919 msgid "delete a feedback" msgstr "eliminare un feedback" -#: engine/core/docs/drf/viewsets.py:902 +#: engine/core/docs/drf/viewsets.py:926 msgid "rewrite an existing feedback saving non-editables" msgstr "" "Riscrivere una categoria esistente salvando gli elementi non modificabili" -#: engine/core/docs/drf/viewsets.py:909 +#: engine/core/docs/drf/viewsets.py:933 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" "Riscrivere alcuni campi di una categoria esistente salvando gli elementi non" " modificabili" -#: engine/core/docs/drf/viewsets.py:919 +#: engine/core/docs/drf/viewsets.py:943 msgid "list all order–product relations (simple view)" msgstr "elencare tutte le relazioni ordine-prodotto (vista semplice)" -#: engine/core/docs/drf/viewsets.py:929 +#: engine/core/docs/drf/viewsets.py:953 msgid "retrieve a single order–product relation (detailed view)" msgstr "recuperare una singola relazione ordine-prodotto (vista dettagliata)" -#: engine/core/docs/drf/viewsets.py:939 +#: engine/core/docs/drf/viewsets.py:963 msgid "create a new order–product relation" msgstr "creare una nuova relazione ordine-prodotto" -#: engine/core/docs/drf/viewsets.py:949 +#: engine/core/docs/drf/viewsets.py:973 msgid "replace an existing order–product relation" msgstr "sostituire una relazione ordine-prodotto esistente" -#: engine/core/docs/drf/viewsets.py:959 +#: engine/core/docs/drf/viewsets.py:983 msgid "partially update an existing order–product relation" msgstr "aggiornare parzialmente una relazione ordine-prodotto esistente" -#: engine/core/docs/drf/viewsets.py:969 +#: engine/core/docs/drf/viewsets.py:993 msgid "delete an order–product relation" msgstr "eliminare una relazione ordine-prodotto" -#: engine/core/docs/drf/viewsets.py:979 +#: engine/core/docs/drf/viewsets.py:1003 msgid "add or remove feedback on an order–product relation" msgstr "aggiungere o rimuovere un feedback su una relazione ordine-prodotto" -#: engine/core/docs/drf/viewsets.py:996 +#: engine/core/docs/drf/viewsets.py:1020 msgid "list all brands (simple view)" msgstr "Elenco di tutti i marchi (visualizzazione semplice)" -#: engine/core/docs/drf/viewsets.py:1003 +#: engine/core/docs/drf/viewsets.py:1027 msgid "retrieve a single brand (detailed view)" msgstr "Recuperare un singolo marchio (vista dettagliata)" -#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051 +#: engine/core/docs/drf/viewsets.py:1032 engine/core/docs/drf/viewsets.py:1075 msgid "Brand UUID or slug" msgstr "UUID o slug del marchio" -#: engine/core/docs/drf/viewsets.py:1018 +#: engine/core/docs/drf/viewsets.py:1042 msgid "create a brand" msgstr "Creare un marchio" -#: engine/core/docs/drf/viewsets.py:1025 +#: engine/core/docs/drf/viewsets.py:1049 msgid "delete a brand" msgstr "Eliminare un marchio" -#: engine/core/docs/drf/viewsets.py:1032 +#: engine/core/docs/drf/viewsets.py:1056 msgid "rewrite an existing brand saving non-editables" msgstr "" "Riscrivere una categoria esistente salvando gli elementi non modificabili" -#: engine/core/docs/drf/viewsets.py:1039 +#: engine/core/docs/drf/viewsets.py:1063 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "" "Riscrivere alcuni campi di una categoria esistente salvando gli elementi non" " modificabili" -#: engine/core/docs/drf/viewsets.py:1064 +#: engine/core/docs/drf/viewsets.py:1088 msgid "list all vendors (simple view)" msgstr "Elenco di tutti i fornitori (vista semplice)" -#: engine/core/docs/drf/viewsets.py:1074 +#: engine/core/docs/drf/viewsets.py:1098 msgid "retrieve a single vendor (detailed view)" msgstr "Recuperare un singolo fornitore (vista dettagliata)" -#: engine/core/docs/drf/viewsets.py:1081 +#: engine/core/docs/drf/viewsets.py:1105 msgid "create a vendor" msgstr "Create a vendor" -#: engine/core/docs/drf/viewsets.py:1088 +#: engine/core/docs/drf/viewsets.py:1112 msgid "delete a vendor" msgstr "Eliminare un fornitore" -#: engine/core/docs/drf/viewsets.py:1095 +#: engine/core/docs/drf/viewsets.py:1119 msgid "rewrite an existing vendor saving non-editables" msgstr "" "Riscrivere una categoria esistente salvando gli elementi non modificabili" -#: engine/core/docs/drf/viewsets.py:1102 +#: engine/core/docs/drf/viewsets.py:1126 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "" "Riscrivere alcuni campi di una categoria esistente salvando gli elementi non" " modificabili" -#: engine/core/docs/drf/viewsets.py:1112 +#: engine/core/docs/drf/viewsets.py:1136 msgid "list all product images (simple view)" msgstr "Elenco di tutte le immagini dei prodotti (visualizzazione semplice)" -#: engine/core/docs/drf/viewsets.py:1122 +#: engine/core/docs/drf/viewsets.py:1146 msgid "retrieve a single product image (detailed view)" msgstr "Recuperare l'immagine di un singolo prodotto (vista dettagliata)" -#: engine/core/docs/drf/viewsets.py:1129 +#: engine/core/docs/drf/viewsets.py:1153 msgid "create a product image" msgstr "Creare un'immagine del prodotto" -#: engine/core/docs/drf/viewsets.py:1139 +#: engine/core/docs/drf/viewsets.py:1163 msgid "delete a product image" msgstr "Eliminare l'immagine di un prodotto" -#: engine/core/docs/drf/viewsets.py:1146 +#: engine/core/docs/drf/viewsets.py:1170 msgid "rewrite an existing product image saving non-editables" msgstr "" "Riscrivere una categoria esistente salvando gli elementi non modificabili" -#: engine/core/docs/drf/viewsets.py:1154 +#: engine/core/docs/drf/viewsets.py:1178 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "" "Riscrivere alcuni campi di una categoria esistente salvando gli elementi non" " modificabili" -#: engine/core/docs/drf/viewsets.py:1165 +#: engine/core/docs/drf/viewsets.py:1189 msgid "list all promo codes (simple view)" msgstr "Elenco di tutti i codici promozionali (visualizzazione semplice)" -#: engine/core/docs/drf/viewsets.py:1175 +#: engine/core/docs/drf/viewsets.py:1199 msgid "retrieve a single promo code (detailed view)" msgstr "Recuperare un singolo codice promozionale (vista dettagliata)" -#: engine/core/docs/drf/viewsets.py:1182 +#: engine/core/docs/drf/viewsets.py:1206 msgid "create a promo code" msgstr "Create a promo code" -#: engine/core/docs/drf/viewsets.py:1189 +#: engine/core/docs/drf/viewsets.py:1213 msgid "delete a promo code" msgstr "Cancellare un codice promozionale" -#: engine/core/docs/drf/viewsets.py:1196 +#: engine/core/docs/drf/viewsets.py:1220 msgid "rewrite an existing promo code saving non-editables" msgstr "" "Riscrivere una categoria esistente salvando gli elementi non modificabili" -#: engine/core/docs/drf/viewsets.py:1203 +#: engine/core/docs/drf/viewsets.py:1227 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "" "Riscrivere alcuni campi di una categoria esistente salvando gli elementi non" " modificabili" -#: engine/core/docs/drf/viewsets.py:1213 +#: engine/core/docs/drf/viewsets.py:1237 msgid "list all promotions (simple view)" msgstr "Elenco di tutte le promozioni (visualizzazione semplice)" -#: engine/core/docs/drf/viewsets.py:1223 +#: engine/core/docs/drf/viewsets.py:1247 msgid "retrieve a single promotion (detailed view)" msgstr "Recuperare una singola promozione (vista dettagliata)" -#: engine/core/docs/drf/viewsets.py:1230 +#: engine/core/docs/drf/viewsets.py:1254 msgid "create a promotion" msgstr "Creare una promozione" -#: engine/core/docs/drf/viewsets.py:1237 +#: engine/core/docs/drf/viewsets.py:1261 msgid "delete a promotion" msgstr "Eliminare una promozione" -#: engine/core/docs/drf/viewsets.py:1244 +#: engine/core/docs/drf/viewsets.py:1268 msgid "rewrite an existing promotion saving non-editables" msgstr "" "Riscrivere una categoria esistente salvando gli elementi non modificabili" -#: engine/core/docs/drf/viewsets.py:1251 +#: engine/core/docs/drf/viewsets.py:1275 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "" "Riscrivere alcuni campi di una categoria esistente salvando gli elementi non" " modificabili" -#: engine/core/docs/drf/viewsets.py:1261 +#: engine/core/docs/drf/viewsets.py:1285 msgid "list all stocks (simple view)" msgstr "Elenco di tutti i titoli (vista semplice)" -#: engine/core/docs/drf/viewsets.py:1268 +#: engine/core/docs/drf/viewsets.py:1292 msgid "retrieve a single stock (detailed view)" msgstr "Recuperare un singolo titolo (vista dettagliata)" -#: engine/core/docs/drf/viewsets.py:1275 +#: engine/core/docs/drf/viewsets.py:1299 msgid "create a stock record" msgstr "Creare un record di magazzino" -#: engine/core/docs/drf/viewsets.py:1282 +#: engine/core/docs/drf/viewsets.py:1306 msgid "delete a stock record" msgstr "Cancellare un record di magazzino" -#: engine/core/docs/drf/viewsets.py:1289 +#: engine/core/docs/drf/viewsets.py:1313 msgid "rewrite an existing stock record saving non-editables" msgstr "" "Riscrivere una categoria esistente salvando gli elementi non modificabili" -#: engine/core/docs/drf/viewsets.py:1297 +#: engine/core/docs/drf/viewsets.py:1321 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "" "Riscrivere alcuni campi di una categoria esistente salvando gli elementi non" " modificabili" -#: engine/core/docs/drf/viewsets.py:1308 +#: engine/core/docs/drf/viewsets.py:1332 msgid "list all product tags (simple view)" msgstr "Elenco di tutti i tag dei prodotti (vista semplice)" -#: engine/core/docs/drf/viewsets.py:1318 +#: engine/core/docs/drf/viewsets.py:1342 msgid "retrieve a single product tag (detailed view)" msgstr "Recuperare un singolo tag di prodotto (vista dettagliata)" -#: engine/core/docs/drf/viewsets.py:1325 +#: engine/core/docs/drf/viewsets.py:1349 msgid "create a product tag" msgstr "Creare un'etichetta di prodotto" -#: engine/core/docs/drf/viewsets.py:1335 +#: engine/core/docs/drf/viewsets.py:1359 msgid "delete a product tag" msgstr "Eliminare un tag di prodotto" -#: engine/core/docs/drf/viewsets.py:1342 +#: engine/core/docs/drf/viewsets.py:1366 msgid "rewrite an existing product tag saving non-editables" msgstr "" "Riscrivere una categoria esistente salvando gli elementi non modificabili" -#: engine/core/docs/drf/viewsets.py:1350 +#: engine/core/docs/drf/viewsets.py:1374 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "" "Riscrivere alcuni campi di una categoria esistente salvando gli elementi non" @@ -1030,235 +1064,233 @@ msgstr "" msgid "no search term provided." msgstr "Non è stato fornito alcun termine di ricerca." -#: engine/core/filters.py:78 engine/core/filters.py:484 -#: engine/core/filters.py:625 +#: engine/core/filters.py:79 engine/core/filters.py:485 +#: engine/core/filters.py:626 msgid "Search" msgstr "Ricerca" -#: engine/core/filters.py:79 engine/core/filters.py:663 -#: engine/core/filters.py:692 +#: engine/core/filters.py:80 engine/core/filters.py:664 +#: engine/core/filters.py:693 msgid "UUID" msgstr "UUID" -#: engine/core/filters.py:80 engine/core/filters.py:487 -#: engine/core/filters.py:627 +#: engine/core/filters.py:81 engine/core/filters.py:488 +#: engine/core/filters.py:628 msgid "Name" msgstr "Nome" -#: engine/core/filters.py:82 engine/core/filters.py:630 +#: engine/core/filters.py:83 engine/core/filters.py:631 msgid "Categories" msgstr "Categorie" -#: engine/core/filters.py:86 +#: engine/core/filters.py:87 msgid "Categories Slugs" msgstr "Categorie Lumache" -#: engine/core/filters.py:88 engine/core/filters.py:495 +#: engine/core/filters.py:89 engine/core/filters.py:496 +#: engine/core/templates/admin_doc/index.html:37 +#: engine/core/templates/admin_doc/template_tag_index.html:12 msgid "Tags" msgstr "Tag" -#: engine/core/filters.py:90 +#: engine/core/filters.py:91 msgid "Min Price" msgstr "Prezzo minimo" -#: engine/core/filters.py:93 +#: engine/core/filters.py:94 msgid "Max Price" msgstr "Max Price" -#: engine/core/filters.py:95 +#: engine/core/filters.py:96 msgid "Is Active" msgstr "È attivo" -#: engine/core/filters.py:96 +#: engine/core/filters.py:97 msgid "Brand" msgstr "Marchio" -#: engine/core/filters.py:97 +#: engine/core/filters.py:98 msgid "Attributes" msgstr "Attributi" -#: engine/core/filters.py:99 +#: engine/core/filters.py:100 msgid "Quantity" msgstr "Quantità" -#: engine/core/filters.py:101 engine/core/filters.py:489 -#: engine/core/filters.py:628 engine/core/models.py:316 -#: engine/core/models.py:497 engine/core/models.py:663 +#: engine/core/filters.py:102 engine/core/filters.py:490 +#: engine/core/filters.py:629 engine/core/models.py:339 +#: engine/core/models.py:546 engine/core/models.py:736 msgid "Slug" msgstr "Lumaca" -#: engine/core/filters.py:102 +#: engine/core/filters.py:103 msgid "Is Digital" msgstr "È digitale" -#: engine/core/filters.py:104 +#: engine/core/filters.py:105 msgid "Include sub-categories" msgstr "Includere le sottocategorie" -#: engine/core/filters.py:108 +#: engine/core/filters.py:109 msgid "Include personal ordered" msgstr "Includere prodotti ordinati personalmente" -#: engine/core/filters.py:110 engine/core/models.py:667 +#: engine/core/filters.py:111 engine/core/models.py:740 msgid "SKU" msgstr "SKU" -#: engine/core/filters.py:212 +#: engine/core/filters.py:213 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" "Deve esserci una categoria_uuid per utilizzare il flag include_subcategories" -#: engine/core/filters.py:398 +#: engine/core/filters.py:399 msgid "Search (ID, product name or part number)" msgstr "Ricerca (ID, nome del prodotto o numero di parte)" -#: engine/core/filters.py:402 +#: engine/core/filters.py:403 msgid "Bought after (inclusive)" msgstr "Acquistato dopo (incluso)" -#: engine/core/filters.py:405 +#: engine/core/filters.py:406 msgid "Bought before (inclusive)" msgstr "Acquistato prima (compreso)" -#: engine/core/filters.py:410 engine/core/filters.py:461 -#: engine/core/filters.py:697 +#: engine/core/filters.py:411 engine/core/filters.py:462 +#: engine/core/filters.py:698 msgid "User email" msgstr "Email dell'utente" -#: engine/core/filters.py:413 engine/core/filters.py:464 -#: engine/core/filters.py:672 engine/core/filters.py:694 +#: engine/core/filters.py:414 engine/core/filters.py:465 +#: engine/core/filters.py:673 engine/core/filters.py:695 msgid "User UUID" msgstr "UUID utente" -#: engine/core/filters.py:415 +#: engine/core/filters.py:416 msgid "Status" msgstr "Stato" -#: engine/core/filters.py:419 +#: engine/core/filters.py:420 msgid "Human Readable ID" msgstr "ID leggibile dall'uomo" -#: engine/core/filters.py:488 +#: engine/core/filters.py:489 msgid "Parent" msgstr "Genitore" -#: engine/core/filters.py:492 +#: engine/core/filters.py:493 msgid "Whole category(has at least 1 product or not)" msgstr "Intera categoria (con o senza almeno 1 prodotto)" -#: engine/core/filters.py:496 +#: engine/core/filters.py:497 msgid "Level" msgstr "Livello" -#: engine/core/filters.py:667 +#: engine/core/filters.py:668 msgid "Product UUID" msgstr "UUID del prodotto" -#: engine/core/graphene/mutations.py:40 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Chiave da cercare o da inserire nella cache" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:43 msgid "data to store in cache" msgstr "Data to store in cache" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:46 msgid "timeout in seconds to set the data for into the cache" msgstr "Timeout in secondi per l'inserimento dei dati nella cache" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:49 msgid "cached data" msgstr "Dati in cache" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:64 msgid "camelized JSON data from the requested URL" msgstr "Dati JSON camelizzati dall'URL richiesto" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:248 +#: engine/core/graphene/mutations.py:69 engine/core/views.py:267 msgid "only URLs starting with http(s):// are allowed" msgstr "Sono consentiti solo gli URL che iniziano con http(s)://" -#: engine/core/graphene/mutations.py:86 +#: engine/core/graphene/mutations.py:87 msgid "add a product to the order" msgstr "Aggiungere un prodotto all'ordine" -#: engine/core/graphene/mutations.py:109 engine/core/graphene/mutations.py:138 -#: engine/core/graphene/mutations.py:254 engine/core/graphene/mutations.py:306 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139 +#: engine/core/graphene/mutations.py:256 engine/core/graphene/mutations.py:308 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Ordine {order_uuid} non trovato!" -#: engine/core/graphene/mutations.py:115 engine/core/graphene/mutations.py:166 +#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167 msgid "remove a product from the order" msgstr "Rimuovere un prodotto dall'ordine" -#: engine/core/graphene/mutations.py:144 +#: engine/core/graphene/mutations.py:145 msgid "remove all products from the order" msgstr "Rimuovere tutti i prodotti dall'ordine" -#: engine/core/graphene/mutations.py:189 +#: engine/core/graphene/mutations.py:190 msgid "buy an order" msgstr "Acquistare un ordine" -#: engine/core/graphene/mutations.py:220 engine/core/graphene/mutations.py:282 +#: engine/core/graphene/mutations.py:222 engine/core/graphene/mutations.py:284 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" "Si prega di fornire order_uuid o order_hr_id, che si escludono a vicenda!" -#: engine/core/graphene/mutations.py:249 engine/core/graphene/mutations.py:524 -#: engine/core/graphene/mutations.py:573 engine/core/viewsets.py:753 +#: engine/core/graphene/mutations.py:251 engine/core/graphene/mutations.py:526 +#: engine/core/graphene/mutations.py:576 engine/core/viewsets.py:783 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" "Il metodo order.buy() ha fornito un tipo sbagliato: {type(instance)!s}" -#: engine/core/graphene/mutations.py:260 +#: engine/core/graphene/mutations.py:262 msgid "perform an action on a list of products in the order" msgstr "Eseguire un'azione su un elenco di prodotti nell'ordine" -#: engine/core/graphene/mutations.py:265 +#: engine/core/graphene/mutations.py:267 msgid "remove/add" msgstr "Rimuovi/Aggiungi" -#: engine/core/graphene/mutations.py:301 engine/core/graphene/mutations.py:342 +#: engine/core/graphene/mutations.py:303 engine/core/graphene/mutations.py:342 msgid "action must be either add or remove" msgstr "L'azione deve essere \"aggiungere\" o \"rimuovere\"!" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:314 msgid "perform an action on a list of products in the wishlist" msgstr "Eseguire un'azione su un elenco di prodotti nella wishlist" -#: engine/core/graphene/mutations.py:330 -msgid "please provide wishlist_uuid value" -msgstr "Fornire il valore `wishlist_uuid`." - -#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:423 -#: engine/core/graphene/mutations.py:451 engine/core/graphene/mutations.py:479 -#: engine/core/graphene/mutations.py:529 +#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:424 +#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480 +#: engine/core/graphene/mutations.py:531 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Lista dei desideri {wishlist_uuid} non trovata!" -#: engine/core/graphene/mutations.py:401 +#: engine/core/graphene/mutations.py:402 msgid "add a product to the wishlist" msgstr "Aggiungere un prodotto all'ordine" -#: engine/core/graphene/mutations.py:429 +#: engine/core/graphene/mutations.py:430 msgid "remove a product from the wishlist" msgstr "Rimuovere un prodotto dall'ordine" -#: engine/core/graphene/mutations.py:457 +#: engine/core/graphene/mutations.py:458 msgid "remove all products from the wishlist" msgstr "Rimuovere un prodotto dall'ordine" -#: engine/core/graphene/mutations.py:485 +#: engine/core/graphene/mutations.py:486 msgid "buy all products from the wishlist" msgstr "Rimuovere un prodotto dall'ordine" -#: engine/core/graphene/mutations.py:535 +#: engine/core/graphene/mutations.py:537 msgid "buy a product" msgstr "Acquistare un ordine" -#: engine/core/graphene/mutations.py:542 +#: engine/core/graphene/mutations.py:544 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" @@ -1266,140 +1298,144 @@ msgstr "" "Inviare gli attributi come stringa formattata come " "attr1=valore1,attr2=valore2" -#: engine/core/graphene/mutations.py:580 +#: engine/core/graphene/mutations.py:583 msgid "add or delete a feedback for orderproduct" msgstr "Aggiungere o eliminare un feedback per l'ordine-prodotto" -#: engine/core/graphene/mutations.py:606 +#: engine/core/graphene/mutations.py:610 msgid "action must be either `add` or `remove`" msgstr "L'azione deve essere `add` o `remove`!" -#: engine/core/graphene/mutations.py:609 +#: engine/core/graphene/mutations.py:613 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Prodotto dell'ordine {order_product_uuid} non trovato!" -#: engine/core/graphene/mutations.py:616 +#: engine/core/graphene/mutations.py:620 msgid "original address string provided by the user" msgstr "Stringa di indirizzo originale fornita dall'utente" -#: engine/core/graphene/mutations.py:653 engine/core/models.py:986 -#: engine/core/models.py:999 engine/core/models.py:1443 -#: engine/core/models.py:1474 engine/core/models.py:1505 -#: engine/core/viewsets.py:760 +#: engine/core/graphene/mutations.py:662 engine/core/models.py:1079 +#: engine/core/models.py:1092 engine/core/models.py:1544 +#: engine/core/models.py:1575 engine/core/models.py:1606 +#: engine/core/viewsets.py:790 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} non esiste: {uuid}!" -#: engine/core/graphene/mutations.py:667 +#: engine/core/graphene/mutations.py:676 msgid "limit must be between 1 and 10" msgstr "Il limite deve essere compreso tra 1 e 10" -#: engine/core/graphene/mutations.py:716 +#: engine/core/graphene/mutations.py:726 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch: funziona a meraviglia" -#: engine/core/graphene/object_types.py:84 -#: engine/core/graphene/object_types.py:420 -#: engine/core/graphene/object_types.py:471 engine/core/models.py:803 -#: engine/core/models.py:1297 engine/core/models.py:2033 +#: engine/core/graphene/object_types.py:88 +#: engine/core/graphene/object_types.py:425 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:889 +#: engine/core/models.py:1394 engine/core/models.py:2139 msgid "attributes" msgstr "Attributi" -#: engine/core/graphene/object_types.py:97 +#: engine/core/graphene/object_types.py:101 msgid "grouped attributes" msgstr "Attributi raggruppati" -#: engine/core/graphene/object_types.py:104 +#: engine/core/graphene/object_types.py:108 msgid "groups of attributes" msgstr "Gruppi di attributi" -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:217 -#: engine/core/graphene/object_types.py:255 engine/core/models.py:440 +#: engine/core/graphene/object_types.py:122 +#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:264 engine/core/models.py:489 msgid "categories" msgstr "Categorie" -#: engine/core/graphene/object_types.py:134 engine/core/models.py:511 +#: engine/core/graphene/object_types.py:138 engine/core/models.py:564 msgid "brands" msgstr "Marche" -#: engine/core/graphene/object_types.py:219 +#: engine/core/graphene/object_types.py:226 msgid "category image url" msgstr "Categorie" -#: engine/core/graphene/object_types.py:220 -#: engine/core/graphene/object_types.py:365 engine/core/models.py:278 +#: engine/core/graphene/object_types.py:227 +#: engine/core/graphene/object_types.py:369 engine/core/models.py:301 msgid "markup percentage" msgstr "Percentuale di markup" -#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:231 msgid "which attributes and values can be used for filtering this category." msgstr "" "Quali attributi e valori possono essere utilizzati per filtrare questa " "categoria." -#: engine/core/graphene/object_types.py:230 +#: engine/core/graphene/object_types.py:237 msgid "" "minimum and maximum prices for products in this category, if available." msgstr "" "Prezzi minimi e massimi per i prodotti di questa categoria, se disponibili." -#: engine/core/graphene/object_types.py:234 +#: engine/core/graphene/object_types.py:240 +msgid "brands in this category" +msgstr "Marchi in questa categoria" + +#: engine/core/graphene/object_types.py:242 msgid "tags for this category" msgstr "Tag per questa categoria" -#: engine/core/graphene/object_types.py:237 +#: engine/core/graphene/object_types.py:245 msgid "products in this category" msgstr "Prodotti in questa categoria" -#: engine/core/graphene/object_types.py:372 engine/core/models.py:183 +#: engine/core/graphene/object_types.py:376 engine/core/models.py:202 msgid "vendors" msgstr "Venditori" -#: engine/core/graphene/object_types.py:376 +#: engine/core/graphene/object_types.py:380 msgid "Latitude (Y coordinate)" msgstr "Latitudine (coordinata Y)" -#: engine/core/graphene/object_types.py:377 +#: engine/core/graphene/object_types.py:381 msgid "Longitude (X coordinate)" msgstr "Longitudine (coordinata X)" -#: engine/core/graphene/object_types.py:406 +#: engine/core/graphene/object_types.py:411 msgid "comment" msgstr "Come" -#: engine/core/graphene/object_types.py:408 -#: engine/core/graphene/object_types.py:542 +#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:548 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "Valore di valutazione da 1 a 10, incluso, o 0 se non impostato." -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:421 msgid "represents feedback from a user." msgstr "Rappresenta il feedback di un utente." -#: engine/core/graphene/object_types.py:421 -#: engine/core/graphene/object_types.py:472 engine/core/models.py:1291 +#: engine/core/graphene/object_types.py:426 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:1388 msgid "notifications" msgstr "Notifiche" -#: engine/core/graphene/object_types.py:423 +#: engine/core/graphene/object_types.py:428 msgid "download url for this order product if applicable" msgstr "URL di download per il prodotto dell'ordine, se applicabile" -#: engine/core/graphene/object_types.py:425 engine/core/models.py:1856 +#: engine/core/graphene/object_types.py:430 engine/core/models.py:1959 msgid "feedback" msgstr "Feedback" -#: engine/core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:464 msgid "a list of order products in this order" msgstr "Un elenco di prodotti ordinati in questo ordine" -#: engine/core/graphene/object_types.py:461 engine/core/models.py:1261 +#: engine/core/graphene/object_types.py:466 engine/core/models.py:1358 msgid "billing address" msgstr "Indirizzo di fatturazione" -#: engine/core/graphene/object_types.py:465 +#: engine/core/graphene/object_types.py:470 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1407,53 +1443,57 @@ msgstr "" "Indirizzo di spedizione per questo ordine, lasciare in bianco se è uguale " "all'indirizzo di fatturazione o se non è applicabile" -#: engine/core/graphene/object_types.py:468 +#: engine/core/graphene/object_types.py:473 msgid "total price of this order" msgstr "Prezzo totale dell'ordine" -#: engine/core/graphene/object_types.py:469 +#: engine/core/graphene/object_types.py:474 msgid "total quantity of products in order" msgstr "Quantità totale di prodotti in ordine" -#: engine/core/graphene/object_types.py:470 +#: engine/core/graphene/object_types.py:475 msgid "are all products in the order digital" msgstr "Tutti i prodotti sono presenti nell'ordine digitale" -#: engine/core/graphene/object_types.py:474 +#: engine/core/graphene/object_types.py:479 msgid "transactions for this order" msgstr "Transazioni per questo ordine" -#: engine/core/graphene/object_types.py:494 engine/core/models.py:1325 +#: engine/core/graphene/object_types.py:499 engine/core/models.py:1422 msgid "orders" msgstr "Ordini" -#: engine/core/graphene/object_types.py:515 +#: engine/core/graphene/object_types.py:520 msgid "image url" msgstr "URL immagine" -#: engine/core/graphene/object_types.py:522 +#: engine/core/graphene/object_types.py:527 msgid "product's images" msgstr "Immagini del prodotto" -#: engine/core/graphene/object_types.py:529 engine/core/models.py:439 -#: engine/core/models.py:596 +#: engine/core/graphene/object_types.py:534 engine/core/models.py:488 +#: engine/core/models.py:661 msgid "category" msgstr "Categoria" -#: engine/core/graphene/object_types.py:531 engine/core/models.py:1857 +#: engine/core/graphene/object_types.py:536 engine/core/models.py:1960 msgid "feedbacks" msgstr "Feedback" -#: engine/core/graphene/object_types.py:532 engine/core/models.py:510 -#: engine/core/models.py:605 +#: engine/core/graphene/object_types.py:537 engine/core/models.py:563 +#: engine/core/models.py:670 msgid "brand" msgstr "Marchio" -#: engine/core/graphene/object_types.py:534 engine/core/models.py:103 +#: engine/core/graphene/object_types.py:538 +msgid "video url" +msgstr "URL del video" + +#: engine/core/graphene/object_types.py:540 engine/core/models.py:122 msgid "attribute groups" msgstr "Gruppi di attributi" -#: engine/core/graphene/object_types.py:536 +#: engine/core/graphene/object_types.py:542 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1461,7 +1501,7 @@ msgstr "Gruppi di attributi" msgid "price" msgstr "Prezzo" -#: engine/core/graphene/object_types.py:537 +#: engine/core/graphene/object_types.py:543 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1469,39 +1509,39 @@ msgstr "Prezzo" msgid "quantity" msgstr "Quantità" -#: engine/core/graphene/object_types.py:538 +#: engine/core/graphene/object_types.py:544 msgid "number of feedbacks" msgstr "Numero di feedback" -#: engine/core/graphene/object_types.py:539 +#: engine/core/graphene/object_types.py:545 msgid "only available for personal orders" msgstr "Prodotti disponibili solo per ordini personali" -#: engine/core/graphene/object_types.py:544 +#: engine/core/graphene/object_types.py:550 msgid "discount price" msgstr "Prezzo scontato" -#: engine/core/graphene/object_types.py:568 engine/core/models.py:682 +#: engine/core/graphene/object_types.py:575 engine/core/models.py:755 msgid "products" msgstr "Prodotti" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:691 msgid "promocodes" msgstr "Codici promozionali" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:706 msgid "products on sale" msgstr "Prodotti in vendita" -#: engine/core/graphene/object_types.py:701 engine/core/models.py:935 +#: engine/core/graphene/object_types.py:720 engine/core/models.py:1028 msgid "promotions" msgstr "Promozioni" -#: engine/core/graphene/object_types.py:705 engine/core/models.py:182 +#: engine/core/graphene/object_types.py:727 engine/core/models.py:201 msgid "vendor" msgstr "Venditore" -#: engine/core/graphene/object_types.py:706 engine/core/models.py:681 +#: engine/core/graphene/object_types.py:728 engine/core/models.py:754 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1509,103 +1549,103 @@ msgstr "Venditore" msgid "product" msgstr "Prodotto" -#: engine/core/graphene/object_types.py:718 engine/core/models.py:958 +#: engine/core/graphene/object_types.py:740 engine/core/models.py:1051 msgid "wishlisted products" msgstr "Prodotti desiderati" -#: engine/core/graphene/object_types.py:725 engine/core/models.py:975 +#: engine/core/graphene/object_types.py:747 engine/core/models.py:1068 msgid "wishlists" msgstr "Liste dei desideri" -#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:752 msgid "tagged products" msgstr "Prodotti contrassegnati" -#: engine/core/graphene/object_types.py:738 engine/core/models.py:219 -#: engine/core/models.py:611 +#: engine/core/graphene/object_types.py:760 engine/core/models.py:238 +#: engine/core/models.py:676 msgid "product tags" msgstr "Tag del prodotto" -#: engine/core/graphene/object_types.py:743 +#: engine/core/graphene/object_types.py:765 msgid "tagged categories" msgstr "Contrassegnato dalle categorie" -#: engine/core/graphene/object_types.py:751 +#: engine/core/graphene/object_types.py:773 msgid "categories tags" msgstr "Tag delle categorie" -#: engine/core/graphene/object_types.py:755 +#: engine/core/graphene/object_types.py:777 msgid "project name" msgstr "Nome del progetto" -#: engine/core/graphene/object_types.py:756 +#: engine/core/graphene/object_types.py:778 msgid "company name" msgstr "Nome della società" -#: engine/core/graphene/object_types.py:757 +#: engine/core/graphene/object_types.py:779 msgid "company address" msgstr "Indirizzo dell'azienda" -#: engine/core/graphene/object_types.py:758 +#: engine/core/graphene/object_types.py:780 msgid "company phone number" msgstr "Numero di telefono dell'azienda" -#: engine/core/graphene/object_types.py:761 +#: engine/core/graphene/object_types.py:783 msgid "email from, sometimes it must be used instead of host user value" msgstr "" "'email from', a volte deve essere usato al posto del valore dell'utente host" -#: engine/core/graphene/object_types.py:764 +#: engine/core/graphene/object_types.py:786 msgid "email host user" msgstr "Utente host dell'e-mail" -#: engine/core/graphene/object_types.py:765 +#: engine/core/graphene/object_types.py:787 msgid "maximum amount for payment" msgstr "Importo massimo per il pagamento" -#: engine/core/graphene/object_types.py:766 +#: engine/core/graphene/object_types.py:788 msgid "minimum amount for payment" msgstr "Importo minimo per il pagamento" -#: engine/core/graphene/object_types.py:767 +#: engine/core/graphene/object_types.py:789 msgid "analytics data" msgstr "Dati analitici" -#: engine/core/graphene/object_types.py:768 +#: engine/core/graphene/object_types.py:790 msgid "advertisement data" msgstr "Dati pubblicitari" -#: engine/core/graphene/object_types.py:771 +#: engine/core/graphene/object_types.py:793 msgid "company configuration" msgstr "Configurazione" -#: engine/core/graphene/object_types.py:775 +#: engine/core/graphene/object_types.py:797 msgid "language code" msgstr "Codice lingua" -#: engine/core/graphene/object_types.py:776 +#: engine/core/graphene/object_types.py:798 msgid "language name" msgstr "Nome della lingua" -#: engine/core/graphene/object_types.py:777 +#: engine/core/graphene/object_types.py:799 msgid "language flag, if exists :)" msgstr "Bandiera della lingua, se esiste :)" -#: engine/core/graphene/object_types.py:780 +#: engine/core/graphene/object_types.py:802 msgid "supported languages" msgstr "Ottenere un elenco delle lingue supportate" -#: engine/core/graphene/object_types.py:812 -#: engine/core/graphene/object_types.py:815 -#: engine/core/graphene/object_types.py:818 +#: engine/core/graphene/object_types.py:834 +#: engine/core/graphene/object_types.py:837 +#: engine/core/graphene/object_types.py:840 msgid "products search results" msgstr "Risultati della ricerca dei prodotti" -#: engine/core/graphene/object_types.py:820 +#: engine/core/graphene/object_types.py:842 msgid "posts search results" msgstr "Risultati della ricerca dei prodotti" -#: engine/core/models.py:75 +#: engine/core/models.py:91 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 " @@ -1618,23 +1658,23 @@ msgstr "" "Questo può essere utile per categorizzare e gestire meglio gli attributi in " "un sistema complesso." -#: engine/core/models.py:88 +#: engine/core/models.py:107 msgid "parent of this group" msgstr "Genitore di questo gruppo" -#: engine/core/models.py:89 +#: engine/core/models.py:108 msgid "parent attribute group" msgstr "Gruppo di attributi padre" -#: engine/core/models.py:93 engine/core/models.py:94 +#: engine/core/models.py:112 engine/core/models.py:113 msgid "attribute group's name" msgstr "Nome del gruppo di attributi" -#: engine/core/models.py:102 engine/core/models.py:763 +#: engine/core/models.py:121 engine/core/models.py:849 msgid "attribute group" msgstr "Gruppo di attributi" -#: engine/core/models.py:108 +#: engine/core/models.py:127 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1653,49 +1693,49 @@ msgstr "" "anche metadati e vincoli aggiuntivi, rendendolo adatto all'uso in sistemi " "che interagiscono con venditori terzi." -#: engine/core/models.py:122 +#: engine/core/models.py:141 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Memorizza le credenziali e gli endpoint necessari per la comunicazione API " "del fornitore." -#: engine/core/models.py:124 +#: engine/core/models.py:143 msgid "authentication info" msgstr "Informazioni sull'autenticazione" -#: engine/core/models.py:129 +#: engine/core/models.py:148 msgid "define the markup for products retrieved from this vendor" msgstr "Definire il markup per i prodotti recuperati da questo fornitore" -#: engine/core/models.py:130 +#: engine/core/models.py:149 msgid "vendor markup percentage" msgstr "Percentuale di ricarico del fornitore" -#: engine/core/models.py:134 +#: engine/core/models.py:153 msgid "name of this vendor" msgstr "Nome del fornitore" -#: engine/core/models.py:135 +#: engine/core/models.py:154 msgid "vendor name" msgstr "Nome del fornitore" -#: engine/core/models.py:150 +#: engine/core/models.py:169 msgid "response file" msgstr "file di risposta" -#: engine/core/models.py:151 +#: engine/core/models.py:170 msgid "vendor's last processing response" msgstr "risposta del venditore all'ultima elaborazione" -#: engine/core/models.py:157 +#: engine/core/models.py:176 msgid "vendor's integration file path" msgstr "Percorso del file di integrazione del fornitore" -#: engine/core/models.py:158 +#: engine/core/models.py:177 msgid "integration path" msgstr "Percorso di integrazione" -#: engine/core/models.py:192 +#: engine/core/models.py:211 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1710,27 +1750,27 @@ msgstr "" "operazioni esportate attraverso i mixin e fornisce la personalizzazione dei " "metadati per scopi amministrativi." -#: engine/core/models.py:204 engine/core/models.py:235 +#: engine/core/models.py:223 engine/core/models.py:254 msgid "internal tag identifier for the product tag" msgstr "Identificatore interno dell'etichetta del prodotto" -#: engine/core/models.py:205 engine/core/models.py:236 +#: engine/core/models.py:224 engine/core/models.py:255 msgid "tag name" msgstr "Nome del tag" -#: engine/core/models.py:209 engine/core/models.py:240 +#: engine/core/models.py:228 engine/core/models.py:259 msgid "user-friendly name for the product tag" msgstr "Nome intuitivo per l'etichetta del prodotto" -#: engine/core/models.py:210 engine/core/models.py:241 +#: engine/core/models.py:229 engine/core/models.py:260 msgid "tag display name" msgstr "Nome del tag" -#: engine/core/models.py:218 +#: engine/core/models.py:237 msgid "product tag" msgstr "Etichetta del prodotto" -#: engine/core/models.py:224 +#: engine/core/models.py:243 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 " @@ -1741,15 +1781,15 @@ msgstr "" "classificare i prodotti. Include gli attributi per un identificatore interno" " del tag e un nome di visualizzazione facile da usare." -#: engine/core/models.py:249 +#: engine/core/models.py:268 msgid "category tag" msgstr "tag categoria" -#: engine/core/models.py:250 engine/core/models.py:322 +#: engine/core/models.py:269 engine/core/models.py:345 msgid "category tags" msgstr "tag di categoria" -#: engine/core/models.py:255 +#: engine/core/models.py:274 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1772,52 +1812,52 @@ msgstr "" "specificare il nome, la descrizione e la gerarchia delle categorie, nonché " "di assegnare attributi come immagini, tag o priorità." -#: engine/core/models.py:269 +#: engine/core/models.py:292 msgid "upload an image representing this category" msgstr "Caricare un'immagine che rappresenti questa categoria" -#: engine/core/models.py:272 +#: engine/core/models.py:295 msgid "category image" msgstr "Categoria immagine" -#: engine/core/models.py:277 +#: engine/core/models.py:300 msgid "define a markup percentage for products in this category" msgstr "" "Definire una percentuale di ricarico per i prodotti di questa categoria" -#: engine/core/models.py:286 +#: engine/core/models.py:309 msgid "parent of this category to form a hierarchical structure" msgstr "Genitore di questa categoria per formare una struttura gerarchica" -#: engine/core/models.py:287 +#: engine/core/models.py:310 msgid "parent category" msgstr "Categoria di genitori" -#: engine/core/models.py:292 +#: engine/core/models.py:315 msgid "category name" msgstr "Nome della categoria" -#: engine/core/models.py:293 +#: engine/core/models.py:316 msgid "provide a name for this category" msgstr "Indicare un nome per questa categoria" -#: engine/core/models.py:300 +#: engine/core/models.py:323 msgid "add a detailed description for this category" msgstr "Aggiungere una descrizione dettagliata per questa categoria" -#: engine/core/models.py:301 +#: engine/core/models.py:324 msgid "category description" msgstr "Descrizione della categoria" -#: engine/core/models.py:321 +#: engine/core/models.py:344 msgid "tags that help describe or group this category" msgstr "tag che aiutano a descrivere o raggruppare questa categoria" -#: engine/core/models.py:328 engine/core/models.py:503 +#: engine/core/models.py:351 engine/core/models.py:552 msgid "priority" msgstr "Priorità" -#: engine/core/models.py:446 +#: engine/core/models.py:495 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1831,47 +1871,43 @@ msgstr "" "priorità. Permette di organizzare e rappresentare i dati relativi al marchio" " all'interno dell'applicazione." -#: engine/core/models.py:456 +#: engine/core/models.py:505 msgid "name of this brand" msgstr "Nome del marchio" -#: engine/core/models.py:457 +#: engine/core/models.py:506 msgid "brand name" msgstr "Nome del marchio" -#: engine/core/models.py:464 +#: engine/core/models.py:513 msgid "upload a logo representing this brand" msgstr "Caricare un logo che rappresenti questo marchio" -#: engine/core/models.py:466 +#: engine/core/models.py:515 msgid "brand small image" msgstr "Immagine piccola del marchio" -#: engine/core/models.py:472 +#: engine/core/models.py:521 msgid "upload a big logo representing this brand" msgstr "Caricare un grande logo che rappresenti questo marchio" -#: engine/core/models.py:474 +#: engine/core/models.py:523 msgid "brand big image" msgstr "Grande immagine del marchio" -#: engine/core/models.py:479 +#: engine/core/models.py:528 msgid "add a detailed description of the brand" msgstr "Aggiungere una descrizione dettagliata del marchio" -#: engine/core/models.py:480 +#: engine/core/models.py:529 msgid "brand description" msgstr "Descrizione del marchio" -#: engine/core/models.py:485 -msgid "optional categories that this brand is associated with" -msgstr "Categorie opzionali a cui questo marchio è associato" +#: engine/core/models.py:534 engine/core/models.py:535 +msgid "DEPRECATED" +msgstr "OBSOLETO" -#: engine/core/models.py:486 -msgid "associated categories" -msgstr "Categorie" - -#: engine/core/models.py:516 +#: engine/core/models.py:569 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1887,72 +1923,72 @@ msgstr "" "dell'inventario per consentire il monitoraggio e la valutazione dei prodotti" " disponibili presso i vari fornitori." -#: engine/core/models.py:528 +#: engine/core/models.py:581 msgid "the vendor supplying this product stock" msgstr "Il venditore che fornisce questo stock di prodotti" -#: engine/core/models.py:529 +#: engine/core/models.py:582 msgid "associated vendor" msgstr "Venditore associato" -#: engine/core/models.py:533 +#: engine/core/models.py:588 msgid "final price to the customer after markups" msgstr "Prezzo finale al cliente dopo i ricarichi" -#: engine/core/models.py:534 +#: engine/core/models.py:589 msgid "selling price" msgstr "Prezzo di vendita" -#: engine/core/models.py:539 +#: engine/core/models.py:594 msgid "the product associated with this stock entry" msgstr "Il prodotto associato a questa voce di magazzino" -#: engine/core/models.py:540 engine/core/models.py:828 -#: engine/core/models.py:874 engine/core/models.py:1912 +#: engine/core/models.py:595 engine/core/models.py:914 +#: engine/core/models.py:962 engine/core/models.py:2020 msgid "associated product" msgstr "Prodotto associato" -#: engine/core/models.py:547 +#: engine/core/models.py:604 msgid "the price paid to the vendor for this product" msgstr "Il prezzo pagato al venditore per questo prodotto" -#: engine/core/models.py:548 +#: engine/core/models.py:605 msgid "vendor purchase price" msgstr "Prezzo di acquisto del fornitore" -#: engine/core/models.py:552 +#: engine/core/models.py:609 msgid "available quantity of the product in stock" msgstr "Quantità disponibile del prodotto in magazzino" -#: engine/core/models.py:553 +#: engine/core/models.py:610 msgid "quantity in stock" msgstr "Quantità in magazzino" -#: engine/core/models.py:557 +#: engine/core/models.py:614 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU assegnato dal fornitore per identificare il prodotto" -#: engine/core/models.py:558 +#: engine/core/models.py:615 msgid "vendor sku" msgstr "SKU del venditore" -#: engine/core/models.py:564 +#: engine/core/models.py:621 msgid "digital file associated with this stock if applicable" msgstr "File digitale associato a questo stock, se applicabile" -#: engine/core/models.py:565 +#: engine/core/models.py:622 msgid "digital file" msgstr "File digitale" -#: engine/core/models.py:569 +#: engine/core/models.py:626 msgid "system attributes" msgstr "Attributi del sistema" -#: engine/core/models.py:577 +#: engine/core/models.py:636 msgid "stock entries" msgstr "Voci di magazzino" -#: engine/core/models.py:582 +#: engine/core/models.py:641 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1974,72 +2010,80 @@ msgstr "" " dei prodotti e le informazioni ad essi associate all'interno di " "un'applicazione." -#: engine/core/models.py:595 +#: engine/core/models.py:660 msgid "category this product belongs to" msgstr "Categoria a cui appartiene questo prodotto" -#: engine/core/models.py:604 +#: engine/core/models.py:669 msgid "optionally associate this product with a brand" msgstr "Associare facoltativamente questo prodotto a un marchio" -#: engine/core/models.py:610 +#: engine/core/models.py:675 msgid "tags that help describe or group this product" msgstr "Tag che aiutano a descrivere o raggruppare questo prodotto" -#: engine/core/models.py:615 +#: engine/core/models.py:680 msgid "indicates whether this product is digitally delivered" msgstr "Indica se il prodotto è consegnato in formato digitale" -#: engine/core/models.py:616 +#: engine/core/models.py:681 msgid "is product digital" msgstr "Il prodotto è digitale" -#: engine/core/models.py:623 +#: engine/core/models.py:688 msgid "indicates whether this product should be updated from periodic task" msgstr "" "indica se questo prodotto deve essere aggiornato dall'attività periodica" -#: engine/core/models.py:625 +#: engine/core/models.py:690 msgid "is product updatable" msgstr "il prodotto è aggiornabile" -#: engine/core/models.py:631 +#: engine/core/models.py:696 msgid "provide a clear identifying name for the product" msgstr "Fornire un nome identificativo chiaro per il prodotto" -#: engine/core/models.py:632 +#: engine/core/models.py:697 msgid "product name" msgstr "Nome del prodotto" -#: engine/core/models.py:638 engine/core/models.py:923 +#: engine/core/models.py:703 engine/core/models.py:1012 msgid "add a detailed description of the product" msgstr "Aggiungere una descrizione dettagliata del prodotto" -#: engine/core/models.py:639 +#: engine/core/models.py:704 msgid "product description" msgstr "Descrizione del prodotto" -#: engine/core/models.py:646 +#: engine/core/models.py:710 +msgid "optional video file for this product" +msgstr "File video opzionale per questo prodotto" + +#: engine/core/models.py:711 +msgid "product video" +msgstr "Video del prodotto" + +#: engine/core/models.py:719 msgid "part number for this product" msgstr "Numero di parte per questo prodotto" -#: engine/core/models.py:647 +#: engine/core/models.py:720 msgid "part number" msgstr "Numero di parte" -#: engine/core/models.py:666 +#: engine/core/models.py:739 msgid "stock keeping unit for this product" msgstr "Unità di mantenimento delle scorte per questo prodotto" -#: engine/core/models.py:673 +#: engine/core/models.py:746 msgid "whether to export this product to marketplaces" msgstr "Se esportare questo prodotto nei mercati" -#: engine/core/models.py:674 +#: engine/core/models.py:747 msgid "Export to Marketplaces" msgstr "Esportazione verso i mercati" -#: engine/core/models.py:749 +#: engine/core/models.py:835 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 " @@ -2055,66 +2099,66 @@ msgstr "" " tra cui stringa, intero, float, booleano, array e oggetto. Ciò consente una" " strutturazione dinamica e flessibile dei dati." -#: engine/core/models.py:762 +#: engine/core/models.py:848 msgid "group of this attribute" msgstr "Gruppo di questo attributo" -#: engine/core/models.py:768 +#: engine/core/models.py:854 msgid "string" msgstr "Stringa" -#: engine/core/models.py:769 +#: engine/core/models.py:855 msgid "integer" msgstr "Intero" -#: engine/core/models.py:770 +#: engine/core/models.py:856 msgid "float" msgstr "Galleggiante" -#: engine/core/models.py:771 +#: engine/core/models.py:857 msgid "boolean" msgstr "Booleano" -#: engine/core/models.py:772 +#: engine/core/models.py:858 msgid "array" msgstr "Array" -#: engine/core/models.py:773 +#: engine/core/models.py:859 msgid "object" msgstr "Oggetto" -#: engine/core/models.py:775 +#: engine/core/models.py:861 msgid "type of the attribute's value" msgstr "Tipo di valore dell'attributo" -#: engine/core/models.py:776 +#: engine/core/models.py:862 msgid "value type" msgstr "Tipo di valore" -#: engine/core/models.py:781 +#: engine/core/models.py:867 msgid "name of this attribute" msgstr "Nome dell'attributo" -#: engine/core/models.py:782 +#: engine/core/models.py:868 msgid "attribute's name" msgstr "Nome dell'attributo" -#: engine/core/models.py:787 +#: engine/core/models.py:873 msgid "is filterable" msgstr "è filtrabile" -#: engine/core/models.py:789 +#: engine/core/models.py:875 msgid "designates whether this attribute can be used for filtering or not" msgstr "" "Quali attributi e valori possono essere utilizzati per filtrare questa " "categoria." -#: engine/core/models.py:802 engine/core/models.py:820 +#: engine/core/models.py:888 engine/core/models.py:906 #: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Attributo" -#: engine/core/models.py:808 +#: engine/core/models.py:894 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" @@ -2125,19 +2169,19 @@ msgstr "" "organizzazione e rappresentazione dinamica delle caratteristiche del " "prodotto." -#: engine/core/models.py:819 +#: engine/core/models.py:905 msgid "attribute of this value" msgstr "Attributo di questo valore" -#: engine/core/models.py:827 +#: engine/core/models.py:913 msgid "the specific product associated with this attribute's value" msgstr "Il prodotto specifico associato al valore di questo attributo" -#: engine/core/models.py:833 +#: engine/core/models.py:919 msgid "the specific value for this attribute" msgstr "Il valore specifico per questo attributo" -#: engine/core/models.py:846 +#: engine/core/models.py:934 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -2151,40 +2195,40 @@ msgstr "" "specifici e di determinazione dell'ordine di visualizzazione. Include anche " "una funzione di accessibilità con testo alternativo per le immagini." -#: engine/core/models.py:857 +#: engine/core/models.py:945 msgid "provide alternative text for the image for accessibility" msgstr "" "Fornire un testo alternativo per l'immagine ai fini dell'accessibilità." -#: engine/core/models.py:858 +#: engine/core/models.py:946 msgid "image alt text" msgstr "Testo alt dell'immagine" -#: engine/core/models.py:861 +#: engine/core/models.py:949 msgid "upload the image file for this product" msgstr "Caricare il file immagine per questo prodotto" -#: engine/core/models.py:862 engine/core/models.py:893 +#: engine/core/models.py:950 engine/core/models.py:982 msgid "product image" msgstr "Immagine del prodotto" -#: engine/core/models.py:867 +#: engine/core/models.py:955 msgid "determines the order in which images are displayed" msgstr "Determina l'ordine di visualizzazione delle immagini" -#: engine/core/models.py:868 +#: engine/core/models.py:956 msgid "display priority" msgstr "Priorità del display" -#: engine/core/models.py:873 +#: engine/core/models.py:961 msgid "the product that this image represents" msgstr "Il prodotto che questa immagine rappresenta" -#: engine/core/models.py:894 +#: engine/core/models.py:983 msgid "product images" msgstr "Immagini del prodotto" -#: engine/core/models.py:899 +#: engine/core/models.py:988 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -2200,39 +2244,39 @@ msgstr "" "collegarla ai prodotti applicabili. Si integra con il catalogo dei prodotti " "per determinare gli articoli interessati dalla campagna." -#: engine/core/models.py:911 +#: engine/core/models.py:1000 msgid "percentage discount for the selected products" msgstr "Percentuale di sconto per i prodotti selezionati" -#: engine/core/models.py:912 +#: engine/core/models.py:1001 msgid "discount percentage" msgstr "Percentuale di sconto" -#: engine/core/models.py:917 +#: engine/core/models.py:1006 msgid "provide a unique name for this promotion" msgstr "Fornite un nome unico per questa promozione" -#: engine/core/models.py:918 +#: engine/core/models.py:1007 msgid "promotion name" msgstr "Nome della promozione" -#: engine/core/models.py:924 +#: engine/core/models.py:1013 msgid "promotion description" msgstr "Descrizione della promozione" -#: engine/core/models.py:929 +#: engine/core/models.py:1018 msgid "select which products are included in this promotion" msgstr "Selezionare i prodotti inclusi in questa promozione" -#: engine/core/models.py:930 +#: engine/core/models.py:1019 msgid "included products" msgstr "Prodotti inclusi" -#: engine/core/models.py:934 +#: engine/core/models.py:1027 msgid "promotion" msgstr "Promozione" -#: engine/core/models.py:945 +#: engine/core/models.py:1038 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2245,23 +2289,23 @@ msgstr "" "rimozione di prodotti, nonché operazioni per l'aggiunta e la rimozione di " "più prodotti contemporaneamente." -#: engine/core/models.py:957 +#: engine/core/models.py:1050 msgid "products that the user has marked as wanted" msgstr "Prodotti che l'utente ha contrassegnato come desiderati" -#: engine/core/models.py:965 +#: engine/core/models.py:1058 msgid "user who owns this wishlist" msgstr "Utente che possiede questa wishlist" -#: engine/core/models.py:966 +#: engine/core/models.py:1059 msgid "wishlist owner" msgstr "Proprietario della lista dei desideri" -#: engine/core/models.py:974 +#: engine/core/models.py:1067 msgid "wishlist" msgstr "Lista dei desideri" -#: engine/core/models.py:1016 +#: engine/core/models.py:1109 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2277,19 +2321,19 @@ msgstr "" "file documentari. Estende le funzionalità di mixin specifici e fornisce " "ulteriori caratteristiche personalizzate." -#: engine/core/models.py:1031 +#: engine/core/models.py:1124 msgid "documentary" msgstr "Documentario" -#: engine/core/models.py:1032 +#: engine/core/models.py:1125 msgid "documentaries" msgstr "Documentari" -#: engine/core/models.py:1042 +#: engine/core/models.py:1135 msgid "unresolved" msgstr "Non risolto" -#: engine/core/models.py:1047 +#: engine/core/models.py:1140 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2311,59 +2355,59 @@ msgstr "" "classe consente inoltre di associare un indirizzo a un utente, facilitando " "la gestione personalizzata dei dati." -#: engine/core/models.py:1062 +#: engine/core/models.py:1155 msgid "address line for the customer" msgstr "Indirizzo del cliente" -#: engine/core/models.py:1063 +#: engine/core/models.py:1156 msgid "address line" msgstr "Linea di indirizzo" -#: engine/core/models.py:1065 +#: engine/core/models.py:1158 msgid "street" msgstr "Via" -#: engine/core/models.py:1066 +#: engine/core/models.py:1159 msgid "district" msgstr "Distretto" -#: engine/core/models.py:1067 +#: engine/core/models.py:1160 msgid "city" msgstr "Città" -#: engine/core/models.py:1068 +#: engine/core/models.py:1161 msgid "region" msgstr "Regione" -#: engine/core/models.py:1069 +#: engine/core/models.py:1162 msgid "postal code" msgstr "Codice postale" -#: engine/core/models.py:1070 +#: engine/core/models.py:1163 msgid "country" msgstr "Paese" -#: engine/core/models.py:1077 +#: engine/core/models.py:1170 msgid "geolocation point: (longitude, latitude)" msgstr "Punto di geolocalizzazione(Longitudine, Latitudine)" -#: engine/core/models.py:1083 +#: engine/core/models.py:1176 msgid "full JSON response from geocoder for this address" msgstr "Risposta JSON completa di geocoder per questo indirizzo" -#: engine/core/models.py:1089 +#: engine/core/models.py:1182 msgid "stored JSON response from the geocoding service" msgstr "Risposta JSON memorizzata dal servizio di geocodifica" -#: engine/core/models.py:1099 +#: engine/core/models.py:1192 msgid "address" msgstr "Indirizzo" -#: engine/core/models.py:1100 +#: engine/core/models.py:1193 msgid "addresses" msgstr "Indirizzi" -#: engine/core/models.py:1112 +#: engine/core/models.py:1205 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2380,74 +2424,74 @@ msgstr "" "utilizzo. Include funzionalità per convalidare e applicare il codice " "promozionale a un ordine, assicurando il rispetto dei vincoli." -#: engine/core/models.py:1126 +#: engine/core/models.py:1219 msgid "unique code used by a user to redeem a discount" msgstr "Codice univoco utilizzato da un utente per riscattare uno sconto" -#: engine/core/models.py:1127 +#: engine/core/models.py:1220 msgid "promo code identifier" msgstr "Identificatore del codice promozionale" -#: engine/core/models.py:1134 +#: engine/core/models.py:1227 msgid "fixed discount amount applied if percent is not used" msgstr "" "Importo fisso dello sconto applicato se non si utilizza la percentuale" -#: engine/core/models.py:1135 +#: engine/core/models.py:1228 msgid "fixed discount amount" msgstr "Importo fisso dello sconto" -#: engine/core/models.py:1141 +#: engine/core/models.py:1234 msgid "percentage discount applied if fixed amount is not used" msgstr "Sconto percentuale applicato se l'importo fisso non viene utilizzato" -#: engine/core/models.py:1142 +#: engine/core/models.py:1235 msgid "percentage discount" msgstr "Sconto percentuale" -#: engine/core/models.py:1147 +#: engine/core/models.py:1240 msgid "timestamp when the promocode expires" msgstr "Data di scadenza del codice promozionale" -#: engine/core/models.py:1148 +#: engine/core/models.py:1241 msgid "end validity time" msgstr "Tempo di validità finale" -#: engine/core/models.py:1153 +#: engine/core/models.py:1246 msgid "timestamp from which this promocode is valid" msgstr "Data a partire dalla quale il codice promozionale è valido" -#: engine/core/models.py:1154 +#: engine/core/models.py:1247 msgid "start validity time" msgstr "Ora di inizio validità" -#: engine/core/models.py:1159 +#: engine/core/models.py:1252 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" -#: engine/core/models.py:1160 +#: engine/core/models.py:1253 msgid "usage timestamp" msgstr "Timestamp d'uso" -#: engine/core/models.py:1165 +#: engine/core/models.py:1258 msgid "user assigned to this promocode if applicable" msgstr "Utente assegnato a questo codice promozionale, se applicabile" -#: engine/core/models.py:1166 +#: engine/core/models.py:1259 msgid "assigned user" msgstr "Utente assegnato" -#: engine/core/models.py:1173 +#: engine/core/models.py:1266 msgid "promo code" msgstr "Codice promozionale" -#: engine/core/models.py:1174 +#: engine/core/models.py:1267 msgid "promo codes" msgstr "Codici promozionali" -#: engine/core/models.py:1190 +#: engine/core/models.py:1283 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2455,16 +2499,16 @@ msgstr "" "È necessario definire un solo tipo di sconto (importo o percentuale), ma non" " entrambi o nessuno." -#: engine/core/models.py:1212 +#: engine/core/models.py:1305 msgid "promocode already used" msgstr "Il codice promozionale è già stato utilizzato" -#: engine/core/models.py:1234 +#: engine/core/models.py:1327 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Tipo di sconto non valido per il codice promozionale {self.uuid}!" -#: engine/core/models.py:1243 +#: engine/core/models.py:1336 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 " @@ -2482,140 +2526,140 @@ msgstr "" "funzionalità supporta la gestione dei prodotti nel ciclo di vita " "dell'ordine." -#: engine/core/models.py:1260 +#: engine/core/models.py:1357 msgid "the billing address used for this order" msgstr "L'indirizzo di fatturazione utilizzato per questo ordine" -#: engine/core/models.py:1268 +#: engine/core/models.py:1365 msgid "optional promo code applied to this order" msgstr "Codice promozionale opzionale applicato a questo ordine" -#: engine/core/models.py:1269 +#: engine/core/models.py:1366 msgid "applied promo code" msgstr "Codice promozionale applicato" -#: engine/core/models.py:1277 +#: engine/core/models.py:1374 msgid "the shipping address used for this order" msgstr "L'indirizzo di spedizione utilizzato per questo ordine" -#: engine/core/models.py:1278 +#: engine/core/models.py:1375 msgid "shipping address" msgstr "Indirizzo di spedizione" -#: engine/core/models.py:1284 +#: engine/core/models.py:1381 msgid "current status of the order in its lifecycle" msgstr "Stato attuale dell'ordine nel suo ciclo di vita" -#: engine/core/models.py:1285 +#: engine/core/models.py:1382 msgid "order status" msgstr "Stato dell'ordine" -#: engine/core/models.py:1290 engine/core/models.py:1889 +#: engine/core/models.py:1387 engine/core/models.py:1997 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." -#: engine/core/models.py:1296 +#: engine/core/models.py:1393 msgid "json representation of order attributes for this order" msgstr "Rappresentazione JSON degli attributi dell'ordine per questo ordine" -#: engine/core/models.py:1302 +#: engine/core/models.py:1399 msgid "the user who placed the order" msgstr "L'utente che ha effettuato l'ordine" -#: engine/core/models.py:1303 +#: engine/core/models.py:1400 msgid "user" msgstr "Utente" -#: engine/core/models.py:1309 +#: engine/core/models.py:1406 msgid "the timestamp when the order was finalized" msgstr "Il timestamp del momento in cui l'ordine è stato finalizzato" -#: engine/core/models.py:1310 +#: engine/core/models.py:1407 msgid "buy time" msgstr "Acquista tempo" -#: engine/core/models.py:1317 +#: engine/core/models.py:1414 msgid "a human-readable identifier for the order" msgstr "Un identificatore leggibile dall'uomo per l'ordine" -#: engine/core/models.py:1318 +#: engine/core/models.py:1415 msgid "human readable id" msgstr "ID leggibile dall'uomo" -#: engine/core/models.py:1324 +#: engine/core/models.py:1421 msgid "order" msgstr "Ordine" -#: engine/core/models.py:1371 +#: engine/core/models.py:1468 msgid "a user must have only one pending order at a time" msgstr "Un utente può avere un solo ordine pendente alla volta!" -#: engine/core/models.py:1404 +#: engine/core/models.py:1504 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." -#: engine/core/models.py:1410 +#: engine/core/models.py:1510 msgid "you cannot add inactive products to order" msgstr "Non è possibile aggiungere all'ordine prodotti inattivi" -#: engine/core/models.py:1432 +#: engine/core/models.py:1533 msgid "you cannot add more products than available in stock" msgstr "" "Non è possibile aggiungere più prodotti di quelli disponibili in magazzino" -#: engine/core/models.py:1456 engine/core/models.py:1485 -#: engine/core/models.py:1495 +#: engine/core/models.py:1557 engine/core/models.py:1586 +#: engine/core/models.py:1596 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." -#: engine/core/models.py:1480 +#: engine/core/models.py:1581 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} non esiste con la query <{query}>!" -#: engine/core/models.py:1519 +#: engine/core/models.py:1620 msgid "promocode does not exist" msgstr "Il codice promozionale non esiste" -#: engine/core/models.py:1534 +#: engine/core/models.py:1635 msgid "you can only buy physical products with shipping address specified" msgstr "" "È possibile acquistare solo prodotti fisici con indirizzo di spedizione " "specificato!" -#: engine/core/models.py:1555 +#: engine/core/models.py:1656 msgid "address does not exist" msgstr "L'indirizzo non esiste" -#: engine/core/models.py:1577 engine/core/models.py:1656 +#: engine/core/models.py:1678 engine/core/models.py:1757 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." -#: engine/core/models.py:1583 engine/core/models.py:1649 +#: engine/core/models.py:1684 engine/core/models.py:1750 msgid "invalid force value" msgstr "Valore di forza non valido" -#: engine/core/models.py:1589 engine/core/models.py:1660 +#: engine/core/models.py:1690 engine/core/models.py:1761 msgid "you cannot purchase an empty order!" msgstr "Non è possibile acquistare un ordine vuoto!" -#: engine/core/models.py:1610 +#: engine/core/models.py:1711 msgid "you cannot buy an order without a user" msgstr "Non è possibile acquistare un ordine senza un utente!" -#: engine/core/models.py:1624 +#: engine/core/models.py:1725 msgid "a user without a balance cannot buy with balance" msgstr "Un utente senza saldo non può acquistare con il saldo!" -#: engine/core/models.py:1630 +#: engine/core/models.py:1731 msgid "insufficient funds to complete the order" msgstr "Fondi insufficienti per completare l'ordine" -#: engine/core/models.py:1671 +#: engine/core/models.py:1772 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2624,7 +2668,7 @@ msgstr "" "seguenti informazioni: nome del cliente, e-mail del cliente, numero di " "telefono del cliente" -#: engine/core/models.py:1682 +#: engine/core/models.py:1783 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2632,7 +2676,7 @@ msgstr "" "Metodo di pagamento non valido: {payment_method} da " "{available_payment_methods}!" -#: engine/core/models.py:1813 +#: engine/core/models.py:1916 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2647,33 +2691,33 @@ msgstr "" "assegnata dall'utente. La classe utilizza campi del database per modellare e" " gestire efficacemente i dati di feedback." -#: engine/core/models.py:1825 +#: engine/core/models.py:1928 msgid "user-provided comments about their experience with the product" msgstr "Commenti degli utenti sulla loro esperienza con il prodotto" -#: engine/core/models.py:1826 +#: engine/core/models.py:1929 msgid "feedback comments" msgstr "Commenti di feedback" -#: engine/core/models.py:1834 +#: engine/core/models.py:1937 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." -#: engine/core/models.py:1836 +#: engine/core/models.py:1939 msgid "related order product" msgstr "Prodotto correlato all'ordine" -#: engine/core/models.py:1841 +#: engine/core/models.py:1944 msgid "user-assigned rating for the product" msgstr "Valutazione del prodotto assegnata dall'utente" -#: engine/core/models.py:1842 +#: engine/core/models.py:1945 msgid "product rating" msgstr "Valutazione del prodotto" -#: engine/core/models.py:1862 +#: engine/core/models.py:1965 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2696,109 +2740,109 @@ msgstr "" "modello si integra con i modelli Ordine e Prodotto e memorizza un " "riferimento ad essi." -#: engine/core/models.py:1877 +#: engine/core/models.py:1985 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." -#: engine/core/models.py:1878 +#: engine/core/models.py:1986 msgid "purchase price at order time" msgstr "Prezzo di acquisto al momento dell'ordine" -#: engine/core/models.py:1883 +#: engine/core/models.py:1991 msgid "internal comments for admins about this ordered product" msgstr "Commenti interni per gli amministratori su questo prodotto ordinato" -#: engine/core/models.py:1884 +#: engine/core/models.py:1992 msgid "internal comments" msgstr "Commenti interni" -#: engine/core/models.py:1890 +#: engine/core/models.py:1998 msgid "user notifications" msgstr "Notifiche degli utenti" -#: engine/core/models.py:1895 +#: engine/core/models.py:2003 msgid "json representation of this item's attributes" msgstr "Rappresentazione JSON degli attributi di questo elemento" -#: engine/core/models.py:1896 +#: engine/core/models.py:2004 msgid "ordered product attributes" msgstr "Attributi del prodotto ordinati" -#: engine/core/models.py:1901 +#: engine/core/models.py:2009 msgid "reference to the parent order that contains this product" msgstr "Riferimento all'ordine padre che contiene questo prodotto" -#: engine/core/models.py:1902 +#: engine/core/models.py:2010 msgid "parent order" msgstr "Ordine dei genitori" -#: engine/core/models.py:1911 +#: engine/core/models.py:2019 msgid "the specific product associated with this order line" msgstr "Il prodotto specifico associato a questa riga d'ordine" -#: engine/core/models.py:1918 +#: engine/core/models.py:2026 msgid "quantity of this specific product in the order" msgstr "Quantità di questo prodotto specifico nell'ordine" -#: engine/core/models.py:1919 +#: engine/core/models.py:2027 msgid "product quantity" msgstr "Quantità di prodotto" -#: engine/core/models.py:1926 +#: engine/core/models.py:2034 msgid "current status of this product in the order" msgstr "Stato attuale di questo prodotto nell'ordine" -#: engine/core/models.py:1927 +#: engine/core/models.py:2035 msgid "product line status" msgstr "Stato della linea di prodotti" -#: engine/core/models.py:1998 +#: engine/core/models.py:2106 msgid "order product must have an order" msgstr "L'ordine-prodotto deve avere un ordine associato!" -#: engine/core/models.py:2000 +#: engine/core/models.py:2108 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Azione errata specificata per il feedback: {action}!" -#: engine/core/models.py:2017 +#: engine/core/models.py:2125 msgid "you cannot feedback an order which is not received" msgstr "non è possibile dare un riscontro a un ordine non ricevuto" -#: engine/core/models.py:2026 +#: engine/core/models.py:2132 engine/core/models.py:2227 msgid "name" msgstr "Nome" -#: engine/core/models.py:2028 +#: engine/core/models.py:2134 msgid "URL of the integration" msgstr "URL dell'integrazione" -#: engine/core/models.py:2031 +#: engine/core/models.py:2137 msgid "authentication credentials" msgstr "Credenziali di autenticazione" -#: engine/core/models.py:2054 +#: engine/core/models.py:2160 msgid "you can only have one default CRM provider" msgstr "È possibile avere un solo provider CRM predefinito" -#: engine/core/models.py:2064 +#: engine/core/models.py:2170 msgid "CRM" msgstr "CRM" -#: engine/core/models.py:2065 +#: engine/core/models.py:2171 msgid "CRMs" msgstr "CRM" -#: engine/core/models.py:2081 +#: engine/core/models.py:2187 msgid "order CRM link" msgstr "Link al CRM dell'ordine" -#: engine/core/models.py:2082 +#: engine/core/models.py:2188 msgid "orders CRM links" msgstr "Link al CRM degli ordini" -#: engine/core/models.py:2087 +#: engine/core/models.py:2193 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2815,14 +2859,39 @@ msgstr "" "il download della risorsa quando l'ordine associato è in uno stato " "completato." -#: engine/core/models.py:2103 +#: engine/core/models.py:2209 msgid "download" msgstr "Scaricare" -#: engine/core/models.py:2104 +#: engine/core/models.py:2210 msgid "downloads" msgstr "Scaricamento" +#: engine/core/models.py:2228 +msgid "descriptive name for the image" +msgstr "Nome descrittivo dell'immagine" + +#: engine/core/models.py:2233 +msgid "image file pasted in the markdown editor" +msgstr "File immagine incollato nell'editor Markdown" + +#: engine/core/models.py:2239 +msgid "alt text" +msgstr "Altro testo" + +#: engine/core/models.py:2240 +msgid "alternative text for accessibility" +msgstr "" +"Fornire un testo alternativo per l'immagine ai fini dell'accessibilità." + +#: engine/core/models.py:2244 +msgid "pasted image" +msgstr "Immagine incollata" + +#: engine/core/models.py:2245 +msgid "pasted images" +msgstr "Immagini incollate" + #: engine/core/serializers/utility.py:91 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." @@ -2831,6 +2900,16 @@ msgstr "" " e l'uuid del prodotto dell'ordine." #: engine/core/sitemaps.py:25 +#: engine/core/templates/admin_doc/bookmarklets.html:8 +#: engine/core/templates/admin_doc/index.html:8 +#: engine/core/templates/admin_doc/missing_docutils.html:8 +#: engine/core/templates/admin_doc/model_detail.html:8 +#: engine/core/templates/admin_doc/model_index.html:8 +#: engine/core/templates/admin_doc/template_detail.html:8 +#: engine/core/templates/admin_doc/template_filter_index.html:8 +#: engine/core/templates/admin_doc/template_tag_index.html:8 +#: engine/core/templates/admin_doc/view_detail.html:8 +#: engine/core/templates/admin_doc/view_index.html:8 msgid "Home" msgstr "Casa" @@ -2883,45 +2962,34 @@ msgstr "Gross" msgid "Dashboard" msgstr "Cruscotto" -#: engine/core/templates/admin/dashboard/_income_overview.html:7 +#: engine/core/templates/admin/dashboard/_income_overview.html:6 msgid "Income overview" msgstr "Panoramica delle entrate" -#: engine/core/templates/admin/dashboard/_income_overview.html:31 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Net" +#: engine/core/templates/admin/dashboard/_income_overview.html:16 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" msgstr "Ricavi netti" -#: engine/core/templates/admin/dashboard/_income_overview.html:37 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Taxes" -msgstr "Tasse" - -#: engine/core/templates/admin/dashboard/_income_overview.html:43 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 +#: engine/core/templates/admin/dashboard/_income_overview.html:21 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 msgid "Returns" msgstr "Restituzioni" -#: engine/core/templates/admin/dashboard/_income_overview.html:48 -msgid "Gross (pie total)" -msgstr "Ricavo lordo" - -#: engine/core/templates/admin/dashboard/_income_overview.html:72 -msgid "No data" -msgstr "Nessuna data" - +#: engine/core/templates/admin/dashboard/_income_overview.html:26 #: engine/core/templates/admin/dashboard/_kpis.html:6 msgid "GMV" msgstr "GMV" +#: engine/core/templates/admin/dashboard/_income_overview.html:50 +msgid "No data" +msgstr "Nessuna data" + #: engine/core/templates/admin/dashboard/_kpis.html:34 msgid "AOV" msgstr "AOV" -#: engine/core/templates/admin/dashboard/_kpis.html:48 -msgid "Net revenue" -msgstr "Ricavi netti" - #: engine/core/templates/admin/dashboard/_kpis.html:62 msgid "Refund rate" msgstr "Tasso di rimborso" @@ -2934,7 +3002,7 @@ msgstr "Restituito" msgid "Low stock" msgstr "Stock ridotto" -#: engine/core/templates/admin/dashboard/_low_stock.html:29 +#: engine/core/templates/admin/dashboard/_low_stock.html:33 msgid "No low stock items." msgstr "Nessun articolo a basso stock." @@ -2991,6 +3059,306 @@ msgstr "Nessuna vendita di categoria negli ultimi 30 giorni." msgid "Django site admin" msgstr "Amministratore del sito Django" +#: engine/core/templates/admin_doc/bookmarklets.html:4 +#: engine/core/templates/admin_doc/bookmarklets.html:17 +msgid "Documentation bookmarklets" +msgstr "Segnalibri della documentazione" + +#: engine/core/templates/admin_doc/bookmarklets.html:10 +#: engine/core/templates/admin_doc/index.html:4 +#: engine/core/templates/admin_doc/index.html:10 +#: engine/core/templates/admin_doc/index.html:15 +#: engine/core/templates/admin_doc/missing_docutils.html:10 +#: engine/core/templates/admin_doc/missing_docutils.html:19 +#: engine/core/templates/admin_doc/model_detail.html:10 +#: engine/core/templates/admin_doc/model_index.html:10 +#: engine/core/templates/admin_doc/template_detail.html:10 +#: engine/core/templates/admin_doc/template_filter_index.html:10 +#: engine/core/templates/admin_doc/template_tag_index.html:10 +#: engine/core/templates/admin_doc/view_detail.html:10 +#: engine/core/templates/admin_doc/view_index.html:10 +msgid "Documentation" +msgstr "Documentazione" + +#: engine/core/templates/admin_doc/bookmarklets.html:12 +#: engine/core/templates/admin_doc/index.html:53 +msgid "Bookmarklets" +msgstr "Segnalibri" + +#: engine/core/templates/admin_doc/bookmarklets.html:19 +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Per installare i bookmarklet, trascina il link sulla barra dei segnalibri " +"oppure clicca con il tasto destro del mouse sul link e aggiungilo ai " +"segnalibri. Ora puoi selezionare il bookmarklet da qualsiasi pagina del " +"sito." + +#: engine/core/templates/admin_doc/bookmarklets.html:29 +msgid "Documentation for this page" +msgstr "Documentazione per questa pagina" + +#: engine/core/templates/admin_doc/bookmarklets.html:31 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Ti porta da qualsiasi pagina alla documentazione relativa alla vista che " +"genera quella pagina." + +#: engine/core/templates/admin_doc/index.html:21 +#: engine/core/templates/admin_doc/model_detail.html:12 +#: engine/core/templates/admin_doc/model_index.html:4 +#: engine/core/templates/admin_doc/model_index.html:12 +msgid "Models" +msgstr "Modelli" + +#: engine/core/templates/admin_doc/index.html:23 +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"I modelli sono descrizioni di tutti gli oggetti presenti nel sistema e dei " +"campi ad essi associati. Ogni modello ha un elenco di campi a cui è " +"possibile accedere come variabili del modello." + +#: engine/core/templates/admin_doc/index.html:29 +#: engine/core/templates/admin_doc/view_detail.html:12 +#: engine/core/templates/admin_doc/view_index.html:4 +#: engine/core/templates/admin_doc/view_index.html:12 +msgid "Views" +msgstr "Visualizzazioni" + +#: engine/core/templates/admin_doc/index.html:31 +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Ogni pagina del sito pubblico è generata da una vista. La vista definisce " +"quale modello viene utilizzato per generare la pagina e quali oggetti sono " +"disponibili per quel modello." + +#: engine/core/templates/admin_doc/index.html:39 +msgid "List of all the template tags and their functions." +msgstr "Elenco di tutti i tag dei modelli e delle loro funzioni." + +#: engine/core/templates/admin_doc/index.html:45 +#: engine/core/templates/admin_doc/template_filter_index.html:12 +msgid "Filters" +msgstr "Filtri" + +#: engine/core/templates/admin_doc/index.html:47 +msgid "" +"Filters are actions which can be applied to variables in a template to alter" +" the output." +msgstr "" +"I filtri sono azioni che possono essere applicate alle variabili in un " +"modello per modificare l'output." + +#: engine/core/templates/admin_doc/index.html:55 +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Strumenti per il tuo browser per accedere rapidamente alle funzionalità di " +"amministrazione." + +#: engine/core/templates/admin_doc/missing_docutils.html:4 +msgid "Please install docutils" +msgstr "Si prega di installare docutils" + +#: engine/core/templates/admin_doc/missing_docutils.html:20 +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"Il sistema di documentazione amministrativa richiede la libreria docutils di Python." + +#: engine/core/templates/admin_doc/missing_docutils.html:21 +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Chiedi ai tuoi amministratori di installare docutils." + +#: engine/core/templates/admin_doc/model_detail.html:4 +#, python-format +msgid "Model: %(name)s" +msgstr "Modello: %(name)s" + +#: engine/core/templates/admin_doc/model_detail.html:29 +msgid "Fields" +msgstr "Campi" + +#: engine/core/templates/admin_doc/model_detail.html:36 +msgid "Field" +msgstr "Campo" + +#: engine/core/templates/admin_doc/model_detail.html:37 +msgid "Type" +msgstr "Tipo" + +#: engine/core/templates/admin_doc/model_detail.html:38 +#: engine/core/templates/admin_doc/model_detail.html:70 +msgid "Description" +msgstr "Descrizione" + +#: engine/core/templates/admin_doc/model_detail.html:61 +msgid "Methods with arguments" +msgstr "Metodi con argomenti" + +#: engine/core/templates/admin_doc/model_detail.html:68 +msgid "Method" +msgstr "Metodo" + +#: engine/core/templates/admin_doc/model_detail.html:69 +msgid "Arguments" +msgstr "Argomenti" + +#: engine/core/templates/admin_doc/model_detail.html:89 +msgid "Back to Model documentation" +msgstr "Torna alla documentazione del modello" + +#: engine/core/templates/admin_doc/model_index.html:17 +msgid "Model documentation" +msgstr "Documentazione del modello" + +#: engine/core/templates/admin_doc/model_index.html:44 +msgid "Model groups" +msgstr "Gruppi modello" + +#: engine/core/templates/admin_doc/template_detail.html:4 +#, python-format +msgid "Template: %(name)s" +msgstr "Modello: %(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:12 +msgid "Templates" +msgstr "Modelli" + +#: engine/core/templates/admin_doc/template_detail.html:17 +#, python-format +msgid "" +"Template: %(name)s" +msgstr "" +"Modello: %(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:21 +#, python-format +msgid "Search path for template %(name)s:" +msgstr "" +"Percorso di ricerca per il modello %(name)s:" + +#: engine/core/templates/admin_doc/template_detail.html:29 +msgid "(does not exist)" +msgstr "(non esiste)" + +#: engine/core/templates/admin_doc/template_detail.html:40 +msgid "Back to Documentation" +msgstr "Torna alla documentazione" + +#: engine/core/templates/admin_doc/template_filter_index.html:4 +msgid "Template filters" +msgstr "Filtri modello" + +#: engine/core/templates/admin_doc/template_filter_index.html:17 +msgid "Template filter documentation" +msgstr "Documentazione sul filtro dei modelli" + +#: engine/core/templates/admin_doc/template_filter_index.html:26 +#: engine/core/templates/admin_doc/template_filter_index.html:52 +msgid "Built-in filters" +msgstr "Filtri integrati" + +#: engine/core/templates/admin_doc/template_filter_index.html:29 +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before using" +" the filter." +msgstr "" +"Per utilizzare questi filtri, inserisci %(code)s nel tuo modello prima" +" di utilizzare il filtro." + +#: engine/core/templates/admin_doc/template_tag_index.html:4 +msgid "Template tags" +msgstr "Tag dei modelli" + +#: engine/core/templates/admin_doc/template_tag_index.html:17 +msgid "Template tag documentation" +msgstr "Documentazione dei tag dei modelli" + +#: engine/core/templates/admin_doc/template_tag_index.html:26 +#: engine/core/templates/admin_doc/template_tag_index.html:52 +msgid "Built-in tags" +msgstr "Tag incorporati" + +#: engine/core/templates/admin_doc/template_tag_index.html:29 +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using the tag." +msgstr "" +"Per utilizzare questi tag, inserisci %(code)s nel tuo modello prima" +" di utilizzare il tag." + +#: engine/core/templates/admin_doc/view_detail.html:4 +#, python-format +msgid "View: %(name)s" +msgstr "Visualizza: %(name)s" + +#: engine/core/templates/admin_doc/view_detail.html:28 +msgid "Context:" +msgstr "Contesto:" + +#: engine/core/templates/admin_doc/view_detail.html:33 +msgid "Templates:" +msgstr "Modelli:" + +#: engine/core/templates/admin_doc/view_detail.html:41 +msgid "Back to View documentation" +msgstr "Torna alla documentazione" + +#: engine/core/templates/admin_doc/view_index.html:17 +msgid "View documentation" +msgstr "Visualizza la documentazione" + +#: engine/core/templates/admin_doc/view_index.html:28 +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Visualizzazioni per spazio dei nomi %(name)s" + +#: engine/core/templates/admin_doc/view_index.html:30 +msgid "Views by empty namespace" +msgstr "Visualizzazioni per namespace vuoto" + +#: engine/core/templates/admin_doc/view_index.html:40 +#, python-format +msgid "" +"View function: %(full_name)s. Name: %(url_name)s." +msgstr "" +"Funzione di visualizzazione: %(full_name)s. Nome: " +"%(url_name)s." + +#: engine/core/templates/admin_doc/view_index.html:54 +msgid "Jump to namespace" +msgstr "Vai allo spazio dei nomi" + +#: engine/core/templates/admin_doc/view_index.html:59 +msgid "Empty namespace" +msgstr "Spazio dei nomi vuoto" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -3091,7 +3459,7 @@ msgstr "" " informazioni" #: engine/core/templates/digital_order_delivered_email.html:137 -#: engine/core/templates/json_table_widget.html:6 +#: engine/core/templates/json_table_widget.html:26 msgid "value" msgstr "Valore" @@ -3111,11 +3479,23 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "Cordiali saluti,
il team %(project_name)s" -#: engine/core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:7 +msgid "Key" +msgstr "Chiave" + +#: engine/core/templates/json_table_widget.html:8 +msgid "Value" +msgstr "Valore" + +#: engine/core/templates/json_table_widget.html:19 msgid "key" msgstr "Chiave" -#: engine/core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:32 +msgid "Delete row" +msgstr "Elimina riga" + +#: engine/core/templates/json_table_widget.html:44 msgid "Add Row" msgstr "Aggiungi riga" @@ -3203,14 +3583,23 @@ msgstr "Non si ha il permesso di eseguire questa azione." msgid "NOMINATIM_URL must be configured." msgstr "Il parametro NOMINATIM_URL deve essere configurato!" -#: engine/core/validators.py:23 +#: engine/core/validators.py:18 +msgid "could not determine file type" +msgstr "Impossibile determinare il tipo di file" + +#: engine/core/validators.py:24 +#, python-brace-format +msgid "unsupported video format. supported formats: {supported}" +msgstr "Formato video non supportato. Formati supportati: {supported}" + +#: engine/core/validators.py:45 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "Le dimensioni dell'immagine non devono superare w{max_width} x h{max_height}" " pixel" -#: engine/core/views.py:104 +#: engine/core/views.py:108 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3219,7 +3608,7 @@ msgstr "" "XML. Assicura che la risposta includa l'intestazione del tipo di contenuto " "appropriato per XML." -#: engine/core/views.py:119 +#: engine/core/views.py:123 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3229,17 +3618,17 @@ msgstr "" "funzione elabora la richiesta, recupera la risposta dettagliata della " "sitemap e imposta l'intestazione Content-Type per XML." -#: engine/core/views.py:155 +#: engine/core/views.py:174 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Restituisce un elenco di lingue supportate e le informazioni corrispondenti." -#: engine/core/views.py:182 +#: engine/core/views.py:201 msgid "Returns the parameters of the website as a JSON object." msgstr "Restituisce i parametri del sito web come oggetto JSON." -#: engine/core/views.py:198 +#: engine/core/views.py:217 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3247,11 +3636,11 @@ msgstr "" "Gestisce le operazioni di cache, come la lettura e l'impostazione dei dati " "della cache con una chiave e un timeout specificati." -#: engine/core/views.py:220 +#: engine/core/views.py:239 msgid "Handles `contact us` form submissions." msgstr "Gestisce l'invio del modulo `contatti`." -#: engine/core/views.py:236 +#: engine/core/views.py:255 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3259,15 +3648,15 @@ msgstr "" "Gestisce le richieste di elaborazione e validazione degli URL dalle " "richieste POST in arrivo." -#: engine/core/views.py:273 +#: engine/core/views.py:292 msgid "Handles global search queries." msgstr "Gestisce le query di ricerca globali." -#: engine/core/views.py:289 +#: engine/core/views.py:308 msgid "Handles the logic of buying as a business without registration." msgstr "Gestisce la logica dell'acquisto come azienda senza registrazione." -#: engine/core/views.py:337 +#: engine/core/views.py:356 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3275,31 +3664,31 @@ msgstr "" "Gestisce il download di una risorsa digitale associata a un ordine.\n" "Questa funzione tenta di servire il file della risorsa digitale che si trova nella directory di archiviazione del progetto. Se il file non viene trovato, viene generato un errore HTTP 404 per indicare che la risorsa non è disponibile." -#: engine/core/views.py:348 +#: engine/core/views.py:367 msgid "order_product_uuid is required" msgstr "order_product_uuid è obbligatorio" -#: engine/core/views.py:355 +#: engine/core/views.py:374 msgid "order product does not exist" msgstr "ordine prodotto non esistente" -#: engine/core/views.py:358 +#: engine/core/views.py:377 msgid "you can only download the digital asset once" msgstr "È possibile scaricare l'asset digitale una sola volta" -#: engine/core/views.py:362 +#: engine/core/views.py:381 msgid "the order must be paid before downloading the digital asset" msgstr "l'ordine deve essere pagato prima di scaricare il bene digitale" -#: engine/core/views.py:369 +#: engine/core/views.py:388 msgid "the order product does not have a product" msgstr "Il prodotto dell'ordine non ha un prodotto" -#: engine/core/views.py:412 +#: engine/core/views.py:431 msgid "favicon not found" msgstr "favicon non trovata" -#: engine/core/views.py:418 +#: engine/core/views.py:437 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3307,7 +3696,7 @@ msgstr "" "Gestisce le richieste per la favicon di un sito web.\n" "Questa funzione tenta di servire il file favicon situato nella cartella statica del progetto. Se il file favicon non viene trovato, viene generato un errore HTTP 404 per indicare che la risorsa non è disponibile." -#: engine/core/views.py:432 +#: engine/core/views.py:451 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3318,16 +3707,20 @@ msgstr "" "indice dell'interfaccia di amministrazione di Django. Utilizza la funzione " "`redirect` di Django per gestire il reindirizzamento HTTP." -#: engine/core/views.py:445 +#: engine/core/views.py:464 msgid "Returns current version of the Schon. " msgstr "Restituisce la versione corrente di Schon." -#: engine/core/views.py:674 engine/core/views.py:689 +#: engine/core/views.py:475 +msgid "no image file provided" +msgstr "Nessun file immagine fornito" + +#: engine/core/views.py:710 engine/core/views.py:725 #, python-format msgid "Revenue & Orders (last %(days)d)" msgstr "Entrate e ordini (ultimo %(days)d)" -#: engine/core/views.py:870 +#: engine/core/views.py:911 msgid "Returns custom variables for Dashboard. " msgstr "Restituisce le variabili personalizzate per Dashboard." @@ -3417,7 +3810,7 @@ msgstr "" " gli oggetti Brand. Utilizza il framework ViewSet di Django per semplificare" " l'implementazione di endpoint API per gli oggetti Brand." -#: engine/core/viewsets.py:458 +#: engine/core/viewsets.py:460 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3435,7 +3828,15 @@ msgstr "" "Include metodi per recuperare i dettagli del prodotto, applicare i permessi " "e accedere ai feedback correlati di un prodotto." -#: engine/core/viewsets.py:605 +#: engine/core/viewsets.py:541 +msgid "identificator_type and identificators are required" +msgstr "identificator_type e identificators sono obbligatori" + +#: engine/core/viewsets.py:554 +msgid "identificator_type must be one of: uuid, slug, sku" +msgstr "identificator_type deve essere uno dei seguenti: uuid, slug, sku" + +#: engine/core/viewsets.py:635 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3450,7 +3851,7 @@ msgstr "" "questa classe è fornire un accesso semplificato alle risorse relative a " "Vendor attraverso il framework REST di Django." -#: engine/core/viewsets.py:625 +#: engine/core/viewsets.py:655 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3467,7 +3868,7 @@ msgstr "" "accessibili. Estende l'insieme di base `schonViewSet` e fa uso del sistema " "di filtraggio di Django per interrogare i dati." -#: engine/core/viewsets.py:652 +#: engine/core/viewsets.py:682 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3486,7 +3887,7 @@ msgstr "" "serializzatori in base all'azione specifica da eseguire e applica le " "autorizzazioni di conseguenza durante l'interazione con i dati degli ordini." -#: engine/core/viewsets.py:914 +#: engine/core/viewsets.py:944 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3501,13 +3902,13 @@ msgstr "" "richiesta. Inoltre, fornisce un'azione dettagliata per gestire il feedback " "sulle istanze di OrderProduct." -#: engine/core/viewsets.py:974 +#: engine/core/viewsets.py:1004 msgid "Manages operations related to Product images in the application. " msgstr "" "Gestisce le operazioni relative alle immagini dei prodotti " "nell'applicazione." -#: engine/core/viewsets.py:988 +#: engine/core/viewsets.py:1018 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3515,15 +3916,15 @@ msgstr "" "Gestisce il recupero e la gestione delle istanze di PromoCode attraverso " "varie azioni API." -#: engine/core/viewsets.py:1019 +#: engine/core/viewsets.py:1049 msgid "Represents a view set for managing promotions. " msgstr "Rappresenta un insieme di viste per la gestione delle promozioni." -#: engine/core/viewsets.py:1032 +#: engine/core/viewsets.py:1062 msgid "Handles operations related to Stock data in the system." msgstr "Gestisce le operazioni relative ai dati delle scorte nel sistema." -#: engine/core/viewsets.py:1046 +#: engine/core/viewsets.py:1076 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3543,7 +3944,7 @@ msgstr "" "solo la propria lista dei desideri, a meno che non vengano concessi permessi" " espliciti." -#: engine/core/viewsets.py:1183 +#: engine/core/viewsets.py:1213 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3557,12 +3958,12 @@ msgstr "" "specializzati per diversi metodi HTTP, override del serializzatore e " "gestione dei permessi in base al contesto della richiesta." -#: engine/core/viewsets.py:1254 +#: engine/core/viewsets.py:1275 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Errore di geocodifica: {e}" -#: engine/core/viewsets.py:1262 +#: engine/core/viewsets.py:1283 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/ja_JP/LC_MESSAGES/django.mo b/engine/core/locale/ja_JP/LC_MESSAGES/django.mo index dbe56243..3bc9b37b 100644 Binary files a/engine/core/locale/ja_JP/LC_MESSAGES/django.mo and b/engine/core/locale/ja_JP/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/ja_JP/LC_MESSAGES/django.po b/engine/core/locale/ja_JP/LC_MESSAGES/django.po index f69cbb22..c7769905 100644 --- a/engine/core/locale/ja_JP/LC_MESSAGES/django.po +++ b/engine/core/locale/ja_JP/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -47,113 +47,133 @@ msgstr "変形" msgid "when the object was last modified" msgstr "オブジェクトの最終編集日時" -#: engine/core/admin.py:94 +#: engine/core/admin.py:98 msgid "translations" msgstr "翻訳" -#: engine/core/admin.py:102 +#: engine/core/admin.py:106 msgid "general" msgstr "一般" -#: engine/core/admin.py:106 +#: engine/core/admin.py:110 msgid "relations" msgstr "関係" -#: engine/core/admin.py:111 +#: engine/core/admin.py:115 msgid "additional info" msgstr "追加情報" -#: engine/core/admin.py:133 +#: engine/core/admin.py:137 msgid "metadata" msgstr "メタデータ" -#: engine/core/admin.py:141 +#: engine/core/admin.py:145 msgid "timestamps" msgstr "タイムスタンプ" -#: engine/core/admin.py:158 +#: engine/core/admin.py:162 #, python-format msgid "Activate selected %(verbose_name_plural)s" msgstr "選択した%(verbose_name_plural)sを有効化" -#: engine/core/admin.py:166 +#: engine/core/admin.py:170 msgid "selected items have been activated." msgstr "選択した項目がアクティブになりました!" -#: engine/core/admin.py:174 +#: engine/core/admin.py:178 #, python-format msgid "Deactivate selected %(verbose_name_plural)s" msgstr "選択した %(verbose_name_plural)s を無効化" -#: engine/core/admin.py:184 +#: engine/core/admin.py:188 msgid "selected items have been deactivated." msgstr "選択されたアイテムは無効化されました!" -#: engine/core/admin.py:196 engine/core/graphene/object_types.py:653 -#: engine/core/graphene/object_types.py:660 engine/core/models.py:832 -#: engine/core/models.py:840 +#: engine/core/admin.py:200 engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:673 engine/core/models.py:918 +#: engine/core/models.py:928 msgid "attribute value" msgstr "属性値" -#: engine/core/admin.py:197 engine/core/graphene/object_types.py:77 -#: engine/core/models.py:841 +#: engine/core/admin.py:201 engine/core/graphene/object_types.py:81 +#: engine/core/models.py:929 msgid "attribute values" msgstr "属性値" -#: engine/core/admin.py:208 +#: engine/core/admin.py:212 engine/core/models.py:2232 msgid "image" msgstr "画像" -#: engine/core/admin.py:209 engine/core/graphene/object_types.py:530 +#: engine/core/admin.py:213 engine/core/graphene/object_types.py:535 msgid "images" msgstr "画像" -#: engine/core/admin.py:220 engine/core/models.py:576 +#: engine/core/admin.py:224 engine/core/models.py:635 msgid "stock" msgstr "在庫" -#: engine/core/admin.py:221 engine/core/graphene/object_types.py:713 +#: engine/core/admin.py:225 engine/core/graphene/object_types.py:735 msgid "stocks" msgstr "株式" -#: engine/core/admin.py:232 engine/core/models.py:1938 +#: engine/core/admin.py:236 engine/core/models.py:2046 msgid "order product" msgstr "商品のご注文" -#: engine/core/admin.py:233 engine/core/graphene/object_types.py:441 -#: engine/core/models.py:1939 +#: engine/core/admin.py:237 engine/core/graphene/object_types.py:446 +#: engine/core/models.py:2047 msgid "order products" msgstr "商品のご注文" -#: engine/core/admin.py:251 engine/core/admin.py:252 +#: engine/core/admin.py:255 engine/core/admin.py:256 msgid "children" msgstr "子供たち" -#: engine/core/admin.py:528 +#: engine/core/admin.py:545 +msgid "video preview" +msgstr "動画プレビュー" + +#: engine/core/admin.py:551 msgid "has images" msgstr "画像があります" -#: engine/core/admin.py:531 +#: engine/core/admin.py:554 #, python-format msgid "Export selected %(verbose_name_plural)s to marketplaces' feeds" msgstr "選択した %(verbose_name_plural)s をマーケットプレイスのフィードにエクスポートする" -#: engine/core/admin.py:542 +#: engine/core/admin.py:565 #, python-format msgid "selected %(verbose_name_plural)s have been marked for export." msgstr "選択された %(verbose_name_plural)s がエクスポート用にマークされました。" -#: engine/core/admin.py:553 +#: engine/core/admin.py:576 #, python-format msgid "Ban selected %(verbose_name_plural)s from marketplaces' feeds" msgstr "%(verbose_name_plural)sをマーケットプレイスのフィードから除外" -#: engine/core/admin.py:564 +#: engine/core/admin.py:587 #, python-format msgid "selected %(verbose_name_plural)s have been banned from export." msgstr "選択された %(verbose_name_plural)s は輸出禁止となりました。" -#: engine/core/admin.py:1116 +#: engine/core/admin.py:1030 +msgid "Preview" +msgstr "プレビュー" + +#: engine/core/admin.py:1031 +msgid "Metadata" +msgstr "メタデータ" + +#: engine/core/admin.py:1034 +msgid "preview" +msgstr "プレビュー" + +#: engine/core/admin.py:1043 +msgid "image preview" +msgstr "画像プレビュー" + +#: engine/core/admin.py:1166 msgid "Config" msgstr "コンフィグ" @@ -219,7 +239,7 @@ msgstr "" "この API の OpenApi3 スキーマ。フォーマットはコンテントネゴシエーションで選択できる。言語は Accept-Language " "とクエリパラメータで選択できる。" -#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:36 +#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "キャッシュI/O" @@ -243,7 +263,7 @@ msgstr "アプリケーションの公開可能なパラメータを取得する msgid "send a message to the support team" msgstr "サポートチームにメッセージを送る" -#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:59 msgid "request a CORSed URL" msgstr "CORSされたURLを要求する。httpsのみ許可。" @@ -371,11 +391,11 @@ msgstr "既存のカテゴリーを書き換え、編集不可能なものを保 msgid "rewrite some fields of an existing category saving non-editables" msgstr "編集不可を保存している既存のカテゴリのいくつかのフィールドを書き換える" -#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757 -#: engine/core/docs/drf/viewsets.py:1046 -#: engine/core/graphene/object_types.py:119 -#: engine/core/graphene/object_types.py:239 -#: engine/core/graphene/object_types.py:540 +#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:781 +#: engine/core/docs/drf/viewsets.py:1070 +#: engine/core/graphene/object_types.py:123 +#: engine/core/graphene/object_types.py:247 +#: engine/core/graphene/object_types.py:546 msgid "SEO Meta snapshot" msgstr "SEOメタ・スナップショット" @@ -646,7 +666,7 @@ msgstr "単一の製品を取得する(詳細表示)" #: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683 #: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725 -#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763 +#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:787 msgid "Product UUID or slug" msgstr "製品UUIDまたはスラグ" @@ -671,39 +691,51 @@ msgstr "製品を削除する" msgid "lists all permitted feedbacks for a product" msgstr "製品に対して許可されたすべてのフィードバックを一覧表示します。" -#: engine/core/docs/drf/viewsets.py:758 +#: engine/core/docs/drf/viewsets.py:757 +msgid "retrieve exact products by identifier" +msgstr "識別子による正確な製品の取得" + +#: engine/core/docs/drf/viewsets.py:759 +msgid "" +"retrieve a list of products by identifier type (uuid, slug, or sku). Send a " +"POST request with `identificator_type` and `identificators` (list of " +"values)." +msgstr "" +"識別子タイプ(uuid、slug、またはsku)による製品リストを取得します。`identificator_type`と`identificators`(値のリスト)をPOSTリクエストで送信します。" + +#: engine/core/docs/drf/viewsets.py:782 msgid "returns a snapshot of the product's SEO meta data" msgstr "商品のSEOメタデータのスナップショットを返します。" -#: engine/core/docs/drf/viewsets.py:779 +#: engine/core/docs/drf/viewsets.py:803 msgid "list all addresses" msgstr "全住所のリスト" -#: engine/core/docs/drf/viewsets.py:789 +#: engine/core/docs/drf/viewsets.py:813 msgid "retrieve a single address" msgstr "単一アドレスの取得" -#: engine/core/docs/drf/viewsets.py:799 +#: engine/core/docs/drf/viewsets.py:823 msgid "create a new address" msgstr "新しいアドレスを作成する" -#: engine/core/docs/drf/viewsets.py:810 +#: engine/core/docs/drf/viewsets.py:834 msgid "delete an address" msgstr "アドレスの削除" -#: engine/core/docs/drf/viewsets.py:820 +#: engine/core/docs/drf/viewsets.py:844 msgid "update an entire address" msgstr "アドレス全体の更新" -#: engine/core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:855 msgid "partially update an address" msgstr "アドレスの一部更新" -#: engine/core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:866 msgid "autocomplete address suggestions" msgstr "オートコンプリート住所入力" -#: engine/core/docs/drf/viewsets.py:848 +#: engine/core/docs/drf/viewsets.py:872 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" "docker compose exec app poetry run python manage.py deepl_translate -l en-gb" @@ -711,231 +743,231 @@ msgstr "" "it-it -l ja-jp -l kk-kz -l n-nl -l pl-pl -l pt-br -l ro-ro -l ru-ru -l zh-" "hans -a core -a geo -a payments -a vibes_auth -a blog" -#: engine/core/docs/drf/viewsets.py:855 +#: engine/core/docs/drf/viewsets.py:879 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "結果を制限する, 1 < limit < 10, デフォルト: 5" -#: engine/core/docs/drf/viewsets.py:871 +#: engine/core/docs/drf/viewsets.py:895 msgid "list all feedbacks (simple view)" msgstr "すべてのフィードバックを表示する(シンプルな表示)" -#: engine/core/docs/drf/viewsets.py:881 +#: engine/core/docs/drf/viewsets.py:905 msgid "retrieve a single feedback (detailed view)" msgstr "単一のフィードバックを取得する(詳細表示)" -#: engine/core/docs/drf/viewsets.py:888 +#: engine/core/docs/drf/viewsets.py:912 msgid "create a feedback" msgstr "フィードバックを作成する" -#: engine/core/docs/drf/viewsets.py:895 +#: engine/core/docs/drf/viewsets.py:919 msgid "delete a feedback" msgstr "フィードバックを削除する" -#: engine/core/docs/drf/viewsets.py:902 +#: engine/core/docs/drf/viewsets.py:926 msgid "rewrite an existing feedback saving non-editables" msgstr "既存のフィードバックを書き換える。" -#: engine/core/docs/drf/viewsets.py:909 +#: engine/core/docs/drf/viewsets.py:933 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "既存のフィードバックのいくつかのフィールドを書き換えて、編集不可能なものを保存する。" -#: engine/core/docs/drf/viewsets.py:919 +#: engine/core/docs/drf/viewsets.py:943 msgid "list all order–product relations (simple view)" msgstr "すべての注文と商品の関係をリストアップする(シンプルビュー)" -#: engine/core/docs/drf/viewsets.py:929 +#: engine/core/docs/drf/viewsets.py:953 msgid "retrieve a single order–product relation (detailed view)" msgstr "単一の注文と商品の関係を取得する(詳細表示)" -#: engine/core/docs/drf/viewsets.py:939 +#: engine/core/docs/drf/viewsets.py:963 msgid "create a new order–product relation" msgstr "新しい注文と商品の関係を作る" -#: engine/core/docs/drf/viewsets.py:949 +#: engine/core/docs/drf/viewsets.py:973 msgid "replace an existing order–product relation" msgstr "既存の注文と商品の関係を置き換える" -#: engine/core/docs/drf/viewsets.py:959 +#: engine/core/docs/drf/viewsets.py:983 msgid "partially update an existing order–product relation" msgstr "既存の注文と商品の関係を部分的に更新する" -#: engine/core/docs/drf/viewsets.py:969 +#: engine/core/docs/drf/viewsets.py:993 msgid "delete an order–product relation" msgstr "注文と商品の関係を削除する" -#: engine/core/docs/drf/viewsets.py:979 +#: engine/core/docs/drf/viewsets.py:1003 msgid "add or remove feedback on an order–product relation" msgstr "注文と商品の関係に関するフィードバックを追加または削除する。" -#: engine/core/docs/drf/viewsets.py:996 +#: engine/core/docs/drf/viewsets.py:1020 msgid "list all brands (simple view)" msgstr "すべてのブランドをリストアップ(シンプル表示)" -#: engine/core/docs/drf/viewsets.py:1003 +#: engine/core/docs/drf/viewsets.py:1027 msgid "retrieve a single brand (detailed view)" msgstr "単一ブランドの検索(詳細表示)" -#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051 +#: engine/core/docs/drf/viewsets.py:1032 engine/core/docs/drf/viewsets.py:1075 msgid "Brand UUID or slug" msgstr "ブランドUUIDまたはスラッグ" -#: engine/core/docs/drf/viewsets.py:1018 +#: engine/core/docs/drf/viewsets.py:1042 msgid "create a brand" msgstr "ブランドを作る" -#: engine/core/docs/drf/viewsets.py:1025 +#: engine/core/docs/drf/viewsets.py:1049 msgid "delete a brand" msgstr "ブランドの削除" -#: engine/core/docs/drf/viewsets.py:1032 +#: engine/core/docs/drf/viewsets.py:1056 msgid "rewrite an existing brand saving non-editables" msgstr "編集不可の既存ブランドをリライトする" -#: engine/core/docs/drf/viewsets.py:1039 +#: engine/core/docs/drf/viewsets.py:1063 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "編集不可能なフィールドを保存している既存ブランドのフィールドを書き換える。" -#: engine/core/docs/drf/viewsets.py:1064 +#: engine/core/docs/drf/viewsets.py:1088 msgid "list all vendors (simple view)" msgstr "全ベンダーのリスト(シンプルビュー)" -#: engine/core/docs/drf/viewsets.py:1074 +#: engine/core/docs/drf/viewsets.py:1098 msgid "retrieve a single vendor (detailed view)" msgstr "単一ベンダーの検索(詳細表示)" -#: engine/core/docs/drf/viewsets.py:1081 +#: engine/core/docs/drf/viewsets.py:1105 msgid "create a vendor" msgstr "ベンダーの作成" -#: engine/core/docs/drf/viewsets.py:1088 +#: engine/core/docs/drf/viewsets.py:1112 msgid "delete a vendor" msgstr "ベンダーの削除" -#: engine/core/docs/drf/viewsets.py:1095 +#: engine/core/docs/drf/viewsets.py:1119 msgid "rewrite an existing vendor saving non-editables" msgstr "既存のベンダーを書き換え、編集不可能な部分を保存する。" -#: engine/core/docs/drf/viewsets.py:1102 +#: engine/core/docs/drf/viewsets.py:1126 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "既存のベンダーのいくつかのフィールドを書き換えて、編集不可能なフィールドを保存する。" -#: engine/core/docs/drf/viewsets.py:1112 +#: engine/core/docs/drf/viewsets.py:1136 msgid "list all product images (simple view)" msgstr "すべての商品画像を一覧表示(シンプル表示)" -#: engine/core/docs/drf/viewsets.py:1122 +#: engine/core/docs/drf/viewsets.py:1146 msgid "retrieve a single product image (detailed view)" msgstr "1枚の商品画像を取得する(詳細表示)" -#: engine/core/docs/drf/viewsets.py:1129 +#: engine/core/docs/drf/viewsets.py:1153 msgid "create a product image" msgstr "製品イメージの作成" -#: engine/core/docs/drf/viewsets.py:1139 +#: engine/core/docs/drf/viewsets.py:1163 msgid "delete a product image" msgstr "商品画像を削除する" -#: engine/core/docs/drf/viewsets.py:1146 +#: engine/core/docs/drf/viewsets.py:1170 msgid "rewrite an existing product image saving non-editables" msgstr "既存の商品画像を書き換え、編集不可能な部分を保存する。" -#: engine/core/docs/drf/viewsets.py:1154 +#: engine/core/docs/drf/viewsets.py:1178 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "既存の商品画像のいくつかのフィールドを書き換えて、編集不可能な部分を保存する。" -#: engine/core/docs/drf/viewsets.py:1165 +#: engine/core/docs/drf/viewsets.py:1189 msgid "list all promo codes (simple view)" msgstr "すべてのプロモコードを一覧表示(シンプル表示)" -#: engine/core/docs/drf/viewsets.py:1175 +#: engine/core/docs/drf/viewsets.py:1199 msgid "retrieve a single promo code (detailed view)" msgstr "単一のプロモコードを取得する(詳細表示)" -#: engine/core/docs/drf/viewsets.py:1182 +#: engine/core/docs/drf/viewsets.py:1206 msgid "create a promo code" msgstr "プロモコードを作成する" -#: engine/core/docs/drf/viewsets.py:1189 +#: engine/core/docs/drf/viewsets.py:1213 msgid "delete a promo code" msgstr "プロモコードを削除する" -#: engine/core/docs/drf/viewsets.py:1196 +#: engine/core/docs/drf/viewsets.py:1220 msgid "rewrite an existing promo code saving non-editables" msgstr "既存のプロモコードを書き換え、編集不可のプロモコードを保存する" -#: engine/core/docs/drf/viewsets.py:1203 +#: engine/core/docs/drf/viewsets.py:1227 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "既存のプロモコードの一部のフィールドを書き換えて、編集不可能な部分を保存する。" -#: engine/core/docs/drf/viewsets.py:1213 +#: engine/core/docs/drf/viewsets.py:1237 msgid "list all promotions (simple view)" msgstr "すべてのプロモーションを一覧表示(シンプル表示)" -#: engine/core/docs/drf/viewsets.py:1223 +#: engine/core/docs/drf/viewsets.py:1247 msgid "retrieve a single promotion (detailed view)" msgstr "単一のプロモーションを取得する(詳細表示)" -#: engine/core/docs/drf/viewsets.py:1230 +#: engine/core/docs/drf/viewsets.py:1254 msgid "create a promotion" msgstr "プロモーションの作成" -#: engine/core/docs/drf/viewsets.py:1237 +#: engine/core/docs/drf/viewsets.py:1261 msgid "delete a promotion" msgstr "プロモーションの削除" -#: engine/core/docs/drf/viewsets.py:1244 +#: engine/core/docs/drf/viewsets.py:1268 msgid "rewrite an existing promotion saving non-editables" msgstr "既存のプロモーションを書き換える。" -#: engine/core/docs/drf/viewsets.py:1251 +#: engine/core/docs/drf/viewsets.py:1275 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "既存のプロモーションのいくつかのフィールドを書き換え、編集不可能な部分を保存する。" -#: engine/core/docs/drf/viewsets.py:1261 +#: engine/core/docs/drf/viewsets.py:1285 msgid "list all stocks (simple view)" msgstr "全銘柄リスト(シンプルビュー)" -#: engine/core/docs/drf/viewsets.py:1268 +#: engine/core/docs/drf/viewsets.py:1292 msgid "retrieve a single stock (detailed view)" msgstr "単一銘柄の取得(詳細表示)" -#: engine/core/docs/drf/viewsets.py:1275 +#: engine/core/docs/drf/viewsets.py:1299 msgid "create a stock record" msgstr "ストックレコードの作成" -#: engine/core/docs/drf/viewsets.py:1282 +#: engine/core/docs/drf/viewsets.py:1306 msgid "delete a stock record" msgstr "ストックレコードの削除" -#: engine/core/docs/drf/viewsets.py:1289 +#: engine/core/docs/drf/viewsets.py:1313 msgid "rewrite an existing stock record saving non-editables" msgstr "既存のストックレコードを書き換え、編集不可能なものを保存する。" -#: engine/core/docs/drf/viewsets.py:1297 +#: engine/core/docs/drf/viewsets.py:1321 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "編集不可能なフィールドを保存している既存のストックレコードの一部のフィールドを書き換える。" -#: engine/core/docs/drf/viewsets.py:1308 +#: engine/core/docs/drf/viewsets.py:1332 msgid "list all product tags (simple view)" msgstr "すべての商品タグを一覧表示(シンプル表示)" -#: engine/core/docs/drf/viewsets.py:1318 +#: engine/core/docs/drf/viewsets.py:1342 msgid "retrieve a single product tag (detailed view)" msgstr "単一の商品タグを取得する(詳細表示)" -#: engine/core/docs/drf/viewsets.py:1325 +#: engine/core/docs/drf/viewsets.py:1349 msgid "create a product tag" msgstr "商品タグの作成" -#: engine/core/docs/drf/viewsets.py:1335 +#: engine/core/docs/drf/viewsets.py:1359 msgid "delete a product tag" msgstr "商品タグの削除" -#: engine/core/docs/drf/viewsets.py:1342 +#: engine/core/docs/drf/viewsets.py:1366 msgid "rewrite an existing product tag saving non-editables" msgstr "既存の商品タグを書き換え、編集不可能なものを保存する。" -#: engine/core/docs/drf/viewsets.py:1350 +#: engine/core/docs/drf/viewsets.py:1374 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "既存の商品タグの一部のフィールドを書き換えて、編集不可能な部分を保存する。" @@ -944,420 +976,426 @@ msgstr "既存の商品タグの一部のフィールドを書き換えて、編 msgid "no search term provided." msgstr "検索語はありません。" -#: engine/core/filters.py:78 engine/core/filters.py:484 -#: engine/core/filters.py:625 +#: engine/core/filters.py:79 engine/core/filters.py:485 +#: engine/core/filters.py:626 msgid "Search" msgstr "検索" -#: engine/core/filters.py:79 engine/core/filters.py:663 -#: engine/core/filters.py:692 +#: engine/core/filters.py:80 engine/core/filters.py:664 +#: engine/core/filters.py:693 msgid "UUID" msgstr "ユーユーアイディー" -#: engine/core/filters.py:80 engine/core/filters.py:487 -#: engine/core/filters.py:627 +#: engine/core/filters.py:81 engine/core/filters.py:488 +#: engine/core/filters.py:628 msgid "Name" msgstr "名称" -#: engine/core/filters.py:82 engine/core/filters.py:630 +#: engine/core/filters.py:83 engine/core/filters.py:631 msgid "Categories" msgstr "カテゴリー" -#: engine/core/filters.py:86 +#: engine/core/filters.py:87 msgid "Categories Slugs" msgstr "カテゴリー ナメクジ" -#: engine/core/filters.py:88 engine/core/filters.py:495 +#: engine/core/filters.py:89 engine/core/filters.py:496 +#: engine/core/templates/admin_doc/index.html:37 +#: engine/core/templates/admin_doc/template_tag_index.html:12 msgid "Tags" msgstr "タグ" -#: engine/core/filters.py:90 +#: engine/core/filters.py:91 msgid "Min Price" msgstr "最低価格" -#: engine/core/filters.py:93 +#: engine/core/filters.py:94 msgid "Max Price" msgstr "最高価格" -#: engine/core/filters.py:95 +#: engine/core/filters.py:96 msgid "Is Active" msgstr "アクティブ" -#: engine/core/filters.py:96 +#: engine/core/filters.py:97 msgid "Brand" msgstr "ブランド" -#: engine/core/filters.py:97 +#: engine/core/filters.py:98 msgid "Attributes" msgstr "属性" -#: engine/core/filters.py:99 +#: engine/core/filters.py:100 msgid "Quantity" msgstr "数量" -#: engine/core/filters.py:101 engine/core/filters.py:489 -#: engine/core/filters.py:628 engine/core/models.py:316 -#: engine/core/models.py:497 engine/core/models.py:663 +#: engine/core/filters.py:102 engine/core/filters.py:490 +#: engine/core/filters.py:629 engine/core/models.py:339 +#: engine/core/models.py:546 engine/core/models.py:736 msgid "Slug" msgstr "スラッグ" -#: engine/core/filters.py:102 +#: engine/core/filters.py:103 msgid "Is Digital" msgstr "デジタル" -#: engine/core/filters.py:104 +#: engine/core/filters.py:105 msgid "Include sub-categories" msgstr "サブカテゴリーを含む" -#: engine/core/filters.py:108 +#: engine/core/filters.py:109 msgid "Include personal ordered" msgstr "個人注文商品を含む" -#: engine/core/filters.py:110 engine/core/models.py:667 +#: engine/core/filters.py:111 engine/core/models.py:740 msgid "SKU" msgstr "SKU" -#: engine/core/filters.py:212 +#: engine/core/filters.py:213 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "include_subcategoriesフラグを使うには、category_uuidがなければならない。" -#: engine/core/filters.py:398 +#: engine/core/filters.py:399 msgid "Search (ID, product name or part number)" msgstr "検索(ID、製品名または部品番号)" -#: engine/core/filters.py:402 +#: engine/core/filters.py:403 msgid "Bought after (inclusive)" msgstr "購入時期" -#: engine/core/filters.py:405 +#: engine/core/filters.py:406 msgid "Bought before (inclusive)" msgstr "以前に購入したもの(含む)" -#: engine/core/filters.py:410 engine/core/filters.py:461 -#: engine/core/filters.py:697 +#: engine/core/filters.py:411 engine/core/filters.py:462 +#: engine/core/filters.py:698 msgid "User email" msgstr "ユーザーEメール" -#: engine/core/filters.py:413 engine/core/filters.py:464 -#: engine/core/filters.py:672 engine/core/filters.py:694 +#: engine/core/filters.py:414 engine/core/filters.py:465 +#: engine/core/filters.py:673 engine/core/filters.py:695 msgid "User UUID" msgstr "ユーザーUUID" -#: engine/core/filters.py:415 +#: engine/core/filters.py:416 msgid "Status" msgstr "ステータス" -#: engine/core/filters.py:419 +#: engine/core/filters.py:420 msgid "Human Readable ID" msgstr "人間が読めるID" -#: engine/core/filters.py:488 +#: engine/core/filters.py:489 msgid "Parent" msgstr "親" -#: engine/core/filters.py:492 +#: engine/core/filters.py:493 msgid "Whole category(has at least 1 product or not)" msgstr "カテゴリー全体(少なくとも1つの製品があるかどうか)" -#: engine/core/filters.py:496 +#: engine/core/filters.py:497 msgid "Level" msgstr "レベル" -#: engine/core/filters.py:667 +#: engine/core/filters.py:668 msgid "Product UUID" msgstr "製品UUID" -#: engine/core/graphene/mutations.py:40 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "キャッシュを探すキー、またはキャッシュにセットするキー" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:43 msgid "data to store in cache" msgstr "キャッシュに保存するデータ" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:46 msgid "timeout in seconds to set the data for into the cache" msgstr "キャッシュにデータをセットするタイムアウト時間(秒" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:49 msgid "cached data" msgstr "キャッシュ・データ" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:64 msgid "camelized JSON data from the requested URL" msgstr "リクエストされたURLからキャメル化されたJSONデータ" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:248 +#: engine/core/graphene/mutations.py:69 engine/core/views.py:267 msgid "only URLs starting with http(s):// are allowed" msgstr "http(s)://で始まるURLのみが許可されます。" -#: engine/core/graphene/mutations.py:86 +#: engine/core/graphene/mutations.py:87 msgid "add a product to the order" msgstr "注文に商品を追加する" -#: engine/core/graphene/mutations.py:109 engine/core/graphene/mutations.py:138 -#: engine/core/graphene/mutations.py:254 engine/core/graphene/mutations.py:306 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139 +#: engine/core/graphene/mutations.py:256 engine/core/graphene/mutations.py:308 #, python-brace-format msgid "order {order_uuid} not found" msgstr "注文 {order_uuid} が見つかりません!" -#: engine/core/graphene/mutations.py:115 engine/core/graphene/mutations.py:166 +#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167 msgid "remove a product from the order" msgstr "注文から商品を削除する" -#: engine/core/graphene/mutations.py:144 +#: engine/core/graphene/mutations.py:145 msgid "remove all products from the order" msgstr "注文からすべての商品を削除する" -#: engine/core/graphene/mutations.py:189 +#: engine/core/graphene/mutations.py:190 msgid "buy an order" msgstr "注文する" -#: engine/core/graphene/mutations.py:220 engine/core/graphene/mutations.py:282 +#: engine/core/graphene/mutations.py:222 engine/core/graphene/mutations.py:284 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "order_uuidまたはorder_hr_idを入力してください!" -#: engine/core/graphene/mutations.py:249 engine/core/graphene/mutations.py:524 -#: engine/core/graphene/mutations.py:573 engine/core/viewsets.py:753 +#: engine/core/graphene/mutations.py:251 engine/core/graphene/mutations.py:526 +#: engine/core/graphene/mutations.py:576 engine/core/viewsets.py:783 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "order.buy()メソッドから間違った型が来た:{type(instance)!s}。" -#: engine/core/graphene/mutations.py:260 +#: engine/core/graphene/mutations.py:262 msgid "perform an action on a list of products in the order" msgstr "注文商品のリストに対してアクションを実行する" -#: engine/core/graphene/mutations.py:265 +#: engine/core/graphene/mutations.py:267 msgid "remove/add" msgstr "削除/追加" -#: engine/core/graphene/mutations.py:301 engine/core/graphene/mutations.py:342 +#: engine/core/graphene/mutations.py:303 engine/core/graphene/mutations.py:342 msgid "action must be either add or remove" msgstr "アクションは \"add \"か \"remove \"のどちらかでなければならない!" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:314 msgid "perform an action on a list of products in the wishlist" msgstr "ウィッシュリストの商品リストに対してアクションを実行する" -#: engine/core/graphene/mutations.py:330 -msgid "please provide wishlist_uuid value" -msgstr "wishlist_uuid`の値を指定してください。" - -#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:423 -#: engine/core/graphene/mutations.py:451 engine/core/graphene/mutations.py:479 -#: engine/core/graphene/mutations.py:529 +#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:424 +#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480 +#: engine/core/graphene/mutations.py:531 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "ウィッシュリスト {wishlist_uuid} が見つかりません!" -#: engine/core/graphene/mutations.py:401 +#: engine/core/graphene/mutations.py:402 msgid "add a product to the wishlist" msgstr "注文に商品を追加する" -#: engine/core/graphene/mutations.py:429 +#: engine/core/graphene/mutations.py:430 msgid "remove a product from the wishlist" msgstr "注文から商品を削除する" -#: engine/core/graphene/mutations.py:457 +#: engine/core/graphene/mutations.py:458 msgid "remove all products from the wishlist" msgstr "注文から商品を削除する" -#: engine/core/graphene/mutations.py:485 +#: engine/core/graphene/mutations.py:486 msgid "buy all products from the wishlist" msgstr "注文から商品を削除する" -#: engine/core/graphene/mutations.py:535 +#: engine/core/graphene/mutations.py:537 msgid "buy a product" msgstr "注文する" -#: engine/core/graphene/mutations.py:542 +#: engine/core/graphene/mutations.py:544 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" msgstr "属性は、attr1=value1,attr2=value2のような形式の文字列として送信してください。" -#: engine/core/graphene/mutations.py:580 +#: engine/core/graphene/mutations.py:583 msgid "add or delete a feedback for orderproduct" msgstr "orderproductに対するフィードバックを追加または削除する。" -#: engine/core/graphene/mutations.py:606 +#: engine/core/graphene/mutations.py:610 msgid "action must be either `add` or `remove`" msgstr "アクションは `add` または `remove` のいずれかでなければならない!" -#: engine/core/graphene/mutations.py:609 +#: engine/core/graphene/mutations.py:613 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderproduct {order_product_uuid} が見つかりません!" -#: engine/core/graphene/mutations.py:616 +#: engine/core/graphene/mutations.py:620 msgid "original address string provided by the user" msgstr "ユーザーが提供したオリジナルのアドレス文字列" -#: engine/core/graphene/mutations.py:653 engine/core/models.py:986 -#: engine/core/models.py:999 engine/core/models.py:1443 -#: engine/core/models.py:1474 engine/core/models.py:1505 -#: engine/core/viewsets.py:760 +#: engine/core/graphene/mutations.py:662 engine/core/models.py:1079 +#: engine/core/models.py:1092 engine/core/models.py:1544 +#: engine/core/models.py:1575 engine/core/models.py:1606 +#: engine/core/viewsets.py:790 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name}は存在しません:{uuid}が存在しません!" -#: engine/core/graphene/mutations.py:667 +#: engine/core/graphene/mutations.py:676 msgid "limit must be between 1 and 10" msgstr "上限は1から10の間でなければならない" -#: engine/core/graphene/mutations.py:716 +#: engine/core/graphene/mutations.py:726 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - 魅力のように動作" -#: engine/core/graphene/object_types.py:84 -#: engine/core/graphene/object_types.py:420 -#: engine/core/graphene/object_types.py:471 engine/core/models.py:803 -#: engine/core/models.py:1297 engine/core/models.py:2033 +#: engine/core/graphene/object_types.py:88 +#: engine/core/graphene/object_types.py:425 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:889 +#: engine/core/models.py:1394 engine/core/models.py:2139 msgid "attributes" msgstr "属性" -#: engine/core/graphene/object_types.py:97 +#: engine/core/graphene/object_types.py:101 msgid "grouped attributes" msgstr "グループ化された属性" -#: engine/core/graphene/object_types.py:104 +#: engine/core/graphene/object_types.py:108 msgid "groups of attributes" msgstr "属性のグループ" -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:217 -#: engine/core/graphene/object_types.py:255 engine/core/models.py:440 +#: engine/core/graphene/object_types.py:122 +#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:264 engine/core/models.py:489 msgid "categories" msgstr "カテゴリー" -#: engine/core/graphene/object_types.py:134 engine/core/models.py:511 +#: engine/core/graphene/object_types.py:138 engine/core/models.py:564 msgid "brands" msgstr "ブランド" -#: engine/core/graphene/object_types.py:219 +#: engine/core/graphene/object_types.py:226 msgid "category image url" msgstr "カテゴリー" -#: engine/core/graphene/object_types.py:220 -#: engine/core/graphene/object_types.py:365 engine/core/models.py:278 +#: engine/core/graphene/object_types.py:227 +#: engine/core/graphene/object_types.py:369 engine/core/models.py:301 msgid "markup percentage" msgstr "マークアップ率" -#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:231 msgid "which attributes and values can be used for filtering this category." msgstr "このカテゴリのフィルタリングに使用できる属性と値。" -#: engine/core/graphene/object_types.py:230 +#: engine/core/graphene/object_types.py:237 msgid "" "minimum and maximum prices for products in this category, if available." msgstr "このカテゴリーの商品の最低価格と最高価格がある場合。" -#: engine/core/graphene/object_types.py:234 +#: engine/core/graphene/object_types.py:240 +msgid "brands in this category" +msgstr "このカテゴリーのブランド" + +#: engine/core/graphene/object_types.py:242 msgid "tags for this category" msgstr "このカテゴリのタグ" -#: engine/core/graphene/object_types.py:237 +#: engine/core/graphene/object_types.py:245 msgid "products in this category" msgstr "このカテゴリの製品" -#: engine/core/graphene/object_types.py:372 engine/core/models.py:183 +#: engine/core/graphene/object_types.py:376 engine/core/models.py:202 msgid "vendors" msgstr "ベンダー" -#: engine/core/graphene/object_types.py:376 +#: engine/core/graphene/object_types.py:380 msgid "Latitude (Y coordinate)" msgstr "緯度(Y座標)" -#: engine/core/graphene/object_types.py:377 +#: engine/core/graphene/object_types.py:381 msgid "Longitude (X coordinate)" msgstr "経度(X座標)" -#: engine/core/graphene/object_types.py:406 +#: engine/core/graphene/object_types.py:411 msgid "comment" msgstr "どのように" -#: engine/core/graphene/object_types.py:408 -#: engine/core/graphene/object_types.py:542 +#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:548 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "1から10までの評価値(設定されていない場合は0)。" -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:421 msgid "represents feedback from a user." msgstr "ユーザーからのフィードバックを表す。" -#: engine/core/graphene/object_types.py:421 -#: engine/core/graphene/object_types.py:472 engine/core/models.py:1291 +#: engine/core/graphene/object_types.py:426 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:1388 msgid "notifications" msgstr "お知らせ" -#: engine/core/graphene/object_types.py:423 +#: engine/core/graphene/object_types.py:428 msgid "download url for this order product if applicable" msgstr "該当する場合は、この注文商品のダウンロードURLを入力してください。" -#: engine/core/graphene/object_types.py:425 engine/core/models.py:1856 +#: engine/core/graphene/object_types.py:430 engine/core/models.py:1959 msgid "feedback" msgstr "フィードバック" -#: engine/core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:464 msgid "a list of order products in this order" msgstr "注文商品のリスト" -#: engine/core/graphene/object_types.py:461 engine/core/models.py:1261 +#: engine/core/graphene/object_types.py:466 engine/core/models.py:1358 msgid "billing address" msgstr "請求先住所" -#: engine/core/graphene/object_types.py:465 +#: engine/core/graphene/object_types.py:470 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" msgstr "請求先住所と同じ場合、または該当しない場合は空白にしてください。" -#: engine/core/graphene/object_types.py:468 +#: engine/core/graphene/object_types.py:473 msgid "total price of this order" msgstr "この注文の合計金額" -#: engine/core/graphene/object_types.py:469 +#: engine/core/graphene/object_types.py:474 msgid "total quantity of products in order" msgstr "注文商品の総数量" -#: engine/core/graphene/object_types.py:470 +#: engine/core/graphene/object_types.py:475 msgid "are all products in the order digital" msgstr "ご注文の商品はすべてデジタルですか?" -#: engine/core/graphene/object_types.py:474 +#: engine/core/graphene/object_types.py:479 msgid "transactions for this order" msgstr "この注文の取引" -#: engine/core/graphene/object_types.py:494 engine/core/models.py:1325 +#: engine/core/graphene/object_types.py:499 engine/core/models.py:1422 msgid "orders" msgstr "受注状況" -#: engine/core/graphene/object_types.py:515 +#: engine/core/graphene/object_types.py:520 msgid "image url" msgstr "画像URL" -#: engine/core/graphene/object_types.py:522 +#: engine/core/graphene/object_types.py:527 msgid "product's images" msgstr "製品画像" -#: engine/core/graphene/object_types.py:529 engine/core/models.py:439 -#: engine/core/models.py:596 +#: engine/core/graphene/object_types.py:534 engine/core/models.py:488 +#: engine/core/models.py:661 msgid "category" msgstr "カテゴリー" -#: engine/core/graphene/object_types.py:531 engine/core/models.py:1857 +#: engine/core/graphene/object_types.py:536 engine/core/models.py:1960 msgid "feedbacks" msgstr "フィードバック" -#: engine/core/graphene/object_types.py:532 engine/core/models.py:510 -#: engine/core/models.py:605 +#: engine/core/graphene/object_types.py:537 engine/core/models.py:563 +#: engine/core/models.py:670 msgid "brand" msgstr "ブランド" -#: engine/core/graphene/object_types.py:534 engine/core/models.py:103 +#: engine/core/graphene/object_types.py:538 +msgid "video url" +msgstr "動画URL" + +#: engine/core/graphene/object_types.py:540 engine/core/models.py:122 msgid "attribute groups" msgstr "属性グループ" -#: engine/core/graphene/object_types.py:536 +#: engine/core/graphene/object_types.py:542 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1365,7 +1403,7 @@ msgstr "属性グループ" msgid "price" msgstr "価格" -#: engine/core/graphene/object_types.py:537 +#: engine/core/graphene/object_types.py:543 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1373,39 +1411,39 @@ msgstr "価格" msgid "quantity" msgstr "数量" -#: engine/core/graphene/object_types.py:538 +#: engine/core/graphene/object_types.py:544 msgid "number of feedbacks" msgstr "フィードバック数" -#: engine/core/graphene/object_types.py:539 +#: engine/core/graphene/object_types.py:545 msgid "only available for personal orders" msgstr "個人注文のみの商品" -#: engine/core/graphene/object_types.py:544 +#: engine/core/graphene/object_types.py:550 msgid "discount price" msgstr "割引価格" -#: engine/core/graphene/object_types.py:568 engine/core/models.py:682 +#: engine/core/graphene/object_types.py:575 engine/core/models.py:755 msgid "products" msgstr "製品紹介" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:691 msgid "promocodes" msgstr "プロモコード" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:706 msgid "products on sale" msgstr "販売商品" -#: engine/core/graphene/object_types.py:701 engine/core/models.py:935 +#: engine/core/graphene/object_types.py:720 engine/core/models.py:1028 msgid "promotions" msgstr "プロモーション" -#: engine/core/graphene/object_types.py:705 engine/core/models.py:182 +#: engine/core/graphene/object_types.py:727 engine/core/models.py:201 msgid "vendor" msgstr "ベンダー" -#: engine/core/graphene/object_types.py:706 engine/core/models.py:681 +#: engine/core/graphene/object_types.py:728 engine/core/models.py:754 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1413,102 +1451,102 @@ msgstr "ベンダー" msgid "product" msgstr "製品" -#: engine/core/graphene/object_types.py:718 engine/core/models.py:958 +#: engine/core/graphene/object_types.py:740 engine/core/models.py:1051 msgid "wishlisted products" msgstr "ウィッシュリスト掲載商品" -#: engine/core/graphene/object_types.py:725 engine/core/models.py:975 +#: engine/core/graphene/object_types.py:747 engine/core/models.py:1068 msgid "wishlists" msgstr "ウィッシュリスト" -#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:752 msgid "tagged products" msgstr "タグ別アーカイブ" -#: engine/core/graphene/object_types.py:738 engine/core/models.py:219 -#: engine/core/models.py:611 +#: engine/core/graphene/object_types.py:760 engine/core/models.py:238 +#: engine/core/models.py:676 msgid "product tags" msgstr "商品タグ" -#: engine/core/graphene/object_types.py:743 +#: engine/core/graphene/object_types.py:765 msgid "tagged categories" msgstr "タグ別アーカイブ" -#: engine/core/graphene/object_types.py:751 +#: engine/core/graphene/object_types.py:773 msgid "categories tags" msgstr "カテゴリー' タグ" -#: engine/core/graphene/object_types.py:755 +#: engine/core/graphene/object_types.py:777 msgid "project name" msgstr "プロジェクト名" -#: engine/core/graphene/object_types.py:756 +#: engine/core/graphene/object_types.py:778 msgid "company name" msgstr "会社名" -#: engine/core/graphene/object_types.py:757 +#: engine/core/graphene/object_types.py:779 msgid "company address" msgstr "会社住所" -#: engine/core/graphene/object_types.py:758 +#: engine/core/graphene/object_types.py:780 msgid "company phone number" msgstr "会社電話番号" -#: engine/core/graphene/object_types.py:761 +#: engine/core/graphene/object_types.py:783 msgid "email from, sometimes it must be used instead of host user value" msgstr "'email from' は、ホストユーザの値の代わりに使用されることがあります。" -#: engine/core/graphene/object_types.py:764 +#: engine/core/graphene/object_types.py:786 msgid "email host user" msgstr "メールホストユーザー" -#: engine/core/graphene/object_types.py:765 +#: engine/core/graphene/object_types.py:787 msgid "maximum amount for payment" msgstr "支払限度額" -#: engine/core/graphene/object_types.py:766 +#: engine/core/graphene/object_types.py:788 msgid "minimum amount for payment" msgstr "最低支払額" -#: engine/core/graphene/object_types.py:767 +#: engine/core/graphene/object_types.py:789 msgid "analytics data" msgstr "分析データ" -#: engine/core/graphene/object_types.py:768 +#: engine/core/graphene/object_types.py:790 msgid "advertisement data" msgstr "広告データ" -#: engine/core/graphene/object_types.py:771 +#: engine/core/graphene/object_types.py:793 msgid "company configuration" msgstr "構成" -#: engine/core/graphene/object_types.py:775 +#: engine/core/graphene/object_types.py:797 msgid "language code" msgstr "言語コード" -#: engine/core/graphene/object_types.py:776 +#: engine/core/graphene/object_types.py:798 msgid "language name" msgstr "言語名" -#: engine/core/graphene/object_types.py:777 +#: engine/core/graphene/object_types.py:799 msgid "language flag, if exists :)" msgstr "言語フラグがある場合 :)" -#: engine/core/graphene/object_types.py:780 +#: engine/core/graphene/object_types.py:802 msgid "supported languages" msgstr "サポートされている言語のリストを取得する" -#: engine/core/graphene/object_types.py:812 -#: engine/core/graphene/object_types.py:815 -#: engine/core/graphene/object_types.py:818 +#: engine/core/graphene/object_types.py:834 +#: engine/core/graphene/object_types.py:837 +#: engine/core/graphene/object_types.py:840 msgid "products search results" msgstr "製品検索結果" -#: engine/core/graphene/object_types.py:820 +#: engine/core/graphene/object_types.py:842 msgid "posts search results" msgstr "製品検索結果" -#: engine/core/models.py:75 +#: engine/core/models.py:91 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 " @@ -1517,23 +1555,23 @@ msgid "" msgstr "" "属性グループを表し、階層化することができます。このクラスは、属性グループの管理と整理に使用します。属性グループは親グループを持つことができ、階層構造を形成します。これは、複雑なシステムで属性をより効果的に分類・管理するのに便利です。" -#: engine/core/models.py:88 +#: engine/core/models.py:107 msgid "parent of this group" msgstr "このグループの親" -#: engine/core/models.py:89 +#: engine/core/models.py:108 msgid "parent attribute group" msgstr "親属性グループ" -#: engine/core/models.py:93 engine/core/models.py:94 +#: engine/core/models.py:112 engine/core/models.py:113 msgid "attribute group's name" msgstr "属性グループ名" -#: engine/core/models.py:102 engine/core/models.py:763 +#: engine/core/models.py:121 engine/core/models.py:849 msgid "attribute group" msgstr "属性グループ" -#: engine/core/models.py:108 +#: engine/core/models.py:127 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1546,47 +1584,47 @@ msgstr "" "外部ベンダーとその相互作用要件に関する情報を格納できるベンダー・エンティティを表します。Vendor " "クラスは、外部ベンダーに関連する情報を定義・管理するために使用します。これは、ベンダーの名前、通信に必要な認証の詳細、ベンダーから取得した商品に適用されるパーセンテージのマークアップを格納します。このモデルは、追加のメタデータと制約も保持するため、サードパーティ・ベンダーとやり取りするシステムでの使用に適しています。" -#: engine/core/models.py:122 +#: engine/core/models.py:141 msgid "stores credentials and endpoints required for vendor communication" msgstr "ベンダーのAPI通信に必要な認証情報とエンドポイントを保存する。" -#: engine/core/models.py:124 +#: engine/core/models.py:143 msgid "authentication info" msgstr "認証情報" -#: engine/core/models.py:129 +#: engine/core/models.py:148 msgid "define the markup for products retrieved from this vendor" msgstr "このベンダーから取得した商品のマークアップを定義する。" -#: engine/core/models.py:130 +#: engine/core/models.py:149 msgid "vendor markup percentage" msgstr "ベンダーのマークアップ率" -#: engine/core/models.py:134 +#: engine/core/models.py:153 msgid "name of this vendor" msgstr "このベンダーの名前" -#: engine/core/models.py:135 +#: engine/core/models.py:154 msgid "vendor name" msgstr "ベンダー名" -#: engine/core/models.py:150 +#: engine/core/models.py:169 msgid "response file" msgstr "レスポンスファイル" -#: engine/core/models.py:151 +#: engine/core/models.py:170 msgid "vendor's last processing response" msgstr "ベンダーの最終処理回答" -#: engine/core/models.py:157 +#: engine/core/models.py:176 msgid "vendor's integration file path" msgstr "ベンダーの統合ファイルパス" -#: engine/core/models.py:158 +#: engine/core/models.py:177 msgid "integration path" msgstr "統合パス" -#: engine/core/models.py:192 +#: engine/core/models.py:211 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1597,27 +1635,27 @@ msgstr "" "製品を分類または識別するために使用される製品タグを表します。ProductTag " "クラスは、内部タグ識別子とユーザーフレンドリーな表示名の組み合わせによって、製品を一意に識別および分類するように設計されています。ミキシンを通じてエクスポートされる操作をサポートし、管理目的のためにメタデータのカスタマイズを提供します。" -#: engine/core/models.py:204 engine/core/models.py:235 +#: engine/core/models.py:223 engine/core/models.py:254 msgid "internal tag identifier for the product tag" msgstr "商品タグの内部タグ識別子" -#: engine/core/models.py:205 engine/core/models.py:236 +#: engine/core/models.py:224 engine/core/models.py:255 msgid "tag name" msgstr "タグ名" -#: engine/core/models.py:209 engine/core/models.py:240 +#: engine/core/models.py:228 engine/core/models.py:259 msgid "user-friendly name for the product tag" msgstr "商品タグのユーザーフレンドリーな名前" -#: engine/core/models.py:210 engine/core/models.py:241 +#: engine/core/models.py:229 engine/core/models.py:260 msgid "tag display name" msgstr "タグ表示名" -#: engine/core/models.py:218 +#: engine/core/models.py:237 msgid "product tag" msgstr "商品タグ" -#: engine/core/models.py:224 +#: engine/core/models.py:243 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 " @@ -1625,15 +1663,15 @@ msgid "" msgstr "" "商品に使用されるカテゴリータグを表します。このクラスは、商品の関連付けと分類に使用できるカテゴリタグをモデル化します。内部タグ識別子とユーザーフレンドリーな表示名の属性が含まれます。" -#: engine/core/models.py:249 +#: engine/core/models.py:268 msgid "category tag" msgstr "カテゴリタグ" -#: engine/core/models.py:250 engine/core/models.py:322 +#: engine/core/models.py:269 engine/core/models.py:345 msgid "category tags" msgstr "カテゴリータグ" -#: engine/core/models.py:255 +#: engine/core/models.py:274 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1647,51 +1685,51 @@ msgid "" msgstr "" "関連するアイテムを階層構造で整理し、グループ化するためのカテゴリ・エンティティを表します。カテゴリは、親子関係をサポートする他のカテゴリとの階層関係を持つことができます。このクラスには、カテゴリ関連機能の基盤となるメタデータおよび視覚表現のためのフィールドが含まれます。このクラスは通常、アプリケーション内で商品カテゴリやその他の類似のグループ化を定義および管理するために使用され、ユーザや管理者がカテゴリの名前、説明、階層を指定したり、画像、タグ、優先度などの属性を割り当てることができます。" -#: engine/core/models.py:269 +#: engine/core/models.py:292 msgid "upload an image representing this category" msgstr "このカテゴリーを表す画像をアップロードする" -#: engine/core/models.py:272 +#: engine/core/models.py:295 msgid "category image" msgstr "カテゴリーイメージ" -#: engine/core/models.py:277 +#: engine/core/models.py:300 msgid "define a markup percentage for products in this category" msgstr "このカテゴリの商品のマークアップ率を定義する" -#: engine/core/models.py:286 +#: engine/core/models.py:309 msgid "parent of this category to form a hierarchical structure" msgstr "階層構造を形成するこのカテゴリの親" -#: engine/core/models.py:287 +#: engine/core/models.py:310 msgid "parent category" msgstr "親カテゴリー" -#: engine/core/models.py:292 +#: engine/core/models.py:315 msgid "category name" msgstr "カテゴリー名" -#: engine/core/models.py:293 +#: engine/core/models.py:316 msgid "provide a name for this category" msgstr "このカテゴリの名前を入力してください。" -#: engine/core/models.py:300 +#: engine/core/models.py:323 msgid "add a detailed description for this category" msgstr "このカテゴリの詳細説明を追加する" -#: engine/core/models.py:301 +#: engine/core/models.py:324 msgid "category description" msgstr "カテゴリー説明" -#: engine/core/models.py:321 +#: engine/core/models.py:344 msgid "tags that help describe or group this category" msgstr "このカテゴリーを説明またはグループ化するのに役立つタグ" -#: engine/core/models.py:328 engine/core/models.py:503 +#: engine/core/models.py:351 engine/core/models.py:552 msgid "priority" msgstr "優先順位" -#: engine/core/models.py:446 +#: engine/core/models.py:495 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1701,47 +1739,43 @@ msgid "" msgstr "" "システム内のブランド・オブジェクトを表します。このクラスは、名前、ロゴ、説明、関連カテゴリ、一意のスラッグ、および優先順位など、ブランドに関連する情報と属性を処理します。このクラスによって、アプリケーション内でブランド関連データを整理し、表現することができます。" -#: engine/core/models.py:456 +#: engine/core/models.py:505 msgid "name of this brand" msgstr "ブランド名" -#: engine/core/models.py:457 +#: engine/core/models.py:506 msgid "brand name" msgstr "ブランド名" -#: engine/core/models.py:464 +#: engine/core/models.py:513 msgid "upload a logo representing this brand" msgstr "このブランドを代表するロゴをアップロードする" -#: engine/core/models.py:466 +#: engine/core/models.py:515 msgid "brand small image" msgstr "小さなブランドイメージ" -#: engine/core/models.py:472 +#: engine/core/models.py:521 msgid "upload a big logo representing this brand" msgstr "このブランドを象徴する大きなロゴをアップロードする" -#: engine/core/models.py:474 +#: engine/core/models.py:523 msgid "brand big image" msgstr "大きなブランドイメージ" -#: engine/core/models.py:479 +#: engine/core/models.py:528 msgid "add a detailed description of the brand" msgstr "ブランドの詳細な説明を加える" -#: engine/core/models.py:480 +#: engine/core/models.py:529 msgid "brand description" msgstr "ブランド説明" -#: engine/core/models.py:485 -msgid "optional categories that this brand is associated with" -msgstr "このブランドが関連するオプション・カテゴリー" +#: engine/core/models.py:534 engine/core/models.py:535 +msgid "DEPRECATED" +msgstr "非推奨" -#: engine/core/models.py:486 -msgid "associated categories" -msgstr "カテゴリー" - -#: engine/core/models.py:516 +#: engine/core/models.py:569 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1752,72 +1786,72 @@ msgid "" msgstr "" "システムで管理されている商品の在庫を表します。このクラスは、ベンダー、商品、およびそれらの在庫情報間の関係の詳細や、価格、購入価格、数量、SKU、デジタル資産などの在庫関連プロパティを提供します。これは在庫管理システムの一部で、さまざまなベンダーから入手可能な製品の追跡と評価を可能にします。" -#: engine/core/models.py:528 +#: engine/core/models.py:581 msgid "the vendor supplying this product stock" msgstr "この製品の在庫を供給しているベンダー" -#: engine/core/models.py:529 +#: engine/core/models.py:582 msgid "associated vendor" msgstr "関連ベンダー" -#: engine/core/models.py:533 +#: engine/core/models.py:588 msgid "final price to the customer after markups" msgstr "マークアップ後の顧客への最終価格" -#: engine/core/models.py:534 +#: engine/core/models.py:589 msgid "selling price" msgstr "販売価格" -#: engine/core/models.py:539 +#: engine/core/models.py:594 msgid "the product associated with this stock entry" msgstr "このストックエントリーに関連する製品" -#: engine/core/models.py:540 engine/core/models.py:828 -#: engine/core/models.py:874 engine/core/models.py:1912 +#: engine/core/models.py:595 engine/core/models.py:914 +#: engine/core/models.py:962 engine/core/models.py:2020 msgid "associated product" msgstr "関連製品" -#: engine/core/models.py:547 +#: engine/core/models.py:604 msgid "the price paid to the vendor for this product" msgstr "この製品に対してベンダーに支払われた価格" -#: engine/core/models.py:548 +#: engine/core/models.py:605 msgid "vendor purchase price" msgstr "ベンダーの購入価格" -#: engine/core/models.py:552 +#: engine/core/models.py:609 msgid "available quantity of the product in stock" msgstr "在庫数" -#: engine/core/models.py:553 +#: engine/core/models.py:610 msgid "quantity in stock" msgstr "在庫数" -#: engine/core/models.py:557 +#: engine/core/models.py:614 msgid "vendor-assigned SKU for identifying the product" msgstr "製品を識別するためにベンダーが割り当てたSKU" -#: engine/core/models.py:558 +#: engine/core/models.py:615 msgid "vendor sku" msgstr "ベンダーのSKU" -#: engine/core/models.py:564 +#: engine/core/models.py:621 msgid "digital file associated with this stock if applicable" msgstr "この銘柄に関連するデジタルファイル(該当する場合" -#: engine/core/models.py:565 +#: engine/core/models.py:622 msgid "digital file" msgstr "デジタルファイル" -#: engine/core/models.py:569 +#: engine/core/models.py:626 msgid "system attributes" msgstr "システム属性" -#: engine/core/models.py:577 +#: engine/core/models.py:636 msgid "stock entries" msgstr "ストックエントリー" -#: engine/core/models.py:582 +#: engine/core/models.py:641 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1832,71 +1866,79 @@ msgstr "" " (Category、Brand、ProductTag など) " "と相互作用し、パフォーマンスを向上させるために、頻繁にアクセスされるプロパティのキャッシュを管理します。アプリケーション内で商品データとその関連情報を定義し、操作するために使用されます。" -#: engine/core/models.py:595 +#: engine/core/models.py:660 msgid "category this product belongs to" msgstr "この製品が属するカテゴリ" -#: engine/core/models.py:604 +#: engine/core/models.py:669 msgid "optionally associate this product with a brand" msgstr "オプションでこの製品をブランドと関連付ける" -#: engine/core/models.py:610 +#: engine/core/models.py:675 msgid "tags that help describe or group this product" msgstr "この商品の説明やグループ分けに役立つタグ" -#: engine/core/models.py:615 +#: engine/core/models.py:680 msgid "indicates whether this product is digitally delivered" msgstr "この製品がデジタル配信されるかどうかを示す" -#: engine/core/models.py:616 +#: engine/core/models.py:681 msgid "is product digital" msgstr "製品はデジタルか" -#: engine/core/models.py:623 +#: engine/core/models.py:688 msgid "indicates whether this product should be updated from periodic task" msgstr "は、この製品が定期的なタスクから更新されるべきかどうかを示します。" -#: engine/core/models.py:625 +#: engine/core/models.py:690 msgid "is product updatable" msgstr "製品は更新可能か" -#: engine/core/models.py:631 +#: engine/core/models.py:696 msgid "provide a clear identifying name for the product" msgstr "製品の明確な識別名を提供する" -#: engine/core/models.py:632 +#: engine/core/models.py:697 msgid "product name" msgstr "商品名" -#: engine/core/models.py:638 engine/core/models.py:923 +#: engine/core/models.py:703 engine/core/models.py:1012 msgid "add a detailed description of the product" msgstr "商品の詳細説明を追加する" -#: engine/core/models.py:639 +#: engine/core/models.py:704 msgid "product description" msgstr "商品説明" -#: engine/core/models.py:646 +#: engine/core/models.py:710 +msgid "optional video file for this product" +msgstr "この製品用のオプション動画ファイル" + +#: engine/core/models.py:711 +msgid "product video" +msgstr "製品動画" + +#: engine/core/models.py:719 msgid "part number for this product" msgstr "この製品の品番" -#: engine/core/models.py:647 +#: engine/core/models.py:720 msgid "part number" msgstr "品番" -#: engine/core/models.py:666 +#: engine/core/models.py:739 msgid "stock keeping unit for this product" msgstr "この製品の在庫管理単位" -#: engine/core/models.py:673 +#: engine/core/models.py:746 msgid "whether to export this product to marketplaces" msgstr "この製品をマーケットプレイスに輸出するか否か" -#: engine/core/models.py:674 +#: engine/core/models.py:747 msgid "Export to Marketplaces" msgstr "マーケットプレイスへのエクスポート" -#: engine/core/models.py:749 +#: engine/core/models.py:835 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 " @@ -1908,64 +1950,64 @@ msgstr "" "システム内の属性を表します。このクラスは、属性を定義および管理するために使用されます。属性は、他のエンティティに関連付けることができる、カスタマイズ可能なデータの部分です。属性には、関連するカテゴリ、グループ、値型、および名前があります。このモデルは、string、integer、float、boolean、array、object" " などの複数の型の値をサポートしています。これにより、動的で柔軟なデータ構造化が可能になります。" -#: engine/core/models.py:762 +#: engine/core/models.py:848 msgid "group of this attribute" msgstr "この属性のグループ" -#: engine/core/models.py:768 +#: engine/core/models.py:854 msgid "string" msgstr "ストリング" -#: engine/core/models.py:769 +#: engine/core/models.py:855 msgid "integer" msgstr "整数" -#: engine/core/models.py:770 +#: engine/core/models.py:856 msgid "float" msgstr "フロート" -#: engine/core/models.py:771 +#: engine/core/models.py:857 msgid "boolean" msgstr "ブーリアン" -#: engine/core/models.py:772 +#: engine/core/models.py:858 msgid "array" msgstr "配列" -#: engine/core/models.py:773 +#: engine/core/models.py:859 msgid "object" msgstr "対象" -#: engine/core/models.py:775 +#: engine/core/models.py:861 msgid "type of the attribute's value" msgstr "属性値のタイプ" -#: engine/core/models.py:776 +#: engine/core/models.py:862 msgid "value type" msgstr "値の種類" -#: engine/core/models.py:781 +#: engine/core/models.py:867 msgid "name of this attribute" msgstr "この属性の名前" -#: engine/core/models.py:782 +#: engine/core/models.py:868 msgid "attribute's name" msgstr "属性名" -#: engine/core/models.py:787 +#: engine/core/models.py:873 msgid "is filterable" msgstr "フィルタリング可能" -#: engine/core/models.py:789 +#: engine/core/models.py:875 msgid "designates whether this attribute can be used for filtering or not" msgstr "この属性がフィルタリングに使用できるかどうかを指定する。" -#: engine/core/models.py:802 engine/core/models.py:820 +#: engine/core/models.py:888 engine/core/models.py:906 #: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "属性" -#: engine/core/models.py:808 +#: engine/core/models.py:894 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" @@ -1973,19 +2015,19 @@ msgid "" msgstr "" "製品にリンクされている属性の特定の値を表します。これは、「属性」を一意の「値」にリンクし、製品特性のより良い編成と動的な表現を可能にします。" -#: engine/core/models.py:819 +#: engine/core/models.py:905 msgid "attribute of this value" msgstr "この値の属性" -#: engine/core/models.py:827 +#: engine/core/models.py:913 msgid "the specific product associated with this attribute's value" msgstr "この属性の値に関連する特定の製品" -#: engine/core/models.py:833 +#: engine/core/models.py:919 msgid "the specific value for this attribute" msgstr "この属性の具体的な値" -#: engine/core/models.py:846 +#: engine/core/models.py:934 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -1995,39 +2037,39 @@ msgid "" msgstr "" "システム内の商品に関連付けられた商品画像を表します。このクラスは商品の画像を管理するために設計されており、画像ファイルのアップロード、特定の商品との関連付け、表示順の決定などの機能を提供します。また、画像の代替テキストによるアクセシビリティ機能も備えています。" -#: engine/core/models.py:857 +#: engine/core/models.py:945 msgid "provide alternative text for the image for accessibility" msgstr "アクセシビリティのために、画像に代替テキストを提供する。" -#: engine/core/models.py:858 +#: engine/core/models.py:946 msgid "image alt text" msgstr "画像のaltテキスト" -#: engine/core/models.py:861 +#: engine/core/models.py:949 msgid "upload the image file for this product" msgstr "この商品の画像ファイルをアップロードする" -#: engine/core/models.py:862 engine/core/models.py:893 +#: engine/core/models.py:950 engine/core/models.py:982 msgid "product image" msgstr "商品画像" -#: engine/core/models.py:867 +#: engine/core/models.py:955 msgid "determines the order in which images are displayed" msgstr "画像の表示順を決める" -#: engine/core/models.py:868 +#: engine/core/models.py:956 msgid "display priority" msgstr "表示優先度" -#: engine/core/models.py:873 +#: engine/core/models.py:961 msgid "the product that this image represents" msgstr "この画像が表す製品" -#: engine/core/models.py:894 +#: engine/core/models.py:983 msgid "product images" msgstr "商品画像" -#: engine/core/models.py:899 +#: engine/core/models.py:988 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -2038,39 +2080,39 @@ msgid "" msgstr "" "割引を伴う商品の販促キャンペーンを表します。このクラスは、商品に対してパーセンテージベースの割引を提供する販促キャンペーンを定義および管理するために使用します。このクラスには、割引率を設定し、プロモーションの詳細を提供し、該当する商品にリンクするための属性が含まれます。商品カタログと統合して、キャンペーンの対象商品を決定します。" -#: engine/core/models.py:911 +#: engine/core/models.py:1000 msgid "percentage discount for the selected products" msgstr "選択した商品の割引率" -#: engine/core/models.py:912 +#: engine/core/models.py:1001 msgid "discount percentage" msgstr "割引率" -#: engine/core/models.py:917 +#: engine/core/models.py:1006 msgid "provide a unique name for this promotion" msgstr "このプロモーションのユニークな名前を入力してください。" -#: engine/core/models.py:918 +#: engine/core/models.py:1007 msgid "promotion name" msgstr "プロモーション名" -#: engine/core/models.py:924 +#: engine/core/models.py:1013 msgid "promotion description" msgstr "プロモーション内容" -#: engine/core/models.py:929 +#: engine/core/models.py:1018 msgid "select which products are included in this promotion" msgstr "キャンペーン対象商品をお選びください。" -#: engine/core/models.py:930 +#: engine/core/models.py:1019 msgid "included products" msgstr "含まれる製品" -#: engine/core/models.py:934 +#: engine/core/models.py:1027 msgid "promotion" msgstr "プロモーション" -#: engine/core/models.py:945 +#: engine/core/models.py:1038 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2079,23 +2121,23 @@ msgid "" msgstr "" "希望する商品を保存・管理するためのユーザーのウィッシュリストを表します。このクラスは、商品のコレクションを管理する機能を提供し、商品の追加や削除などの操作をサポートし、複数の商品を一度に追加したり削除したりする操作をサポートします。" -#: engine/core/models.py:957 +#: engine/core/models.py:1050 msgid "products that the user has marked as wanted" msgstr "ユーザーが欲しいとマークした商品" -#: engine/core/models.py:965 +#: engine/core/models.py:1058 msgid "user who owns this wishlist" msgstr "このウィッシュリストを所有しているユーザー" -#: engine/core/models.py:966 +#: engine/core/models.py:1059 msgid "wishlist owner" msgstr "ウィッシュリストのオーナー" -#: engine/core/models.py:974 +#: engine/core/models.py:1067 msgid "wishlist" msgstr "ウィッシュリスト" -#: engine/core/models.py:1016 +#: engine/core/models.py:1109 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2106,19 +2148,19 @@ msgid "" msgstr "" "商品に関連付けられたドキュメンタリーのレコードを表します。このクラスは、ファイルのアップロードとそのメタデータを含む、特定の商品に関連するドキュメンタリーに関する情報を格納するために使用されます。ドキュメントファイルのファイルタイプと保存パスを処理するメソッドとプロパティが含まれています。特定のミックスインから機能を拡張し、追加のカスタム機能を提供します。" -#: engine/core/models.py:1031 +#: engine/core/models.py:1124 msgid "documentary" msgstr "ドキュメンタリー" -#: engine/core/models.py:1032 +#: engine/core/models.py:1125 msgid "documentaries" msgstr "ドキュメンタリー" -#: engine/core/models.py:1042 +#: engine/core/models.py:1135 msgid "unresolved" msgstr "未解決" -#: engine/core/models.py:1047 +#: engine/core/models.py:1140 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2135,59 +2177,59 @@ msgstr "" "レスポンスを保存してさらなる処理や検査を行うことができます。また、このクラスは住所とユーザを関連付けることができ、 " "パーソナライズされたデータの取り扱いを容易にします。" -#: engine/core/models.py:1062 +#: engine/core/models.py:1155 msgid "address line for the customer" msgstr "お客様の住所" -#: engine/core/models.py:1063 +#: engine/core/models.py:1156 msgid "address line" msgstr "住所" -#: engine/core/models.py:1065 +#: engine/core/models.py:1158 msgid "street" msgstr "ストリート" -#: engine/core/models.py:1066 +#: engine/core/models.py:1159 msgid "district" msgstr "地区" -#: engine/core/models.py:1067 +#: engine/core/models.py:1160 msgid "city" msgstr "都市" -#: engine/core/models.py:1068 +#: engine/core/models.py:1161 msgid "region" msgstr "地域" -#: engine/core/models.py:1069 +#: engine/core/models.py:1162 msgid "postal code" msgstr "郵便番号" -#: engine/core/models.py:1070 +#: engine/core/models.py:1163 msgid "country" msgstr "国名" -#: engine/core/models.py:1077 +#: engine/core/models.py:1170 msgid "geolocation point: (longitude, latitude)" msgstr "ジオロケーションポイント(経度、緯度)" -#: engine/core/models.py:1083 +#: engine/core/models.py:1176 msgid "full JSON response from geocoder for this address" msgstr "この住所に対するジオコーダーからの完全なJSON応答" -#: engine/core/models.py:1089 +#: engine/core/models.py:1182 msgid "stored JSON response from the geocoding service" msgstr "ジオコーディング・サービスからの保存されたJSONレスポンス" -#: engine/core/models.py:1099 +#: engine/core/models.py:1192 msgid "address" msgstr "住所" -#: engine/core/models.py:1100 +#: engine/core/models.py:1193 msgid "addresses" msgstr "住所" -#: engine/core/models.py:1112 +#: engine/core/models.py:1205 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2200,86 +2242,86 @@ msgstr "" "(金額またはパーセンテージ)、有効期間、関連するユーザ " "(もしあれば)、および使用状況など、プロモーションコードに関する詳細を格納します。これは、制約が満たされていることを保証しながら、プロモコードを検証し、注文に適用する機能を含んでいます。" -#: engine/core/models.py:1126 +#: engine/core/models.py:1219 msgid "unique code used by a user to redeem a discount" msgstr "ユーザーが割引を利用する際に使用する固有のコード" -#: engine/core/models.py:1127 +#: engine/core/models.py:1220 msgid "promo code identifier" msgstr "プロモコード識別子" -#: engine/core/models.py:1134 +#: engine/core/models.py:1227 msgid "fixed discount amount applied if percent is not used" msgstr "パーセントを使用しない場合に適用される固定割引額" -#: engine/core/models.py:1135 +#: engine/core/models.py:1228 msgid "fixed discount amount" msgstr "固定割引額" -#: engine/core/models.py:1141 +#: engine/core/models.py:1234 msgid "percentage discount applied if fixed amount is not used" msgstr "定額を使用しない場合に適用される割引率" -#: engine/core/models.py:1142 +#: engine/core/models.py:1235 msgid "percentage discount" msgstr "割引率" -#: engine/core/models.py:1147 +#: engine/core/models.py:1240 msgid "timestamp when the promocode expires" msgstr "プロモコードの有効期限が切れるタイムスタンプ" -#: engine/core/models.py:1148 +#: engine/core/models.py:1241 msgid "end validity time" msgstr "終了有効時間" -#: engine/core/models.py:1153 +#: engine/core/models.py:1246 msgid "timestamp from which this promocode is valid" msgstr "このプロモコードが有効なタイムスタンプ" -#: engine/core/models.py:1154 +#: engine/core/models.py:1247 msgid "start validity time" msgstr "開始有効時間" -#: engine/core/models.py:1159 +#: engine/core/models.py:1252 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "プロモコードが使用されたタイムスタンプ、未使用の場合は空白" -#: engine/core/models.py:1160 +#: engine/core/models.py:1253 msgid "usage timestamp" msgstr "使用タイムスタンプ" -#: engine/core/models.py:1165 +#: engine/core/models.py:1258 msgid "user assigned to this promocode if applicable" msgstr "該当する場合、このプロモコードに割り当てられたユーザー" -#: engine/core/models.py:1166 +#: engine/core/models.py:1259 msgid "assigned user" msgstr "担当ユーザー" -#: engine/core/models.py:1173 +#: engine/core/models.py:1266 msgid "promo code" msgstr "プロモコード" -#: engine/core/models.py:1174 +#: engine/core/models.py:1267 msgid "promo codes" msgstr "プロモコード" -#: engine/core/models.py:1190 +#: engine/core/models.py:1283 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "割引の種類は1つだけ(金額またはパーセント)定義されるべきで、両方またはどちらも定義してはならない。" -#: engine/core/models.py:1212 +#: engine/core/models.py:1305 msgid "promocode already used" msgstr "プロモコードはすでに使用されています" -#: engine/core/models.py:1234 +#: engine/core/models.py:1327 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "プロモコード {self.uuid} の割引タイプが無効です!" -#: engine/core/models.py:1243 +#: engine/core/models.py:1336 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 " @@ -2290,145 +2332,145 @@ msgid "" msgstr "" "ユーザーによる注文を表します。このクラスは、請求や配送情報、ステータス、関連するユーザ、通知、関連する操作などのさまざまな属性を含む、アプリケーション内の注文をモデル化します。注文は関連する商品を持つことができ、プロモーションを適用し、住所を設定し、配送または請求の詳細を更新することができます。同様に、注文のライフサイクルにおける商品の管理もサポートします。" -#: engine/core/models.py:1260 +#: engine/core/models.py:1357 msgid "the billing address used for this order" msgstr "この注文に使用される請求先住所" -#: engine/core/models.py:1268 +#: engine/core/models.py:1365 msgid "optional promo code applied to this order" msgstr "この注文に適用されるプロモコード" -#: engine/core/models.py:1269 +#: engine/core/models.py:1366 msgid "applied promo code" msgstr "プロモーションコード適用" -#: engine/core/models.py:1277 +#: engine/core/models.py:1374 msgid "the shipping address used for this order" msgstr "この注文に使用された配送先住所" -#: engine/core/models.py:1278 +#: engine/core/models.py:1375 msgid "shipping address" msgstr "配送先住所" -#: engine/core/models.py:1284 +#: engine/core/models.py:1381 msgid "current status of the order in its lifecycle" msgstr "ライフサイクルにおける現在の注文状況" -#: engine/core/models.py:1285 +#: engine/core/models.py:1382 msgid "order status" msgstr "注文状況" -#: engine/core/models.py:1290 engine/core/models.py:1889 +#: engine/core/models.py:1387 engine/core/models.py:1997 msgid "json structure of notifications to display to users" msgstr "ユーザーに表示する通知のJSON構造、管理UIではテーブルビューが使用されます。" -#: engine/core/models.py:1296 +#: engine/core/models.py:1393 msgid "json representation of order attributes for this order" msgstr "この注文の注文属性のJSON表現" -#: engine/core/models.py:1302 +#: engine/core/models.py:1399 msgid "the user who placed the order" msgstr "注文を行ったユーザー" -#: engine/core/models.py:1303 +#: engine/core/models.py:1400 msgid "user" msgstr "ユーザー" -#: engine/core/models.py:1309 +#: engine/core/models.py:1406 msgid "the timestamp when the order was finalized" msgstr "注文が確定したタイムスタンプ" -#: engine/core/models.py:1310 +#: engine/core/models.py:1407 msgid "buy time" msgstr "時間を買う" -#: engine/core/models.py:1317 +#: engine/core/models.py:1414 msgid "a human-readable identifier for the order" msgstr "オーダーの人間が読み取り可能な識別子。" -#: engine/core/models.py:1318 +#: engine/core/models.py:1415 msgid "human readable id" msgstr "人間が読めるID" -#: engine/core/models.py:1324 +#: engine/core/models.py:1421 msgid "order" msgstr "オーダー" -#: engine/core/models.py:1371 +#: engine/core/models.py:1468 msgid "a user must have only one pending order at a time" msgstr "ユーザーは一度に1つの未決注文しか持つことができません!" -#: engine/core/models.py:1404 +#: engine/core/models.py:1504 msgid "you cannot add products to an order that is not a pending one" msgstr "保留中の注文以外の注文に商品を追加することはできません。" -#: engine/core/models.py:1410 +#: engine/core/models.py:1510 msgid "you cannot add inactive products to order" msgstr "アクティブでない商品を注文に追加することはできません。" -#: engine/core/models.py:1432 +#: engine/core/models.py:1533 msgid "you cannot add more products than available in stock" msgstr "在庫以上の商品を追加することはできません。" -#: engine/core/models.py:1456 engine/core/models.py:1485 -#: engine/core/models.py:1495 +#: engine/core/models.py:1557 engine/core/models.py:1586 +#: engine/core/models.py:1596 msgid "you cannot remove products from an order that is not a pending one" msgstr "保留中の注文以外の注文から商品を削除することはできません。" -#: engine/core/models.py:1480 +#: engine/core/models.py:1581 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name}はクエリ<{query}と一緒に存在しません!" -#: engine/core/models.py:1519 +#: engine/core/models.py:1620 msgid "promocode does not exist" msgstr "プロモコードが存在しない" -#: engine/core/models.py:1534 +#: engine/core/models.py:1635 msgid "you can only buy physical products with shipping address specified" msgstr "配送先住所が指定された現物商品のみ購入可能!" -#: engine/core/models.py:1555 +#: engine/core/models.py:1656 msgid "address does not exist" msgstr "アドレスが存在しない" -#: engine/core/models.py:1577 engine/core/models.py:1656 +#: engine/core/models.py:1678 engine/core/models.py:1757 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "現在ご購入いただけません。数分後にもう一度お試しください。" -#: engine/core/models.py:1583 engine/core/models.py:1649 +#: engine/core/models.py:1684 engine/core/models.py:1750 msgid "invalid force value" msgstr "無効なフォース値" -#: engine/core/models.py:1589 engine/core/models.py:1660 +#: engine/core/models.py:1690 engine/core/models.py:1761 msgid "you cannot purchase an empty order!" msgstr "空注文はできません!" -#: engine/core/models.py:1610 +#: engine/core/models.py:1711 msgid "you cannot buy an order without a user" msgstr "ユーザーがいない注文は購入できない!" -#: engine/core/models.py:1624 +#: engine/core/models.py:1725 msgid "a user without a balance cannot buy with balance" msgstr "残高のないユーザーは、残高で購入することはできない!" -#: engine/core/models.py:1630 +#: engine/core/models.py:1731 msgid "insufficient funds to complete the order" msgstr "注文を完了するための資金不足" -#: engine/core/models.py:1671 +#: engine/core/models.py:1772 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "ご登録がない場合はご購入いただけませんので、以下の情報をお知らせください:お客様のお名前、お客様のEメール、お客様の電話番号" -#: engine/core/models.py:1682 +#: engine/core/models.py:1783 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "支払方法が無効です:{available_payment_methods}からの{payment_method}が無効です!" -#: engine/core/models.py:1813 +#: engine/core/models.py:1916 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2438,32 +2480,32 @@ msgid "" msgstr "" "製品に対するユーザのフィードバックを管理します。このクラスは、購入した特定の商品に対するユーザのフィードバックを取得し、保存するために設計されています。ユーザのコメント、注文の関連商品への参照、そしてユーザが割り当てた評価を保存する属性を含みます。このクラスは、フィードバックデータを効果的にモデル化し、管理するためにデータベースフィールドを使用します。" -#: engine/core/models.py:1825 +#: engine/core/models.py:1928 msgid "user-provided comments about their experience with the product" msgstr "ユーザーから寄せられた製品使用体験に関するコメント" -#: engine/core/models.py:1826 +#: engine/core/models.py:1929 msgid "feedback comments" msgstr "フィードバック・コメント" -#: engine/core/models.py:1834 +#: engine/core/models.py:1937 msgid "" "references the specific product in an order that this feedback is about" msgstr "このフィードバックが対象としている注文の特定の製品を参照する。" -#: engine/core/models.py:1836 +#: engine/core/models.py:1939 msgid "related order product" msgstr "関連注文商品" -#: engine/core/models.py:1841 +#: engine/core/models.py:1944 msgid "user-assigned rating for the product" msgstr "ユーザーによる製品の評価" -#: engine/core/models.py:1842 +#: engine/core/models.py:1945 msgid "product rating" msgstr "製品評価" -#: engine/core/models.py:1862 +#: engine/core/models.py:1965 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2477,108 +2519,108 @@ msgid "" msgstr "" "注文に関連する商品とその属性を表す。OrderProductモデルは、購入価格、数量、商品属性、ステータスなどの詳細を含む、注文の一部である商品に関する情報を保持します。ユーザーや管理者への通知を管理し、商品残高の返却やフィードバックの追加などの操作を処理します。このモデルはまた、合計価格の計算やデジタル商品のダウンロードURLの生成など、ビジネスロジックをサポートするメソッドやプロパティも提供します。このモデルはOrderモデルとProductモデルと統合され、それらへの参照を保存します。" -#: engine/core/models.py:1877 +#: engine/core/models.py:1985 msgid "the price paid by the customer for this product at purchase time" msgstr "この商品の購入時に顧客が支払った価格" -#: engine/core/models.py:1878 +#: engine/core/models.py:1986 msgid "purchase price at order time" msgstr "注文時の購入価格" -#: engine/core/models.py:1883 +#: engine/core/models.py:1991 msgid "internal comments for admins about this ordered product" msgstr "この注文商品に関する管理者への内部コメント" -#: engine/core/models.py:1884 +#: engine/core/models.py:1992 msgid "internal comments" msgstr "社内コメント" -#: engine/core/models.py:1890 +#: engine/core/models.py:1998 msgid "user notifications" msgstr "ユーザー通知" -#: engine/core/models.py:1895 +#: engine/core/models.py:2003 msgid "json representation of this item's attributes" msgstr "このアイテムの属性のJSON表現" -#: engine/core/models.py:1896 +#: engine/core/models.py:2004 msgid "ordered product attributes" msgstr "製品属性の順序" -#: engine/core/models.py:1901 +#: engine/core/models.py:2009 msgid "reference to the parent order that contains this product" msgstr "この商品を含む親注文への参照" -#: engine/core/models.py:1902 +#: engine/core/models.py:2010 msgid "parent order" msgstr "親注文" -#: engine/core/models.py:1911 +#: engine/core/models.py:2019 msgid "the specific product associated with this order line" msgstr "この注文ラインに関連する特定の製品" -#: engine/core/models.py:1918 +#: engine/core/models.py:2026 msgid "quantity of this specific product in the order" msgstr "注文に含まれる特定の商品の数量" -#: engine/core/models.py:1919 +#: engine/core/models.py:2027 msgid "product quantity" msgstr "製品数量" -#: engine/core/models.py:1926 +#: engine/core/models.py:2034 msgid "current status of this product in the order" msgstr "この商品の現在のご注文状況" -#: engine/core/models.py:1927 +#: engine/core/models.py:2035 msgid "product line status" msgstr "製品ラインの状況" -#: engine/core/models.py:1998 +#: engine/core/models.py:2106 msgid "order product must have an order" msgstr "Orderproductには関連する注文がなければならない!" -#: engine/core/models.py:2000 +#: engine/core/models.py:2108 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "フィードバックに指定されたアクションが間違っています:{action}です!" -#: engine/core/models.py:2017 +#: engine/core/models.py:2125 msgid "you cannot feedback an order which is not received" msgstr "受信していない注文をフィードバックすることはできません。" -#: engine/core/models.py:2026 +#: engine/core/models.py:2132 engine/core/models.py:2227 msgid "name" msgstr "名称" -#: engine/core/models.py:2028 +#: engine/core/models.py:2134 msgid "URL of the integration" msgstr "統合のURL" -#: engine/core/models.py:2031 +#: engine/core/models.py:2137 msgid "authentication credentials" msgstr "認証情報" -#: engine/core/models.py:2054 +#: engine/core/models.py:2160 msgid "you can only have one default CRM provider" msgstr "デフォルトのCRMプロバイダーは1つだけです。" -#: engine/core/models.py:2064 +#: engine/core/models.py:2170 msgid "CRM" msgstr "CRM" -#: engine/core/models.py:2065 +#: engine/core/models.py:2171 msgid "CRMs" msgstr "CRM" -#: engine/core/models.py:2081 +#: engine/core/models.py:2187 msgid "order CRM link" msgstr "注文のCRMリンク" -#: engine/core/models.py:2082 +#: engine/core/models.py:2188 msgid "orders CRM links" msgstr "オーダーのCRMリンク" -#: engine/core/models.py:2087 +#: engine/core/models.py:2193 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2590,20 +2632,54 @@ msgstr "" "注文に関連するデジタル資産のダウンロード機能を表します。DigitalAssetDownloadクラスは、注文商品に関連するダウンロードを管理し、アクセスする機能を提供します。このクラスは、関連する注文商品、ダウンロード数、およびアセットが公開されているかどうかの情報を保持します。関連する注文が完了したステータスのときに、アセットをダウンロードするための" " URL を生成するメソッドも含まれています。" -#: engine/core/models.py:2103 +#: engine/core/models.py:2209 msgid "download" msgstr "ダウンロード" -#: engine/core/models.py:2104 +#: engine/core/models.py:2210 msgid "downloads" msgstr "ダウンロード" +#: engine/core/models.py:2228 +msgid "descriptive name for the image" +msgstr "画像の説明名" + +#: engine/core/models.py:2233 +msgid "image file pasted in the markdown editor" +msgstr "マークダウンエディタに貼り付けられた画像ファイル" + +#: engine/core/models.py:2239 +msgid "alt text" +msgstr "別のテキスト" + +#: engine/core/models.py:2240 +msgid "alternative text for accessibility" +msgstr "アクセシビリティのための代替テキスト" + +#: engine/core/models.py:2244 +msgid "pasted image" +msgstr "貼り付けられた画像" + +#: engine/core/models.py:2245 +msgid "pasted images" +msgstr "貼り付けられた画像" + #: engine/core/serializers/utility.py:91 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "フィードバックを追加するには、コメント、評価、および注文商品の uuid を入力する必要があります。" #: engine/core/sitemaps.py:25 +#: engine/core/templates/admin_doc/bookmarklets.html:8 +#: engine/core/templates/admin_doc/index.html:8 +#: engine/core/templates/admin_doc/missing_docutils.html:8 +#: engine/core/templates/admin_doc/model_detail.html:8 +#: engine/core/templates/admin_doc/model_index.html:8 +#: engine/core/templates/admin_doc/template_detail.html:8 +#: engine/core/templates/admin_doc/template_filter_index.html:8 +#: engine/core/templates/admin_doc/template_tag_index.html:8 +#: engine/core/templates/admin_doc/view_detail.html:8 +#: engine/core/templates/admin_doc/view_index.html:8 msgid "Home" msgstr "ホーム" @@ -2656,45 +2732,34 @@ msgstr "グロス" msgid "Dashboard" msgstr "ダッシュボード" -#: engine/core/templates/admin/dashboard/_income_overview.html:7 +#: engine/core/templates/admin/dashboard/_income_overview.html:6 msgid "Income overview" msgstr "収入概要" -#: engine/core/templates/admin/dashboard/_income_overview.html:31 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Net" +#: engine/core/templates/admin/dashboard/_income_overview.html:16 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" msgstr "純収入" -#: engine/core/templates/admin/dashboard/_income_overview.html:37 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Taxes" -msgstr "税金" - -#: engine/core/templates/admin/dashboard/_income_overview.html:43 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 +#: engine/core/templates/admin/dashboard/_income_overview.html:21 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 msgid "Returns" msgstr "リターン" -#: engine/core/templates/admin/dashboard/_income_overview.html:48 -msgid "Gross (pie total)" -msgstr "総収入" - -#: engine/core/templates/admin/dashboard/_income_overview.html:72 -msgid "No data" -msgstr "日付なし" - +#: engine/core/templates/admin/dashboard/_income_overview.html:26 #: engine/core/templates/admin/dashboard/_kpis.html:6 msgid "GMV" msgstr "GMV" +#: engine/core/templates/admin/dashboard/_income_overview.html:50 +msgid "No data" +msgstr "日付なし" + #: engine/core/templates/admin/dashboard/_kpis.html:34 msgid "AOV" msgstr "AOV" -#: engine/core/templates/admin/dashboard/_kpis.html:48 -msgid "Net revenue" -msgstr "純収入" - #: engine/core/templates/admin/dashboard/_kpis.html:62 msgid "Refund rate" msgstr "払い戻し率" @@ -2707,7 +2772,7 @@ msgstr "返品" msgid "Low stock" msgstr "在庫僅少" -#: engine/core/templates/admin/dashboard/_low_stock.html:29 +#: engine/core/templates/admin/dashboard/_low_stock.html:33 msgid "No low stock items." msgstr "在庫の少ない商品はありません。" @@ -2764,6 +2829,287 @@ msgstr "過去30日間にカテゴリー別売上なし。" msgid "Django site admin" msgstr "Djangoサイト管理者" +#: engine/core/templates/admin_doc/bookmarklets.html:4 +#: engine/core/templates/admin_doc/bookmarklets.html:17 +msgid "Documentation bookmarklets" +msgstr "ドキュメント用ブックマークレット" + +#: engine/core/templates/admin_doc/bookmarklets.html:10 +#: engine/core/templates/admin_doc/index.html:4 +#: engine/core/templates/admin_doc/index.html:10 +#: engine/core/templates/admin_doc/index.html:15 +#: engine/core/templates/admin_doc/missing_docutils.html:10 +#: engine/core/templates/admin_doc/missing_docutils.html:19 +#: engine/core/templates/admin_doc/model_detail.html:10 +#: engine/core/templates/admin_doc/model_index.html:10 +#: engine/core/templates/admin_doc/template_detail.html:10 +#: engine/core/templates/admin_doc/template_filter_index.html:10 +#: engine/core/templates/admin_doc/template_tag_index.html:10 +#: engine/core/templates/admin_doc/view_detail.html:10 +#: engine/core/templates/admin_doc/view_index.html:10 +msgid "Documentation" +msgstr "ドキュメント" + +#: engine/core/templates/admin_doc/bookmarklets.html:12 +#: engine/core/templates/admin_doc/index.html:53 +msgid "Bookmarklets" +msgstr "ブックマークレット" + +#: engine/core/templates/admin_doc/bookmarklets.html:19 +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"ブックマークレットをインストールするには、リンクをブックマークツールバーにドラッグするか、リンクを右クリックしてブックマークに追加してください。これでサイト内のどのページからでもブックマークレットを選択できるようになります。" + +#: engine/core/templates/admin_doc/bookmarklets.html:29 +msgid "Documentation for this page" +msgstr "このページに関するドキュメント" + +#: engine/core/templates/admin_doc/bookmarklets.html:31 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "どのページからでも、そのページを生成しているビューのドキュメントへジャンプします。" + +#: engine/core/templates/admin_doc/index.html:21 +#: engine/core/templates/admin_doc/model_detail.html:12 +#: engine/core/templates/admin_doc/model_index.html:4 +#: engine/core/templates/admin_doc/model_index.html:12 +msgid "Models" +msgstr "モデル" + +#: engine/core/templates/admin_doc/index.html:23 +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"モデルは、システム内のすべてのオブジェクトとその関連フィールドの記述です。各モデルには、テンプレート変数としてアクセス可能なフィールドのリストがあります。" + +#: engine/core/templates/admin_doc/index.html:29 +#: engine/core/templates/admin_doc/view_detail.html:12 +#: engine/core/templates/admin_doc/view_index.html:4 +#: engine/core/templates/admin_doc/view_index.html:12 +msgid "Views" +msgstr "ビュー" + +#: engine/core/templates/admin_doc/index.html:31 +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"公開サイトの各ページはビューによって生成されます。ビューは、ページ生成に使用するテンプレートと、そのテンプレートで使用可能なオブジェクトを定義します。" + +#: engine/core/templates/admin_doc/index.html:39 +msgid "List of all the template tags and their functions." +msgstr "すべてのテンプレートタグとその機能の一覧。" + +#: engine/core/templates/admin_doc/index.html:45 +#: engine/core/templates/admin_doc/template_filter_index.html:12 +msgid "Filters" +msgstr "フィルター" + +#: engine/core/templates/admin_doc/index.html:47 +msgid "" +"Filters are actions which can be applied to variables in a template to alter" +" the output." +msgstr "フィルターとは、テンプレート内の変数に適用して出力を変更できる操作です。" + +#: engine/core/templates/admin_doc/index.html:55 +msgid "Tools for your browser to quickly access admin functionality." +msgstr "ブラウザで管理機能を素早くアクセスするためのツール。" + +#: engine/core/templates/admin_doc/missing_docutils.html:4 +msgid "Please install docutils" +msgstr "docutilsをインストールしてください" + +#: engine/core/templates/admin_doc/missing_docutils.html:20 +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"管理ドキュメントシステムはPythonのdocutilsライブラリを必要とします。" + +#: engine/core/templates/admin_doc/missing_docutils.html:21 +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"管理者の方にdocutilsをインストールするようお願いしてください。" + +#: engine/core/templates/admin_doc/model_detail.html:4 +#, python-format +msgid "Model: %(name)s" +msgstr "モデル: %(name)s" + +#: engine/core/templates/admin_doc/model_detail.html:29 +msgid "Fields" +msgstr "フィールド" + +#: engine/core/templates/admin_doc/model_detail.html:36 +msgid "Field" +msgstr "フィールド" + +#: engine/core/templates/admin_doc/model_detail.html:37 +msgid "Type" +msgstr "タイプ" + +#: engine/core/templates/admin_doc/model_detail.html:38 +#: engine/core/templates/admin_doc/model_detail.html:70 +msgid "Description" +msgstr "説明" + +#: engine/core/templates/admin_doc/model_detail.html:61 +msgid "Methods with arguments" +msgstr "引数を持つメソッド" + +#: engine/core/templates/admin_doc/model_detail.html:68 +msgid "Method" +msgstr "方法" + +#: engine/core/templates/admin_doc/model_detail.html:69 +msgid "Arguments" +msgstr "議論" + +#: engine/core/templates/admin_doc/model_detail.html:89 +msgid "Back to Model documentation" +msgstr "モデルドキュメントに戻る" + +#: engine/core/templates/admin_doc/model_index.html:17 +msgid "Model documentation" +msgstr "モデルドキュメント" + +#: engine/core/templates/admin_doc/model_index.html:44 +msgid "Model groups" +msgstr "モデルグループ" + +#: engine/core/templates/admin_doc/template_detail.html:4 +#, python-format +msgid "Template: %(name)s" +msgstr "テンプレート: %(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:12 +msgid "Templates" +msgstr "テンプレート" + +#: engine/core/templates/admin_doc/template_detail.html:17 +#, python-format +msgid "" +"Template: %(name)s" +msgstr "" +"%(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:21 +#, python-format +msgid "Search path for template %(name)s:" +msgstr "テンプレート %(name)s の検索パス:" + +#: engine/core/templates/admin_doc/template_detail.html:29 +msgid "(does not exist)" +msgstr "(存在しません)" + +#: engine/core/templates/admin_doc/template_detail.html:40 +msgid "Back to Documentation" +msgstr "ドキュメントに戻る" + +#: engine/core/templates/admin_doc/template_filter_index.html:4 +msgid "Template filters" +msgstr "テンプレートフィルター" + +#: engine/core/templates/admin_doc/template_filter_index.html:17 +msgid "Template filter documentation" +msgstr "テンプレートフィルターに関するドキュメント" + +#: engine/core/templates/admin_doc/template_filter_index.html:26 +#: engine/core/templates/admin_doc/template_filter_index.html:52 +msgid "Built-in filters" +msgstr "内蔵フィルター" + +#: engine/core/templates/admin_doc/template_filter_index.html:29 +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before using" +" the filter." +msgstr "" +"これらのフィルターを使用するには、フィルターを使用する前にテンプレート内に%(code)sを記述してください。" + +#: engine/core/templates/admin_doc/template_tag_index.html:4 +msgid "Template tags" +msgstr "テンプレートタグ" + +#: engine/core/templates/admin_doc/template_tag_index.html:17 +msgid "Template tag documentation" +msgstr "テンプレートタグのドキュメント" + +#: engine/core/templates/admin_doc/template_tag_index.html:26 +#: engine/core/templates/admin_doc/template_tag_index.html:52 +msgid "Built-in tags" +msgstr "組み込みタグ" + +#: engine/core/templates/admin_doc/template_tag_index.html:29 +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using the tag." +msgstr "" +"これらのタグを使用するには、タグを使用する前にテンプレートに%(code)sを記述してください。" + +#: engine/core/templates/admin_doc/view_detail.html:4 +#, python-format +msgid "View: %(name)s" +msgstr "表示: %(name)s" + +#: engine/core/templates/admin_doc/view_detail.html:28 +msgid "Context:" +msgstr "文脈:" + +#: engine/core/templates/admin_doc/view_detail.html:33 +msgid "Templates:" +msgstr "テンプレート:" + +#: engine/core/templates/admin_doc/view_detail.html:41 +msgid "Back to View documentation" +msgstr "ドキュメントに戻る" + +#: engine/core/templates/admin_doc/view_index.html:17 +msgid "View documentation" +msgstr "ドキュメントを表示する" + +#: engine/core/templates/admin_doc/view_index.html:28 +#, python-format +msgid "Views by namespace %(name)s" +msgstr "名前空間 %(name)s によるビュー" + +#: engine/core/templates/admin_doc/view_index.html:30 +msgid "Views by empty namespace" +msgstr "空のネームスペースによるビュー" + +#: engine/core/templates/admin_doc/view_index.html:40 +#, python-format +msgid "" +"View function: %(full_name)s. Name: %(url_name)s." +msgstr "ビュー関数: %(full_name)s。名前: %(url_name)s。" + +#: engine/core/templates/admin_doc/view_index.html:54 +msgid "Jump to namespace" +msgstr "名前空間へ移動" + +#: engine/core/templates/admin_doc/view_index.html:59 +msgid "Empty namespace" +msgstr "空のネームスペース" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -2857,7 +3203,7 @@ msgstr "" " 追加情報" #: engine/core/templates/digital_order_delivered_email.html:137 -#: engine/core/templates/json_table_widget.html:6 +#: engine/core/templates/json_table_widget.html:26 msgid "value" msgstr "価値" @@ -2875,11 +3221,23 @@ msgstr "ご不明な点がございましたら、%(contact_email)sまでお気 msgid "best regards,
the %(project_name)s team" msgstr "よろしくお願いします、
%(project_name)sチーム" -#: engine/core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:7 +msgid "Key" +msgstr "キー" + +#: engine/core/templates/json_table_widget.html:8 +msgid "Value" +msgstr "価値" + +#: engine/core/templates/json_table_widget.html:19 msgid "key" msgstr "キー" -#: engine/core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:32 +msgid "Delete row" +msgstr "行を削除" + +#: engine/core/templates/json_table_widget.html:44 msgid "Add Row" msgstr "行を追加" @@ -2964,19 +3322,28 @@ msgstr "この操作を行う権限がありません。" msgid "NOMINATIM_URL must be configured." msgstr "NOMINATIM_URLパラメータを設定する必要があります!" -#: engine/core/validators.py:23 +#: engine/core/validators.py:18 +msgid "could not determine file type" +msgstr "ファイルの種類を判別できませんでした" + +#: engine/core/validators.py:24 +#, python-brace-format +msgid "unsupported video format. supported formats: {supported}" +msgstr "サポートされていない動画形式です。サポートされている形式:{supported}" + +#: engine/core/validators.py:45 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "画像のサイズは w{max_width} x h{max_height} ピクセルを超えないようにしてください!" -#: engine/core/views.py:104 +#: engine/core/views.py:108 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." msgstr "" "サイトマップインデックスのリクエストを処理し、XMLレスポンスを返します。レスポンスにXML用の適切なコンテントタイプヘッダーが含まれるようにします。" -#: engine/core/views.py:119 +#: engine/core/views.py:123 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -2985,40 +3352,40 @@ msgstr "" "サイトマップの詳細表示レスポンスを処理します。この関数はリクエストを処理し、適切なサイトマップ詳細レスポンスを取得し、XML の Content-" "Type ヘッダを設定します。" -#: engine/core/views.py:155 +#: engine/core/views.py:174 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "サポートされている言語の一覧と対応する情報を返します。" -#: engine/core/views.py:182 +#: engine/core/views.py:201 msgid "Returns the parameters of the website as a JSON object." msgstr "ウェブサイトのパラメータをJSONオブジェクトとして返します。" -#: engine/core/views.py:198 +#: engine/core/views.py:217 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." msgstr "指定されたキーとタイムアウトで、キャッシュ・データの読み取りや設定などのキャッシュ操作を行う。" -#: engine/core/views.py:220 +#: engine/core/views.py:239 msgid "Handles `contact us` form submissions." msgstr "お問い合わせフォームの送信を処理する。" -#: engine/core/views.py:236 +#: engine/core/views.py:255 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." msgstr "入ってくる POST リクエストからの URL の処理と検証のリクエストを処理します。" -#: engine/core/views.py:273 +#: engine/core/views.py:292 msgid "Handles global search queries." msgstr "グローバル検索クエリを処理する。" -#: engine/core/views.py:289 +#: engine/core/views.py:308 msgid "Handles the logic of buying as a business without registration." msgstr "登録なしでビジネスとして購入するロジックを扱う。" -#: engine/core/views.py:337 +#: engine/core/views.py:356 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3026,31 +3393,31 @@ msgstr "" "注文に関連付けられたデジタルアセットのダウンロードを処理します。\n" "この関数は、プロジェクトのストレージディレクトリにあるデジタルアセットファイルの提供を試みます。ファイルが見つからない場合、リソースが利用できないことを示すHTTP 404エラーが発生します。" -#: engine/core/views.py:348 +#: engine/core/views.py:367 msgid "order_product_uuid is required" msgstr "order_product_uuidは必須です。" -#: engine/core/views.py:355 +#: engine/core/views.py:374 msgid "order product does not exist" msgstr "注文商品が存在しない" -#: engine/core/views.py:358 +#: engine/core/views.py:377 msgid "you can only download the digital asset once" msgstr "デジタルアセットのダウンロードは1回限りです。" -#: engine/core/views.py:362 +#: engine/core/views.py:381 msgid "the order must be paid before downloading the digital asset" msgstr "デジタル資産をダウンロードする前に、注文を支払う必要があります。" -#: engine/core/views.py:369 +#: engine/core/views.py:388 msgid "the order product does not have a product" msgstr "注文商品に商品がない" -#: engine/core/views.py:412 +#: engine/core/views.py:431 msgid "favicon not found" msgstr "ファビコンが見つかりません" -#: engine/core/views.py:418 +#: engine/core/views.py:437 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3058,7 +3425,7 @@ msgstr "" "ウェブサイトのファビコンへのリクエストを処理します。\n" "この関数は、プロジェクトの静的ディレクトリにあるファビコンファイルの提供を試みます。ファビコンファイルが見つからない場合、リソースが利用できないことを示す HTTP 404 エラーが発生します。" -#: engine/core/views.py:432 +#: engine/core/views.py:451 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3067,16 +3434,20 @@ msgstr "" "リクエストを admin インデックスページにリダイレクトします。この関数は、HTTP リクエストを処理し、 Django の admin " "インタフェースインデッ クスページにリダイレクトします。HTTP リダイレクトの処理には Django の `redirect` 関数を使います。" -#: engine/core/views.py:445 +#: engine/core/views.py:464 msgid "Returns current version of the Schon. " msgstr "Schon の現在のバージョンを返します。" -#: engine/core/views.py:674 engine/core/views.py:689 +#: engine/core/views.py:475 +msgid "no image file provided" +msgstr "画像ファイルが提供されていません" + +#: engine/core/views.py:710 engine/core/views.py:725 #, python-format msgid "Revenue & Orders (last %(days)d)" msgstr "収益と受注 (最終 %(days)d)" -#: engine/core/views.py:870 +#: engine/core/views.py:911 msgid "Returns custom variables for Dashboard. " msgstr "ダッシュボードのカスタム変数を返します。" @@ -3151,7 +3522,7 @@ msgstr "" "オブジェクトのクエリ、フィルタリング、シリアライズの機能を提供します。Django の ViewSet フレームワークを使い、 Brand " "オブジェクトの API エンドポイントの実装を簡素化します。" -#: engine/core/viewsets.py:458 +#: engine/core/viewsets.py:460 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3166,7 +3537,15 @@ msgstr "" " `SchonViewSet` を継承し、 RESTful API 操作のために Django REST " "フレームワークと統合しています。商品の詳細を取得したり、パーミッションを適用したり、商品の関連するフィードバックにアクセスするためのメソッドを含みます。" -#: engine/core/viewsets.py:605 +#: engine/core/viewsets.py:541 +msgid "identificator_type and identificators are required" +msgstr "identificator_type と identificators は必須です" + +#: engine/core/viewsets.py:554 +msgid "identificator_type must be one of: uuid, slug, sku" +msgstr "identificator_type は次のいずれかでなければなりません: uuid, slug, sku" + +#: engine/core/viewsets.py:635 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3179,7 +3558,7 @@ msgstr "" "フィルタ設定、シリアライザクラスを定義します。このクラスの目的は、 Django REST フレームワークを通して Vendor " "関連リソースへの合理的なアクセスを提供することです。" -#: engine/core/viewsets.py:625 +#: engine/core/viewsets.py:655 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3193,7 +3572,7 @@ msgstr "" "オブジェクトのパーミッションベースの処理を実装することです。ベースとなる `SchonViewSet` を拡張し、Django " "のフィルタリングシステムを利用してデータを取得します。" -#: engine/core/viewsets.py:652 +#: engine/core/viewsets.py:682 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3206,7 +3585,7 @@ msgstr "" "注文と関連する操作を管理するための " "ViewSet。このクラスは、注文オブジェクトを取得、変更、管理する機能を提供します。商品の追加や削除、登録ユーザや未登録ユーザの購入の実行、現在の認証ユーザの保留中の注文の取得など、注文操作を処理するためのさまざまなエンドポイントを含みます。ViewSetは、実行される特定のアクションに基づいて複数のシリアライザを使用し、注文データを操作している間、それに応じてパーミッションを強制します。" -#: engine/core/viewsets.py:914 +#: engine/core/viewsets.py:944 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3218,25 +3597,25 @@ msgstr "" "操作とカスタムアクションを可能にします。これは、要求されたアクションに基づくフィルタリング、パーミッションチェック、シリアライザーの切り替えを含みます。さらに、OrderProduct" " インスタンスに関するフィードバックを処理するための詳細なアクションを提供します。" -#: engine/core/viewsets.py:974 +#: engine/core/viewsets.py:1004 msgid "Manages operations related to Product images in the application. " msgstr "アプリケーション内の商品画像に関する操作を管理します。" -#: engine/core/viewsets.py:988 +#: engine/core/viewsets.py:1018 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "様々なAPIアクションによるプロモコードインスタンスの取得と処理を管理します。" -#: engine/core/viewsets.py:1019 +#: engine/core/viewsets.py:1049 msgid "Represents a view set for managing promotions. " msgstr "プロモーションを管理するためのビューセットを表します。" -#: engine/core/viewsets.py:1032 +#: engine/core/viewsets.py:1062 msgid "Handles operations related to Stock data in the system." msgstr "システム内のストックデータに関する操作を行う。" -#: engine/core/viewsets.py:1046 +#: engine/core/viewsets.py:1076 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3248,7 +3627,7 @@ msgid "" msgstr "" "ウィッシュリスト操作を管理するためのViewSet。WishlistViewSetは、ユーザーのウィッシュリストと対話するためのエンドポイントを提供し、ウィッシュリスト内の商品の検索、変更、カスタマイズを可能にします。このViewSetは、ウィッシュリスト商品の追加、削除、一括アクションなどの機能を容易にします。明示的なパーミッションが付与されていない限り、ユーザーが自分のウィッシュリストのみを管理できるよう、パーミッションチェックが統合されています。" -#: engine/core/viewsets.py:1183 +#: engine/core/viewsets.py:1213 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3260,12 +3639,12 @@ msgstr "" "クラスは、住所エンティティに関連する CRUD 操作、フィルタリング、カスタムアクションを可能にします。異なる HTTP " "メソッドに特化した振る舞いや、シリアライザのオーバーライド、 リクエストコンテキストに基づいたパーミッション処理などを含みます。" -#: engine/core/viewsets.py:1254 +#: engine/core/viewsets.py:1275 #, python-brace-format msgid "Geocoding error: {e}" msgstr "ジオコーディングエラー:{e}" -#: engine/core/viewsets.py:1262 +#: engine/core/viewsets.py:1283 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/kk_KZ/LC_MESSAGES/django.po b/engine/core/locale/kk_KZ/LC_MESSAGES/django.po index 3fb1df4a..f60eeda2 100644 --- a/engine/core/locale/kk_KZ/LC_MESSAGES/django.po +++ b/engine/core/locale/kk_KZ/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:13+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -45,113 +45,133 @@ msgstr "" msgid "when the object was last modified" msgstr "" -#: engine/core/admin.py:94 +#: engine/core/admin.py:98 msgid "translations" msgstr "" -#: engine/core/admin.py:102 +#: engine/core/admin.py:106 msgid "general" msgstr "" -#: engine/core/admin.py:106 +#: engine/core/admin.py:110 msgid "relations" msgstr "" -#: engine/core/admin.py:111 +#: engine/core/admin.py:115 msgid "additional info" msgstr "" -#: engine/core/admin.py:133 +#: engine/core/admin.py:137 msgid "metadata" msgstr "" -#: engine/core/admin.py:141 +#: engine/core/admin.py:145 msgid "timestamps" msgstr "" -#: engine/core/admin.py:158 +#: engine/core/admin.py:162 #, python-format msgid "Activate selected %(verbose_name_plural)s" msgstr "" -#: engine/core/admin.py:166 +#: engine/core/admin.py:170 msgid "selected items have been activated." msgstr "" -#: engine/core/admin.py:174 +#: engine/core/admin.py:178 #, python-format msgid "Deactivate selected %(verbose_name_plural)s" msgstr "" -#: engine/core/admin.py:184 +#: engine/core/admin.py:188 msgid "selected items have been deactivated." msgstr "" -#: engine/core/admin.py:196 engine/core/graphene/object_types.py:653 -#: engine/core/graphene/object_types.py:660 engine/core/models.py:832 -#: engine/core/models.py:840 +#: engine/core/admin.py:200 engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:673 engine/core/models.py:918 +#: engine/core/models.py:928 msgid "attribute value" msgstr "" -#: engine/core/admin.py:197 engine/core/graphene/object_types.py:77 -#: engine/core/models.py:841 +#: engine/core/admin.py:201 engine/core/graphene/object_types.py:81 +#: engine/core/models.py:929 msgid "attribute values" msgstr "" -#: engine/core/admin.py:208 +#: engine/core/admin.py:212 engine/core/models.py:2232 msgid "image" msgstr "" -#: engine/core/admin.py:209 engine/core/graphene/object_types.py:530 +#: engine/core/admin.py:213 engine/core/graphene/object_types.py:535 msgid "images" msgstr "" -#: engine/core/admin.py:220 engine/core/models.py:576 +#: engine/core/admin.py:224 engine/core/models.py:635 msgid "stock" msgstr "" -#: engine/core/admin.py:221 engine/core/graphene/object_types.py:713 +#: engine/core/admin.py:225 engine/core/graphene/object_types.py:735 msgid "stocks" msgstr "" -#: engine/core/admin.py:232 engine/core/models.py:1938 +#: engine/core/admin.py:236 engine/core/models.py:2046 msgid "order product" msgstr "" -#: engine/core/admin.py:233 engine/core/graphene/object_types.py:441 -#: engine/core/models.py:1939 +#: engine/core/admin.py:237 engine/core/graphene/object_types.py:446 +#: engine/core/models.py:2047 msgid "order products" msgstr "" -#: engine/core/admin.py:251 engine/core/admin.py:252 +#: engine/core/admin.py:255 engine/core/admin.py:256 msgid "children" msgstr "" -#: engine/core/admin.py:528 +#: engine/core/admin.py:545 +msgid "video preview" +msgstr "" + +#: engine/core/admin.py:551 msgid "has images" msgstr "" -#: engine/core/admin.py:531 +#: engine/core/admin.py:554 #, python-format msgid "Export selected %(verbose_name_plural)s to marketplaces' feeds" msgstr "" -#: engine/core/admin.py:542 +#: engine/core/admin.py:565 #, python-format msgid "selected %(verbose_name_plural)s have been marked for export." msgstr "" -#: engine/core/admin.py:553 +#: engine/core/admin.py:576 #, python-format msgid "Ban selected %(verbose_name_plural)s from marketplaces' feeds" msgstr "" -#: engine/core/admin.py:564 +#: engine/core/admin.py:587 #, python-format msgid "selected %(verbose_name_plural)s have been banned from export." msgstr "" -#: engine/core/admin.py:1116 +#: engine/core/admin.py:1030 +msgid "Preview" +msgstr "" + +#: engine/core/admin.py:1031 +msgid "Metadata" +msgstr "" + +#: engine/core/admin.py:1034 +msgid "preview" +msgstr "" + +#: engine/core/admin.py:1043 +msgid "image preview" +msgstr "" + +#: engine/core/admin.py:1166 msgid "Config" msgstr "" @@ -214,7 +234,7 @@ msgid "" "parameter both." msgstr "" -#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:36 +#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "" @@ -236,7 +256,7 @@ msgstr "" msgid "send a message to the support team" msgstr "" -#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:59 msgid "request a CORSed URL" msgstr "" @@ -362,11 +382,11 @@ msgstr "" msgid "rewrite some fields of an existing category saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757 -#: engine/core/docs/drf/viewsets.py:1046 -#: engine/core/graphene/object_types.py:119 -#: engine/core/graphene/object_types.py:239 -#: engine/core/graphene/object_types.py:540 +#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:781 +#: engine/core/docs/drf/viewsets.py:1070 +#: engine/core/graphene/object_types.py:123 +#: engine/core/graphene/object_types.py:247 +#: engine/core/graphene/object_types.py:546 msgid "SEO Meta snapshot" msgstr "" @@ -629,7 +649,7 @@ msgstr "" #: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683 #: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725 -#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763 +#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:787 msgid "Product UUID or slug" msgstr "" @@ -654,267 +674,277 @@ msgstr "" msgid "lists all permitted feedbacks for a product" msgstr "" -#: engine/core/docs/drf/viewsets.py:758 +#: engine/core/docs/drf/viewsets.py:757 +msgid "retrieve exact products by identifier" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:759 +msgid "" +"retrieve a list of products by identifier type (uuid, slug, or sku). Send a " +"POST request with `identificator_type` and `identificators` (list of values)." +msgstr "" + +#: engine/core/docs/drf/viewsets.py:782 msgid "returns a snapshot of the product's SEO meta data" msgstr "" -#: engine/core/docs/drf/viewsets.py:779 +#: engine/core/docs/drf/viewsets.py:803 msgid "list all addresses" msgstr "" -#: engine/core/docs/drf/viewsets.py:789 +#: engine/core/docs/drf/viewsets.py:813 msgid "retrieve a single address" msgstr "" -#: engine/core/docs/drf/viewsets.py:799 +#: engine/core/docs/drf/viewsets.py:823 msgid "create a new address" msgstr "" -#: engine/core/docs/drf/viewsets.py:810 +#: engine/core/docs/drf/viewsets.py:834 msgid "delete an address" msgstr "" -#: engine/core/docs/drf/viewsets.py:820 +#: engine/core/docs/drf/viewsets.py:844 msgid "update an entire address" msgstr "" -#: engine/core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:855 msgid "partially update an address" msgstr "" -#: engine/core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:866 msgid "autocomplete address suggestions" msgstr "" -#: engine/core/docs/drf/viewsets.py:848 +#: engine/core/docs/drf/viewsets.py:872 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" -#: engine/core/docs/drf/viewsets.py:855 +#: engine/core/docs/drf/viewsets.py:879 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "" -#: engine/core/docs/drf/viewsets.py:871 +#: engine/core/docs/drf/viewsets.py:895 msgid "list all feedbacks (simple view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:881 +#: engine/core/docs/drf/viewsets.py:905 msgid "retrieve a single feedback (detailed view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:888 +#: engine/core/docs/drf/viewsets.py:912 msgid "create a feedback" msgstr "" -#: engine/core/docs/drf/viewsets.py:895 +#: engine/core/docs/drf/viewsets.py:919 msgid "delete a feedback" msgstr "" -#: engine/core/docs/drf/viewsets.py:902 +#: engine/core/docs/drf/viewsets.py:926 msgid "rewrite an existing feedback saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:909 +#: engine/core/docs/drf/viewsets.py:933 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:919 +#: engine/core/docs/drf/viewsets.py:943 msgid "list all order–product relations (simple view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:929 +#: engine/core/docs/drf/viewsets.py:953 msgid "retrieve a single order–product relation (detailed view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:939 +#: engine/core/docs/drf/viewsets.py:963 msgid "create a new order–product relation" msgstr "" -#: engine/core/docs/drf/viewsets.py:949 +#: engine/core/docs/drf/viewsets.py:973 msgid "replace an existing order–product relation" msgstr "" -#: engine/core/docs/drf/viewsets.py:959 +#: engine/core/docs/drf/viewsets.py:983 msgid "partially update an existing order–product relation" msgstr "" -#: engine/core/docs/drf/viewsets.py:969 +#: engine/core/docs/drf/viewsets.py:993 msgid "delete an order–product relation" msgstr "" -#: engine/core/docs/drf/viewsets.py:979 +#: engine/core/docs/drf/viewsets.py:1003 msgid "add or remove feedback on an order–product relation" msgstr "" -#: engine/core/docs/drf/viewsets.py:996 +#: engine/core/docs/drf/viewsets.py:1020 msgid "list all brands (simple view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1003 +#: engine/core/docs/drf/viewsets.py:1027 msgid "retrieve a single brand (detailed view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051 +#: engine/core/docs/drf/viewsets.py:1032 engine/core/docs/drf/viewsets.py:1075 msgid "Brand UUID or slug" msgstr "" -#: engine/core/docs/drf/viewsets.py:1018 +#: engine/core/docs/drf/viewsets.py:1042 msgid "create a brand" msgstr "" -#: engine/core/docs/drf/viewsets.py:1025 +#: engine/core/docs/drf/viewsets.py:1049 msgid "delete a brand" msgstr "" -#: engine/core/docs/drf/viewsets.py:1032 +#: engine/core/docs/drf/viewsets.py:1056 msgid "rewrite an existing brand saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1039 +#: engine/core/docs/drf/viewsets.py:1063 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1064 +#: engine/core/docs/drf/viewsets.py:1088 msgid "list all vendors (simple view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1074 +#: engine/core/docs/drf/viewsets.py:1098 msgid "retrieve a single vendor (detailed view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1081 +#: engine/core/docs/drf/viewsets.py:1105 msgid "create a vendor" msgstr "" -#: engine/core/docs/drf/viewsets.py:1088 +#: engine/core/docs/drf/viewsets.py:1112 msgid "delete a vendor" msgstr "" -#: engine/core/docs/drf/viewsets.py:1095 +#: engine/core/docs/drf/viewsets.py:1119 msgid "rewrite an existing vendor saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1102 +#: engine/core/docs/drf/viewsets.py:1126 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1112 +#: engine/core/docs/drf/viewsets.py:1136 msgid "list all product images (simple view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1122 +#: engine/core/docs/drf/viewsets.py:1146 msgid "retrieve a single product image (detailed view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1129 +#: engine/core/docs/drf/viewsets.py:1153 msgid "create a product image" msgstr "" -#: engine/core/docs/drf/viewsets.py:1139 +#: engine/core/docs/drf/viewsets.py:1163 msgid "delete a product image" msgstr "" -#: engine/core/docs/drf/viewsets.py:1146 +#: engine/core/docs/drf/viewsets.py:1170 msgid "rewrite an existing product image saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1154 +#: engine/core/docs/drf/viewsets.py:1178 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1165 +#: engine/core/docs/drf/viewsets.py:1189 msgid "list all promo codes (simple view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1175 +#: engine/core/docs/drf/viewsets.py:1199 msgid "retrieve a single promo code (detailed view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1182 +#: engine/core/docs/drf/viewsets.py:1206 msgid "create a promo code" msgstr "" -#: engine/core/docs/drf/viewsets.py:1189 +#: engine/core/docs/drf/viewsets.py:1213 msgid "delete a promo code" msgstr "" -#: engine/core/docs/drf/viewsets.py:1196 +#: engine/core/docs/drf/viewsets.py:1220 msgid "rewrite an existing promo code saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1203 +#: engine/core/docs/drf/viewsets.py:1227 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1213 +#: engine/core/docs/drf/viewsets.py:1237 msgid "list all promotions (simple view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1223 +#: engine/core/docs/drf/viewsets.py:1247 msgid "retrieve a single promotion (detailed view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1230 +#: engine/core/docs/drf/viewsets.py:1254 msgid "create a promotion" msgstr "" -#: engine/core/docs/drf/viewsets.py:1237 +#: engine/core/docs/drf/viewsets.py:1261 msgid "delete a promotion" msgstr "" -#: engine/core/docs/drf/viewsets.py:1244 +#: engine/core/docs/drf/viewsets.py:1268 msgid "rewrite an existing promotion saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1251 +#: engine/core/docs/drf/viewsets.py:1275 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1261 +#: engine/core/docs/drf/viewsets.py:1285 msgid "list all stocks (simple view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1268 +#: engine/core/docs/drf/viewsets.py:1292 msgid "retrieve a single stock (detailed view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1275 +#: engine/core/docs/drf/viewsets.py:1299 msgid "create a stock record" msgstr "" -#: engine/core/docs/drf/viewsets.py:1282 +#: engine/core/docs/drf/viewsets.py:1306 msgid "delete a stock record" msgstr "" -#: engine/core/docs/drf/viewsets.py:1289 +#: engine/core/docs/drf/viewsets.py:1313 msgid "rewrite an existing stock record saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1297 +#: engine/core/docs/drf/viewsets.py:1321 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1308 +#: engine/core/docs/drf/viewsets.py:1332 msgid "list all product tags (simple view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1318 +#: engine/core/docs/drf/viewsets.py:1342 msgid "retrieve a single product tag (detailed view)" msgstr "" -#: engine/core/docs/drf/viewsets.py:1325 +#: engine/core/docs/drf/viewsets.py:1349 msgid "create a product tag" msgstr "" -#: engine/core/docs/drf/viewsets.py:1335 +#: engine/core/docs/drf/viewsets.py:1359 msgid "delete a product tag" msgstr "" -#: engine/core/docs/drf/viewsets.py:1342 +#: engine/core/docs/drf/viewsets.py:1366 msgid "rewrite an existing product tag saving non-editables" msgstr "" -#: engine/core/docs/drf/viewsets.py:1350 +#: engine/core/docs/drf/viewsets.py:1374 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "" @@ -923,419 +953,425 @@ msgstr "" msgid "no search term provided." msgstr "" -#: engine/core/filters.py:78 engine/core/filters.py:484 -#: engine/core/filters.py:625 +#: engine/core/filters.py:79 engine/core/filters.py:485 +#: engine/core/filters.py:626 msgid "Search" msgstr "" -#: engine/core/filters.py:79 engine/core/filters.py:663 -#: engine/core/filters.py:692 +#: engine/core/filters.py:80 engine/core/filters.py:664 +#: engine/core/filters.py:693 msgid "UUID" msgstr "" -#: engine/core/filters.py:80 engine/core/filters.py:487 -#: engine/core/filters.py:627 +#: engine/core/filters.py:81 engine/core/filters.py:488 +#: engine/core/filters.py:628 msgid "Name" msgstr "" -#: engine/core/filters.py:82 engine/core/filters.py:630 +#: engine/core/filters.py:83 engine/core/filters.py:631 msgid "Categories" msgstr "" -#: engine/core/filters.py:86 +#: engine/core/filters.py:87 msgid "Categories Slugs" msgstr "" -#: engine/core/filters.py:88 engine/core/filters.py:495 +#: engine/core/filters.py:89 engine/core/filters.py:496 +#: engine/core/templates/admin_doc/index.html:37 +#: engine/core/templates/admin_doc/template_tag_index.html:12 msgid "Tags" msgstr "" -#: engine/core/filters.py:90 +#: engine/core/filters.py:91 msgid "Min Price" msgstr "" -#: engine/core/filters.py:93 +#: engine/core/filters.py:94 msgid "Max Price" msgstr "" -#: engine/core/filters.py:95 +#: engine/core/filters.py:96 msgid "Is Active" msgstr "" -#: engine/core/filters.py:96 +#: engine/core/filters.py:97 msgid "Brand" msgstr "" -#: engine/core/filters.py:97 +#: engine/core/filters.py:98 msgid "Attributes" msgstr "" -#: engine/core/filters.py:99 +#: engine/core/filters.py:100 msgid "Quantity" msgstr "" -#: engine/core/filters.py:101 engine/core/filters.py:489 -#: engine/core/filters.py:628 engine/core/models.py:316 -#: engine/core/models.py:497 engine/core/models.py:663 +#: engine/core/filters.py:102 engine/core/filters.py:490 +#: engine/core/filters.py:629 engine/core/models.py:339 +#: engine/core/models.py:546 engine/core/models.py:736 msgid "Slug" msgstr "" -#: engine/core/filters.py:102 +#: engine/core/filters.py:103 msgid "Is Digital" msgstr "" -#: engine/core/filters.py:104 +#: engine/core/filters.py:105 msgid "Include sub-categories" msgstr "" -#: engine/core/filters.py:108 +#: engine/core/filters.py:109 msgid "Include personal ordered" msgstr "" -#: engine/core/filters.py:110 engine/core/models.py:667 +#: engine/core/filters.py:111 engine/core/models.py:740 msgid "SKU" msgstr "" -#: engine/core/filters.py:212 +#: engine/core/filters.py:213 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" -#: engine/core/filters.py:398 +#: engine/core/filters.py:399 msgid "Search (ID, product name or part number)" msgstr "" -#: engine/core/filters.py:402 +#: engine/core/filters.py:403 msgid "Bought after (inclusive)" msgstr "" -#: engine/core/filters.py:405 +#: engine/core/filters.py:406 msgid "Bought before (inclusive)" msgstr "" -#: engine/core/filters.py:410 engine/core/filters.py:461 -#: engine/core/filters.py:697 +#: engine/core/filters.py:411 engine/core/filters.py:462 +#: engine/core/filters.py:698 msgid "User email" msgstr "" -#: engine/core/filters.py:413 engine/core/filters.py:464 -#: engine/core/filters.py:672 engine/core/filters.py:694 +#: engine/core/filters.py:414 engine/core/filters.py:465 +#: engine/core/filters.py:673 engine/core/filters.py:695 msgid "User UUID" msgstr "" -#: engine/core/filters.py:415 +#: engine/core/filters.py:416 msgid "Status" msgstr "" -#: engine/core/filters.py:419 +#: engine/core/filters.py:420 msgid "Human Readable ID" msgstr "" -#: engine/core/filters.py:488 +#: engine/core/filters.py:489 msgid "Parent" msgstr "" -#: engine/core/filters.py:492 +#: engine/core/filters.py:493 msgid "Whole category(has at least 1 product or not)" msgstr "" -#: engine/core/filters.py:496 +#: engine/core/filters.py:497 msgid "Level" msgstr "" -#: engine/core/filters.py:667 +#: engine/core/filters.py:668 msgid "Product UUID" msgstr "" -#: engine/core/graphene/mutations.py:40 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:43 msgid "data to store in cache" msgstr "" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:46 msgid "timeout in seconds to set the data for into the cache" msgstr "" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:49 msgid "cached data" msgstr "" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:64 msgid "camelized JSON data from the requested URL" msgstr "" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:248 +#: engine/core/graphene/mutations.py:69 engine/core/views.py:267 msgid "only URLs starting with http(s):// are allowed" msgstr "" -#: engine/core/graphene/mutations.py:86 +#: engine/core/graphene/mutations.py:87 msgid "add a product to the order" msgstr "" -#: engine/core/graphene/mutations.py:109 engine/core/graphene/mutations.py:138 -#: engine/core/graphene/mutations.py:254 engine/core/graphene/mutations.py:306 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139 +#: engine/core/graphene/mutations.py:256 engine/core/graphene/mutations.py:308 #, python-brace-format msgid "order {order_uuid} not found" msgstr "" -#: engine/core/graphene/mutations.py:115 engine/core/graphene/mutations.py:166 +#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167 msgid "remove a product from the order" msgstr "" -#: engine/core/graphene/mutations.py:144 +#: engine/core/graphene/mutations.py:145 msgid "remove all products from the order" msgstr "" -#: engine/core/graphene/mutations.py:189 +#: engine/core/graphene/mutations.py:190 msgid "buy an order" msgstr "" -#: engine/core/graphene/mutations.py:220 engine/core/graphene/mutations.py:282 +#: engine/core/graphene/mutations.py:222 engine/core/graphene/mutations.py:284 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" -#: engine/core/graphene/mutations.py:249 engine/core/graphene/mutations.py:524 -#: engine/core/graphene/mutations.py:573 engine/core/viewsets.py:753 +#: engine/core/graphene/mutations.py:251 engine/core/graphene/mutations.py:526 +#: engine/core/graphene/mutations.py:576 engine/core/viewsets.py:783 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" -#: engine/core/graphene/mutations.py:260 +#: engine/core/graphene/mutations.py:262 msgid "perform an action on a list of products in the order" msgstr "" -#: engine/core/graphene/mutations.py:265 +#: engine/core/graphene/mutations.py:267 msgid "remove/add" msgstr "" -#: engine/core/graphene/mutations.py:301 engine/core/graphene/mutations.py:342 +#: engine/core/graphene/mutations.py:303 engine/core/graphene/mutations.py:342 msgid "action must be either add or remove" msgstr "" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:314 msgid "perform an action on a list of products in the wishlist" msgstr "" -#: engine/core/graphene/mutations.py:330 -msgid "please provide wishlist_uuid value" -msgstr "" - -#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:423 -#: engine/core/graphene/mutations.py:451 engine/core/graphene/mutations.py:479 -#: engine/core/graphene/mutations.py:529 +#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:424 +#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480 +#: engine/core/graphene/mutations.py:531 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "" -#: engine/core/graphene/mutations.py:401 +#: engine/core/graphene/mutations.py:402 msgid "add a product to the wishlist" msgstr "" -#: engine/core/graphene/mutations.py:429 +#: engine/core/graphene/mutations.py:430 msgid "remove a product from the wishlist" msgstr "" -#: engine/core/graphene/mutations.py:457 +#: engine/core/graphene/mutations.py:458 msgid "remove all products from the wishlist" msgstr "" -#: engine/core/graphene/mutations.py:485 +#: engine/core/graphene/mutations.py:486 msgid "buy all products from the wishlist" msgstr "" -#: engine/core/graphene/mutations.py:535 +#: engine/core/graphene/mutations.py:537 msgid "buy a product" msgstr "" -#: engine/core/graphene/mutations.py:542 +#: engine/core/graphene/mutations.py:544 msgid "" "please send the attributes as the string formatted like attr1=value1," "attr2=value2" msgstr "" -#: engine/core/graphene/mutations.py:580 +#: engine/core/graphene/mutations.py:583 msgid "add or delete a feedback for orderproduct" msgstr "" -#: engine/core/graphene/mutations.py:606 +#: engine/core/graphene/mutations.py:610 msgid "action must be either `add` or `remove`" msgstr "" -#: engine/core/graphene/mutations.py:609 +#: engine/core/graphene/mutations.py:613 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "" -#: engine/core/graphene/mutations.py:616 +#: engine/core/graphene/mutations.py:620 msgid "original address string provided by the user" msgstr "" -#: engine/core/graphene/mutations.py:653 engine/core/models.py:986 -#: engine/core/models.py:999 engine/core/models.py:1443 -#: engine/core/models.py:1474 engine/core/models.py:1505 -#: engine/core/viewsets.py:760 +#: engine/core/graphene/mutations.py:662 engine/core/models.py:1079 +#: engine/core/models.py:1092 engine/core/models.py:1544 +#: engine/core/models.py:1575 engine/core/models.py:1606 +#: engine/core/viewsets.py:790 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "" -#: engine/core/graphene/mutations.py:667 +#: engine/core/graphene/mutations.py:676 msgid "limit must be between 1 and 10" msgstr "" -#: engine/core/graphene/mutations.py:716 +#: engine/core/graphene/mutations.py:726 msgid "elasticsearch - works like a charm" msgstr "" -#: engine/core/graphene/object_types.py:84 -#: engine/core/graphene/object_types.py:420 -#: engine/core/graphene/object_types.py:471 engine/core/models.py:803 -#: engine/core/models.py:1297 engine/core/models.py:2033 +#: engine/core/graphene/object_types.py:88 +#: engine/core/graphene/object_types.py:425 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:889 +#: engine/core/models.py:1394 engine/core/models.py:2139 msgid "attributes" msgstr "" -#: engine/core/graphene/object_types.py:97 +#: engine/core/graphene/object_types.py:101 msgid "grouped attributes" msgstr "" -#: engine/core/graphene/object_types.py:104 +#: engine/core/graphene/object_types.py:108 msgid "groups of attributes" msgstr "" -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:217 -#: engine/core/graphene/object_types.py:255 engine/core/models.py:440 +#: engine/core/graphene/object_types.py:122 +#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:264 engine/core/models.py:489 msgid "categories" msgstr "" -#: engine/core/graphene/object_types.py:134 engine/core/models.py:511 +#: engine/core/graphene/object_types.py:138 engine/core/models.py:564 msgid "brands" msgstr "" -#: engine/core/graphene/object_types.py:219 +#: engine/core/graphene/object_types.py:226 msgid "category image url" msgstr "" -#: engine/core/graphene/object_types.py:220 -#: engine/core/graphene/object_types.py:365 engine/core/models.py:278 +#: engine/core/graphene/object_types.py:227 +#: engine/core/graphene/object_types.py:369 engine/core/models.py:301 msgid "markup percentage" msgstr "" -#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:231 msgid "which attributes and values can be used for filtering this category." msgstr "" -#: engine/core/graphene/object_types.py:230 +#: engine/core/graphene/object_types.py:237 msgid "minimum and maximum prices for products in this category, if available." msgstr "" -#: engine/core/graphene/object_types.py:234 +#: engine/core/graphene/object_types.py:240 +msgid "brands in this category" +msgstr "" + +#: engine/core/graphene/object_types.py:242 msgid "tags for this category" msgstr "" -#: engine/core/graphene/object_types.py:237 +#: engine/core/graphene/object_types.py:245 msgid "products in this category" msgstr "" -#: engine/core/graphene/object_types.py:372 engine/core/models.py:183 +#: engine/core/graphene/object_types.py:376 engine/core/models.py:202 msgid "vendors" msgstr "" -#: engine/core/graphene/object_types.py:376 +#: engine/core/graphene/object_types.py:380 msgid "Latitude (Y coordinate)" msgstr "" -#: engine/core/graphene/object_types.py:377 +#: engine/core/graphene/object_types.py:381 msgid "Longitude (X coordinate)" msgstr "" -#: engine/core/graphene/object_types.py:406 +#: engine/core/graphene/object_types.py:411 msgid "comment" msgstr "" -#: engine/core/graphene/object_types.py:408 -#: engine/core/graphene/object_types.py:542 +#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:548 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "" -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:421 msgid "represents feedback from a user." msgstr "" -#: engine/core/graphene/object_types.py:421 -#: engine/core/graphene/object_types.py:472 engine/core/models.py:1291 +#: engine/core/graphene/object_types.py:426 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:1388 msgid "notifications" msgstr "" -#: engine/core/graphene/object_types.py:423 +#: engine/core/graphene/object_types.py:428 msgid "download url for this order product if applicable" msgstr "" -#: engine/core/graphene/object_types.py:425 engine/core/models.py:1856 +#: engine/core/graphene/object_types.py:430 engine/core/models.py:1959 msgid "feedback" msgstr "" -#: engine/core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:464 msgid "a list of order products in this order" msgstr "" -#: engine/core/graphene/object_types.py:461 engine/core/models.py:1261 +#: engine/core/graphene/object_types.py:466 engine/core/models.py:1358 msgid "billing address" msgstr "" -#: engine/core/graphene/object_types.py:465 +#: engine/core/graphene/object_types.py:470 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" msgstr "" -#: engine/core/graphene/object_types.py:468 +#: engine/core/graphene/object_types.py:473 msgid "total price of this order" msgstr "" -#: engine/core/graphene/object_types.py:469 +#: engine/core/graphene/object_types.py:474 msgid "total quantity of products in order" msgstr "" -#: engine/core/graphene/object_types.py:470 +#: engine/core/graphene/object_types.py:475 msgid "are all products in the order digital" msgstr "" -#: engine/core/graphene/object_types.py:474 +#: engine/core/graphene/object_types.py:479 msgid "transactions for this order" msgstr "" -#: engine/core/graphene/object_types.py:494 engine/core/models.py:1325 +#: engine/core/graphene/object_types.py:499 engine/core/models.py:1422 msgid "orders" msgstr "" -#: engine/core/graphene/object_types.py:515 +#: engine/core/graphene/object_types.py:520 msgid "image url" msgstr "" -#: engine/core/graphene/object_types.py:522 +#: engine/core/graphene/object_types.py:527 msgid "product's images" msgstr "" -#: engine/core/graphene/object_types.py:529 engine/core/models.py:439 -#: engine/core/models.py:596 +#: engine/core/graphene/object_types.py:534 engine/core/models.py:488 +#: engine/core/models.py:661 msgid "category" msgstr "" -#: engine/core/graphene/object_types.py:531 engine/core/models.py:1857 +#: engine/core/graphene/object_types.py:536 engine/core/models.py:1960 msgid "feedbacks" msgstr "" -#: engine/core/graphene/object_types.py:532 engine/core/models.py:510 -#: engine/core/models.py:605 +#: engine/core/graphene/object_types.py:537 engine/core/models.py:563 +#: engine/core/models.py:670 msgid "brand" msgstr "" -#: engine/core/graphene/object_types.py:534 engine/core/models.py:103 +#: engine/core/graphene/object_types.py:538 +msgid "video url" +msgstr "" + +#: engine/core/graphene/object_types.py:540 engine/core/models.py:122 msgid "attribute groups" msgstr "" -#: engine/core/graphene/object_types.py:536 +#: engine/core/graphene/object_types.py:542 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1343,7 +1379,7 @@ msgstr "" msgid "price" msgstr "" -#: engine/core/graphene/object_types.py:537 +#: engine/core/graphene/object_types.py:543 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1351,39 +1387,39 @@ msgstr "" msgid "quantity" msgstr "" -#: engine/core/graphene/object_types.py:538 +#: engine/core/graphene/object_types.py:544 msgid "number of feedbacks" msgstr "" -#: engine/core/graphene/object_types.py:539 +#: engine/core/graphene/object_types.py:545 msgid "only available for personal orders" msgstr "" -#: engine/core/graphene/object_types.py:544 +#: engine/core/graphene/object_types.py:550 msgid "discount price" msgstr "" -#: engine/core/graphene/object_types.py:568 engine/core/models.py:682 +#: engine/core/graphene/object_types.py:575 engine/core/models.py:755 msgid "products" msgstr "" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:691 msgid "promocodes" msgstr "" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:706 msgid "products on sale" msgstr "" -#: engine/core/graphene/object_types.py:701 engine/core/models.py:935 +#: engine/core/graphene/object_types.py:720 engine/core/models.py:1028 msgid "promotions" msgstr "" -#: engine/core/graphene/object_types.py:705 engine/core/models.py:182 +#: engine/core/graphene/object_types.py:727 engine/core/models.py:201 msgid "vendor" msgstr "" -#: engine/core/graphene/object_types.py:706 engine/core/models.py:681 +#: engine/core/graphene/object_types.py:728 engine/core/models.py:754 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1391,102 +1427,102 @@ msgstr "" msgid "product" msgstr "" -#: engine/core/graphene/object_types.py:718 engine/core/models.py:958 +#: engine/core/graphene/object_types.py:740 engine/core/models.py:1051 msgid "wishlisted products" msgstr "" -#: engine/core/graphene/object_types.py:725 engine/core/models.py:975 +#: engine/core/graphene/object_types.py:747 engine/core/models.py:1068 msgid "wishlists" msgstr "" -#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:752 msgid "tagged products" msgstr "" -#: engine/core/graphene/object_types.py:738 engine/core/models.py:219 -#: engine/core/models.py:611 +#: engine/core/graphene/object_types.py:760 engine/core/models.py:238 +#: engine/core/models.py:676 msgid "product tags" msgstr "" -#: engine/core/graphene/object_types.py:743 +#: engine/core/graphene/object_types.py:765 msgid "tagged categories" msgstr "" -#: engine/core/graphene/object_types.py:751 +#: engine/core/graphene/object_types.py:773 msgid "categories tags" msgstr "" -#: engine/core/graphene/object_types.py:755 +#: engine/core/graphene/object_types.py:777 msgid "project name" msgstr "" -#: engine/core/graphene/object_types.py:756 +#: engine/core/graphene/object_types.py:778 msgid "company name" msgstr "" -#: engine/core/graphene/object_types.py:757 +#: engine/core/graphene/object_types.py:779 msgid "company address" msgstr "" -#: engine/core/graphene/object_types.py:758 +#: engine/core/graphene/object_types.py:780 msgid "company phone number" msgstr "" -#: engine/core/graphene/object_types.py:761 +#: engine/core/graphene/object_types.py:783 msgid "email from, sometimes it must be used instead of host user value" msgstr "" -#: engine/core/graphene/object_types.py:764 +#: engine/core/graphene/object_types.py:786 msgid "email host user" msgstr "" -#: engine/core/graphene/object_types.py:765 +#: engine/core/graphene/object_types.py:787 msgid "maximum amount for payment" msgstr "" -#: engine/core/graphene/object_types.py:766 +#: engine/core/graphene/object_types.py:788 msgid "minimum amount for payment" msgstr "" -#: engine/core/graphene/object_types.py:767 +#: engine/core/graphene/object_types.py:789 msgid "analytics data" msgstr "" -#: engine/core/graphene/object_types.py:768 +#: engine/core/graphene/object_types.py:790 msgid "advertisement data" msgstr "" -#: engine/core/graphene/object_types.py:771 +#: engine/core/graphene/object_types.py:793 msgid "company configuration" msgstr "" -#: engine/core/graphene/object_types.py:775 +#: engine/core/graphene/object_types.py:797 msgid "language code" msgstr "" -#: engine/core/graphene/object_types.py:776 +#: engine/core/graphene/object_types.py:798 msgid "language name" msgstr "" -#: engine/core/graphene/object_types.py:777 +#: engine/core/graphene/object_types.py:799 msgid "language flag, if exists :)" msgstr "" -#: engine/core/graphene/object_types.py:780 +#: engine/core/graphene/object_types.py:802 msgid "supported languages" msgstr "" -#: engine/core/graphene/object_types.py:812 -#: engine/core/graphene/object_types.py:815 -#: engine/core/graphene/object_types.py:818 +#: engine/core/graphene/object_types.py:834 +#: engine/core/graphene/object_types.py:837 +#: engine/core/graphene/object_types.py:840 msgid "products search results" msgstr "" -#: engine/core/graphene/object_types.py:820 +#: engine/core/graphene/object_types.py:842 msgid "posts search results" msgstr "" -#: engine/core/models.py:75 +#: engine/core/models.py:91 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 " @@ -1494,23 +1530,23 @@ msgid "" "categorizing and managing attributes more effectively in acomplex system." msgstr "" -#: engine/core/models.py:88 +#: engine/core/models.py:107 msgid "parent of this group" msgstr "" -#: engine/core/models.py:89 +#: engine/core/models.py:108 msgid "parent attribute group" msgstr "" -#: engine/core/models.py:93 engine/core/models.py:94 +#: engine/core/models.py:112 engine/core/models.py:113 msgid "attribute group's name" msgstr "" -#: engine/core/models.py:102 engine/core/models.py:763 +#: engine/core/models.py:121 engine/core/models.py:849 msgid "attribute group" msgstr "" -#: engine/core/models.py:108 +#: engine/core/models.py:127 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1521,47 +1557,47 @@ msgid "" "use in systems that interact with third-party vendors." msgstr "" -#: engine/core/models.py:122 +#: engine/core/models.py:141 msgid "stores credentials and endpoints required for vendor communication" msgstr "" -#: engine/core/models.py:124 +#: engine/core/models.py:143 msgid "authentication info" msgstr "" -#: engine/core/models.py:129 +#: engine/core/models.py:148 msgid "define the markup for products retrieved from this vendor" msgstr "" -#: engine/core/models.py:130 +#: engine/core/models.py:149 msgid "vendor markup percentage" msgstr "" -#: engine/core/models.py:134 +#: engine/core/models.py:153 msgid "name of this vendor" msgstr "" -#: engine/core/models.py:135 +#: engine/core/models.py:154 msgid "vendor name" msgstr "" -#: engine/core/models.py:150 +#: engine/core/models.py:169 msgid "response file" msgstr "" -#: engine/core/models.py:151 +#: engine/core/models.py:170 msgid "vendor's last processing response" msgstr "" -#: engine/core/models.py:157 +#: engine/core/models.py:176 msgid "vendor's integration file path" msgstr "" -#: engine/core/models.py:158 +#: engine/core/models.py:177 msgid "integration path" msgstr "" -#: engine/core/models.py:192 +#: engine/core/models.py:211 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1570,42 +1606,42 @@ msgid "" "metadata customization for administrative purposes." msgstr "" -#: engine/core/models.py:204 engine/core/models.py:235 +#: engine/core/models.py:223 engine/core/models.py:254 msgid "internal tag identifier for the product tag" msgstr "" -#: engine/core/models.py:205 engine/core/models.py:236 +#: engine/core/models.py:224 engine/core/models.py:255 msgid "tag name" msgstr "" -#: engine/core/models.py:209 engine/core/models.py:240 +#: engine/core/models.py:228 engine/core/models.py:259 msgid "user-friendly name for the product tag" msgstr "" -#: engine/core/models.py:210 engine/core/models.py:241 +#: engine/core/models.py:229 engine/core/models.py:260 msgid "tag display name" msgstr "" -#: engine/core/models.py:218 +#: engine/core/models.py:237 msgid "product tag" msgstr "" -#: engine/core/models.py:224 +#: engine/core/models.py:243 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 "" -#: engine/core/models.py:249 +#: engine/core/models.py:268 msgid "category tag" msgstr "" -#: engine/core/models.py:250 engine/core/models.py:322 +#: engine/core/models.py:269 engine/core/models.py:345 msgid "category tags" msgstr "" -#: engine/core/models.py:255 +#: engine/core/models.py:274 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1618,51 +1654,51 @@ msgid "" "priority." msgstr "" -#: engine/core/models.py:269 +#: engine/core/models.py:292 msgid "upload an image representing this category" msgstr "" -#: engine/core/models.py:272 +#: engine/core/models.py:295 msgid "category image" msgstr "" -#: engine/core/models.py:277 +#: engine/core/models.py:300 msgid "define a markup percentage for products in this category" msgstr "" -#: engine/core/models.py:286 +#: engine/core/models.py:309 msgid "parent of this category to form a hierarchical structure" msgstr "" -#: engine/core/models.py:287 +#: engine/core/models.py:310 msgid "parent category" msgstr "" -#: engine/core/models.py:292 +#: engine/core/models.py:315 msgid "category name" msgstr "" -#: engine/core/models.py:293 +#: engine/core/models.py:316 msgid "provide a name for this category" msgstr "" -#: engine/core/models.py:300 +#: engine/core/models.py:323 msgid "add a detailed description for this category" msgstr "" -#: engine/core/models.py:301 +#: engine/core/models.py:324 msgid "category description" msgstr "" -#: engine/core/models.py:321 +#: engine/core/models.py:344 msgid "tags that help describe or group this category" msgstr "" -#: engine/core/models.py:328 engine/core/models.py:503 +#: engine/core/models.py:351 engine/core/models.py:552 msgid "priority" msgstr "" -#: engine/core/models.py:446 +#: engine/core/models.py:495 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1670,47 +1706,43 @@ msgid "" "organization and representation of brand-related data within the application." msgstr "" -#: engine/core/models.py:456 +#: engine/core/models.py:505 msgid "name of this brand" msgstr "" -#: engine/core/models.py:457 +#: engine/core/models.py:506 msgid "brand name" msgstr "" -#: engine/core/models.py:464 +#: engine/core/models.py:513 msgid "upload a logo representing this brand" msgstr "" -#: engine/core/models.py:466 +#: engine/core/models.py:515 msgid "brand small image" msgstr "" -#: engine/core/models.py:472 +#: engine/core/models.py:521 msgid "upload a big logo representing this brand" msgstr "" -#: engine/core/models.py:474 +#: engine/core/models.py:523 msgid "brand big image" msgstr "" -#: engine/core/models.py:479 +#: engine/core/models.py:528 msgid "add a detailed description of the brand" msgstr "" -#: engine/core/models.py:480 +#: engine/core/models.py:529 msgid "brand description" msgstr "" -#: engine/core/models.py:485 -msgid "optional categories that this brand is associated with" +#: engine/core/models.py:534 engine/core/models.py:535 +msgid "DEPRECATED" msgstr "" -#: engine/core/models.py:486 -msgid "associated categories" -msgstr "" - -#: engine/core/models.py:516 +#: engine/core/models.py:569 msgid "" "Represents the stock of a product managed in the system. This class provides " "details about the relationship between vendors, products, and their stock " @@ -1720,72 +1752,72 @@ msgid "" "from various vendors." msgstr "" -#: engine/core/models.py:528 +#: engine/core/models.py:581 msgid "the vendor supplying this product stock" msgstr "" -#: engine/core/models.py:529 +#: engine/core/models.py:582 msgid "associated vendor" msgstr "" -#: engine/core/models.py:533 +#: engine/core/models.py:588 msgid "final price to the customer after markups" msgstr "" -#: engine/core/models.py:534 +#: engine/core/models.py:589 msgid "selling price" msgstr "" -#: engine/core/models.py:539 +#: engine/core/models.py:594 msgid "the product associated with this stock entry" msgstr "" -#: engine/core/models.py:540 engine/core/models.py:828 -#: engine/core/models.py:874 engine/core/models.py:1912 +#: engine/core/models.py:595 engine/core/models.py:914 +#: engine/core/models.py:962 engine/core/models.py:2020 msgid "associated product" msgstr "" -#: engine/core/models.py:547 +#: engine/core/models.py:604 msgid "the price paid to the vendor for this product" msgstr "" -#: engine/core/models.py:548 +#: engine/core/models.py:605 msgid "vendor purchase price" msgstr "" -#: engine/core/models.py:552 +#: engine/core/models.py:609 msgid "available quantity of the product in stock" msgstr "" -#: engine/core/models.py:553 +#: engine/core/models.py:610 msgid "quantity in stock" msgstr "" -#: engine/core/models.py:557 +#: engine/core/models.py:614 msgid "vendor-assigned SKU for identifying the product" msgstr "" -#: engine/core/models.py:558 +#: engine/core/models.py:615 msgid "vendor sku" msgstr "" -#: engine/core/models.py:564 +#: engine/core/models.py:621 msgid "digital file associated with this stock if applicable" msgstr "" -#: engine/core/models.py:565 +#: engine/core/models.py:622 msgid "digital file" msgstr "" -#: engine/core/models.py:569 +#: engine/core/models.py:626 msgid "system attributes" msgstr "" -#: engine/core/models.py:577 +#: engine/core/models.py:636 msgid "stock entries" msgstr "" -#: engine/core/models.py:582 +#: engine/core/models.py:641 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1797,71 +1829,79 @@ msgid "" "product data and its associated information within an application." msgstr "" -#: engine/core/models.py:595 +#: engine/core/models.py:660 msgid "category this product belongs to" msgstr "" -#: engine/core/models.py:604 +#: engine/core/models.py:669 msgid "optionally associate this product with a brand" msgstr "" -#: engine/core/models.py:610 +#: engine/core/models.py:675 msgid "tags that help describe or group this product" msgstr "" -#: engine/core/models.py:615 +#: engine/core/models.py:680 msgid "indicates whether this product is digitally delivered" msgstr "" -#: engine/core/models.py:616 +#: engine/core/models.py:681 msgid "is product digital" msgstr "" -#: engine/core/models.py:623 +#: engine/core/models.py:688 msgid "indicates whether this product should be updated from periodic task" msgstr "" -#: engine/core/models.py:625 +#: engine/core/models.py:690 msgid "is product updatable" msgstr "" -#: engine/core/models.py:631 +#: engine/core/models.py:696 msgid "provide a clear identifying name for the product" msgstr "" -#: engine/core/models.py:632 +#: engine/core/models.py:697 msgid "product name" msgstr "" -#: engine/core/models.py:638 engine/core/models.py:923 +#: engine/core/models.py:703 engine/core/models.py:1012 msgid "add a detailed description of the product" msgstr "" -#: engine/core/models.py:639 +#: engine/core/models.py:704 msgid "product description" msgstr "" -#: engine/core/models.py:646 +#: engine/core/models.py:710 +msgid "optional video file for this product" +msgstr "" + +#: engine/core/models.py:711 +msgid "product video" +msgstr "" + +#: engine/core/models.py:719 msgid "part number for this product" msgstr "" -#: engine/core/models.py:647 +#: engine/core/models.py:720 msgid "part number" msgstr "" -#: engine/core/models.py:666 +#: engine/core/models.py:739 msgid "stock keeping unit for this product" msgstr "" -#: engine/core/models.py:673 +#: engine/core/models.py:746 msgid "whether to export this product to marketplaces" msgstr "" -#: engine/core/models.py:674 +#: engine/core/models.py:747 msgid "Export to Marketplaces" msgstr "" -#: engine/core/models.py:749 +#: engine/core/models.py:835 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 " @@ -1871,83 +1911,83 @@ msgid "" "for dynamic and flexible data structuring." msgstr "" -#: engine/core/models.py:762 +#: engine/core/models.py:848 msgid "group of this attribute" msgstr "" -#: engine/core/models.py:768 +#: engine/core/models.py:854 msgid "string" msgstr "" -#: engine/core/models.py:769 +#: engine/core/models.py:855 msgid "integer" msgstr "" -#: engine/core/models.py:770 +#: engine/core/models.py:856 msgid "float" msgstr "" -#: engine/core/models.py:771 +#: engine/core/models.py:857 msgid "boolean" msgstr "" -#: engine/core/models.py:772 +#: engine/core/models.py:858 msgid "array" msgstr "" -#: engine/core/models.py:773 +#: engine/core/models.py:859 msgid "object" msgstr "" -#: engine/core/models.py:775 +#: engine/core/models.py:861 msgid "type of the attribute's value" msgstr "" -#: engine/core/models.py:776 +#: engine/core/models.py:862 msgid "value type" msgstr "" -#: engine/core/models.py:781 +#: engine/core/models.py:867 msgid "name of this attribute" msgstr "" -#: engine/core/models.py:782 +#: engine/core/models.py:868 msgid "attribute's name" msgstr "" -#: engine/core/models.py:787 +#: engine/core/models.py:873 msgid "is filterable" msgstr "" -#: engine/core/models.py:789 +#: engine/core/models.py:875 msgid "designates whether this attribute can be used for filtering or not" msgstr "" -#: engine/core/models.py:802 engine/core/models.py:820 +#: engine/core/models.py:888 engine/core/models.py:906 #: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "" -#: engine/core/models.py:808 +#: engine/core/models.py:894 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 "" -#: engine/core/models.py:819 +#: engine/core/models.py:905 msgid "attribute of this value" msgstr "" -#: engine/core/models.py:827 +#: engine/core/models.py:913 msgid "the specific product associated with this attribute's value" msgstr "" -#: engine/core/models.py:833 +#: engine/core/models.py:919 msgid "the specific value for this attribute" msgstr "" -#: engine/core/models.py:846 +#: engine/core/models.py:934 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for " @@ -1956,39 +1996,39 @@ msgid "" "with alternative text for the images." msgstr "" -#: engine/core/models.py:857 +#: engine/core/models.py:945 msgid "provide alternative text for the image for accessibility" msgstr "" -#: engine/core/models.py:858 +#: engine/core/models.py:946 msgid "image alt text" msgstr "" -#: engine/core/models.py:861 +#: engine/core/models.py:949 msgid "upload the image file for this product" msgstr "" -#: engine/core/models.py:862 engine/core/models.py:893 +#: engine/core/models.py:950 engine/core/models.py:982 msgid "product image" msgstr "" -#: engine/core/models.py:867 +#: engine/core/models.py:955 msgid "determines the order in which images are displayed" msgstr "" -#: engine/core/models.py:868 +#: engine/core/models.py:956 msgid "display priority" msgstr "" -#: engine/core/models.py:873 +#: engine/core/models.py:961 msgid "the product that this image represents" msgstr "" -#: engine/core/models.py:894 +#: engine/core/models.py:983 msgid "product images" msgstr "" -#: engine/core/models.py:899 +#: engine/core/models.py:988 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1998,39 +2038,39 @@ msgid "" "affected items in the campaign." msgstr "" -#: engine/core/models.py:911 +#: engine/core/models.py:1000 msgid "percentage discount for the selected products" msgstr "" -#: engine/core/models.py:912 +#: engine/core/models.py:1001 msgid "discount percentage" msgstr "" -#: engine/core/models.py:917 +#: engine/core/models.py:1006 msgid "provide a unique name for this promotion" msgstr "" -#: engine/core/models.py:918 +#: engine/core/models.py:1007 msgid "promotion name" msgstr "" -#: engine/core/models.py:924 +#: engine/core/models.py:1013 msgid "promotion description" msgstr "" -#: engine/core/models.py:929 +#: engine/core/models.py:1018 msgid "select which products are included in this promotion" msgstr "" -#: engine/core/models.py:930 +#: engine/core/models.py:1019 msgid "included products" msgstr "" -#: engine/core/models.py:934 +#: engine/core/models.py:1027 msgid "promotion" msgstr "" -#: engine/core/models.py:945 +#: engine/core/models.py:1038 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2038,23 +2078,23 @@ msgid "" "operations for adding and removing multiple products at once." msgstr "" -#: engine/core/models.py:957 +#: engine/core/models.py:1050 msgid "products that the user has marked as wanted" msgstr "" -#: engine/core/models.py:965 +#: engine/core/models.py:1058 msgid "user who owns this wishlist" msgstr "" -#: engine/core/models.py:966 +#: engine/core/models.py:1059 msgid "wishlist owner" msgstr "" -#: engine/core/models.py:974 +#: engine/core/models.py:1067 msgid "wishlist" msgstr "" -#: engine/core/models.py:1016 +#: engine/core/models.py:1109 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2064,19 +2104,19 @@ msgid "" "custom features." msgstr "" -#: engine/core/models.py:1031 +#: engine/core/models.py:1124 msgid "documentary" msgstr "" -#: engine/core/models.py:1032 +#: engine/core/models.py:1125 msgid "documentaries" msgstr "" -#: engine/core/models.py:1042 +#: engine/core/models.py:1135 msgid "unresolved" msgstr "" -#: engine/core/models.py:1047 +#: engine/core/models.py:1140 msgid "" "Represents an address entity that includes location details and associations " "with a user. Provides functionality for geographic and address data storage, " @@ -2088,59 +2128,59 @@ msgid "" "address with a user, facilitating personalized data handling." msgstr "" -#: engine/core/models.py:1062 +#: engine/core/models.py:1155 msgid "address line for the customer" msgstr "" -#: engine/core/models.py:1063 +#: engine/core/models.py:1156 msgid "address line" msgstr "" -#: engine/core/models.py:1065 +#: engine/core/models.py:1158 msgid "street" msgstr "" -#: engine/core/models.py:1066 +#: engine/core/models.py:1159 msgid "district" msgstr "" -#: engine/core/models.py:1067 +#: engine/core/models.py:1160 msgid "city" msgstr "" -#: engine/core/models.py:1068 +#: engine/core/models.py:1161 msgid "region" msgstr "" -#: engine/core/models.py:1069 +#: engine/core/models.py:1162 msgid "postal code" msgstr "" -#: engine/core/models.py:1070 +#: engine/core/models.py:1163 msgid "country" msgstr "" -#: engine/core/models.py:1077 +#: engine/core/models.py:1170 msgid "geolocation point: (longitude, latitude)" msgstr "" -#: engine/core/models.py:1083 +#: engine/core/models.py:1176 msgid "full JSON response from geocoder for this address" msgstr "" -#: engine/core/models.py:1089 +#: engine/core/models.py:1182 msgid "stored JSON response from the geocoding service" msgstr "" -#: engine/core/models.py:1099 +#: engine/core/models.py:1192 msgid "address" msgstr "" -#: engine/core/models.py:1100 +#: engine/core/models.py:1193 msgid "addresses" msgstr "" -#: engine/core/models.py:1112 +#: engine/core/models.py:1205 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2150,86 +2190,86 @@ msgid "" "apply the promo code to an order while ensuring constraints are met." msgstr "" -#: engine/core/models.py:1126 +#: engine/core/models.py:1219 msgid "unique code used by a user to redeem a discount" msgstr "" -#: engine/core/models.py:1127 +#: engine/core/models.py:1220 msgid "promo code identifier" msgstr "" -#: engine/core/models.py:1134 +#: engine/core/models.py:1227 msgid "fixed discount amount applied if percent is not used" msgstr "" -#: engine/core/models.py:1135 +#: engine/core/models.py:1228 msgid "fixed discount amount" msgstr "" -#: engine/core/models.py:1141 +#: engine/core/models.py:1234 msgid "percentage discount applied if fixed amount is not used" msgstr "" -#: engine/core/models.py:1142 +#: engine/core/models.py:1235 msgid "percentage discount" msgstr "" -#: engine/core/models.py:1147 +#: engine/core/models.py:1240 msgid "timestamp when the promocode expires" msgstr "" -#: engine/core/models.py:1148 +#: engine/core/models.py:1241 msgid "end validity time" msgstr "" -#: engine/core/models.py:1153 +#: engine/core/models.py:1246 msgid "timestamp from which this promocode is valid" msgstr "" -#: engine/core/models.py:1154 +#: engine/core/models.py:1247 msgid "start validity time" msgstr "" -#: engine/core/models.py:1159 +#: engine/core/models.py:1252 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" -#: engine/core/models.py:1160 +#: engine/core/models.py:1253 msgid "usage timestamp" msgstr "" -#: engine/core/models.py:1165 +#: engine/core/models.py:1258 msgid "user assigned to this promocode if applicable" msgstr "" -#: engine/core/models.py:1166 +#: engine/core/models.py:1259 msgid "assigned user" msgstr "" -#: engine/core/models.py:1173 +#: engine/core/models.py:1266 msgid "promo code" msgstr "" -#: engine/core/models.py:1174 +#: engine/core/models.py:1267 msgid "promo codes" msgstr "" -#: engine/core/models.py:1190 +#: engine/core/models.py:1283 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "" -#: engine/core/models.py:1212 +#: engine/core/models.py:1305 msgid "promocode already used" msgstr "" -#: engine/core/models.py:1234 +#: engine/core/models.py:1327 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "" -#: engine/core/models.py:1243 +#: engine/core/models.py:1336 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 " @@ -2239,145 +2279,145 @@ msgid "" "supports managing the products in the order lifecycle." msgstr "" -#: engine/core/models.py:1260 +#: engine/core/models.py:1357 msgid "the billing address used for this order" msgstr "" -#: engine/core/models.py:1268 +#: engine/core/models.py:1365 msgid "optional promo code applied to this order" msgstr "" -#: engine/core/models.py:1269 +#: engine/core/models.py:1366 msgid "applied promo code" msgstr "" -#: engine/core/models.py:1277 +#: engine/core/models.py:1374 msgid "the shipping address used for this order" msgstr "" -#: engine/core/models.py:1278 +#: engine/core/models.py:1375 msgid "shipping address" msgstr "" -#: engine/core/models.py:1284 +#: engine/core/models.py:1381 msgid "current status of the order in its lifecycle" msgstr "" -#: engine/core/models.py:1285 +#: engine/core/models.py:1382 msgid "order status" msgstr "" -#: engine/core/models.py:1290 engine/core/models.py:1889 +#: engine/core/models.py:1387 engine/core/models.py:1997 msgid "json structure of notifications to display to users" msgstr "" -#: engine/core/models.py:1296 +#: engine/core/models.py:1393 msgid "json representation of order attributes for this order" msgstr "" -#: engine/core/models.py:1302 +#: engine/core/models.py:1399 msgid "the user who placed the order" msgstr "" -#: engine/core/models.py:1303 +#: engine/core/models.py:1400 msgid "user" msgstr "" -#: engine/core/models.py:1309 +#: engine/core/models.py:1406 msgid "the timestamp when the order was finalized" msgstr "" -#: engine/core/models.py:1310 +#: engine/core/models.py:1407 msgid "buy time" msgstr "" -#: engine/core/models.py:1317 +#: engine/core/models.py:1414 msgid "a human-readable identifier for the order" msgstr "" -#: engine/core/models.py:1318 +#: engine/core/models.py:1415 msgid "human readable id" msgstr "" -#: engine/core/models.py:1324 +#: engine/core/models.py:1421 msgid "order" msgstr "" -#: engine/core/models.py:1371 +#: engine/core/models.py:1468 msgid "a user must have only one pending order at a time" msgstr "" -#: engine/core/models.py:1404 +#: engine/core/models.py:1504 msgid "you cannot add products to an order that is not a pending one" msgstr "" -#: engine/core/models.py:1410 +#: engine/core/models.py:1510 msgid "you cannot add inactive products to order" msgstr "" -#: engine/core/models.py:1432 +#: engine/core/models.py:1533 msgid "you cannot add more products than available in stock" msgstr "" -#: engine/core/models.py:1456 engine/core/models.py:1485 -#: engine/core/models.py:1495 +#: engine/core/models.py:1557 engine/core/models.py:1586 +#: engine/core/models.py:1596 msgid "you cannot remove products from an order that is not a pending one" msgstr "" -#: engine/core/models.py:1480 +#: engine/core/models.py:1581 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "" -#: engine/core/models.py:1519 +#: engine/core/models.py:1620 msgid "promocode does not exist" msgstr "" -#: engine/core/models.py:1534 +#: engine/core/models.py:1635 msgid "you can only buy physical products with shipping address specified" msgstr "" -#: engine/core/models.py:1555 +#: engine/core/models.py:1656 msgid "address does not exist" msgstr "" -#: engine/core/models.py:1577 engine/core/models.py:1656 +#: engine/core/models.py:1678 engine/core/models.py:1757 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" -#: engine/core/models.py:1583 engine/core/models.py:1649 +#: engine/core/models.py:1684 engine/core/models.py:1750 msgid "invalid force value" msgstr "" -#: engine/core/models.py:1589 engine/core/models.py:1660 +#: engine/core/models.py:1690 engine/core/models.py:1761 msgid "you cannot purchase an empty order!" msgstr "" -#: engine/core/models.py:1610 +#: engine/core/models.py:1711 msgid "you cannot buy an order without a user" msgstr "" -#: engine/core/models.py:1624 +#: engine/core/models.py:1725 msgid "a user without a balance cannot buy with balance" msgstr "" -#: engine/core/models.py:1630 +#: engine/core/models.py:1731 msgid "insufficient funds to complete the order" msgstr "" -#: engine/core/models.py:1671 +#: engine/core/models.py:1772 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "" -#: engine/core/models.py:1682 +#: engine/core/models.py:1783 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" -#: engine/core/models.py:1813 +#: engine/core/models.py:1916 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2386,31 +2426,31 @@ msgid "" "fields to effectively model and manage feedback data." msgstr "" -#: engine/core/models.py:1825 +#: engine/core/models.py:1928 msgid "user-provided comments about their experience with the product" msgstr "" -#: engine/core/models.py:1826 +#: engine/core/models.py:1929 msgid "feedback comments" msgstr "" -#: engine/core/models.py:1834 +#: engine/core/models.py:1937 msgid "references the specific product in an order that this feedback is about" msgstr "" -#: engine/core/models.py:1836 +#: engine/core/models.py:1939 msgid "related order product" msgstr "" -#: engine/core/models.py:1841 +#: engine/core/models.py:1944 msgid "user-assigned rating for the product" msgstr "" -#: engine/core/models.py:1842 +#: engine/core/models.py:1945 msgid "product rating" msgstr "" -#: engine/core/models.py:1862 +#: engine/core/models.py:1965 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2423,108 +2463,108 @@ msgid "" "Product models and stores a reference to them." msgstr "" -#: engine/core/models.py:1877 +#: engine/core/models.py:1985 msgid "the price paid by the customer for this product at purchase time" msgstr "" -#: engine/core/models.py:1878 +#: engine/core/models.py:1986 msgid "purchase price at order time" msgstr "" -#: engine/core/models.py:1883 +#: engine/core/models.py:1991 msgid "internal comments for admins about this ordered product" msgstr "" -#: engine/core/models.py:1884 +#: engine/core/models.py:1992 msgid "internal comments" msgstr "" -#: engine/core/models.py:1890 +#: engine/core/models.py:1998 msgid "user notifications" msgstr "" -#: engine/core/models.py:1895 +#: engine/core/models.py:2003 msgid "json representation of this item's attributes" msgstr "" -#: engine/core/models.py:1896 +#: engine/core/models.py:2004 msgid "ordered product attributes" msgstr "" -#: engine/core/models.py:1901 +#: engine/core/models.py:2009 msgid "reference to the parent order that contains this product" msgstr "" -#: engine/core/models.py:1902 +#: engine/core/models.py:2010 msgid "parent order" msgstr "" -#: engine/core/models.py:1911 +#: engine/core/models.py:2019 msgid "the specific product associated with this order line" msgstr "" -#: engine/core/models.py:1918 +#: engine/core/models.py:2026 msgid "quantity of this specific product in the order" msgstr "" -#: engine/core/models.py:1919 +#: engine/core/models.py:2027 msgid "product quantity" msgstr "" -#: engine/core/models.py:1926 +#: engine/core/models.py:2034 msgid "current status of this product in the order" msgstr "" -#: engine/core/models.py:1927 +#: engine/core/models.py:2035 msgid "product line status" msgstr "" -#: engine/core/models.py:1998 +#: engine/core/models.py:2106 msgid "order product must have an order" msgstr "" -#: engine/core/models.py:2000 +#: engine/core/models.py:2108 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "" -#: engine/core/models.py:2017 +#: engine/core/models.py:2125 msgid "you cannot feedback an order which is not received" msgstr "" -#: engine/core/models.py:2026 +#: engine/core/models.py:2132 engine/core/models.py:2227 msgid "name" msgstr "" -#: engine/core/models.py:2028 +#: engine/core/models.py:2134 msgid "URL of the integration" msgstr "" -#: engine/core/models.py:2031 +#: engine/core/models.py:2137 msgid "authentication credentials" msgstr "" -#: engine/core/models.py:2054 +#: engine/core/models.py:2160 msgid "you can only have one default CRM provider" msgstr "" -#: engine/core/models.py:2064 +#: engine/core/models.py:2170 msgid "CRM" msgstr "" -#: engine/core/models.py:2065 +#: engine/core/models.py:2171 msgid "CRMs" msgstr "" -#: engine/core/models.py:2081 +#: engine/core/models.py:2187 msgid "order CRM link" msgstr "" -#: engine/core/models.py:2082 +#: engine/core/models.py:2188 msgid "orders CRM links" msgstr "" -#: engine/core/models.py:2087 +#: engine/core/models.py:2193 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2534,20 +2574,54 @@ msgid "" "the asset when the associated order is in a completed status." msgstr "" -#: engine/core/models.py:2103 +#: engine/core/models.py:2209 msgid "download" msgstr "" -#: engine/core/models.py:2104 +#: engine/core/models.py:2210 msgid "downloads" msgstr "" +#: engine/core/models.py:2228 +msgid "descriptive name for the image" +msgstr "" + +#: engine/core/models.py:2233 +msgid "image file pasted in the markdown editor" +msgstr "" + +#: engine/core/models.py:2239 +msgid "alt text" +msgstr "" + +#: engine/core/models.py:2240 +msgid "alternative text for accessibility" +msgstr "" + +#: engine/core/models.py:2244 +msgid "pasted image" +msgstr "" + +#: engine/core/models.py:2245 +msgid "pasted images" +msgstr "" + #: engine/core/serializers/utility.py:91 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" #: engine/core/sitemaps.py:25 +#: engine/core/templates/admin_doc/bookmarklets.html:8 +#: engine/core/templates/admin_doc/index.html:8 +#: engine/core/templates/admin_doc/missing_docutils.html:8 +#: engine/core/templates/admin_doc/model_detail.html:8 +#: engine/core/templates/admin_doc/model_index.html:8 +#: engine/core/templates/admin_doc/template_detail.html:8 +#: engine/core/templates/admin_doc/template_filter_index.html:8 +#: engine/core/templates/admin_doc/template_tag_index.html:8 +#: engine/core/templates/admin_doc/view_detail.html:8 +#: engine/core/templates/admin_doc/view_index.html:8 msgid "Home" msgstr "" @@ -2600,43 +2674,32 @@ msgstr "" msgid "Dashboard" msgstr "" -#: engine/core/templates/admin/dashboard/_income_overview.html:7 +#: engine/core/templates/admin/dashboard/_income_overview.html:6 msgid "Income overview" msgstr "" -#: engine/core/templates/admin/dashboard/_income_overview.html:31 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Net" +#: engine/core/templates/admin/dashboard/_income_overview.html:16 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" msgstr "" -#: engine/core/templates/admin/dashboard/_income_overview.html:37 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Taxes" -msgstr "" - -#: engine/core/templates/admin/dashboard/_income_overview.html:43 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 +#: engine/core/templates/admin/dashboard/_income_overview.html:21 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 msgid "Returns" msgstr "" -#: engine/core/templates/admin/dashboard/_income_overview.html:48 -msgid "Gross (pie total)" -msgstr "" - -#: engine/core/templates/admin/dashboard/_income_overview.html:72 -msgid "No data" -msgstr "" - +#: engine/core/templates/admin/dashboard/_income_overview.html:26 #: engine/core/templates/admin/dashboard/_kpis.html:6 msgid "GMV" msgstr "" -#: engine/core/templates/admin/dashboard/_kpis.html:34 -msgid "AOV" +#: engine/core/templates/admin/dashboard/_income_overview.html:50 +msgid "No data" msgstr "" -#: engine/core/templates/admin/dashboard/_kpis.html:48 -msgid "Net revenue" +#: engine/core/templates/admin/dashboard/_kpis.html:34 +msgid "AOV" msgstr "" #: engine/core/templates/admin/dashboard/_kpis.html:62 @@ -2651,7 +2714,7 @@ msgstr "" msgid "Low stock" msgstr "" -#: engine/core/templates/admin/dashboard/_low_stock.html:29 +#: engine/core/templates/admin/dashboard/_low_stock.html:33 msgid "No low stock items." msgstr "" @@ -2708,6 +2771,274 @@ msgstr "" msgid "Django site admin" msgstr "" +#: engine/core/templates/admin_doc/bookmarklets.html:4 +#: engine/core/templates/admin_doc/bookmarklets.html:17 +msgid "Documentation bookmarklets" +msgstr "" + +#: engine/core/templates/admin_doc/bookmarklets.html:10 +#: engine/core/templates/admin_doc/index.html:4 +#: engine/core/templates/admin_doc/index.html:10 +#: engine/core/templates/admin_doc/index.html:15 +#: engine/core/templates/admin_doc/missing_docutils.html:10 +#: engine/core/templates/admin_doc/missing_docutils.html:19 +#: engine/core/templates/admin_doc/model_detail.html:10 +#: engine/core/templates/admin_doc/model_index.html:10 +#: engine/core/templates/admin_doc/template_detail.html:10 +#: engine/core/templates/admin_doc/template_filter_index.html:10 +#: engine/core/templates/admin_doc/template_tag_index.html:10 +#: engine/core/templates/admin_doc/view_detail.html:10 +#: engine/core/templates/admin_doc/view_index.html:10 +msgid "Documentation" +msgstr "" + +#: engine/core/templates/admin_doc/bookmarklets.html:12 +#: engine/core/templates/admin_doc/index.html:53 +msgid "Bookmarklets" +msgstr "" + +#: engine/core/templates/admin_doc/bookmarklets.html:19 +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +#: engine/core/templates/admin_doc/bookmarklets.html:29 +msgid "Documentation for this page" +msgstr "" + +#: engine/core/templates/admin_doc/bookmarklets.html:31 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" + +#: engine/core/templates/admin_doc/index.html:21 +#: engine/core/templates/admin_doc/model_detail.html:12 +#: engine/core/templates/admin_doc/model_index.html:4 +#: engine/core/templates/admin_doc/model_index.html:12 +msgid "Models" +msgstr "" + +#: engine/core/templates/admin_doc/index.html:23 +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +#: engine/core/templates/admin_doc/index.html:29 +#: engine/core/templates/admin_doc/view_detail.html:12 +#: engine/core/templates/admin_doc/view_index.html:4 +#: engine/core/templates/admin_doc/view_index.html:12 +msgid "Views" +msgstr "" + +#: engine/core/templates/admin_doc/index.html:31 +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +#: engine/core/templates/admin_doc/index.html:39 +msgid "List of all the template tags and their functions." +msgstr "" + +#: engine/core/templates/admin_doc/index.html:45 +#: engine/core/templates/admin_doc/template_filter_index.html:12 +msgid "Filters" +msgstr "" + +#: engine/core/templates/admin_doc/index.html:47 +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +#: engine/core/templates/admin_doc/index.html:55 +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +#: engine/core/templates/admin_doc/missing_docutils.html:4 +msgid "Please install docutils" +msgstr "" + +#: engine/core/templates/admin_doc/missing_docutils.html:20 +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#: engine/core/templates/admin_doc/missing_docutils.html:21 +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#: engine/core/templates/admin_doc/model_detail.html:4 +#, python-format +msgid "Model: %(name)s" +msgstr "" + +#: engine/core/templates/admin_doc/model_detail.html:29 +msgid "Fields" +msgstr "" + +#: engine/core/templates/admin_doc/model_detail.html:36 +msgid "Field" +msgstr "" + +#: engine/core/templates/admin_doc/model_detail.html:37 +msgid "Type" +msgstr "" + +#: engine/core/templates/admin_doc/model_detail.html:38 +#: engine/core/templates/admin_doc/model_detail.html:70 +msgid "Description" +msgstr "" + +#: engine/core/templates/admin_doc/model_detail.html:61 +msgid "Methods with arguments" +msgstr "" + +#: engine/core/templates/admin_doc/model_detail.html:68 +msgid "Method" +msgstr "" + +#: engine/core/templates/admin_doc/model_detail.html:69 +msgid "Arguments" +msgstr "" + +#: engine/core/templates/admin_doc/model_detail.html:89 +msgid "Back to Model documentation" +msgstr "" + +#: engine/core/templates/admin_doc/model_index.html:17 +msgid "Model documentation" +msgstr "" + +#: engine/core/templates/admin_doc/model_index.html:44 +msgid "Model groups" +msgstr "" + +#: engine/core/templates/admin_doc/template_detail.html:4 +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#: engine/core/templates/admin_doc/template_detail.html:12 +msgid "Templates" +msgstr "" + +#: engine/core/templates/admin_doc/template_detail.html:17 +#, python-format +msgid "" +"Template: %(name)s" +msgstr "" + +#: engine/core/templates/admin_doc/template_detail.html:21 +#, python-format +msgid "Search path for template %(name)s:" +msgstr "" + +#: engine/core/templates/admin_doc/template_detail.html:29 +msgid "(does not exist)" +msgstr "" + +#: engine/core/templates/admin_doc/template_detail.html:40 +msgid "Back to Documentation" +msgstr "" + +#: engine/core/templates/admin_doc/template_filter_index.html:4 +msgid "Template filters" +msgstr "" + +#: engine/core/templates/admin_doc/template_filter_index.html:17 +msgid "Template filter documentation" +msgstr "" + +#: engine/core/templates/admin_doc/template_filter_index.html:26 +#: engine/core/templates/admin_doc/template_filter_index.html:52 +msgid "Built-in filters" +msgstr "" + +#: engine/core/templates/admin_doc/template_filter_index.html:29 +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before using " +"the filter." +msgstr "" + +#: engine/core/templates/admin_doc/template_tag_index.html:4 +msgid "Template tags" +msgstr "" + +#: engine/core/templates/admin_doc/template_tag_index.html:17 +msgid "Template tag documentation" +msgstr "" + +#: engine/core/templates/admin_doc/template_tag_index.html:26 +#: engine/core/templates/admin_doc/template_tag_index.html:52 +msgid "Built-in tags" +msgstr "" + +#: engine/core/templates/admin_doc/template_tag_index.html:29 +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using the tag." +msgstr "" + +#: engine/core/templates/admin_doc/view_detail.html:4 +#, python-format +msgid "View: %(name)s" +msgstr "" + +#: engine/core/templates/admin_doc/view_detail.html:28 +msgid "Context:" +msgstr "" + +#: engine/core/templates/admin_doc/view_detail.html:33 +msgid "Templates:" +msgstr "" + +#: engine/core/templates/admin_doc/view_detail.html:41 +msgid "Back to View documentation" +msgstr "" + +#: engine/core/templates/admin_doc/view_index.html:17 +msgid "View documentation" +msgstr "" + +#: engine/core/templates/admin_doc/view_index.html:28 +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +#: engine/core/templates/admin_doc/view_index.html:30 +msgid "Views by empty namespace" +msgstr "" + +#: engine/core/templates/admin_doc/view_index.html:40 +#, python-format +msgid "" +"View function: %(full_name)s. Name: %(url_name)s." +msgstr "" + +#: engine/core/templates/admin_doc/view_index.html:54 +msgid "Jump to namespace" +msgstr "" + +#: engine/core/templates/admin_doc/view_index.html:59 +msgid "Empty namespace" +msgstr "" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -2800,7 +3131,7 @@ msgid "" msgstr "" #: engine/core/templates/digital_order_delivered_email.html:137 -#: engine/core/templates/json_table_widget.html:6 +#: engine/core/templates/json_table_widget.html:26 msgid "value" msgstr "" @@ -2818,11 +3149,23 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "" -#: engine/core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:7 +msgid "Key" +msgstr "" + +#: engine/core/templates/json_table_widget.html:8 +msgid "Value" +msgstr "" + +#: engine/core/templates/json_table_widget.html:19 msgid "key" msgstr "" -#: engine/core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:32 +msgid "Delete row" +msgstr "" + +#: engine/core/templates/json_table_widget.html:44 msgid "Add Row" msgstr "" @@ -2904,58 +3247,67 @@ msgstr "" msgid "NOMINATIM_URL must be configured." msgstr "" -#: engine/core/validators.py:23 +#: engine/core/validators.py:18 +msgid "could not determine file type" +msgstr "" + +#: engine/core/validators.py:24 +#, python-brace-format +msgid "unsupported video format. supported formats: {supported}" +msgstr "" + +#: engine/core/validators.py:45 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" -#: engine/core/views.py:104 +#: engine/core/views.py:108 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." msgstr "" -#: engine/core/views.py:119 +#: engine/core/views.py:123 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " "Content-Type header for XML." msgstr "" -#: engine/core/views.py:155 +#: engine/core/views.py:174 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" -#: engine/core/views.py:182 +#: engine/core/views.py:201 msgid "Returns the parameters of the website as a JSON object." msgstr "" -#: engine/core/views.py:198 +#: engine/core/views.py:217 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." msgstr "" -#: engine/core/views.py:220 +#: engine/core/views.py:239 msgid "Handles `contact us` form submissions." msgstr "" -#: engine/core/views.py:236 +#: engine/core/views.py:255 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." msgstr "" -#: engine/core/views.py:273 +#: engine/core/views.py:292 msgid "Handles global search queries." msgstr "" -#: engine/core/views.py:289 +#: engine/core/views.py:308 msgid "Handles the logic of buying as a business without registration." msgstr "" -#: engine/core/views.py:337 +#: engine/core/views.py:356 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the " @@ -2963,31 +3315,31 @@ msgid "" "error is raised to indicate the resource is unavailable." msgstr "" -#: engine/core/views.py:348 +#: engine/core/views.py:367 msgid "order_product_uuid is required" msgstr "" -#: engine/core/views.py:355 +#: engine/core/views.py:374 msgid "order product does not exist" msgstr "" -#: engine/core/views.py:358 +#: engine/core/views.py:377 msgid "you can only download the digital asset once" msgstr "" -#: engine/core/views.py:362 +#: engine/core/views.py:381 msgid "the order must be paid before downloading the digital asset" msgstr "" -#: engine/core/views.py:369 +#: engine/core/views.py:388 msgid "the order product does not have a product" msgstr "" -#: engine/core/views.py:412 +#: engine/core/views.py:431 msgid "favicon not found" msgstr "" -#: engine/core/views.py:418 +#: engine/core/views.py:437 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static " @@ -2995,23 +3347,27 @@ msgid "" "error is raised to indicate the resource is unavailable." msgstr "" -#: engine/core/views.py:432 +#: engine/core/views.py:451 msgid "" "Redirects the request to the admin index page. The function handles incoming " "HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." msgstr "" -#: engine/core/views.py:445 +#: engine/core/views.py:464 msgid "Returns current version of the Schon. " msgstr "" -#: engine/core/views.py:674 engine/core/views.py:689 +#: engine/core/views.py:475 +msgid "no image file provided" +msgstr "" + +#: engine/core/views.py:710 engine/core/views.py:725 #, python-format msgid "Revenue & Orders (last %(days)d)" msgstr "" -#: engine/core/views.py:870 +#: engine/core/views.py:911 msgid "Returns custom variables for Dashboard. " msgstr "" @@ -3068,7 +3424,7 @@ msgid "" "endpoints for Brand objects." msgstr "" -#: engine/core/viewsets.py:458 +#: engine/core/viewsets.py:460 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3079,7 +3435,15 @@ msgid "" "product." msgstr "" -#: engine/core/viewsets.py:605 +#: engine/core/viewsets.py:541 +msgid "identificator_type and identificators are required" +msgstr "" + +#: engine/core/viewsets.py:554 +msgid "identificator_type must be one of: uuid, slug, sku" +msgstr "" + +#: engine/core/viewsets.py:635 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3088,7 +3452,7 @@ msgid "" "Vendor-related resources through the Django REST framework." msgstr "" -#: engine/core/viewsets.py:625 +#: engine/core/viewsets.py:655 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3098,7 +3462,7 @@ msgid "" "use of Django's filtering system for querying data." msgstr "" -#: engine/core/viewsets.py:652 +#: engine/core/viewsets.py:682 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3109,7 +3473,7 @@ msgid "" "enforces permissions accordingly while interacting with order data." msgstr "" -#: engine/core/viewsets.py:914 +#: engine/core/viewsets.py:944 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3118,25 +3482,25 @@ msgid "" "feedback on OrderProduct instances" msgstr "" -#: engine/core/viewsets.py:974 +#: engine/core/viewsets.py:1004 msgid "Manages operations related to Product images in the application. " msgstr "" -#: engine/core/viewsets.py:988 +#: engine/core/viewsets.py:1018 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "" -#: engine/core/viewsets.py:1019 +#: engine/core/viewsets.py:1049 msgid "Represents a view set for managing promotions. " msgstr "" -#: engine/core/viewsets.py:1032 +#: engine/core/viewsets.py:1062 msgid "Handles operations related to Stock data in the system." msgstr "" -#: engine/core/viewsets.py:1046 +#: engine/core/viewsets.py:1076 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3147,7 +3511,7 @@ msgid "" "are granted." msgstr "" -#: engine/core/viewsets.py:1183 +#: engine/core/viewsets.py:1213 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3156,12 +3520,12 @@ msgid "" "on the request context." msgstr "" -#: engine/core/viewsets.py:1254 +#: engine/core/viewsets.py:1275 #, python-brace-format msgid "Geocoding error: {e}" msgstr "" -#: engine/core/viewsets.py:1262 +#: engine/core/viewsets.py:1283 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/ko_KR/LC_MESSAGES/django.mo b/engine/core/locale/ko_KR/LC_MESSAGES/django.mo index 7f11b568..9f275d3d 100644 Binary files a/engine/core/locale/ko_KR/LC_MESSAGES/django.mo and b/engine/core/locale/ko_KR/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/ko_KR/LC_MESSAGES/django.po b/engine/core/locale/ko_KR/LC_MESSAGES/django.po index 23a4b083..ed742e4c 100644 --- a/engine/core/locale/ko_KR/LC_MESSAGES/django.po +++ b/engine/core/locale/ko_KR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -47,113 +47,133 @@ msgstr "수정됨" msgid "when the object was last modified" msgstr "개체가 마지막으로 편집된 시기" -#: engine/core/admin.py:94 +#: engine/core/admin.py:98 msgid "translations" msgstr "번역" -#: engine/core/admin.py:102 +#: engine/core/admin.py:106 msgid "general" msgstr "일반" -#: engine/core/admin.py:106 +#: engine/core/admin.py:110 msgid "relations" msgstr "관계" -#: engine/core/admin.py:111 +#: engine/core/admin.py:115 msgid "additional info" msgstr "추가 정보" -#: engine/core/admin.py:133 +#: engine/core/admin.py:137 msgid "metadata" msgstr "메타데이터" -#: engine/core/admin.py:141 +#: engine/core/admin.py:145 msgid "timestamps" msgstr "타임스탬프" -#: engine/core/admin.py:158 +#: engine/core/admin.py:162 #, python-format msgid "Activate selected %(verbose_name_plural)s" msgstr "선택된 %(verbose_name_plural)s 활성화" -#: engine/core/admin.py:166 +#: engine/core/admin.py:170 msgid "selected items have been activated." msgstr "선택한 아이템이 활성화되었습니다!" -#: engine/core/admin.py:174 +#: engine/core/admin.py:178 #, python-format msgid "Deactivate selected %(verbose_name_plural)s" msgstr "선택된 %(verbose_name_plural)s 비활성화" -#: engine/core/admin.py:184 +#: engine/core/admin.py:188 msgid "selected items have been deactivated." msgstr "선택한 아이템이 비활성화되었습니다!" -#: engine/core/admin.py:196 engine/core/graphene/object_types.py:653 -#: engine/core/graphene/object_types.py:660 engine/core/models.py:832 -#: engine/core/models.py:840 +#: engine/core/admin.py:200 engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:673 engine/core/models.py:918 +#: engine/core/models.py:928 msgid "attribute value" msgstr "속성 값" -#: engine/core/admin.py:197 engine/core/graphene/object_types.py:77 -#: engine/core/models.py:841 +#: engine/core/admin.py:201 engine/core/graphene/object_types.py:81 +#: engine/core/models.py:929 msgid "attribute values" msgstr "속성 값" -#: engine/core/admin.py:208 +#: engine/core/admin.py:212 engine/core/models.py:2232 msgid "image" msgstr "이미지" -#: engine/core/admin.py:209 engine/core/graphene/object_types.py:530 +#: engine/core/admin.py:213 engine/core/graphene/object_types.py:535 msgid "images" msgstr "이미지" -#: engine/core/admin.py:220 engine/core/models.py:576 +#: engine/core/admin.py:224 engine/core/models.py:635 msgid "stock" msgstr "재고" -#: engine/core/admin.py:221 engine/core/graphene/object_types.py:713 +#: engine/core/admin.py:225 engine/core/graphene/object_types.py:735 msgid "stocks" msgstr "주식" -#: engine/core/admin.py:232 engine/core/models.py:1938 +#: engine/core/admin.py:236 engine/core/models.py:2046 msgid "order product" msgstr "제품 주문" -#: engine/core/admin.py:233 engine/core/graphene/object_types.py:441 -#: engine/core/models.py:1939 +#: engine/core/admin.py:237 engine/core/graphene/object_types.py:446 +#: engine/core/models.py:2047 msgid "order products" msgstr "제품 주문" -#: engine/core/admin.py:251 engine/core/admin.py:252 +#: engine/core/admin.py:255 engine/core/admin.py:256 msgid "children" msgstr "어린이" -#: engine/core/admin.py:528 +#: engine/core/admin.py:545 +msgid "video preview" +msgstr "동영상 미리보기" + +#: engine/core/admin.py:551 msgid "has images" msgstr "이미지가 있습니다" -#: engine/core/admin.py:531 +#: engine/core/admin.py:554 #, python-format msgid "Export selected %(verbose_name_plural)s to marketplaces' feeds" msgstr "선택한 %(verbose_name_plural)s를 마켓플레이스 피드로 내보내기" -#: engine/core/admin.py:542 +#: engine/core/admin.py:565 #, python-format msgid "selected %(verbose_name_plural)s have been marked for export." msgstr "선택된 %(verbose_name_plural)s가 내보내기로 표시되었습니다." -#: engine/core/admin.py:553 +#: engine/core/admin.py:576 #, python-format msgid "Ban selected %(verbose_name_plural)s from marketplaces' feeds" msgstr "%(verbose_name_plural)s를 마켓플레이스 피드에서 선택해 차단했습니다" -#: engine/core/admin.py:564 +#: engine/core/admin.py:587 #, python-format msgid "selected %(verbose_name_plural)s have been banned from export." msgstr "선택된 %(verbose_name_plural)s는 수출이 금지되었습니다." -#: engine/core/admin.py:1116 +#: engine/core/admin.py:1030 +msgid "Preview" +msgstr "미리 보기" + +#: engine/core/admin.py:1031 +msgid "Metadata" +msgstr "메타데이터" + +#: engine/core/admin.py:1034 +msgid "preview" +msgstr "미리 보기" + +#: engine/core/admin.py:1043 +msgid "image preview" +msgstr "이미지 미리보기" + +#: engine/core/admin.py:1166 msgid "Config" msgstr "구성" @@ -219,7 +239,7 @@ msgstr "" "OpenApi3 스키마를 사용합니다. 형식은 콘텐츠 협상을 통해 선택할 수 있습니다. 언어는 Accept-Language와 쿼리 " "매개변수를 모두 사용하여 선택할 수 있습니다." -#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:36 +#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "캐시 I/O" @@ -243,7 +263,7 @@ msgstr "애플리케이션의 노출 가능한 매개변수 가져오기" msgid "send a message to the support team" msgstr "지원팀에 메시지 보내기" -#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:59 msgid "request a CORSed URL" msgstr "CORSed URL을 요청합니다. https만 허용됩니다." @@ -371,11 +391,11 @@ msgstr "편집할 수 없는 항목을 저장하는 기존 카테고리 다시 msgid "rewrite some fields of an existing category saving non-editables" msgstr "편집할 수 없는 항목을 저장하는 기존 카테고리의 일부 필드 다시 작성하기" -#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757 -#: engine/core/docs/drf/viewsets.py:1046 -#: engine/core/graphene/object_types.py:119 -#: engine/core/graphene/object_types.py:239 -#: engine/core/graphene/object_types.py:540 +#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:781 +#: engine/core/docs/drf/viewsets.py:1070 +#: engine/core/graphene/object_types.py:123 +#: engine/core/graphene/object_types.py:247 +#: engine/core/graphene/object_types.py:546 msgid "SEO Meta snapshot" msgstr "SEO 메타 스냅샷" @@ -647,7 +667,7 @@ msgstr "단일 제품 검색(상세 보기)" #: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683 #: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725 -#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763 +#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:787 msgid "Product UUID or slug" msgstr "제품 UUID 또는 슬러그" @@ -672,267 +692,280 @@ msgstr "제품 삭제" msgid "lists all permitted feedbacks for a product" msgstr "제품에 대해 허용된 모든 피드백을 나열합니다." -#: engine/core/docs/drf/viewsets.py:758 +#: engine/core/docs/drf/viewsets.py:757 +msgid "retrieve exact products by identifier" +msgstr "식별자로 정확한 제품 검색" + +#: engine/core/docs/drf/viewsets.py:759 +msgid "" +"retrieve a list of products by identifier type (uuid, slug, or sku). Send a " +"POST request with `identificator_type` and `identificators` (list of " +"values)." +msgstr "" +"식별자 유형(uuid, slug 또는 sku)별로 제품 목록을 가져옵니다. `identificator_type` 및 " +"`identificators`(값 목록)을 포함한 POST 요청을 전송합니다." + +#: engine/core/docs/drf/viewsets.py:782 msgid "returns a snapshot of the product's SEO meta data" msgstr "제품의 SEO 메타 데이터 스냅샷을 반환합니다." -#: engine/core/docs/drf/viewsets.py:779 +#: engine/core/docs/drf/viewsets.py:803 msgid "list all addresses" msgstr "모든 주소 나열" -#: engine/core/docs/drf/viewsets.py:789 +#: engine/core/docs/drf/viewsets.py:813 msgid "retrieve a single address" msgstr "단일 주소 검색" -#: engine/core/docs/drf/viewsets.py:799 +#: engine/core/docs/drf/viewsets.py:823 msgid "create a new address" msgstr "새 주소 만들기" -#: engine/core/docs/drf/viewsets.py:810 +#: engine/core/docs/drf/viewsets.py:834 msgid "delete an address" msgstr "주소 삭제" -#: engine/core/docs/drf/viewsets.py:820 +#: engine/core/docs/drf/viewsets.py:844 msgid "update an entire address" msgstr "전체 주소 업데이트" -#: engine/core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:855 msgid "partially update an address" msgstr "주소 부분 업데이트" -#: engine/core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:866 msgid "autocomplete address suggestions" msgstr "주소 자동 완성 입력" -#: engine/core/docs/drf/viewsets.py:848 +#: engine/core/docs/drf/viewsets.py:872 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "원시 데이터 쿼리 문자열, 지오-IP 엔드포인트의 데이터를 추가하세요." -#: engine/core/docs/drf/viewsets.py:855 +#: engine/core/docs/drf/viewsets.py:879 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "결과 금액을 제한합니다(1 < 제한 < 10, 기본값: 5)." -#: engine/core/docs/drf/viewsets.py:871 +#: engine/core/docs/drf/viewsets.py:895 msgid "list all feedbacks (simple view)" msgstr "모든 피드백 나열(간편 보기)" -#: engine/core/docs/drf/viewsets.py:881 +#: engine/core/docs/drf/viewsets.py:905 msgid "retrieve a single feedback (detailed view)" msgstr "단일 피드백 검색(상세 보기)" -#: engine/core/docs/drf/viewsets.py:888 +#: engine/core/docs/drf/viewsets.py:912 msgid "create a feedback" msgstr "피드백 만들기" -#: engine/core/docs/drf/viewsets.py:895 +#: engine/core/docs/drf/viewsets.py:919 msgid "delete a feedback" msgstr "피드백 삭제" -#: engine/core/docs/drf/viewsets.py:902 +#: engine/core/docs/drf/viewsets.py:926 msgid "rewrite an existing feedback saving non-editables" msgstr "편집할 수 없는 기존 피드백을 다시 작성합니다." -#: engine/core/docs/drf/viewsets.py:909 +#: engine/core/docs/drf/viewsets.py:933 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "기존 피드백의 일부 필드를 다시 작성하여 편집할 수 없는 항목을 저장합니다." -#: engine/core/docs/drf/viewsets.py:919 +#: engine/core/docs/drf/viewsets.py:943 msgid "list all order–product relations (simple view)" msgstr "모든 주문-제품 관계 나열(단순 보기)" -#: engine/core/docs/drf/viewsets.py:929 +#: engine/core/docs/drf/viewsets.py:953 msgid "retrieve a single order–product relation (detailed view)" msgstr "단일 주문-제품 관계 검색(상세 보기)" -#: engine/core/docs/drf/viewsets.py:939 +#: engine/core/docs/drf/viewsets.py:963 msgid "create a new order–product relation" msgstr "새 주문-제품 관계 생성" -#: engine/core/docs/drf/viewsets.py:949 +#: engine/core/docs/drf/viewsets.py:973 msgid "replace an existing order–product relation" msgstr "기존 주문-제품 관계 교체" -#: engine/core/docs/drf/viewsets.py:959 +#: engine/core/docs/drf/viewsets.py:983 msgid "partially update an existing order–product relation" msgstr "기존 주문-제품 관계를 부분적으로 업데이트합니다." -#: engine/core/docs/drf/viewsets.py:969 +#: engine/core/docs/drf/viewsets.py:993 msgid "delete an order–product relation" msgstr "주문-제품 관계 삭제" -#: engine/core/docs/drf/viewsets.py:979 +#: engine/core/docs/drf/viewsets.py:1003 msgid "add or remove feedback on an order–product relation" msgstr "주문-제품 관계에 대한 피드백 추가 또는 제거" -#: engine/core/docs/drf/viewsets.py:996 +#: engine/core/docs/drf/viewsets.py:1020 msgid "list all brands (simple view)" msgstr "모든 브랜드 나열(간편 보기)" -#: engine/core/docs/drf/viewsets.py:1003 +#: engine/core/docs/drf/viewsets.py:1027 msgid "retrieve a single brand (detailed view)" msgstr "단일 브랜드 검색(상세 보기)" -#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051 +#: engine/core/docs/drf/viewsets.py:1032 engine/core/docs/drf/viewsets.py:1075 msgid "Brand UUID or slug" msgstr "브랜드 UUID 또는 슬러그" -#: engine/core/docs/drf/viewsets.py:1018 +#: engine/core/docs/drf/viewsets.py:1042 msgid "create a brand" msgstr "브랜드 만들기" -#: engine/core/docs/drf/viewsets.py:1025 +#: engine/core/docs/drf/viewsets.py:1049 msgid "delete a brand" msgstr "브랜드 삭제" -#: engine/core/docs/drf/viewsets.py:1032 +#: engine/core/docs/drf/viewsets.py:1056 msgid "rewrite an existing brand saving non-editables" msgstr "편집할 수 없는 기존 브랜드를 저장하여 다시 작성하기" -#: engine/core/docs/drf/viewsets.py:1039 +#: engine/core/docs/drf/viewsets.py:1063 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "편집할 수 없는 항목을 저장하여 기존 브랜드의 일부 필드 다시 작성하기" -#: engine/core/docs/drf/viewsets.py:1064 +#: engine/core/docs/drf/viewsets.py:1088 msgid "list all vendors (simple view)" msgstr "모든 공급업체 목록(간편 보기)" -#: engine/core/docs/drf/viewsets.py:1074 +#: engine/core/docs/drf/viewsets.py:1098 msgid "retrieve a single vendor (detailed view)" msgstr "단일 공급업체 검색(상세 보기)" -#: engine/core/docs/drf/viewsets.py:1081 +#: engine/core/docs/drf/viewsets.py:1105 msgid "create a vendor" msgstr "공급업체 만들기" -#: engine/core/docs/drf/viewsets.py:1088 +#: engine/core/docs/drf/viewsets.py:1112 msgid "delete a vendor" msgstr "공급업체 삭제" -#: engine/core/docs/drf/viewsets.py:1095 +#: engine/core/docs/drf/viewsets.py:1119 msgid "rewrite an existing vendor saving non-editables" msgstr "편집할 수 없는 기존 벤더를 저장하여 다시 작성하기" -#: engine/core/docs/drf/viewsets.py:1102 +#: engine/core/docs/drf/viewsets.py:1126 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "편집할 수 없는 기존 공급업체의 일부 필드 다시 작성" -#: engine/core/docs/drf/viewsets.py:1112 +#: engine/core/docs/drf/viewsets.py:1136 msgid "list all product images (simple view)" msgstr "모든 제품 이미지 나열(간편 보기)" -#: engine/core/docs/drf/viewsets.py:1122 +#: engine/core/docs/drf/viewsets.py:1146 msgid "retrieve a single product image (detailed view)" msgstr "단일 제품 이미지 검색(상세 보기)" -#: engine/core/docs/drf/viewsets.py:1129 +#: engine/core/docs/drf/viewsets.py:1153 msgid "create a product image" msgstr "제품 이미지 만들기" -#: engine/core/docs/drf/viewsets.py:1139 +#: engine/core/docs/drf/viewsets.py:1163 msgid "delete a product image" msgstr "제품 이미지 삭제" -#: engine/core/docs/drf/viewsets.py:1146 +#: engine/core/docs/drf/viewsets.py:1170 msgid "rewrite an existing product image saving non-editables" msgstr "편집할 수 없는 기존 제품 이미지 다시 작성하기" -#: engine/core/docs/drf/viewsets.py:1154 +#: engine/core/docs/drf/viewsets.py:1178 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "편집할 수 없는 기존 제품 이미지의 일부 필드를 다시 작성합니다." -#: engine/core/docs/drf/viewsets.py:1165 +#: engine/core/docs/drf/viewsets.py:1189 msgid "list all promo codes (simple view)" msgstr "모든 프로모션 코드 목록(간편 보기)" -#: engine/core/docs/drf/viewsets.py:1175 +#: engine/core/docs/drf/viewsets.py:1199 msgid "retrieve a single promo code (detailed view)" msgstr "단일 프로모션 코드 검색(상세 보기)" -#: engine/core/docs/drf/viewsets.py:1182 +#: engine/core/docs/drf/viewsets.py:1206 msgid "create a promo code" msgstr "프로모션 코드 생성" -#: engine/core/docs/drf/viewsets.py:1189 +#: engine/core/docs/drf/viewsets.py:1213 msgid "delete a promo code" msgstr "프로모션 코드 삭제" -#: engine/core/docs/drf/viewsets.py:1196 +#: engine/core/docs/drf/viewsets.py:1220 msgid "rewrite an existing promo code saving non-editables" msgstr "편집할 수 없는 기존 프로모션 코드 다시 작성하기" -#: engine/core/docs/drf/viewsets.py:1203 +#: engine/core/docs/drf/viewsets.py:1227 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "편집할 수 없는 기존 프로모션 코드의 일부 필드를 다시 작성합니다." -#: engine/core/docs/drf/viewsets.py:1213 +#: engine/core/docs/drf/viewsets.py:1237 msgid "list all promotions (simple view)" msgstr "모든 프로모션 목록(간편 보기)" -#: engine/core/docs/drf/viewsets.py:1223 +#: engine/core/docs/drf/viewsets.py:1247 msgid "retrieve a single promotion (detailed view)" msgstr "단일 프로모션 검색(상세 보기)" -#: engine/core/docs/drf/viewsets.py:1230 +#: engine/core/docs/drf/viewsets.py:1254 msgid "create a promotion" msgstr "프로모션 만들기" -#: engine/core/docs/drf/viewsets.py:1237 +#: engine/core/docs/drf/viewsets.py:1261 msgid "delete a promotion" msgstr "프로모션 삭제" -#: engine/core/docs/drf/viewsets.py:1244 +#: engine/core/docs/drf/viewsets.py:1268 msgid "rewrite an existing promotion saving non-editables" msgstr "편집할 수 없는 항목을 저장하여 기존 프로모션 다시 작성하기" -#: engine/core/docs/drf/viewsets.py:1251 +#: engine/core/docs/drf/viewsets.py:1275 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "편집할 수 없는 항목을 저장하여 기존 프로모션의 일부 필드 다시 작성하기" -#: engine/core/docs/drf/viewsets.py:1261 +#: engine/core/docs/drf/viewsets.py:1285 msgid "list all stocks (simple view)" msgstr "모든 종목 목록(간편 보기)" -#: engine/core/docs/drf/viewsets.py:1268 +#: engine/core/docs/drf/viewsets.py:1292 msgid "retrieve a single stock (detailed view)" msgstr "단일 재고 검색(상세 보기)" -#: engine/core/docs/drf/viewsets.py:1275 +#: engine/core/docs/drf/viewsets.py:1299 msgid "create a stock record" msgstr "재고 기록 만들기" -#: engine/core/docs/drf/viewsets.py:1282 +#: engine/core/docs/drf/viewsets.py:1306 msgid "delete a stock record" msgstr "재고 기록 삭제" -#: engine/core/docs/drf/viewsets.py:1289 +#: engine/core/docs/drf/viewsets.py:1313 msgid "rewrite an existing stock record saving non-editables" msgstr "편집할 수 없는 항목을 저장하여 기존 재고 레코드 다시 작성하기" -#: engine/core/docs/drf/viewsets.py:1297 +#: engine/core/docs/drf/viewsets.py:1321 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "편집할 수 없는 항목을 저장하는 기존 재고 레코드의 일부 필드 다시 쓰기" -#: engine/core/docs/drf/viewsets.py:1308 +#: engine/core/docs/drf/viewsets.py:1332 msgid "list all product tags (simple view)" msgstr "모든 제품 태그 나열(간편 보기)" -#: engine/core/docs/drf/viewsets.py:1318 +#: engine/core/docs/drf/viewsets.py:1342 msgid "retrieve a single product tag (detailed view)" msgstr "단일 제품 태그 검색(상세 보기)" -#: engine/core/docs/drf/viewsets.py:1325 +#: engine/core/docs/drf/viewsets.py:1349 msgid "create a product tag" msgstr "제품 태그 생성" -#: engine/core/docs/drf/viewsets.py:1335 +#: engine/core/docs/drf/viewsets.py:1359 msgid "delete a product tag" msgstr "제품 태그 삭제" -#: engine/core/docs/drf/viewsets.py:1342 +#: engine/core/docs/drf/viewsets.py:1366 msgid "rewrite an existing product tag saving non-editables" msgstr "편집할 수 없는 기존 제품 태그 다시 작성하기" -#: engine/core/docs/drf/viewsets.py:1350 +#: engine/core/docs/drf/viewsets.py:1374 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "편집할 수 없는 기존 제품 태그의 일부 필드를 다시 작성합니다." @@ -941,420 +974,426 @@ msgstr "편집할 수 없는 기존 제품 태그의 일부 필드를 다시 작 msgid "no search term provided." msgstr "검색어가 입력되지 않았습니다." -#: engine/core/filters.py:78 engine/core/filters.py:484 -#: engine/core/filters.py:625 +#: engine/core/filters.py:79 engine/core/filters.py:485 +#: engine/core/filters.py:626 msgid "Search" msgstr "검색" -#: engine/core/filters.py:79 engine/core/filters.py:663 -#: engine/core/filters.py:692 +#: engine/core/filters.py:80 engine/core/filters.py:664 +#: engine/core/filters.py:693 msgid "UUID" msgstr "UUID" -#: engine/core/filters.py:80 engine/core/filters.py:487 -#: engine/core/filters.py:627 +#: engine/core/filters.py:81 engine/core/filters.py:488 +#: engine/core/filters.py:628 msgid "Name" msgstr "이름" -#: engine/core/filters.py:82 engine/core/filters.py:630 +#: engine/core/filters.py:83 engine/core/filters.py:631 msgid "Categories" msgstr "카테고리" -#: engine/core/filters.py:86 +#: engine/core/filters.py:87 msgid "Categories Slugs" msgstr "카테고리 슬러그" -#: engine/core/filters.py:88 engine/core/filters.py:495 +#: engine/core/filters.py:89 engine/core/filters.py:496 +#: engine/core/templates/admin_doc/index.html:37 +#: engine/core/templates/admin_doc/template_tag_index.html:12 msgid "Tags" msgstr "태그" -#: engine/core/filters.py:90 +#: engine/core/filters.py:91 msgid "Min Price" msgstr "최소 가격" -#: engine/core/filters.py:93 +#: engine/core/filters.py:94 msgid "Max Price" msgstr "최대 가격" -#: engine/core/filters.py:95 +#: engine/core/filters.py:96 msgid "Is Active" msgstr "활성 상태" -#: engine/core/filters.py:96 +#: engine/core/filters.py:97 msgid "Brand" msgstr "브랜드" -#: engine/core/filters.py:97 +#: engine/core/filters.py:98 msgid "Attributes" msgstr "속성" -#: engine/core/filters.py:99 +#: engine/core/filters.py:100 msgid "Quantity" msgstr "수량" -#: engine/core/filters.py:101 engine/core/filters.py:489 -#: engine/core/filters.py:628 engine/core/models.py:316 -#: engine/core/models.py:497 engine/core/models.py:663 +#: engine/core/filters.py:102 engine/core/filters.py:490 +#: engine/core/filters.py:629 engine/core/models.py:339 +#: engine/core/models.py:546 engine/core/models.py:736 msgid "Slug" msgstr "슬러그" -#: engine/core/filters.py:102 +#: engine/core/filters.py:103 msgid "Is Digital" msgstr "디지털" -#: engine/core/filters.py:104 +#: engine/core/filters.py:105 msgid "Include sub-categories" msgstr "하위 카테고리 포함" -#: engine/core/filters.py:108 +#: engine/core/filters.py:109 msgid "Include personal ordered" msgstr "개인 주문 제품 포함" -#: engine/core/filters.py:110 engine/core/models.py:667 +#: engine/core/filters.py:111 engine/core/models.py:740 msgid "SKU" msgstr "SKU" -#: engine/core/filters.py:212 +#: engine/core/filters.py:213 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "include_subcategories 플래그를 사용하려면 category_uuid가 있어야 합니다." -#: engine/core/filters.py:398 +#: engine/core/filters.py:399 msgid "Search (ID, product name or part number)" msgstr "검색(ID, 제품명 또는 부품 번호)" -#: engine/core/filters.py:402 +#: engine/core/filters.py:403 msgid "Bought after (inclusive)" msgstr "구매 후(포함)" -#: engine/core/filters.py:405 +#: engine/core/filters.py:406 msgid "Bought before (inclusive)" msgstr "이전 구매(포함)" -#: engine/core/filters.py:410 engine/core/filters.py:461 -#: engine/core/filters.py:697 +#: engine/core/filters.py:411 engine/core/filters.py:462 +#: engine/core/filters.py:698 msgid "User email" msgstr "사용자 이메일" -#: engine/core/filters.py:413 engine/core/filters.py:464 -#: engine/core/filters.py:672 engine/core/filters.py:694 +#: engine/core/filters.py:414 engine/core/filters.py:465 +#: engine/core/filters.py:673 engine/core/filters.py:695 msgid "User UUID" msgstr "사용자 UUID" -#: engine/core/filters.py:415 +#: engine/core/filters.py:416 msgid "Status" msgstr "상태" -#: engine/core/filters.py:419 +#: engine/core/filters.py:420 msgid "Human Readable ID" msgstr "사람이 읽을 수 있는 ID" -#: engine/core/filters.py:488 +#: engine/core/filters.py:489 msgid "Parent" msgstr "부모" -#: engine/core/filters.py:492 +#: engine/core/filters.py:493 msgid "Whole category(has at least 1 product or not)" msgstr "전체 카테고리(1개 이상의 제품 보유 여부)" -#: engine/core/filters.py:496 +#: engine/core/filters.py:497 msgid "Level" msgstr "레벨" -#: engine/core/filters.py:667 +#: engine/core/filters.py:668 msgid "Product UUID" msgstr "제품 UUID" -#: engine/core/graphene/mutations.py:40 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "캐시에서 찾거나 캐시에 설정할 키" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:43 msgid "data to store in cache" msgstr "캐시에 저장할 데이터" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:46 msgid "timeout in seconds to set the data for into the cache" msgstr "캐시에 저장할 데이터를 설정하는 데 걸리는 시간(초)" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:49 msgid "cached data" msgstr "캐시된 데이터" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:64 msgid "camelized JSON data from the requested URL" msgstr "요청된 URL의 카멜라이즈된 JSON 데이터" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:248 +#: engine/core/graphene/mutations.py:69 engine/core/views.py:267 msgid "only URLs starting with http(s):// are allowed" msgstr "http(s)://로 시작하는 URL만 허용됩니다." -#: engine/core/graphene/mutations.py:86 +#: engine/core/graphene/mutations.py:87 msgid "add a product to the order" msgstr "주문에 제품 추가" -#: engine/core/graphene/mutations.py:109 engine/core/graphene/mutations.py:138 -#: engine/core/graphene/mutations.py:254 engine/core/graphene/mutations.py:306 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139 +#: engine/core/graphene/mutations.py:256 engine/core/graphene/mutations.py:308 #, python-brace-format msgid "order {order_uuid} not found" msgstr "주문 {order_uuid}을 찾을 수 없습니다!" -#: engine/core/graphene/mutations.py:115 engine/core/graphene/mutations.py:166 +#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167 msgid "remove a product from the order" msgstr "주문에서 제품 제거" -#: engine/core/graphene/mutations.py:144 +#: engine/core/graphene/mutations.py:145 msgid "remove all products from the order" msgstr "주문에서 모든 제품 제거" -#: engine/core/graphene/mutations.py:189 +#: engine/core/graphene/mutations.py:190 msgid "buy an order" msgstr "주문 구매" -#: engine/core/graphene/mutations.py:220 engine/core/graphene/mutations.py:282 +#: engine/core/graphene/mutations.py:222 engine/core/graphene/mutations.py:284 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "주문_uuid 또는 주문_hr_id 중 하나를 입력하세요 - 상호 배타적입니다!" -#: engine/core/graphene/mutations.py:249 engine/core/graphene/mutations.py:524 -#: engine/core/graphene/mutations.py:573 engine/core/viewsets.py:753 +#: engine/core/graphene/mutations.py:251 engine/core/graphene/mutations.py:526 +#: engine/core/graphene/mutations.py:576 engine/core/viewsets.py:783 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "order.buy() 메서드에서 잘못된 유형이 발생했습니다: {type(instance)!s}" -#: engine/core/graphene/mutations.py:260 +#: engine/core/graphene/mutations.py:262 msgid "perform an action on a list of products in the order" msgstr "제품 목록에 대한 작업을 순서대로 수행합니다." -#: engine/core/graphene/mutations.py:265 +#: engine/core/graphene/mutations.py:267 msgid "remove/add" msgstr "제거/추가" -#: engine/core/graphene/mutations.py:301 engine/core/graphene/mutations.py:342 +#: engine/core/graphene/mutations.py:303 engine/core/graphene/mutations.py:342 msgid "action must be either add or remove" msgstr "작업은 \"추가\" 또는 \"제거\"여야 합니다!" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:314 msgid "perform an action on a list of products in the wishlist" msgstr "위시리스트의 제품 목록에서 작업 수행하기" -#: engine/core/graphene/mutations.py:330 -msgid "please provide wishlist_uuid value" -msgstr "위시리스트_유아이디` 값을 입력하세요." - -#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:423 -#: engine/core/graphene/mutations.py:451 engine/core/graphene/mutations.py:479 -#: engine/core/graphene/mutations.py:529 +#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:424 +#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480 +#: engine/core/graphene/mutations.py:531 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "위시리스트 {wishlist_uuid}를 찾을 수 없습니다!" -#: engine/core/graphene/mutations.py:401 +#: engine/core/graphene/mutations.py:402 msgid "add a product to the wishlist" msgstr "주문에 제품 추가" -#: engine/core/graphene/mutations.py:429 +#: engine/core/graphene/mutations.py:430 msgid "remove a product from the wishlist" msgstr "주문에서 제품 제거" -#: engine/core/graphene/mutations.py:457 +#: engine/core/graphene/mutations.py:458 msgid "remove all products from the wishlist" msgstr "주문에서 제품 제거" -#: engine/core/graphene/mutations.py:485 +#: engine/core/graphene/mutations.py:486 msgid "buy all products from the wishlist" msgstr "주문에서 제품 제거" -#: engine/core/graphene/mutations.py:535 +#: engine/core/graphene/mutations.py:537 msgid "buy a product" msgstr "주문 구매" -#: engine/core/graphene/mutations.py:542 +#: engine/core/graphene/mutations.py:544 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" msgstr "속성을 attr1=value1,attr2=value2와 같은 형식의 문자열로 보내주세요." -#: engine/core/graphene/mutations.py:580 +#: engine/core/graphene/mutations.py:583 msgid "add or delete a feedback for orderproduct" msgstr "주문 제품에 대한 피드백 추가 또는 삭제" -#: engine/core/graphene/mutations.py:606 +#: engine/core/graphene/mutations.py:610 msgid "action must be either `add` or `remove`" msgstr "작업은 '추가' 또는 '제거' 중 하나여야 합니다!" -#: engine/core/graphene/mutations.py:609 +#: engine/core/graphene/mutations.py:613 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "주문 제품 {order_product_uuid}을 찾을 수 없습니다!" -#: engine/core/graphene/mutations.py:616 +#: engine/core/graphene/mutations.py:620 msgid "original address string provided by the user" msgstr "사용자가 제공한 원본 주소 문자열" -#: engine/core/graphene/mutations.py:653 engine/core/models.py:986 -#: engine/core/models.py:999 engine/core/models.py:1443 -#: engine/core/models.py:1474 engine/core/models.py:1505 -#: engine/core/viewsets.py:760 +#: engine/core/graphene/mutations.py:662 engine/core/models.py:1079 +#: engine/core/models.py:1092 engine/core/models.py:1544 +#: engine/core/models.py:1575 engine/core/models.py:1606 +#: engine/core/viewsets.py:790 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name}가 존재하지 않습니다: {uuid}!" -#: engine/core/graphene/mutations.py:667 +#: engine/core/graphene/mutations.py:676 msgid "limit must be between 1 and 10" msgstr "한도는 1에서 10 사이여야 합니다." -#: engine/core/graphene/mutations.py:716 +#: engine/core/graphene/mutations.py:726 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - 마법처럼 작동" -#: engine/core/graphene/object_types.py:84 -#: engine/core/graphene/object_types.py:420 -#: engine/core/graphene/object_types.py:471 engine/core/models.py:803 -#: engine/core/models.py:1297 engine/core/models.py:2033 +#: engine/core/graphene/object_types.py:88 +#: engine/core/graphene/object_types.py:425 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:889 +#: engine/core/models.py:1394 engine/core/models.py:2139 msgid "attributes" msgstr "속성" -#: engine/core/graphene/object_types.py:97 +#: engine/core/graphene/object_types.py:101 msgid "grouped attributes" msgstr "그룹화된 속성" -#: engine/core/graphene/object_types.py:104 +#: engine/core/graphene/object_types.py:108 msgid "groups of attributes" msgstr "속성 그룹" -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:217 -#: engine/core/graphene/object_types.py:255 engine/core/models.py:440 +#: engine/core/graphene/object_types.py:122 +#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:264 engine/core/models.py:489 msgid "categories" msgstr "카테고리" -#: engine/core/graphene/object_types.py:134 engine/core/models.py:511 +#: engine/core/graphene/object_types.py:138 engine/core/models.py:564 msgid "brands" msgstr "브랜드" -#: engine/core/graphene/object_types.py:219 +#: engine/core/graphene/object_types.py:226 msgid "category image url" msgstr "카테고리" -#: engine/core/graphene/object_types.py:220 -#: engine/core/graphene/object_types.py:365 engine/core/models.py:278 +#: engine/core/graphene/object_types.py:227 +#: engine/core/graphene/object_types.py:369 engine/core/models.py:301 msgid "markup percentage" msgstr "마크업 퍼센트" -#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:231 msgid "which attributes and values can be used for filtering this category." msgstr "이 카테고리를 필터링하는 데 사용할 수 있는 속성 및 값입니다." -#: engine/core/graphene/object_types.py:230 +#: engine/core/graphene/object_types.py:237 msgid "" "minimum and maximum prices for products in this category, if available." msgstr "이 카테고리의 제품에 대한 최소 및 최대 가격(가능한 경우)." -#: engine/core/graphene/object_types.py:234 +#: engine/core/graphene/object_types.py:240 +msgid "brands in this category" +msgstr "이 카테고리의 브랜드" + +#: engine/core/graphene/object_types.py:242 msgid "tags for this category" msgstr "이 카테고리의 태그" -#: engine/core/graphene/object_types.py:237 +#: engine/core/graphene/object_types.py:245 msgid "products in this category" msgstr "이 카테고리의 제품" -#: engine/core/graphene/object_types.py:372 engine/core/models.py:183 +#: engine/core/graphene/object_types.py:376 engine/core/models.py:202 msgid "vendors" msgstr "공급업체" -#: engine/core/graphene/object_types.py:376 +#: engine/core/graphene/object_types.py:380 msgid "Latitude (Y coordinate)" msgstr "위도(Y 좌표)" -#: engine/core/graphene/object_types.py:377 +#: engine/core/graphene/object_types.py:381 msgid "Longitude (X coordinate)" msgstr "경도(X 좌표)" -#: engine/core/graphene/object_types.py:406 +#: engine/core/graphene/object_types.py:411 msgid "comment" msgstr "방법" -#: engine/core/graphene/object_types.py:408 -#: engine/core/graphene/object_types.py:542 +#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:548 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "1에서 10까지의 등급 값(포함) 또는 설정하지 않은 경우 0입니다." -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:421 msgid "represents feedback from a user." msgstr "사용자의 피드백을 나타냅니다." -#: engine/core/graphene/object_types.py:421 -#: engine/core/graphene/object_types.py:472 engine/core/models.py:1291 +#: engine/core/graphene/object_types.py:426 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:1388 msgid "notifications" msgstr "알림" -#: engine/core/graphene/object_types.py:423 +#: engine/core/graphene/object_types.py:428 msgid "download url for this order product if applicable" msgstr "해당되는 경우 이 주문 제품의 URL 다운로드" -#: engine/core/graphene/object_types.py:425 engine/core/models.py:1856 +#: engine/core/graphene/object_types.py:430 engine/core/models.py:1959 msgid "feedback" msgstr "피드백" -#: engine/core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:464 msgid "a list of order products in this order" msgstr "주문 제품 목록은 다음 순서로 표시됩니다." -#: engine/core/graphene/object_types.py:461 engine/core/models.py:1261 +#: engine/core/graphene/object_types.py:466 engine/core/models.py:1358 msgid "billing address" msgstr "청구서 수신 주소" -#: engine/core/graphene/object_types.py:465 +#: engine/core/graphene/object_types.py:470 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" msgstr "이 주문의 배송 주소는 청구지 주소와 동일하거나 해당되지 않는 경우 비워 둡니다." -#: engine/core/graphene/object_types.py:468 +#: engine/core/graphene/object_types.py:473 msgid "total price of this order" msgstr "이 주문의 총 가격" -#: engine/core/graphene/object_types.py:469 +#: engine/core/graphene/object_types.py:474 msgid "total quantity of products in order" msgstr "주문한 제품의 총 수량" -#: engine/core/graphene/object_types.py:470 +#: engine/core/graphene/object_types.py:475 msgid "are all products in the order digital" msgstr "주문에 포함된 모든 제품이 디지털 제품인가요?" -#: engine/core/graphene/object_types.py:474 +#: engine/core/graphene/object_types.py:479 msgid "transactions for this order" msgstr "이 주문에 대한 거래" -#: engine/core/graphene/object_types.py:494 engine/core/models.py:1325 +#: engine/core/graphene/object_types.py:499 engine/core/models.py:1422 msgid "orders" msgstr "주문" -#: engine/core/graphene/object_types.py:515 +#: engine/core/graphene/object_types.py:520 msgid "image url" msgstr "이미지 URL" -#: engine/core/graphene/object_types.py:522 +#: engine/core/graphene/object_types.py:527 msgid "product's images" msgstr "제품 이미지" -#: engine/core/graphene/object_types.py:529 engine/core/models.py:439 -#: engine/core/models.py:596 +#: engine/core/graphene/object_types.py:534 engine/core/models.py:488 +#: engine/core/models.py:661 msgid "category" msgstr "카테고리" -#: engine/core/graphene/object_types.py:531 engine/core/models.py:1857 +#: engine/core/graphene/object_types.py:536 engine/core/models.py:1960 msgid "feedbacks" msgstr "피드백" -#: engine/core/graphene/object_types.py:532 engine/core/models.py:510 -#: engine/core/models.py:605 +#: engine/core/graphene/object_types.py:537 engine/core/models.py:563 +#: engine/core/models.py:670 msgid "brand" msgstr "브랜드" -#: engine/core/graphene/object_types.py:534 engine/core/models.py:103 +#: engine/core/graphene/object_types.py:538 +msgid "video url" +msgstr "동영상 URL" + +#: engine/core/graphene/object_types.py:540 engine/core/models.py:122 msgid "attribute groups" msgstr "속성 그룹" -#: engine/core/graphene/object_types.py:536 +#: engine/core/graphene/object_types.py:542 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1362,7 +1401,7 @@ msgstr "속성 그룹" msgid "price" msgstr "가격" -#: engine/core/graphene/object_types.py:537 +#: engine/core/graphene/object_types.py:543 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1370,39 +1409,39 @@ msgstr "가격" msgid "quantity" msgstr "수량" -#: engine/core/graphene/object_types.py:538 +#: engine/core/graphene/object_types.py:544 msgid "number of feedbacks" msgstr "피드백 수" -#: engine/core/graphene/object_types.py:539 +#: engine/core/graphene/object_types.py:545 msgid "only available for personal orders" msgstr "개인 주문만 가능한 제품" -#: engine/core/graphene/object_types.py:544 +#: engine/core/graphene/object_types.py:550 msgid "discount price" msgstr "할인 가격" -#: engine/core/graphene/object_types.py:568 engine/core/models.py:682 +#: engine/core/graphene/object_types.py:575 engine/core/models.py:755 msgid "products" msgstr "제품" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:691 msgid "promocodes" msgstr "프로모션 코드" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:706 msgid "products on sale" msgstr "판매 중인 제품" -#: engine/core/graphene/object_types.py:701 engine/core/models.py:935 +#: engine/core/graphene/object_types.py:720 engine/core/models.py:1028 msgid "promotions" msgstr "프로모션" -#: engine/core/graphene/object_types.py:705 engine/core/models.py:182 +#: engine/core/graphene/object_types.py:727 engine/core/models.py:201 msgid "vendor" msgstr "공급업체" -#: engine/core/graphene/object_types.py:706 engine/core/models.py:681 +#: engine/core/graphene/object_types.py:728 engine/core/models.py:754 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1410,102 +1449,102 @@ msgstr "공급업체" msgid "product" msgstr "제품" -#: engine/core/graphene/object_types.py:718 engine/core/models.py:958 +#: engine/core/graphene/object_types.py:740 engine/core/models.py:1051 msgid "wishlisted products" msgstr "위시리스트 제품" -#: engine/core/graphene/object_types.py:725 engine/core/models.py:975 +#: engine/core/graphene/object_types.py:747 engine/core/models.py:1068 msgid "wishlists" msgstr "위시리스트" -#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:752 msgid "tagged products" msgstr "태그가 지정된 제품" -#: engine/core/graphene/object_types.py:738 engine/core/models.py:219 -#: engine/core/models.py:611 +#: engine/core/graphene/object_types.py:760 engine/core/models.py:238 +#: engine/core/models.py:676 msgid "product tags" msgstr "제품 태그" -#: engine/core/graphene/object_types.py:743 +#: engine/core/graphene/object_types.py:765 msgid "tagged categories" msgstr "태그가 지정된 카테고리" -#: engine/core/graphene/object_types.py:751 +#: engine/core/graphene/object_types.py:773 msgid "categories tags" msgstr "카테고리 태그" -#: engine/core/graphene/object_types.py:755 +#: engine/core/graphene/object_types.py:777 msgid "project name" msgstr "프로젝트 이름" -#: engine/core/graphene/object_types.py:756 +#: engine/core/graphene/object_types.py:778 msgid "company name" msgstr "회사 이름" -#: engine/core/graphene/object_types.py:757 +#: engine/core/graphene/object_types.py:779 msgid "company address" msgstr "회사 주소" -#: engine/core/graphene/object_types.py:758 +#: engine/core/graphene/object_types.py:780 msgid "company phone number" msgstr "회사 전화번호" -#: engine/core/graphene/object_types.py:761 +#: engine/core/graphene/object_types.py:783 msgid "email from, sometimes it must be used instead of host user value" msgstr "'이메일 보낸 사람'을 호스트 사용자 값 대신 사용해야 하는 경우가 있습니다." -#: engine/core/graphene/object_types.py:764 +#: engine/core/graphene/object_types.py:786 msgid "email host user" msgstr "이메일 호스트 사용자" -#: engine/core/graphene/object_types.py:765 +#: engine/core/graphene/object_types.py:787 msgid "maximum amount for payment" msgstr "최대 결제 금액" -#: engine/core/graphene/object_types.py:766 +#: engine/core/graphene/object_types.py:788 msgid "minimum amount for payment" msgstr "최소 결제 금액" -#: engine/core/graphene/object_types.py:767 +#: engine/core/graphene/object_types.py:789 msgid "analytics data" msgstr "애널리틱스 데이터" -#: engine/core/graphene/object_types.py:768 +#: engine/core/graphene/object_types.py:790 msgid "advertisement data" msgstr "광고 데이터" -#: engine/core/graphene/object_types.py:771 +#: engine/core/graphene/object_types.py:793 msgid "company configuration" msgstr "구성" -#: engine/core/graphene/object_types.py:775 +#: engine/core/graphene/object_types.py:797 msgid "language code" msgstr "언어 코드" -#: engine/core/graphene/object_types.py:776 +#: engine/core/graphene/object_types.py:798 msgid "language name" msgstr "언어 이름" -#: engine/core/graphene/object_types.py:777 +#: engine/core/graphene/object_types.py:799 msgid "language flag, if exists :)" msgstr "언어 플래그가 있는 경우 :)" -#: engine/core/graphene/object_types.py:780 +#: engine/core/graphene/object_types.py:802 msgid "supported languages" msgstr "지원되는 언어 목록 보기" -#: engine/core/graphene/object_types.py:812 -#: engine/core/graphene/object_types.py:815 -#: engine/core/graphene/object_types.py:818 +#: engine/core/graphene/object_types.py:834 +#: engine/core/graphene/object_types.py:837 +#: engine/core/graphene/object_types.py:840 msgid "products search results" msgstr "제품 검색 결과" -#: engine/core/graphene/object_types.py:820 +#: engine/core/graphene/object_types.py:842 msgid "posts search results" msgstr "제품 검색 결과" -#: engine/core/models.py:75 +#: engine/core/models.py:91 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1515,23 +1554,23 @@ msgstr "" "계층적일 수 있는 속성 그룹을 나타냅니다. 이 클래스는 속성 그룹을 관리하고 구성하는 데 사용됩니다. 속성 그룹은 상위 그룹을 가질 수 " "있으며 계층 구조를 형성할 수 있습니다. 이는 복잡한 시스템에서 속성을 보다 효과적으로 분류하고 관리하는 데 유용할 수 있습니다." -#: engine/core/models.py:88 +#: engine/core/models.py:107 msgid "parent of this group" msgstr "이 그룹의 부모" -#: engine/core/models.py:89 +#: engine/core/models.py:108 msgid "parent attribute group" msgstr "상위 속성 그룹" -#: engine/core/models.py:93 engine/core/models.py:94 +#: engine/core/models.py:112 engine/core/models.py:113 msgid "attribute group's name" msgstr "속성 그룹의 이름" -#: engine/core/models.py:102 engine/core/models.py:763 +#: engine/core/models.py:121 engine/core/models.py:849 msgid "attribute group" msgstr "속성 그룹" -#: engine/core/models.py:108 +#: engine/core/models.py:127 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1546,47 +1585,47 @@ msgstr "" "제품에 적용된 마크업 비율을 저장합니다. 또한 이 모델은 추가 메타데이터 및 제약 조건을 유지하므로 타사 공급업체와 상호 작용하는 " "시스템에서 사용하기에 적합합니다." -#: engine/core/models.py:122 +#: engine/core/models.py:141 msgid "stores credentials and endpoints required for vendor communication" msgstr "공급업체의 API 통신에 필요한 자격 증명과 엔드포인트를 저장합니다." -#: engine/core/models.py:124 +#: engine/core/models.py:143 msgid "authentication info" msgstr "인증 정보" -#: engine/core/models.py:129 +#: engine/core/models.py:148 msgid "define the markup for products retrieved from this vendor" msgstr "이 공급업체에서 검색된 제품에 대한 마크업을 정의합니다." -#: engine/core/models.py:130 +#: engine/core/models.py:149 msgid "vendor markup percentage" msgstr "공급업체 마크업 비율" -#: engine/core/models.py:134 +#: engine/core/models.py:153 msgid "name of this vendor" msgstr "이 공급업체의 이름" -#: engine/core/models.py:135 +#: engine/core/models.py:154 msgid "vendor name" msgstr "공급업체 이름" -#: engine/core/models.py:150 +#: engine/core/models.py:169 msgid "response file" msgstr "응답 파일" -#: engine/core/models.py:151 +#: engine/core/models.py:170 msgid "vendor's last processing response" msgstr "공급업체의 마지막 처리 응답" -#: engine/core/models.py:157 +#: engine/core/models.py:176 msgid "vendor's integration file path" msgstr "공급업체의 통합 파일 경로" -#: engine/core/models.py:158 +#: engine/core/models.py:177 msgid "integration path" msgstr "통합 경로" -#: engine/core/models.py:192 +#: engine/core/models.py:211 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1598,27 +1637,27 @@ msgstr "" "이름의 조합을 통해 제품을 고유하게 식별하고 분류하도록 설계되었습니다. 믹스인을 통해 내보낸 작업을 지원하며 관리 목적으로 메타데이터 " "사용자 지정을 제공합니다." -#: engine/core/models.py:204 engine/core/models.py:235 +#: engine/core/models.py:223 engine/core/models.py:254 msgid "internal tag identifier for the product tag" msgstr "제품 태그의 내부 태그 식별자" -#: engine/core/models.py:205 engine/core/models.py:236 +#: engine/core/models.py:224 engine/core/models.py:255 msgid "tag name" msgstr "태그 이름" -#: engine/core/models.py:209 engine/core/models.py:240 +#: engine/core/models.py:228 engine/core/models.py:259 msgid "user-friendly name for the product tag" msgstr "제품 태그의 사용자 친화적인 이름" -#: engine/core/models.py:210 engine/core/models.py:241 +#: engine/core/models.py:229 engine/core/models.py:260 msgid "tag display name" msgstr "태그 표시 이름" -#: engine/core/models.py:218 +#: engine/core/models.py:237 msgid "product tag" msgstr "제품 태그" -#: engine/core/models.py:224 +#: engine/core/models.py:243 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 " @@ -1627,15 +1666,15 @@ msgstr "" "제품에 사용되는 카테고리 태그를 나타냅니다. 이 클래스는 제품을 연결하고 분류하는 데 사용할 수 있는 카테고리 태그를 모델링합니다. 내부" " 태그 식별자 및 사용자 친화적인 표시 이름에 대한 속성을 포함합니다." -#: engine/core/models.py:249 +#: engine/core/models.py:268 msgid "category tag" msgstr "카테고리 태그" -#: engine/core/models.py:250 engine/core/models.py:322 +#: engine/core/models.py:269 engine/core/models.py:345 msgid "category tags" msgstr "카테고리 태그" -#: engine/core/models.py:255 +#: engine/core/models.py:274 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1652,51 +1691,51 @@ msgstr "" "있습니다. 이 클래스는 일반적으로 애플리케이션 내에서 제품 카테고리 또는 기타 유사한 그룹을 정의하고 관리하는 데 사용되며, 사용자나 " "관리자가 카테고리의 이름, 설명 및 계층 구조를 지정하고 이미지, 태그 또는 우선순위와 같은 속성을 할당할 수 있도록 합니다." -#: engine/core/models.py:269 +#: engine/core/models.py:292 msgid "upload an image representing this category" msgstr "이 카테고리를 대표하는 이미지 업로드" -#: engine/core/models.py:272 +#: engine/core/models.py:295 msgid "category image" msgstr "카테고리 이미지" -#: engine/core/models.py:277 +#: engine/core/models.py:300 msgid "define a markup percentage for products in this category" msgstr "이 카테고리의 제품에 대한 마크업 비율을 정의합니다." -#: engine/core/models.py:286 +#: engine/core/models.py:309 msgid "parent of this category to form a hierarchical structure" msgstr "계층 구조를 형성하는 이 카테고리의 상위 카테고리" -#: engine/core/models.py:287 +#: engine/core/models.py:310 msgid "parent category" msgstr "상위 카테고리" -#: engine/core/models.py:292 +#: engine/core/models.py:315 msgid "category name" msgstr "카테고리 이름" -#: engine/core/models.py:293 +#: engine/core/models.py:316 msgid "provide a name for this category" msgstr "이 카테고리의 이름을 입력합니다." -#: engine/core/models.py:300 +#: engine/core/models.py:323 msgid "add a detailed description for this category" msgstr "이 카테고리에 대한 자세한 설명 추가" -#: engine/core/models.py:301 +#: engine/core/models.py:324 msgid "category description" msgstr "카테고리 설명" -#: engine/core/models.py:321 +#: engine/core/models.py:344 msgid "tags that help describe or group this category" msgstr "이 카테고리를 설명하거나 그룹화하는 데 도움이 되는 태그" -#: engine/core/models.py:328 engine/core/models.py:503 +#: engine/core/models.py:351 engine/core/models.py:552 msgid "priority" msgstr "우선순위" -#: engine/core/models.py:446 +#: engine/core/models.py:495 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1707,47 +1746,43 @@ msgstr "" "시스템에서 브랜드 객체를 나타냅니다. 이 클래스는 이름, 로고, 설명, 관련 카테고리, 고유 슬러그, 우선순위 등 브랜드와 관련된 정보 " "및 속성을 처리합니다. 이를 통해 애플리케이션 내에서 브랜드 관련 데이터를 구성하고 표현할 수 있습니다." -#: engine/core/models.py:456 +#: engine/core/models.py:505 msgid "name of this brand" msgstr "이 브랜드 이름" -#: engine/core/models.py:457 +#: engine/core/models.py:506 msgid "brand name" msgstr "브랜드 이름" -#: engine/core/models.py:464 +#: engine/core/models.py:513 msgid "upload a logo representing this brand" msgstr "이 브랜드를 대표하는 로고 업로드" -#: engine/core/models.py:466 +#: engine/core/models.py:515 msgid "brand small image" msgstr "브랜드 작은 이미지" -#: engine/core/models.py:472 +#: engine/core/models.py:521 msgid "upload a big logo representing this brand" msgstr "이 브랜드를 대표하는 큰 로고 업로드" -#: engine/core/models.py:474 +#: engine/core/models.py:523 msgid "brand big image" msgstr "브랜드 빅 이미지" -#: engine/core/models.py:479 +#: engine/core/models.py:528 msgid "add a detailed description of the brand" msgstr "브랜드에 대한 자세한 설명 추가" -#: engine/core/models.py:480 +#: engine/core/models.py:529 msgid "brand description" msgstr "브랜드 설명" -#: engine/core/models.py:485 -msgid "optional categories that this brand is associated with" -msgstr "이 브랜드와 연관된 선택적 카테고리" +#: engine/core/models.py:534 engine/core/models.py:535 +msgid "DEPRECATED" +msgstr "사용 중단됨" -#: engine/core/models.py:486 -msgid "associated categories" -msgstr "카테고리" - -#: engine/core/models.py:516 +#: engine/core/models.py:569 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1760,72 +1795,72 @@ msgstr "" " 디지털 자산과 같은 재고 관련 속성에 대한 세부 정보를 제공합니다. 다양한 공급업체에서 제공하는 제품을 추적하고 평가할 수 있도록 하는" " 재고 관리 시스템의 일부입니다." -#: engine/core/models.py:528 +#: engine/core/models.py:581 msgid "the vendor supplying this product stock" msgstr "이 제품 재고를 공급하는 공급업체" -#: engine/core/models.py:529 +#: engine/core/models.py:582 msgid "associated vendor" msgstr "관련 공급업체" -#: engine/core/models.py:533 +#: engine/core/models.py:588 msgid "final price to the customer after markups" msgstr "마크업 후 고객에게 제공되는 최종 가격" -#: engine/core/models.py:534 +#: engine/core/models.py:589 msgid "selling price" msgstr "판매 가격" -#: engine/core/models.py:539 +#: engine/core/models.py:594 msgid "the product associated with this stock entry" msgstr "이 주식 항목과 관련된 제품" -#: engine/core/models.py:540 engine/core/models.py:828 -#: engine/core/models.py:874 engine/core/models.py:1912 +#: engine/core/models.py:595 engine/core/models.py:914 +#: engine/core/models.py:962 engine/core/models.py:2020 msgid "associated product" msgstr "관련 제품" -#: engine/core/models.py:547 +#: engine/core/models.py:604 msgid "the price paid to the vendor for this product" msgstr "이 제품에 대해 공급업체에 지불한 가격" -#: engine/core/models.py:548 +#: engine/core/models.py:605 msgid "vendor purchase price" msgstr "공급업체 구매 가격" -#: engine/core/models.py:552 +#: engine/core/models.py:609 msgid "available quantity of the product in stock" msgstr "재고가 있는 제품의 사용 가능한 수량" -#: engine/core/models.py:553 +#: engine/core/models.py:610 msgid "quantity in stock" msgstr "재고 수량" -#: engine/core/models.py:557 +#: engine/core/models.py:614 msgid "vendor-assigned SKU for identifying the product" msgstr "제품 식별을 위해 공급업체에서 할당하는 SKU" -#: engine/core/models.py:558 +#: engine/core/models.py:615 msgid "vendor sku" msgstr "공급업체의 SKU" -#: engine/core/models.py:564 +#: engine/core/models.py:621 msgid "digital file associated with this stock if applicable" msgstr "해당되는 경우 이 주식과 관련된 디지털 파일" -#: engine/core/models.py:565 +#: engine/core/models.py:622 msgid "digital file" msgstr "디지털 파일" -#: engine/core/models.py:569 +#: engine/core/models.py:626 msgid "system attributes" msgstr "시스템 속성" -#: engine/core/models.py:577 +#: engine/core/models.py:636 msgid "stock entries" msgstr "재고 항목" -#: engine/core/models.py:582 +#: engine/core/models.py:641 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1841,71 +1876,79 @@ msgstr "" "사용하도록 설계되었습니다. 이 클래스는 관련 모델(예: 카테고리, 브랜드, 제품 태그)과 상호 작용하고 자주 액세스하는 속성에 대한 " "캐싱을 관리하여 성능을 개선합니다. 애플리케이션 내에서 제품 데이터 및 관련 정보를 정의하고 조작하는 데 사용됩니다." -#: engine/core/models.py:595 +#: engine/core/models.py:660 msgid "category this product belongs to" msgstr "이 제품이 속한 카테고리" -#: engine/core/models.py:604 +#: engine/core/models.py:669 msgid "optionally associate this product with a brand" msgstr "선택 사항으로 이 제품을 브랜드와 연결" -#: engine/core/models.py:610 +#: engine/core/models.py:675 msgid "tags that help describe or group this product" msgstr "이 제품을 설명하거나 그룹화하는 데 도움이 되는 태그" -#: engine/core/models.py:615 +#: engine/core/models.py:680 msgid "indicates whether this product is digitally delivered" msgstr "이 제품이 디지털 방식으로 배송되는지 여부를 나타냅니다." -#: engine/core/models.py:616 +#: engine/core/models.py:681 msgid "is product digital" msgstr "제품 디지털화 여부" -#: engine/core/models.py:623 +#: engine/core/models.py:688 msgid "indicates whether this product should be updated from periodic task" msgstr "이 제품을 주기적 작업에서 업데이트해야 하는지 여부를 나타냅니다." -#: engine/core/models.py:625 +#: engine/core/models.py:690 msgid "is product updatable" msgstr "제품 업데이트 가능 여부" -#: engine/core/models.py:631 +#: engine/core/models.py:696 msgid "provide a clear identifying name for the product" msgstr "제품에 대한 명확한 식별 이름 제공" -#: engine/core/models.py:632 +#: engine/core/models.py:697 msgid "product name" msgstr "제품 이름" -#: engine/core/models.py:638 engine/core/models.py:923 +#: engine/core/models.py:703 engine/core/models.py:1012 msgid "add a detailed description of the product" msgstr "제품에 대한 자세한 설명 추가" -#: engine/core/models.py:639 +#: engine/core/models.py:704 msgid "product description" msgstr "제품 설명" -#: engine/core/models.py:646 +#: engine/core/models.py:710 +msgid "optional video file for this product" +msgstr "이 제품의 선택적 동영상 파일" + +#: engine/core/models.py:711 +msgid "product video" +msgstr "제품 동영상" + +#: engine/core/models.py:719 msgid "part number for this product" msgstr "이 제품의 부품 번호" -#: engine/core/models.py:647 +#: engine/core/models.py:720 msgid "part number" msgstr "부품 번호" -#: engine/core/models.py:666 +#: engine/core/models.py:739 msgid "stock keeping unit for this product" msgstr "이 제품의 재고 보관 단위" -#: engine/core/models.py:673 +#: engine/core/models.py:746 msgid "whether to export this product to marketplaces" msgstr "이 제품을 마켓플레이스에 수출할지 여부" -#: engine/core/models.py:674 +#: engine/core/models.py:747 msgid "Export to Marketplaces" msgstr "마켓플레이스로 내보내기" -#: engine/core/models.py:749 +#: engine/core/models.py:835 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 " @@ -1918,64 +1961,64 @@ msgstr "" "사용됩니다. 속성에는 연관된 카테고리, 그룹, 값 유형 및 이름이 있습니다. 이 모델은 문자열, 정수, 실수, 부울, 배열, 객체 등 " "여러 유형의 값을 지원합니다. 이를 통해 동적이고 유연한 데이터 구조화가 가능합니다." -#: engine/core/models.py:762 +#: engine/core/models.py:848 msgid "group of this attribute" msgstr "이 속성의 그룹" -#: engine/core/models.py:768 +#: engine/core/models.py:854 msgid "string" msgstr "문자열" -#: engine/core/models.py:769 +#: engine/core/models.py:855 msgid "integer" msgstr "정수" -#: engine/core/models.py:770 +#: engine/core/models.py:856 msgid "float" msgstr "Float" -#: engine/core/models.py:771 +#: engine/core/models.py:857 msgid "boolean" msgstr "부울" -#: engine/core/models.py:772 +#: engine/core/models.py:858 msgid "array" msgstr "배열" -#: engine/core/models.py:773 +#: engine/core/models.py:859 msgid "object" msgstr "개체" -#: engine/core/models.py:775 +#: engine/core/models.py:861 msgid "type of the attribute's value" msgstr "속성 값의 유형" -#: engine/core/models.py:776 +#: engine/core/models.py:862 msgid "value type" msgstr "값 유형" -#: engine/core/models.py:781 +#: engine/core/models.py:867 msgid "name of this attribute" msgstr "이 속성의 이름" -#: engine/core/models.py:782 +#: engine/core/models.py:868 msgid "attribute's name" msgstr "속성 이름" -#: engine/core/models.py:787 +#: engine/core/models.py:873 msgid "is filterable" msgstr "필터링 가능" -#: engine/core/models.py:789 +#: engine/core/models.py:875 msgid "designates whether this attribute can be used for filtering or not" msgstr "는 이 속성을 필터링에 사용할 수 있는지 여부를 지정합니다." -#: engine/core/models.py:802 engine/core/models.py:820 +#: engine/core/models.py:888 engine/core/models.py:906 #: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "속성" -#: engine/core/models.py:808 +#: engine/core/models.py:894 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" @@ -1984,19 +2027,19 @@ msgstr "" "상품에 연결된 속성의 특정 값을 나타냅니다. '속성'을 고유한 '값'에 연결하여 제품 특성을 더 잘 구성하고 동적으로 표현할 수 " "있습니다." -#: engine/core/models.py:819 +#: engine/core/models.py:905 msgid "attribute of this value" msgstr "이 값의 속성" -#: engine/core/models.py:827 +#: engine/core/models.py:913 msgid "the specific product associated with this attribute's value" msgstr "이 속성 값과 연관된 특정 제품" -#: engine/core/models.py:833 +#: engine/core/models.py:919 msgid "the specific value for this attribute" msgstr "이 속성의 구체적인 값은 다음과 같습니다." -#: engine/core/models.py:846 +#: engine/core/models.py:934 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -2007,39 +2050,39 @@ msgstr "" "시스템에서 제품과 연관된 제품 이미지를 나타냅니다. 이 클래스는 이미지 파일 업로드, 특정 제품과의 연결, 표시 순서 결정 등의 기능을 " "포함하여 제품의 이미지를 관리하도록 설계되었습니다. 또한 이미지에 대한 대체 텍스트가 포함된 접근성 기능도 포함되어 있습니다." -#: engine/core/models.py:857 +#: engine/core/models.py:945 msgid "provide alternative text for the image for accessibility" msgstr "접근성을 위해 이미지에 대체 텍스트 제공" -#: engine/core/models.py:858 +#: engine/core/models.py:946 msgid "image alt text" msgstr "이미지 대체 텍스트" -#: engine/core/models.py:861 +#: engine/core/models.py:949 msgid "upload the image file for this product" msgstr "이 제품의 이미지 파일 업로드" -#: engine/core/models.py:862 engine/core/models.py:893 +#: engine/core/models.py:950 engine/core/models.py:982 msgid "product image" msgstr "제품 이미지" -#: engine/core/models.py:867 +#: engine/core/models.py:955 msgid "determines the order in which images are displayed" msgstr "이미지가 표시되는 순서를 결정합니다." -#: engine/core/models.py:868 +#: engine/core/models.py:956 msgid "display priority" msgstr "우선순위 표시" -#: engine/core/models.py:873 +#: engine/core/models.py:961 msgid "the product that this image represents" msgstr "이 이미지가 나타내는 제품" -#: engine/core/models.py:894 +#: engine/core/models.py:983 msgid "product images" msgstr "제품 이미지" -#: engine/core/models.py:899 +#: engine/core/models.py:988 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -2052,39 +2095,39 @@ msgstr "" "정의하고 관리하는 데 사용됩니다. 이 클래스에는 할인율 설정, 프로모션에 대한 세부 정보 제공 및 해당 제품에 대한 링크를 위한 속성이 " "포함되어 있습니다. 제품 카탈로그와 통합되어 캠페인에서 영향을 받는 품목을 결정합니다." -#: engine/core/models.py:911 +#: engine/core/models.py:1000 msgid "percentage discount for the selected products" msgstr "선택한 제품에 대한 할인 비율" -#: engine/core/models.py:912 +#: engine/core/models.py:1001 msgid "discount percentage" msgstr "할인 비율" -#: engine/core/models.py:917 +#: engine/core/models.py:1006 msgid "provide a unique name for this promotion" msgstr "이 프로모션의 고유한 이름을 입력하세요." -#: engine/core/models.py:918 +#: engine/core/models.py:1007 msgid "promotion name" msgstr "프로모션 이름" -#: engine/core/models.py:924 +#: engine/core/models.py:1013 msgid "promotion description" msgstr "프로모션 설명" -#: engine/core/models.py:929 +#: engine/core/models.py:1018 msgid "select which products are included in this promotion" msgstr "이 프로모션에 포함되는 제품 선택" -#: engine/core/models.py:930 +#: engine/core/models.py:1019 msgid "included products" msgstr "포함된 제품" -#: engine/core/models.py:934 +#: engine/core/models.py:1027 msgid "promotion" msgstr "프로모션" -#: engine/core/models.py:945 +#: engine/core/models.py:1038 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2094,23 +2137,23 @@ msgstr "" "원하는 상품을 저장하고 관리하기 위한 사용자의 위시리스트를 나타냅니다. 이 클래스는 제품 컬렉션을 관리하는 기능을 제공하여 제품 추가 및" " 제거와 같은 작업을 지원할 뿐만 아니라 여러 제품을 한 번에 추가 및 제거하는 작업도 지원합니다." -#: engine/core/models.py:957 +#: engine/core/models.py:1050 msgid "products that the user has marked as wanted" msgstr "사용자가 원하는 것으로 표시한 제품" -#: engine/core/models.py:965 +#: engine/core/models.py:1058 msgid "user who owns this wishlist" msgstr "이 위시리스트를 소유한 사용자" -#: engine/core/models.py:966 +#: engine/core/models.py:1059 msgid "wishlist owner" msgstr "위시리스트의 소유자" -#: engine/core/models.py:974 +#: engine/core/models.py:1067 msgid "wishlist" msgstr "위시리스트" -#: engine/core/models.py:1016 +#: engine/core/models.py:1109 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2123,19 +2166,19 @@ msgstr "" "정보를 저장하는 데 사용됩니다. 여기에는 다큐멘터리 파일의 파일 유형과 저장 경로를 처리하는 메서드와 프로퍼티가 포함되어 있습니다. 특정" " 믹스인의 기능을 확장하고 추가 사용자 정의 기능을 제공합니다." -#: engine/core/models.py:1031 +#: engine/core/models.py:1124 msgid "documentary" msgstr "다큐멘터리" -#: engine/core/models.py:1032 +#: engine/core/models.py:1125 msgid "documentaries" msgstr "다큐멘터리" -#: engine/core/models.py:1042 +#: engine/core/models.py:1135 msgid "unresolved" msgstr "해결되지 않음" -#: engine/core/models.py:1047 +#: engine/core/models.py:1140 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2151,59 +2194,59 @@ msgstr "" "저장하도록 설계되었습니다. 지오코딩 API와의 통합을 지원하여 추가 처리 또는 검사를 위해 원시 API 응답을 저장할 수 있습니다. 또한" " 이 클래스를 사용하면 주소를 사용자와 연결하여 개인화된 데이터 처리를 용이하게 할 수 있습니다." -#: engine/core/models.py:1062 +#: engine/core/models.py:1155 msgid "address line for the customer" msgstr "고객 주소 라인" -#: engine/core/models.py:1063 +#: engine/core/models.py:1156 msgid "address line" msgstr "주소 라인" -#: engine/core/models.py:1065 +#: engine/core/models.py:1158 msgid "street" msgstr "거리" -#: engine/core/models.py:1066 +#: engine/core/models.py:1159 msgid "district" msgstr "지구" -#: engine/core/models.py:1067 +#: engine/core/models.py:1160 msgid "city" msgstr "도시" -#: engine/core/models.py:1068 +#: engine/core/models.py:1161 msgid "region" msgstr "지역" -#: engine/core/models.py:1069 +#: engine/core/models.py:1162 msgid "postal code" msgstr "우편 번호" -#: engine/core/models.py:1070 +#: engine/core/models.py:1163 msgid "country" msgstr "국가" -#: engine/core/models.py:1077 +#: engine/core/models.py:1170 msgid "geolocation point: (longitude, latitude)" msgstr "지리적 위치 포인트(경도, 위도)" -#: engine/core/models.py:1083 +#: engine/core/models.py:1176 msgid "full JSON response from geocoder for this address" msgstr "이 주소에 대한 지오코더의 전체 JSON 응답" -#: engine/core/models.py:1089 +#: engine/core/models.py:1182 msgid "stored JSON response from the geocoding service" msgstr "지오코딩 서비스의 저장된 JSON 응답" -#: engine/core/models.py:1099 +#: engine/core/models.py:1192 msgid "address" msgstr "주소" -#: engine/core/models.py:1100 +#: engine/core/models.py:1193 msgid "addresses" msgstr "주소" -#: engine/core/models.py:1112 +#: engine/core/models.py:1205 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2216,86 +2259,86 @@ msgstr "" "할인 속성(금액 또는 백분율), 유효 기간, 관련 사용자(있는 경우), 사용 상태 등 프로모션 코드에 대한 세부 정보를 저장합니다. " "여기에는 제약 조건이 충족되는지 확인하면서 프로모션 코드의 유효성을 검사하고 주문에 적용하는 기능이 포함되어 있습니다." -#: engine/core/models.py:1126 +#: engine/core/models.py:1219 msgid "unique code used by a user to redeem a discount" msgstr "사용자가 할인을 받기 위해 사용하는 고유 코드" -#: engine/core/models.py:1127 +#: engine/core/models.py:1220 msgid "promo code identifier" msgstr "프로모션 코드 식별자" -#: engine/core/models.py:1134 +#: engine/core/models.py:1227 msgid "fixed discount amount applied if percent is not used" msgstr "퍼센트를 사용하지 않을 경우 고정 할인 금액 적용" -#: engine/core/models.py:1135 +#: engine/core/models.py:1228 msgid "fixed discount amount" msgstr "고정 할인 금액" -#: engine/core/models.py:1141 +#: engine/core/models.py:1234 msgid "percentage discount applied if fixed amount is not used" msgstr "고정 금액 미사용 시 적용되는 할인 비율" -#: engine/core/models.py:1142 +#: engine/core/models.py:1235 msgid "percentage discount" msgstr "백분율 할인" -#: engine/core/models.py:1147 +#: engine/core/models.py:1240 msgid "timestamp when the promocode expires" msgstr "프로모션 코드 만료 시 타임스탬프" -#: engine/core/models.py:1148 +#: engine/core/models.py:1241 msgid "end validity time" msgstr "유효 기간 종료 시간" -#: engine/core/models.py:1153 +#: engine/core/models.py:1246 msgid "timestamp from which this promocode is valid" msgstr "이 프로모코드의 타임스탬프가 유효한 시점" -#: engine/core/models.py:1154 +#: engine/core/models.py:1247 msgid "start validity time" msgstr "유효 기간 시작 시간" -#: engine/core/models.py:1159 +#: engine/core/models.py:1252 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "프로모코드가 사용된 타임스탬프, 아직 사용되지 않은 경우 비워둡니다." -#: engine/core/models.py:1160 +#: engine/core/models.py:1253 msgid "usage timestamp" msgstr "사용 타임스탬프" -#: engine/core/models.py:1165 +#: engine/core/models.py:1258 msgid "user assigned to this promocode if applicable" msgstr "해당되는 경우 이 프로모코드에 할당된 사용자" -#: engine/core/models.py:1166 +#: engine/core/models.py:1259 msgid "assigned user" msgstr "할당된 사용자" -#: engine/core/models.py:1173 +#: engine/core/models.py:1266 msgid "promo code" msgstr "프로모션 코드" -#: engine/core/models.py:1174 +#: engine/core/models.py:1267 msgid "promo codes" msgstr "프로모션 코드" -#: engine/core/models.py:1190 +#: engine/core/models.py:1283 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "할인 유형(금액 또는 백분율)은 한 가지 유형만 정의해야 하며, 두 가지 모두 또는 둘 다 정의해서는 안 됩니다." -#: engine/core/models.py:1212 +#: engine/core/models.py:1305 msgid "promocode already used" msgstr "프로모코드가 이미 사용되었습니다." -#: engine/core/models.py:1234 +#: engine/core/models.py:1327 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "프로모션 코드 {self.uuid}의 할인 유형이 잘못되었습니다!" -#: engine/core/models.py:1243 +#: engine/core/models.py:1336 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 " @@ -2308,145 +2351,145 @@ msgstr "" "포함하여 애플리케이션 내에서 주문을 모델링합니다. 주문에는 연결된 제품, 프로모션 적용, 주소 설정, 배송 또는 청구 세부 정보 " "업데이트가 가능합니다. 또한 주문 수명 주기에서 제품을 관리하는 기능도 지원합니다." -#: engine/core/models.py:1260 +#: engine/core/models.py:1357 msgid "the billing address used for this order" msgstr "이 주문에 사용된 청구 주소" -#: engine/core/models.py:1268 +#: engine/core/models.py:1365 msgid "optional promo code applied to this order" msgstr "이 주문에 적용된 프로모션 코드(선택 사항)" -#: engine/core/models.py:1269 +#: engine/core/models.py:1366 msgid "applied promo code" msgstr "프로모션 코드 적용" -#: engine/core/models.py:1277 +#: engine/core/models.py:1374 msgid "the shipping address used for this order" msgstr "이 주문에 사용된 배송지 주소" -#: engine/core/models.py:1278 +#: engine/core/models.py:1375 msgid "shipping address" msgstr "배송 주소" -#: engine/core/models.py:1284 +#: engine/core/models.py:1381 msgid "current status of the order in its lifecycle" msgstr "라이프사이클 내 주문의 현재 상태" -#: engine/core/models.py:1285 +#: engine/core/models.py:1382 msgid "order status" msgstr "주문 상태" -#: engine/core/models.py:1290 engine/core/models.py:1889 +#: engine/core/models.py:1387 engine/core/models.py:1997 msgid "json structure of notifications to display to users" msgstr "사용자에게 표시할 알림의 JSON 구조, 관리자 UI에서는 테이블 보기가 사용됩니다." -#: engine/core/models.py:1296 +#: engine/core/models.py:1393 msgid "json representation of order attributes for this order" msgstr "이 주문에 대한 주문 속성의 JSON 표현" -#: engine/core/models.py:1302 +#: engine/core/models.py:1399 msgid "the user who placed the order" msgstr "주문한 사용자" -#: engine/core/models.py:1303 +#: engine/core/models.py:1400 msgid "user" msgstr "사용자" -#: engine/core/models.py:1309 +#: engine/core/models.py:1406 msgid "the timestamp when the order was finalized" msgstr "주문이 완료된 타임스탬프" -#: engine/core/models.py:1310 +#: engine/core/models.py:1407 msgid "buy time" msgstr "시간 확보" -#: engine/core/models.py:1317 +#: engine/core/models.py:1414 msgid "a human-readable identifier for the order" msgstr "사람이 읽을 수 있는 주문 식별자" -#: engine/core/models.py:1318 +#: engine/core/models.py:1415 msgid "human readable id" msgstr "사람이 읽을 수 있는 ID" -#: engine/core/models.py:1324 +#: engine/core/models.py:1421 msgid "order" msgstr "주문" -#: engine/core/models.py:1371 +#: engine/core/models.py:1468 msgid "a user must have only one pending order at a time" msgstr "사용자는 한 번에 하나의 대기 주문만 보유해야 합니다!" -#: engine/core/models.py:1404 +#: engine/core/models.py:1504 msgid "you cannot add products to an order that is not a pending one" msgstr "보류 중인 주문이 아닌 주문에는 제품을 추가할 수 없습니다." -#: engine/core/models.py:1410 +#: engine/core/models.py:1510 msgid "you cannot add inactive products to order" msgstr "주문에 비활성 제품을 추가할 수 없습니다." -#: engine/core/models.py:1432 +#: engine/core/models.py:1533 msgid "you cannot add more products than available in stock" msgstr "재고가 있는 제품보다 많은 제품을 추가할 수 없습니다." -#: engine/core/models.py:1456 engine/core/models.py:1485 -#: engine/core/models.py:1495 +#: engine/core/models.py:1557 engine/core/models.py:1586 +#: engine/core/models.py:1596 msgid "you cannot remove products from an order that is not a pending one" msgstr "보류 중인 주문이 아닌 주문에서는 제품을 제거할 수 없습니다." -#: engine/core/models.py:1480 +#: engine/core/models.py:1581 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "쿼리 <{query}>에 {name}가 존재하지 않습니다!" -#: engine/core/models.py:1519 +#: engine/core/models.py:1620 msgid "promocode does not exist" msgstr "프로모코드가 존재하지 않습니다." -#: engine/core/models.py:1534 +#: engine/core/models.py:1635 msgid "you can only buy physical products with shipping address specified" msgstr "배송 주소가 지정된 실제 제품만 구매할 수 있습니다!" -#: engine/core/models.py:1555 +#: engine/core/models.py:1656 msgid "address does not exist" msgstr "주소가 존재하지 않습니다." -#: engine/core/models.py:1577 engine/core/models.py:1656 +#: engine/core/models.py:1678 engine/core/models.py:1757 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "지금은 구매할 수 없습니다. 몇 분 후에 다시 시도해 주세요." -#: engine/core/models.py:1583 engine/core/models.py:1649 +#: engine/core/models.py:1684 engine/core/models.py:1750 msgid "invalid force value" msgstr "잘못된 힘 값" -#: engine/core/models.py:1589 engine/core/models.py:1660 +#: engine/core/models.py:1690 engine/core/models.py:1761 msgid "you cannot purchase an empty order!" msgstr "빈 주문은 구매할 수 없습니다!" -#: engine/core/models.py:1610 +#: engine/core/models.py:1711 msgid "you cannot buy an order without a user" msgstr "사용자 없이는 주문을 구매할 수 없습니다!" -#: engine/core/models.py:1624 +#: engine/core/models.py:1725 msgid "a user without a balance cannot buy with balance" msgstr "잔액이 없는 사용자는 잔액으로 구매할 수 없습니다!" -#: engine/core/models.py:1630 +#: engine/core/models.py:1731 msgid "insufficient funds to complete the order" msgstr "주문을 완료하기에 자금이 부족합니다." -#: engine/core/models.py:1671 +#: engine/core/models.py:1772 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "등록하지 않으면 구매할 수 없으므로 고객 이름, 고객 이메일, 고객 전화 번호 등의 정보를 제공하세요." -#: engine/core/models.py:1682 +#: engine/core/models.py:1783 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "결제 방법이 잘못되었습니다: {payment_method}에서 {available_payment_methods}로!" -#: engine/core/models.py:1813 +#: engine/core/models.py:1916 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2458,32 +2501,32 @@ msgstr "" "설계되었습니다. 여기에는 사용자 댓글, 주문에서 관련 제품에 대한 참조 및 사용자가 지정한 등급을 저장하는 속성이 포함되어 있습니다. 이" " 클래스는 데이터베이스 필드를 사용하여 피드백 데이터를 효과적으로 모델링하고 관리합니다." -#: engine/core/models.py:1825 +#: engine/core/models.py:1928 msgid "user-provided comments about their experience with the product" msgstr "제품 사용 경험에 대한 사용자 제공 의견" -#: engine/core/models.py:1826 +#: engine/core/models.py:1929 msgid "feedback comments" msgstr "피드백 댓글" -#: engine/core/models.py:1834 +#: engine/core/models.py:1937 msgid "" "references the specific product in an order that this feedback is about" msgstr "이 피드백에 대한 순서대로 특정 제품을 참조합니다." -#: engine/core/models.py:1836 +#: engine/core/models.py:1939 msgid "related order product" msgstr "관련 주문 제품" -#: engine/core/models.py:1841 +#: engine/core/models.py:1944 msgid "user-assigned rating for the product" msgstr "제품에 대한 사용자 지정 평점" -#: engine/core/models.py:1842 +#: engine/core/models.py:1945 msgid "product rating" msgstr "제품 평가" -#: engine/core/models.py:1862 +#: engine/core/models.py:1965 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2500,108 +2543,108 @@ msgstr "" "작업을 처리합니다. 또한 이 모델은 총 가격 계산이나 디지털 제품의 다운로드 URL 생성 등 비즈니스 로직을 지원하는 메서드와 속성을 " "제공합니다. 이 모델은 주문 및 제품 모델과 통합되며 해당 모델에 대한 참조를 저장합니다." -#: engine/core/models.py:1877 +#: engine/core/models.py:1985 msgid "the price paid by the customer for this product at purchase time" msgstr "구매 시점에 고객이 이 제품에 대해 지불한 가격입니다." -#: engine/core/models.py:1878 +#: engine/core/models.py:1986 msgid "purchase price at order time" msgstr "주문 시점의 구매 가격" -#: engine/core/models.py:1883 +#: engine/core/models.py:1991 msgid "internal comments for admins about this ordered product" msgstr "주문한 제품에 대한 관리자용 내부 댓글" -#: engine/core/models.py:1884 +#: engine/core/models.py:1992 msgid "internal comments" msgstr "내부 의견" -#: engine/core/models.py:1890 +#: engine/core/models.py:1998 msgid "user notifications" msgstr "사용자 알림" -#: engine/core/models.py:1895 +#: engine/core/models.py:2003 msgid "json representation of this item's attributes" msgstr "이 항목의 속성에 대한 JSON 표현" -#: engine/core/models.py:1896 +#: engine/core/models.py:2004 msgid "ordered product attributes" msgstr "주문한 제품 속성" -#: engine/core/models.py:1901 +#: engine/core/models.py:2009 msgid "reference to the parent order that contains this product" msgstr "이 제품이 포함된 상위 주문 참조" -#: engine/core/models.py:1902 +#: engine/core/models.py:2010 msgid "parent order" msgstr "상위 주문" -#: engine/core/models.py:1911 +#: engine/core/models.py:2019 msgid "the specific product associated with this order line" msgstr "이 주문 라인과 연결된 특정 제품" -#: engine/core/models.py:1918 +#: engine/core/models.py:2026 msgid "quantity of this specific product in the order" msgstr "이 특정 제품의 주문 수량" -#: engine/core/models.py:1919 +#: engine/core/models.py:2027 msgid "product quantity" msgstr "제품 수량" -#: engine/core/models.py:1926 +#: engine/core/models.py:2034 msgid "current status of this product in the order" msgstr "이 제품의 현재 상태 순서" -#: engine/core/models.py:1927 +#: engine/core/models.py:2035 msgid "product line status" msgstr "제품 라인 상태" -#: engine/core/models.py:1998 +#: engine/core/models.py:2106 msgid "order product must have an order" msgstr "주문제품에는 연결된 주문이 있어야 합니다!" -#: engine/core/models.py:2000 +#: engine/core/models.py:2108 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "피드백에 지정된 작업이 잘못되었습니다: {action}!" -#: engine/core/models.py:2017 +#: engine/core/models.py:2125 msgid "you cannot feedback an order which is not received" msgstr "받지 않은 주문에 대해서는 피드백을 제공할 수 없습니다." -#: engine/core/models.py:2026 +#: engine/core/models.py:2132 engine/core/models.py:2227 msgid "name" msgstr "이름" -#: engine/core/models.py:2028 +#: engine/core/models.py:2134 msgid "URL of the integration" msgstr "통합 URL" -#: engine/core/models.py:2031 +#: engine/core/models.py:2137 msgid "authentication credentials" msgstr "인증 자격 증명" -#: engine/core/models.py:2054 +#: engine/core/models.py:2160 msgid "you can only have one default CRM provider" msgstr "기본 CRM 공급업체는 하나만 사용할 수 있습니다." -#: engine/core/models.py:2064 +#: engine/core/models.py:2170 msgid "CRM" msgstr "CRM" -#: engine/core/models.py:2065 +#: engine/core/models.py:2171 msgid "CRMs" msgstr "CRM" -#: engine/core/models.py:2081 +#: engine/core/models.py:2187 msgid "order CRM link" msgstr "주문의 CRM 링크" -#: engine/core/models.py:2082 +#: engine/core/models.py:2188 msgid "orders CRM links" msgstr "주문의 CRM 링크" -#: engine/core/models.py:2087 +#: engine/core/models.py:2193 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2614,20 +2657,54 @@ msgstr "" "수 있는 기능을 제공합니다. 연결된 주문 상품, 다운로드 횟수, 자산이 공개적으로 표시되는지 여부에 대한 정보를 유지 관리합니다. " "여기에는 연결된 주문이 완료 상태일 때 자산을 다운로드할 수 있는 URL을 생성하는 메서드가 포함되어 있습니다." -#: engine/core/models.py:2103 +#: engine/core/models.py:2209 msgid "download" msgstr "다운로드" -#: engine/core/models.py:2104 +#: engine/core/models.py:2210 msgid "downloads" msgstr "다운로드" +#: engine/core/models.py:2228 +msgid "descriptive name for the image" +msgstr "이미지에 대한 설명적 이름" + +#: engine/core/models.py:2233 +msgid "image file pasted in the markdown editor" +msgstr "마크다운 편집기에 붙여넣은 이미지 파일" + +#: engine/core/models.py:2239 +msgid "alt text" +msgstr "다른 텍스트" + +#: engine/core/models.py:2240 +msgid "alternative text for accessibility" +msgstr "접근성을 위한 대체 텍스트" + +#: engine/core/models.py:2244 +msgid "pasted image" +msgstr "붙여넣은 이미지" + +#: engine/core/models.py:2245 +msgid "pasted images" +msgstr "붙여넣은 이미지" + #: engine/core/serializers/utility.py:91 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "피드백을 추가하려면 댓글, 평점, 주문 제품 고유번호를 제공해야 합니다." #: engine/core/sitemaps.py:25 +#: engine/core/templates/admin_doc/bookmarklets.html:8 +#: engine/core/templates/admin_doc/index.html:8 +#: engine/core/templates/admin_doc/missing_docutils.html:8 +#: engine/core/templates/admin_doc/model_detail.html:8 +#: engine/core/templates/admin_doc/model_index.html:8 +#: engine/core/templates/admin_doc/template_detail.html:8 +#: engine/core/templates/admin_doc/template_filter_index.html:8 +#: engine/core/templates/admin_doc/template_tag_index.html:8 +#: engine/core/templates/admin_doc/view_detail.html:8 +#: engine/core/templates/admin_doc/view_index.html:8 msgid "Home" msgstr "홈" @@ -2680,45 +2757,34 @@ msgstr "Gross" msgid "Dashboard" msgstr "대시보드" -#: engine/core/templates/admin/dashboard/_income_overview.html:7 +#: engine/core/templates/admin/dashboard/_income_overview.html:6 msgid "Income overview" msgstr "수입 개요" -#: engine/core/templates/admin/dashboard/_income_overview.html:31 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Net" +#: engine/core/templates/admin/dashboard/_income_overview.html:16 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" msgstr "순 수익" -#: engine/core/templates/admin/dashboard/_income_overview.html:37 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Taxes" -msgstr "세금" - -#: engine/core/templates/admin/dashboard/_income_overview.html:43 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 +#: engine/core/templates/admin/dashboard/_income_overview.html:21 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 msgid "Returns" msgstr "반환" -#: engine/core/templates/admin/dashboard/_income_overview.html:48 -msgid "Gross (pie total)" -msgstr "총 수익" - -#: engine/core/templates/admin/dashboard/_income_overview.html:72 -msgid "No data" -msgstr "날짜 없음" - +#: engine/core/templates/admin/dashboard/_income_overview.html:26 #: engine/core/templates/admin/dashboard/_kpis.html:6 msgid "GMV" msgstr "GMV" +#: engine/core/templates/admin/dashboard/_income_overview.html:50 +msgid "No data" +msgstr "날짜 없음" + #: engine/core/templates/admin/dashboard/_kpis.html:34 msgid "AOV" msgstr "AOV" -#: engine/core/templates/admin/dashboard/_kpis.html:48 -msgid "Net revenue" -msgstr "순 수익" - #: engine/core/templates/admin/dashboard/_kpis.html:62 msgid "Refund rate" msgstr "환불 비율" @@ -2731,7 +2797,7 @@ msgstr "반환됨" msgid "Low stock" msgstr "재고 부족" -#: engine/core/templates/admin/dashboard/_low_stock.html:29 +#: engine/core/templates/admin/dashboard/_low_stock.html:33 msgid "No low stock items." msgstr "재고가 부족한 품목이 없습니다." @@ -2788,6 +2854,288 @@ msgstr "지난 30일 동안 카테고리 매출이 없습니다." msgid "Django site admin" msgstr "장고 사이트 관리자" +#: engine/core/templates/admin_doc/bookmarklets.html:4 +#: engine/core/templates/admin_doc/bookmarklets.html:17 +msgid "Documentation bookmarklets" +msgstr "문서 북마크릿" + +#: engine/core/templates/admin_doc/bookmarklets.html:10 +#: engine/core/templates/admin_doc/index.html:4 +#: engine/core/templates/admin_doc/index.html:10 +#: engine/core/templates/admin_doc/index.html:15 +#: engine/core/templates/admin_doc/missing_docutils.html:10 +#: engine/core/templates/admin_doc/missing_docutils.html:19 +#: engine/core/templates/admin_doc/model_detail.html:10 +#: engine/core/templates/admin_doc/model_index.html:10 +#: engine/core/templates/admin_doc/template_detail.html:10 +#: engine/core/templates/admin_doc/template_filter_index.html:10 +#: engine/core/templates/admin_doc/template_tag_index.html:10 +#: engine/core/templates/admin_doc/view_detail.html:10 +#: engine/core/templates/admin_doc/view_index.html:10 +msgid "Documentation" +msgstr "문서화" + +#: engine/core/templates/admin_doc/bookmarklets.html:12 +#: engine/core/templates/admin_doc/index.html:53 +msgid "Bookmarklets" +msgstr "북마크릿" + +#: engine/core/templates/admin_doc/bookmarklets.html:19 +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"북마크릿을 설치하려면 링크를 북마크 도구 모음으로 드래그하거나 링크를 마우스 오른쪽 버튼으로 클릭한 후 북마크에 추가하세요. 이제 " +"사이트의 어떤 페이지에서든 이 북마크릿을 선택할 수 있습니다." + +#: engine/core/templates/admin_doc/bookmarklets.html:29 +msgid "Documentation for this page" +msgstr "이 페이지에 대한 문서" + +#: engine/core/templates/admin_doc/bookmarklets.html:31 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "해당 페이지를 생성하는 뷰의 문서로, 어떤 페이지에서든 바로 이동합니다." + +#: engine/core/templates/admin_doc/index.html:21 +#: engine/core/templates/admin_doc/model_detail.html:12 +#: engine/core/templates/admin_doc/model_index.html:4 +#: engine/core/templates/admin_doc/model_index.html:12 +msgid "Models" +msgstr "모델" + +#: engine/core/templates/admin_doc/index.html:23 +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"모델은 시스템 내 모든 객체와 그에 연관된 필드들을 기술한 것입니다. 각 모델은 템플릿 변수로 접근 가능한 필드 목록을 포함합니다." + +#: engine/core/templates/admin_doc/index.html:29 +#: engine/core/templates/admin_doc/view_detail.html:12 +#: engine/core/templates/admin_doc/view_index.html:4 +#: engine/core/templates/admin_doc/view_index.html:12 +msgid "Views" +msgstr "조회수" + +#: engine/core/templates/admin_doc/index.html:31 +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"공개 사이트의 각 페이지는 뷰에 의해 생성됩니다. 뷰는 페이지 생성에 사용될 템플릿과 해당 템플릿에서 사용할 수 있는 객체를 정의합니다." + +#: engine/core/templates/admin_doc/index.html:39 +msgid "List of all the template tags and their functions." +msgstr "모든 템플릿 태그와 그 기능 목록." + +#: engine/core/templates/admin_doc/index.html:45 +#: engine/core/templates/admin_doc/template_filter_index.html:12 +msgid "Filters" +msgstr "필터" + +#: engine/core/templates/admin_doc/index.html:47 +msgid "" +"Filters are actions which can be applied to variables in a template to alter" +" the output." +msgstr "필터는 템플릿 내 변수에 적용하여 출력을 변경할 수 있는 동작입니다." + +#: engine/core/templates/admin_doc/index.html:55 +msgid "Tools for your browser to quickly access admin functionality." +msgstr "브라우저에서 관리 기능을 빠르게 이용할 수 있는 도구들." + +#: engine/core/templates/admin_doc/missing_docutils.html:4 +msgid "Please install docutils" +msgstr "docutils를 설치하십시오." + +#: engine/core/templates/admin_doc/missing_docutils.html:20 +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"관리자 문서 시스템은 Python의 docutils 라이브러리가 필요합니다." + +#: engine/core/templates/admin_doc/missing_docutils.html:21 +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"관리자에게 docutils를 설치해" +" 달라고 요청해 주십시오." + +#: engine/core/templates/admin_doc/model_detail.html:4 +#, python-format +msgid "Model: %(name)s" +msgstr "모델: %(name)s" + +#: engine/core/templates/admin_doc/model_detail.html:29 +msgid "Fields" +msgstr "필드" + +#: engine/core/templates/admin_doc/model_detail.html:36 +msgid "Field" +msgstr "필드" + +#: engine/core/templates/admin_doc/model_detail.html:37 +msgid "Type" +msgstr "유형" + +#: engine/core/templates/admin_doc/model_detail.html:38 +#: engine/core/templates/admin_doc/model_detail.html:70 +msgid "Description" +msgstr "설명" + +#: engine/core/templates/admin_doc/model_detail.html:61 +msgid "Methods with arguments" +msgstr "인수를 가진 메서드" + +#: engine/core/templates/admin_doc/model_detail.html:68 +msgid "Method" +msgstr "방법" + +#: engine/core/templates/admin_doc/model_detail.html:69 +msgid "Arguments" +msgstr "논증" + +#: engine/core/templates/admin_doc/model_detail.html:89 +msgid "Back to Model documentation" +msgstr "모델 문서로 돌아가기" + +#: engine/core/templates/admin_doc/model_index.html:17 +msgid "Model documentation" +msgstr "모델 문서" + +#: engine/core/templates/admin_doc/model_index.html:44 +msgid "Model groups" +msgstr "모델 그룹" + +#: engine/core/templates/admin_doc/template_detail.html:4 +#, python-format +msgid "Template: %(name)s" +msgstr "템플릿: %(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:12 +msgid "Templates" +msgstr "템플릿" + +#: engine/core/templates/admin_doc/template_detail.html:17 +#, python-format +msgid "" +"Template: %(name)s" +msgstr "" +"템플릿: %(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:21 +#, python-format +msgid "Search path for template %(name)s:" +msgstr "템플릿 %(name)s의 검색 경로:" + +#: engine/core/templates/admin_doc/template_detail.html:29 +msgid "(does not exist)" +msgstr "(존재하지 않음)" + +#: engine/core/templates/admin_doc/template_detail.html:40 +msgid "Back to Documentation" +msgstr "문서로 돌아가기" + +#: engine/core/templates/admin_doc/template_filter_index.html:4 +msgid "Template filters" +msgstr "템플릿 필터" + +#: engine/core/templates/admin_doc/template_filter_index.html:17 +msgid "Template filter documentation" +msgstr "템플릿 필터 문서" + +#: engine/core/templates/admin_doc/template_filter_index.html:26 +#: engine/core/templates/admin_doc/template_filter_index.html:52 +msgid "Built-in filters" +msgstr "내장 필터" + +#: engine/core/templates/admin_doc/template_filter_index.html:29 +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before using" +" the filter." +msgstr "" +"이 필터를 사용하려면, 필터를 사용하기 전에 템플릿에 %(code)s를 넣어주세요." + +#: engine/core/templates/admin_doc/template_tag_index.html:4 +msgid "Template tags" +msgstr "템플릿 태그" + +#: engine/core/templates/admin_doc/template_tag_index.html:17 +msgid "Template tag documentation" +msgstr "템플릿 태그 문서" + +#: engine/core/templates/admin_doc/template_tag_index.html:26 +#: engine/core/templates/admin_doc/template_tag_index.html:52 +msgid "Built-in tags" +msgstr "내장 태그" + +#: engine/core/templates/admin_doc/template_tag_index.html:29 +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using the tag." +msgstr "" +"이 태그를 사용하려면, 태그 사용 전에 템플릿에 %(code)s를 삽입하십시오." + +#: engine/core/templates/admin_doc/view_detail.html:4 +#, python-format +msgid "View: %(name)s" +msgstr "보기: %(name)s" + +#: engine/core/templates/admin_doc/view_detail.html:28 +msgid "Context:" +msgstr "문맥:" + +#: engine/core/templates/admin_doc/view_detail.html:33 +msgid "Templates:" +msgstr "템플릿:" + +#: engine/core/templates/admin_doc/view_detail.html:41 +msgid "Back to View documentation" +msgstr "문서 보기" + +#: engine/core/templates/admin_doc/view_index.html:17 +msgid "View documentation" +msgstr "문서 보기" + +#: engine/core/templates/admin_doc/view_index.html:28 +#, python-format +msgid "Views by namespace %(name)s" +msgstr "네임스페이스별 조회수 %(name)s" + +#: engine/core/templates/admin_doc/view_index.html:30 +msgid "Views by empty namespace" +msgstr "빈 네임스페이스별 조회수" + +#: engine/core/templates/admin_doc/view_index.html:40 +#, python-format +msgid "" +"View function: %(full_name)s. Name: %(url_name)s." +msgstr "뷰 함수: %(full_name)s. 이름: %(url_name)s." + +#: engine/core/templates/admin_doc/view_index.html:54 +msgid "Jump to namespace" +msgstr "네임스페이스로 이동" + +#: engine/core/templates/admin_doc/view_index.html:59 +msgid "Empty namespace" +msgstr "빈 네임스페이스" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -2882,7 +3230,7 @@ msgstr "" " 정보" #: engine/core/templates/digital_order_delivered_email.html:137 -#: engine/core/templates/json_table_widget.html:6 +#: engine/core/templates/json_table_widget.html:26 msgid "value" msgstr "가치" @@ -2900,11 +3248,23 @@ msgstr "궁금한 점이 있으면 언제든지 %(contact_email)s로 지원팀 msgid "best regards,
the %(project_name)s team" msgstr "감사합니다,
%(project_name)s 팀" -#: engine/core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:7 +msgid "Key" +msgstr "키" + +#: engine/core/templates/json_table_widget.html:8 +msgid "Value" +msgstr "가치" + +#: engine/core/templates/json_table_widget.html:19 msgid "key" msgstr "키" -#: engine/core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:32 +msgid "Delete row" +msgstr "행 삭제" + +#: engine/core/templates/json_table_widget.html:44 msgid "Add Row" msgstr "행 추가" @@ -2989,19 +3349,28 @@ msgstr "이 작업을 수행할 수 있는 권한이 없습니다." msgid "NOMINATIM_URL must be configured." msgstr "NOMINATIM_URL 파라미터를 설정해야 합니다!" -#: engine/core/validators.py:23 +#: engine/core/validators.py:18 +msgid "could not determine file type" +msgstr "파일 유형을 확인할 수 없습니다." + +#: engine/core/validators.py:24 +#, python-brace-format +msgid "unsupported video format. supported formats: {supported}" +msgstr "지원되지 않는 동영상 형식입니다. 지원되는 형식: {supported}" + +#: engine/core/validators.py:45 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "이미지 크기는 w{max_width} x h{max_height} 픽셀을 초과하지 않아야 합니다!" -#: engine/core/views.py:104 +#: engine/core/views.py:108 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." msgstr "" "사이트맵 색인에 대한 요청을 처리하고 XML 응답을 반환합니다. 응답에 XML에 적합한 콘텐츠 유형 헤더가 포함되어 있는지 확인합니다." -#: engine/core/views.py:119 +#: engine/core/views.py:123 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3010,40 +3379,40 @@ msgstr "" "사이트맵에 대한 상세 보기 응답을 처리합니다. 이 함수는 요청을 처리하고 적절한 사이트맵 상세 보기 응답을 가져온 다음 XML의 " "Content-Type 헤더를 설정합니다." -#: engine/core/views.py:155 +#: engine/core/views.py:174 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "지원되는 언어 목록과 해당 정보를 반환합니다." -#: engine/core/views.py:182 +#: engine/core/views.py:201 msgid "Returns the parameters of the website as a JSON object." msgstr "웹사이트의 매개변수를 JSON 객체로 반환합니다." -#: engine/core/views.py:198 +#: engine/core/views.py:217 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." msgstr "지정된 키와 시간 초과로 캐시 데이터를 읽고 설정하는 등의 캐시 작업을 처리합니다." -#: engine/core/views.py:220 +#: engine/core/views.py:239 msgid "Handles `contact us` form submissions." msgstr "'문의하기' 양식 제출을 처리합니다." -#: engine/core/views.py:236 +#: engine/core/views.py:255 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." msgstr "들어오는 POST 요청의 URL 처리 및 유효성 검사 요청을 처리합니다." -#: engine/core/views.py:273 +#: engine/core/views.py:292 msgid "Handles global search queries." msgstr "글로벌 검색 쿼리를 처리합니다." -#: engine/core/views.py:289 +#: engine/core/views.py:308 msgid "Handles the logic of buying as a business without registration." msgstr "등록하지 않고 비즈니스로 구매하는 로직을 처리합니다." -#: engine/core/views.py:337 +#: engine/core/views.py:356 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3051,31 +3420,31 @@ msgstr "" "주문과 관련된 디지털 자산의 다운로드를 처리합니다.\n" "이 함수는 프로젝트의 저장소 디렉토리에 있는 디지털 자산 파일을 제공하려고 시도합니다. 파일을 찾을 수 없으면 HTTP 404 오류가 발생하여 리소스를 사용할 수 없음을 나타냅니다." -#: engine/core/views.py:348 +#: engine/core/views.py:367 msgid "order_product_uuid is required" msgstr "주문_제품_UUID는 필수입니다." -#: engine/core/views.py:355 +#: engine/core/views.py:374 msgid "order product does not exist" msgstr "주문 제품이 존재하지 않습니다." -#: engine/core/views.py:358 +#: engine/core/views.py:377 msgid "you can only download the digital asset once" msgstr "디지털 자산은 한 번만 다운로드할 수 있습니다." -#: engine/core/views.py:362 +#: engine/core/views.py:381 msgid "the order must be paid before downloading the digital asset" msgstr "디지털 자산을 다운로드하기 전에 주문을 결제해야 합니다." -#: engine/core/views.py:369 +#: engine/core/views.py:388 msgid "the order product does not have a product" msgstr "주문 제품에 제품이 없습니다." -#: engine/core/views.py:412 +#: engine/core/views.py:431 msgid "favicon not found" msgstr "파비콘을 찾을 수 없습니다." -#: engine/core/views.py:418 +#: engine/core/views.py:437 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3083,7 +3452,7 @@ msgstr "" "웹사이트의 파비콘 요청을 처리합니다.\n" "이 함수는 프로젝트의 정적 디렉토리에 있는 파비콘 파일을 제공하려고 시도합니다. 파비콘 파일을 찾을 수 없는 경우 HTTP 404 오류가 발생하여 리소스를 사용할 수 없음을 나타냅니다." -#: engine/core/views.py:432 +#: engine/core/views.py:451 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3092,16 +3461,20 @@ msgstr "" "요청을 관리자 색인 페이지로 리디렉션합니다. 이 함수는 들어오는 HTTP 요청을 처리하여 Django 관리자 인터페이스 인덱스 페이지로 " "리디렉션합니다. HTTP 리디렉션을 처리하기 위해 Django의 `redirect` 함수를 사용합니다." -#: engine/core/views.py:445 +#: engine/core/views.py:464 msgid "Returns current version of the Schon. " msgstr "현재 버전의 Schon를 반환합니다." -#: engine/core/views.py:674 engine/core/views.py:689 +#: engine/core/views.py:475 +msgid "no image file provided" +msgstr "이미지 파일이 제공되지 않았습니다." + +#: engine/core/views.py:710 engine/core/views.py:725 #, python-format msgid "Revenue & Orders (last %(days)d)" msgstr "수익 및 주문(마지막 %(days)d)" -#: engine/core/views.py:870 +#: engine/core/views.py:911 msgid "Returns custom variables for Dashboard. " msgstr "대시보드에 대한 사용자 지정 변수를 반환합니다." @@ -3176,7 +3549,7 @@ msgstr "" "브랜드 인스턴스를 관리하기 위한 뷰셋을 나타냅니다. 이 클래스는 브랜드 객체를 쿼리, 필터링 및 직렬화하기 위한 기능을 제공합니다. 이 " "클래스는 장고의 뷰셋 프레임워크를 사용하여 브랜드 객체에 대한 API 엔드포인트의 구현을 간소화합니다." -#: engine/core/viewsets.py:458 +#: engine/core/viewsets.py:460 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3191,7 +3564,15 @@ msgstr "" "API 작업을 위해 Django REST 프레임워크와 통합됩니다. 제품 세부 정보 검색, 권한 적용, 제품의 관련 피드백에 액세스하는 " "메서드가 포함되어 있습니다." -#: engine/core/viewsets.py:605 +#: engine/core/viewsets.py:541 +msgid "identificator_type and identificators are required" +msgstr "식별자 유형과 식별자는 필수입니다" + +#: engine/core/viewsets.py:554 +msgid "identificator_type must be one of: uuid, slug, sku" +msgstr "identificator_type는 다음 중 하나여야 합니다: uuid, slug, sku" + +#: engine/core/viewsets.py:635 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3203,7 +3584,7 @@ msgstr "" " 처리하는 데 사용되는 쿼리 집합, 필터 구성 및 직렬화기 클래스를 정의합니다. 이 클래스의 목적은 Django REST 프레임워크를 " "통해 공급업체 관련 리소스에 대한 간소화된 액세스를 제공하는 것입니다." -#: engine/core/viewsets.py:625 +#: engine/core/viewsets.py:655 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3216,7 +3597,7 @@ msgstr "" "관리합니다. 이 뷰 세트의 목적은 다양한 작업에 대해 서로 다른 직렬화기를 제공하고 접근 가능한 피드백 객체에 대한 권한 기반 처리를 " "구현하는 것입니다. 이 클래스는 기본 `SchonViewSet`을 확장하고 데이터 쿼리를 위해 Django의 필터링 시스템을 사용합니다." -#: engine/core/viewsets.py:652 +#: engine/core/viewsets.py:682 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3231,7 +3612,7 @@ msgstr "" "엔드포인트가 포함되어 있습니다. 뷰셋은 수행되는 특정 작업에 따라 여러 직렬화기를 사용하며 주문 데이터와 상호 작용하는 동안 그에 따라 " "권한을 적용합니다." -#: engine/core/viewsets.py:914 +#: engine/core/viewsets.py:944 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3243,25 +3624,25 @@ msgstr "" "수행할 수 있습니다. 여기에는 요청된 작업을 기반으로 필터링, 권한 확인 및 직렬화기 전환이 포함됩니다. 또한 주문 제품 인스턴스에 대한" " 피드백 처리를 위한 세부 작업도 제공합니다." -#: engine/core/viewsets.py:974 +#: engine/core/viewsets.py:1004 msgid "Manages operations related to Product images in the application. " msgstr "애플리케이션에서 제품 이미지와 관련된 작업을 관리합니다." -#: engine/core/viewsets.py:988 +#: engine/core/viewsets.py:1018 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "다양한 API 작업을 통해 프로모션 코드 인스턴스의 검색 및 처리를 관리합니다." -#: engine/core/viewsets.py:1019 +#: engine/core/viewsets.py:1049 msgid "Represents a view set for managing promotions. " msgstr "프로모션을 관리하기 위한 보기 세트를 나타냅니다." -#: engine/core/viewsets.py:1032 +#: engine/core/viewsets.py:1062 msgid "Handles operations related to Stock data in the system." msgstr "시스템에서 주식 데이터와 관련된 작업을 처리합니다." -#: engine/core/viewsets.py:1046 +#: engine/core/viewsets.py:1076 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3275,7 +3656,7 @@ msgstr "" "내의 제품을 검색, 수정 및 사용자 지정할 수 있도록 합니다. 이 뷰셋은 위시리스트 제품에 대한 추가, 제거 및 대량 작업과 같은 기능을" " 용이하게 합니다. 명시적인 권한이 부여되지 않는 한 사용자가 자신의 위시리스트만 관리할 수 있도록 권한 검사가 통합되어 있습니다." -#: engine/core/viewsets.py:1183 +#: engine/core/viewsets.py:1213 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3287,12 +3668,12 @@ msgstr "" "사용자 정의 작업을 가능하게 합니다. 여기에는 다양한 HTTP 메서드, 직렬화기 재정의, 요청 컨텍스트에 따른 권한 처리를 위한 특수 " "동작이 포함되어 있습니다." -#: engine/core/viewsets.py:1254 +#: engine/core/viewsets.py:1275 #, python-brace-format msgid "Geocoding error: {e}" msgstr "지오코딩 오류입니다: {e}" -#: engine/core/viewsets.py:1262 +#: engine/core/viewsets.py:1283 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/nl_NL/LC_MESSAGES/django.mo b/engine/core/locale/nl_NL/LC_MESSAGES/django.mo index 7a202079..b0deaa05 100644 Binary files a/engine/core/locale/nl_NL/LC_MESSAGES/django.mo and b/engine/core/locale/nl_NL/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/nl_NL/LC_MESSAGES/django.po b/engine/core/locale/nl_NL/LC_MESSAGES/django.po index 7eff3454..6cfa21c5 100644 --- a/engine/core/locale/nl_NL/LC_MESSAGES/django.po +++ b/engine/core/locale/nl_NL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -49,114 +49,134 @@ msgstr "Gewijzigd" msgid "when the object was last modified" msgstr "Wanneer het object voor het laatst bewerkt is" -#: engine/core/admin.py:94 +#: engine/core/admin.py:98 msgid "translations" msgstr "Vertalingen" -#: engine/core/admin.py:102 +#: engine/core/admin.py:106 msgid "general" msgstr "Algemeen" -#: engine/core/admin.py:106 +#: engine/core/admin.py:110 msgid "relations" msgstr "Relaties" -#: engine/core/admin.py:111 +#: engine/core/admin.py:115 msgid "additional info" msgstr "extra informatie" -#: engine/core/admin.py:133 +#: engine/core/admin.py:137 msgid "metadata" msgstr "Metagegevens" -#: engine/core/admin.py:141 +#: engine/core/admin.py:145 msgid "timestamps" msgstr "Tijdstempels" -#: engine/core/admin.py:158 +#: engine/core/admin.py:162 #, python-format msgid "Activate selected %(verbose_name_plural)s" msgstr "Geselecteerde %(verbose_name_plural)s activeren" -#: engine/core/admin.py:166 +#: engine/core/admin.py:170 msgid "selected items have been activated." msgstr "Geselecteerde items zijn geactiveerd!" -#: engine/core/admin.py:174 +#: engine/core/admin.py:178 #, python-format msgid "Deactivate selected %(verbose_name_plural)s" msgstr "Geselecteerde %(verbose_name_plural)s deactiveren" -#: engine/core/admin.py:184 +#: engine/core/admin.py:188 msgid "selected items have been deactivated." msgstr "Geselecteerde items zijn gedeactiveerd!" -#: engine/core/admin.py:196 engine/core/graphene/object_types.py:653 -#: engine/core/graphene/object_types.py:660 engine/core/models.py:832 -#: engine/core/models.py:840 +#: engine/core/admin.py:200 engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:673 engine/core/models.py:918 +#: engine/core/models.py:928 msgid "attribute value" msgstr "Attribuut Waarde" -#: engine/core/admin.py:197 engine/core/graphene/object_types.py:77 -#: engine/core/models.py:841 +#: engine/core/admin.py:201 engine/core/graphene/object_types.py:81 +#: engine/core/models.py:929 msgid "attribute values" msgstr "Attribuutwaarden" -#: engine/core/admin.py:208 +#: engine/core/admin.py:212 engine/core/models.py:2232 msgid "image" msgstr "Afbeelding" -#: engine/core/admin.py:209 engine/core/graphene/object_types.py:530 +#: engine/core/admin.py:213 engine/core/graphene/object_types.py:535 msgid "images" msgstr "Afbeeldingen" -#: engine/core/admin.py:220 engine/core/models.py:576 +#: engine/core/admin.py:224 engine/core/models.py:635 msgid "stock" msgstr "Voorraad" -#: engine/core/admin.py:221 engine/core/graphene/object_types.py:713 +#: engine/core/admin.py:225 engine/core/graphene/object_types.py:735 msgid "stocks" msgstr "Aandelen" -#: engine/core/admin.py:232 engine/core/models.py:1938 +#: engine/core/admin.py:236 engine/core/models.py:2046 msgid "order product" msgstr "Product bestellen" -#: engine/core/admin.py:233 engine/core/graphene/object_types.py:441 -#: engine/core/models.py:1939 +#: engine/core/admin.py:237 engine/core/graphene/object_types.py:446 +#: engine/core/models.py:2047 msgid "order products" msgstr "Producten bestellen" -#: engine/core/admin.py:251 engine/core/admin.py:252 +#: engine/core/admin.py:255 engine/core/admin.py:256 msgid "children" msgstr "Kinderen" -#: engine/core/admin.py:528 +#: engine/core/admin.py:545 +msgid "video preview" +msgstr "Videovoorbeeld" + +#: engine/core/admin.py:551 msgid "has images" msgstr "Heeft afbeeldingen" -#: engine/core/admin.py:531 +#: engine/core/admin.py:554 #, python-format msgid "Export selected %(verbose_name_plural)s to marketplaces' feeds" msgstr "" "Exporteer geselecteerde %(verbose_name_plural)s naar feeds van marktplaatsen" -#: engine/core/admin.py:542 +#: engine/core/admin.py:565 #, python-format msgid "selected %(verbose_name_plural)s have been marked for export." msgstr "Geselecteerde %(verbose_name_plural)s zijn gemarkeerd voor export." -#: engine/core/admin.py:553 +#: engine/core/admin.py:576 #, python-format msgid "Ban selected %(verbose_name_plural)s from marketplaces' feeds" msgstr "Verwijder %(verbose_name_plural)s uit de feeds van marktplaatsen" -#: engine/core/admin.py:564 +#: engine/core/admin.py:587 #, python-format msgid "selected %(verbose_name_plural)s have been banned from export." msgstr "Geselecteerde %(verbose_name_plural)s zijn verboden voor export." -#: engine/core/admin.py:1116 +#: engine/core/admin.py:1030 +msgid "Preview" +msgstr "Voorbeeld" + +#: engine/core/admin.py:1031 +msgid "Metadata" +msgstr "Metadata" + +#: engine/core/admin.py:1034 +msgid "preview" +msgstr "Voorbeeld" + +#: engine/core/admin.py:1043 +msgid "image preview" +msgstr "Afbeelding voorbeeld" + +#: engine/core/admin.py:1166 msgid "Config" msgstr "Config" @@ -223,7 +243,7 @@ msgstr "" "inhoudsonderhandeling. Taal kan worden geselecteerd met zowel Accept-" "Language als query parameter." -#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:36 +#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "Cache I/O" @@ -247,7 +267,7 @@ msgstr "Verkrijg de blootstelbare parameters van de applicatie" msgid "send a message to the support team" msgstr "Stuur een bericht naar het ondersteuningsteam" -#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:59 msgid "request a CORSed URL" msgstr "Vraag een CORSed URL op. Alleen https toegestaan." @@ -391,11 +411,11 @@ msgstr "" "Herschrijf sommige velden van een bestaande categorie door niet-wijzigbare " "velden op te slaan" -#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757 -#: engine/core/docs/drf/viewsets.py:1046 -#: engine/core/graphene/object_types.py:119 -#: engine/core/graphene/object_types.py:239 -#: engine/core/graphene/object_types.py:540 +#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:781 +#: engine/core/docs/drf/viewsets.py:1070 +#: engine/core/graphene/object_types.py:123 +#: engine/core/graphene/object_types.py:247 +#: engine/core/graphene/object_types.py:546 msgid "SEO Meta snapshot" msgstr "SEO Meta momentopname" @@ -704,7 +724,7 @@ msgstr "Een enkel product ophalen (gedetailleerde weergave)" #: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683 #: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725 -#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763 +#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:787 msgid "Product UUID or slug" msgstr "Product UUID of Slug" @@ -732,294 +752,308 @@ msgstr "Een product verwijderen" msgid "lists all permitted feedbacks for a product" msgstr "somt alle toegestane feedbacks voor een product op" -#: engine/core/docs/drf/viewsets.py:758 +#: engine/core/docs/drf/viewsets.py:757 +msgid "retrieve exact products by identifier" +msgstr "Zoek exacte producten op basis van identificatiecode" + +#: engine/core/docs/drf/viewsets.py:759 +msgid "" +"retrieve a list of products by identifier type (uuid, slug, or sku). Send a " +"POST request with `identificator_type` and `identificators` (list of " +"values)." +msgstr "" +"Haal een lijst met producten op op basis van identificatietype (uuid, slug " +"of sku). Stuur een POST-verzoek met `identificator_type` en `identificators`" +" (lijst met waarden)." + +#: engine/core/docs/drf/viewsets.py:782 msgid "returns a snapshot of the product's SEO meta data" msgstr "" "Geeft als resultaat een momentopname van de SEO-metagegevens van het product" -#: engine/core/docs/drf/viewsets.py:779 +#: engine/core/docs/drf/viewsets.py:803 msgid "list all addresses" msgstr "Vermeld alle adressen" -#: engine/core/docs/drf/viewsets.py:789 +#: engine/core/docs/drf/viewsets.py:813 msgid "retrieve a single address" msgstr "Een enkel adres ophalen" -#: engine/core/docs/drf/viewsets.py:799 +#: engine/core/docs/drf/viewsets.py:823 msgid "create a new address" msgstr "Een nieuw adres maken" -#: engine/core/docs/drf/viewsets.py:810 +#: engine/core/docs/drf/viewsets.py:834 msgid "delete an address" msgstr "Een adres verwijderen" -#: engine/core/docs/drf/viewsets.py:820 +#: engine/core/docs/drf/viewsets.py:844 msgid "update an entire address" msgstr "Een heel adres bijwerken" -#: engine/core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:855 msgid "partially update an address" msgstr "Een adres gedeeltelijk bijwerken" -#: engine/core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:866 msgid "autocomplete address suggestions" msgstr "Automatische adresinvoer" -#: engine/core/docs/drf/viewsets.py:848 +#: engine/core/docs/drf/viewsets.py:872 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" "Ruwe gegevensquerystring, gelieve aan te vullen met gegevens van geo-IP " "eindpunt" -#: engine/core/docs/drf/viewsets.py:855 +#: engine/core/docs/drf/viewsets.py:879 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "beperkt de hoeveelheid resultaten, 1 < limiet < 10, standaard: 5" -#: engine/core/docs/drf/viewsets.py:871 +#: engine/core/docs/drf/viewsets.py:895 msgid "list all feedbacks (simple view)" msgstr "alle feedbacks weergeven (eenvoudige weergave)" -#: engine/core/docs/drf/viewsets.py:881 +#: engine/core/docs/drf/viewsets.py:905 msgid "retrieve a single feedback (detailed view)" msgstr "een enkele feedback ophalen (gedetailleerde weergave)" -#: engine/core/docs/drf/viewsets.py:888 +#: engine/core/docs/drf/viewsets.py:912 msgid "create a feedback" msgstr "een feedback creëren" -#: engine/core/docs/drf/viewsets.py:895 +#: engine/core/docs/drf/viewsets.py:919 msgid "delete a feedback" msgstr "een feedback verwijderen" -#: engine/core/docs/drf/viewsets.py:902 +#: engine/core/docs/drf/viewsets.py:926 msgid "rewrite an existing feedback saving non-editables" msgstr "" "een bestaande feedback herschrijven waarbij niet-wijzigbare gegevens worden " "opgeslagen" -#: engine/core/docs/drf/viewsets.py:909 +#: engine/core/docs/drf/viewsets.py:933 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" "Herschrijf sommige velden van een bestaande categorie door niet-wijzigbare " "velden op te slaan" -#: engine/core/docs/drf/viewsets.py:919 +#: engine/core/docs/drf/viewsets.py:943 msgid "list all order–product relations (simple view)" msgstr "alle order-productrelaties weergeven (eenvoudige weergave)" -#: engine/core/docs/drf/viewsets.py:929 +#: engine/core/docs/drf/viewsets.py:953 msgid "retrieve a single order–product relation (detailed view)" msgstr "" "een enkele bestelling-productrelatie ophalen (gedetailleerde weergave)" -#: engine/core/docs/drf/viewsets.py:939 +#: engine/core/docs/drf/viewsets.py:963 msgid "create a new order–product relation" msgstr "een nieuwe bestelling-product relatie maken" -#: engine/core/docs/drf/viewsets.py:949 +#: engine/core/docs/drf/viewsets.py:973 msgid "replace an existing order–product relation" msgstr "een bestaande order-productrelatie vervangen" -#: engine/core/docs/drf/viewsets.py:959 +#: engine/core/docs/drf/viewsets.py:983 msgid "partially update an existing order–product relation" msgstr "een bestaande order-productrelatie gedeeltelijk bijwerken" -#: engine/core/docs/drf/viewsets.py:969 +#: engine/core/docs/drf/viewsets.py:993 msgid "delete an order–product relation" msgstr "een order-productrelatie verwijderen" -#: engine/core/docs/drf/viewsets.py:979 +#: engine/core/docs/drf/viewsets.py:1003 msgid "add or remove feedback on an order–product relation" msgstr "feedback toevoegen of verwijderen op een order-productrelatie" -#: engine/core/docs/drf/viewsets.py:996 +#: engine/core/docs/drf/viewsets.py:1020 msgid "list all brands (simple view)" msgstr "Alle merken weergeven (eenvoudige weergave)" -#: engine/core/docs/drf/viewsets.py:1003 +#: engine/core/docs/drf/viewsets.py:1027 msgid "retrieve a single brand (detailed view)" msgstr "Een enkel merk ophalen (gedetailleerde weergave)" -#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051 +#: engine/core/docs/drf/viewsets.py:1032 engine/core/docs/drf/viewsets.py:1075 msgid "Brand UUID or slug" msgstr "Merk UUID of slug" -#: engine/core/docs/drf/viewsets.py:1018 +#: engine/core/docs/drf/viewsets.py:1042 msgid "create a brand" msgstr "Een merk creëren" -#: engine/core/docs/drf/viewsets.py:1025 +#: engine/core/docs/drf/viewsets.py:1049 msgid "delete a brand" msgstr "Een merk verwijderen" -#: engine/core/docs/drf/viewsets.py:1032 +#: engine/core/docs/drf/viewsets.py:1056 msgid "rewrite an existing brand saving non-editables" msgstr "Een bestaand merk herschrijven door niet-editables op te slaan" -#: engine/core/docs/drf/viewsets.py:1039 +#: engine/core/docs/drf/viewsets.py:1063 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "" "Herschrijf sommige velden van een bestaande categorie door niet-wijzigbare " "velden op te slaan" -#: engine/core/docs/drf/viewsets.py:1064 +#: engine/core/docs/drf/viewsets.py:1088 msgid "list all vendors (simple view)" msgstr "Alle leveranciers weergeven (eenvoudige weergave)" -#: engine/core/docs/drf/viewsets.py:1074 +#: engine/core/docs/drf/viewsets.py:1098 msgid "retrieve a single vendor (detailed view)" msgstr "Een enkele leverancier ophalen (gedetailleerde weergave)" -#: engine/core/docs/drf/viewsets.py:1081 +#: engine/core/docs/drf/viewsets.py:1105 msgid "create a vendor" msgstr "Een leverancier maken" -#: engine/core/docs/drf/viewsets.py:1088 +#: engine/core/docs/drf/viewsets.py:1112 msgid "delete a vendor" msgstr "Een verkoper verwijderen" -#: engine/core/docs/drf/viewsets.py:1095 +#: engine/core/docs/drf/viewsets.py:1119 msgid "rewrite an existing vendor saving non-editables" msgstr "" "Een bestaande verkoper herschrijven en niet-wijzigbare gegevens opslaan" -#: engine/core/docs/drf/viewsets.py:1102 +#: engine/core/docs/drf/viewsets.py:1126 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "" "Herschrijf sommige velden van een bestaande categorie door niet-wijzigbare " "velden op te slaan" -#: engine/core/docs/drf/viewsets.py:1112 +#: engine/core/docs/drf/viewsets.py:1136 msgid "list all product images (simple view)" msgstr "Alle productafbeeldingen weergeven (eenvoudige weergave)" -#: engine/core/docs/drf/viewsets.py:1122 +#: engine/core/docs/drf/viewsets.py:1146 msgid "retrieve a single product image (detailed view)" msgstr "Een enkele productafbeelding ophalen (gedetailleerde weergave)" -#: engine/core/docs/drf/viewsets.py:1129 +#: engine/core/docs/drf/viewsets.py:1153 msgid "create a product image" msgstr "Een productafbeelding maken" -#: engine/core/docs/drf/viewsets.py:1139 +#: engine/core/docs/drf/viewsets.py:1163 msgid "delete a product image" msgstr "Een productafbeelding verwijderen" -#: engine/core/docs/drf/viewsets.py:1146 +#: engine/core/docs/drf/viewsets.py:1170 msgid "rewrite an existing product image saving non-editables" msgstr "" "Een bestaande productafbeelding herschrijven waarbij niet-wijzigbare " "gegevens worden opgeslagen" -#: engine/core/docs/drf/viewsets.py:1154 +#: engine/core/docs/drf/viewsets.py:1178 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "" "Herschrijf sommige velden van een bestaande categorie door niet-wijzigbare " "velden op te slaan" -#: engine/core/docs/drf/viewsets.py:1165 +#: engine/core/docs/drf/viewsets.py:1189 msgid "list all promo codes (simple view)" msgstr "Alle promotiecodes weergeven (eenvoudige weergave)" -#: engine/core/docs/drf/viewsets.py:1175 +#: engine/core/docs/drf/viewsets.py:1199 msgid "retrieve a single promo code (detailed view)" msgstr "Een enkele promotiecode ophalen (gedetailleerde weergave)" -#: engine/core/docs/drf/viewsets.py:1182 +#: engine/core/docs/drf/viewsets.py:1206 msgid "create a promo code" msgstr "Een promotiecode maken" -#: engine/core/docs/drf/viewsets.py:1189 +#: engine/core/docs/drf/viewsets.py:1213 msgid "delete a promo code" msgstr "Een promotiecode verwijderen" -#: engine/core/docs/drf/viewsets.py:1196 +#: engine/core/docs/drf/viewsets.py:1220 msgid "rewrite an existing promo code saving non-editables" msgstr "Een bestaande promocode herschrijven die niet-wijzigbaar is" -#: engine/core/docs/drf/viewsets.py:1203 +#: engine/core/docs/drf/viewsets.py:1227 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "" "Herschrijf sommige velden van een bestaande categorie door niet-wijzigbare " "velden op te slaan" -#: engine/core/docs/drf/viewsets.py:1213 +#: engine/core/docs/drf/viewsets.py:1237 msgid "list all promotions (simple view)" msgstr "Alle promoties weergeven (eenvoudige weergave)" -#: engine/core/docs/drf/viewsets.py:1223 +#: engine/core/docs/drf/viewsets.py:1247 msgid "retrieve a single promotion (detailed view)" msgstr "Een enkele promotie ophalen (gedetailleerde weergave)" -#: engine/core/docs/drf/viewsets.py:1230 +#: engine/core/docs/drf/viewsets.py:1254 msgid "create a promotion" msgstr "Maak een promotie" -#: engine/core/docs/drf/viewsets.py:1237 +#: engine/core/docs/drf/viewsets.py:1261 msgid "delete a promotion" msgstr "Een promotie verwijderen" -#: engine/core/docs/drf/viewsets.py:1244 +#: engine/core/docs/drf/viewsets.py:1268 msgid "rewrite an existing promotion saving non-editables" msgstr "" "Een bestaande promotie herschrijven waarbij niet-wijzigbare gegevens worden " "opgeslagen" -#: engine/core/docs/drf/viewsets.py:1251 +#: engine/core/docs/drf/viewsets.py:1275 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "" "Herschrijf sommige velden van een bestaande categorie door niet-wijzigbare " "velden op te slaan" -#: engine/core/docs/drf/viewsets.py:1261 +#: engine/core/docs/drf/viewsets.py:1285 msgid "list all stocks (simple view)" msgstr "Alle aandelen weergeven (eenvoudige weergave)" -#: engine/core/docs/drf/viewsets.py:1268 +#: engine/core/docs/drf/viewsets.py:1292 msgid "retrieve a single stock (detailed view)" msgstr "Een enkele voorraad ophalen (gedetailleerde weergave)" -#: engine/core/docs/drf/viewsets.py:1275 +#: engine/core/docs/drf/viewsets.py:1299 msgid "create a stock record" msgstr "Een voorraadrecord maken" -#: engine/core/docs/drf/viewsets.py:1282 +#: engine/core/docs/drf/viewsets.py:1306 msgid "delete a stock record" msgstr "Een voorraadrecord verwijderen" -#: engine/core/docs/drf/viewsets.py:1289 +#: engine/core/docs/drf/viewsets.py:1313 msgid "rewrite an existing stock record saving non-editables" msgstr "" "Een bestaand voorraadrecord herschrijven waarbij niet-wijzigbare gegevens " "worden opgeslagen" -#: engine/core/docs/drf/viewsets.py:1297 +#: engine/core/docs/drf/viewsets.py:1321 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "" "Herschrijf sommige velden van een bestaande categorie door niet-wijzigbare " "velden op te slaan" -#: engine/core/docs/drf/viewsets.py:1308 +#: engine/core/docs/drf/viewsets.py:1332 msgid "list all product tags (simple view)" msgstr "Alle producttags weergeven (eenvoudige weergave)" -#: engine/core/docs/drf/viewsets.py:1318 +#: engine/core/docs/drf/viewsets.py:1342 msgid "retrieve a single product tag (detailed view)" msgstr "Een enkele producttag ophalen (gedetailleerde weergave)" -#: engine/core/docs/drf/viewsets.py:1325 +#: engine/core/docs/drf/viewsets.py:1349 msgid "create a product tag" msgstr "Een producttag maken" -#: engine/core/docs/drf/viewsets.py:1335 +#: engine/core/docs/drf/viewsets.py:1359 msgid "delete a product tag" msgstr "Een producttag verwijderen" -#: engine/core/docs/drf/viewsets.py:1342 +#: engine/core/docs/drf/viewsets.py:1366 msgid "rewrite an existing product tag saving non-editables" msgstr "Een bestaande producttag herschrijven en niet-wijzigbare tags opslaan" -#: engine/core/docs/drf/viewsets.py:1350 +#: engine/core/docs/drf/viewsets.py:1374 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "" "Herschrijf sommige velden van een bestaande categorie door niet-wijzigbare " @@ -1030,374 +1064,376 @@ msgstr "" msgid "no search term provided." msgstr "Geen zoekterm opgegeven." -#: engine/core/filters.py:78 engine/core/filters.py:484 -#: engine/core/filters.py:625 +#: engine/core/filters.py:79 engine/core/filters.py:485 +#: engine/core/filters.py:626 msgid "Search" msgstr "Zoek op" -#: engine/core/filters.py:79 engine/core/filters.py:663 -#: engine/core/filters.py:692 +#: engine/core/filters.py:80 engine/core/filters.py:664 +#: engine/core/filters.py:693 msgid "UUID" msgstr "UUID" -#: engine/core/filters.py:80 engine/core/filters.py:487 -#: engine/core/filters.py:627 +#: engine/core/filters.py:81 engine/core/filters.py:488 +#: engine/core/filters.py:628 msgid "Name" msgstr "Naam" -#: engine/core/filters.py:82 engine/core/filters.py:630 +#: engine/core/filters.py:83 engine/core/filters.py:631 msgid "Categories" msgstr "Categorieën" -#: engine/core/filters.py:86 +#: engine/core/filters.py:87 msgid "Categories Slugs" msgstr "Categorieën Naaktslakken" -#: engine/core/filters.py:88 engine/core/filters.py:495 +#: engine/core/filters.py:89 engine/core/filters.py:496 +#: engine/core/templates/admin_doc/index.html:37 +#: engine/core/templates/admin_doc/template_tag_index.html:12 msgid "Tags" msgstr "Tags" -#: engine/core/filters.py:90 +#: engine/core/filters.py:91 msgid "Min Price" msgstr "Min Prijs" -#: engine/core/filters.py:93 +#: engine/core/filters.py:94 msgid "Max Price" msgstr "Maximale prijs" -#: engine/core/filters.py:95 +#: engine/core/filters.py:96 msgid "Is Active" msgstr "Is actief" -#: engine/core/filters.py:96 +#: engine/core/filters.py:97 msgid "Brand" msgstr "Merk" -#: engine/core/filters.py:97 +#: engine/core/filters.py:98 msgid "Attributes" msgstr "Attributen" -#: engine/core/filters.py:99 +#: engine/core/filters.py:100 msgid "Quantity" msgstr "Hoeveelheid" -#: engine/core/filters.py:101 engine/core/filters.py:489 -#: engine/core/filters.py:628 engine/core/models.py:316 -#: engine/core/models.py:497 engine/core/models.py:663 +#: engine/core/filters.py:102 engine/core/filters.py:490 +#: engine/core/filters.py:629 engine/core/models.py:339 +#: engine/core/models.py:546 engine/core/models.py:736 msgid "Slug" msgstr "Slak" -#: engine/core/filters.py:102 +#: engine/core/filters.py:103 msgid "Is Digital" msgstr "Is digitaal" -#: engine/core/filters.py:104 +#: engine/core/filters.py:105 msgid "Include sub-categories" msgstr "Subcategorieën opnemen" -#: engine/core/filters.py:108 +#: engine/core/filters.py:109 msgid "Include personal ordered" msgstr "Inclusief persoonlijk bestelde producten" -#: engine/core/filters.py:110 engine/core/models.py:667 +#: engine/core/filters.py:111 engine/core/models.py:740 msgid "SKU" msgstr "SKU" -#: engine/core/filters.py:212 +#: engine/core/filters.py:213 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" -#: engine/core/filters.py:398 +#: engine/core/filters.py:399 msgid "Search (ID, product name or part number)" msgstr "Zoeken (ID, productnaam of onderdeelnummer)" -#: engine/core/filters.py:402 +#: engine/core/filters.py:403 msgid "Bought after (inclusive)" msgstr "Gekocht na (inclusief)" -#: engine/core/filters.py:405 +#: engine/core/filters.py:406 msgid "Bought before (inclusive)" msgstr "Eerder gekocht (inclusief)" -#: engine/core/filters.py:410 engine/core/filters.py:461 -#: engine/core/filters.py:697 +#: engine/core/filters.py:411 engine/core/filters.py:462 +#: engine/core/filters.py:698 msgid "User email" msgstr "E-mail gebruiker" -#: engine/core/filters.py:413 engine/core/filters.py:464 -#: engine/core/filters.py:672 engine/core/filters.py:694 +#: engine/core/filters.py:414 engine/core/filters.py:465 +#: engine/core/filters.py:673 engine/core/filters.py:695 msgid "User UUID" msgstr "Gebruiker UUID" -#: engine/core/filters.py:415 +#: engine/core/filters.py:416 msgid "Status" msgstr "Status" -#: engine/core/filters.py:419 +#: engine/core/filters.py:420 msgid "Human Readable ID" msgstr "Menselijk leesbare ID" -#: engine/core/filters.py:488 +#: engine/core/filters.py:489 msgid "Parent" msgstr "Ouder" -#: engine/core/filters.py:492 +#: engine/core/filters.py:493 msgid "Whole category(has at least 1 product or not)" msgstr "Hele categorie (heeft minstens 1 product of niet)" -#: engine/core/filters.py:496 +#: engine/core/filters.py:497 msgid "Level" msgstr "Niveau" -#: engine/core/filters.py:667 +#: engine/core/filters.py:668 msgid "Product UUID" msgstr "Product UUID" -#: engine/core/graphene/mutations.py:40 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Sleutel om te zoeken of te plaatsen in de cache" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:43 msgid "data to store in cache" msgstr "Gegevens om op te slaan in de cache" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:46 msgid "timeout in seconds to set the data for into the cache" msgstr "Time-out in seconden om de gegevens in de cache te plaatsen" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:49 msgid "cached data" msgstr "Gecachte gegevens" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:64 msgid "camelized JSON data from the requested URL" msgstr "Camelized JSON-gegevens van de opgevraagde URL" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:248 +#: engine/core/graphene/mutations.py:69 engine/core/views.py:267 msgid "only URLs starting with http(s):// are allowed" msgstr "Alleen URL's die beginnen met http(s):// zijn toegestaan" -#: engine/core/graphene/mutations.py:86 +#: engine/core/graphene/mutations.py:87 msgid "add a product to the order" msgstr "Een product aan de bestelling toevoegen" -#: engine/core/graphene/mutations.py:109 engine/core/graphene/mutations.py:138 -#: engine/core/graphene/mutations.py:254 engine/core/graphene/mutations.py:306 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139 +#: engine/core/graphene/mutations.py:256 engine/core/graphene/mutations.py:308 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Bestelling {order_uuid} niet gevonden!" -#: engine/core/graphene/mutations.py:115 engine/core/graphene/mutations.py:166 +#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167 msgid "remove a product from the order" msgstr "Een product uit de bestelling verwijderen" -#: engine/core/graphene/mutations.py:144 +#: engine/core/graphene/mutations.py:145 msgid "remove all products from the order" msgstr "Alle producten uit de bestelling verwijderen" -#: engine/core/graphene/mutations.py:189 +#: engine/core/graphene/mutations.py:190 msgid "buy an order" msgstr "Een bestelling kopen" -#: engine/core/graphene/mutations.py:220 engine/core/graphene/mutations.py:282 +#: engine/core/graphene/mutations.py:222 engine/core/graphene/mutations.py:284 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "Geef order_uuid of order_hr_id - wederzijds exclusief!" -#: engine/core/graphene/mutations.py:249 engine/core/graphene/mutations.py:524 -#: engine/core/graphene/mutations.py:573 engine/core/viewsets.py:753 +#: engine/core/graphene/mutations.py:251 engine/core/graphene/mutations.py:526 +#: engine/core/graphene/mutations.py:576 engine/core/viewsets.py:783 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Verkeerd type kwam uit order.buy() methode: {type(instance)!s}" -#: engine/core/graphene/mutations.py:260 +#: engine/core/graphene/mutations.py:262 msgid "perform an action on a list of products in the order" msgstr "Een actie uitvoeren op een lijst met producten in de bestelling" -#: engine/core/graphene/mutations.py:265 +#: engine/core/graphene/mutations.py:267 msgid "remove/add" msgstr "Verwijderen/toevoegen" -#: engine/core/graphene/mutations.py:301 engine/core/graphene/mutations.py:342 +#: engine/core/graphene/mutations.py:303 engine/core/graphene/mutations.py:342 msgid "action must be either add or remove" msgstr "De actie moet \"toevoegen\" of \"verwijderen\" zijn!" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:314 msgid "perform an action on a list of products in the wishlist" msgstr "Een actie uitvoeren op een lijst met producten in het verlanglijstje" -#: engine/core/graphene/mutations.py:330 -msgid "please provide wishlist_uuid value" -msgstr "Geef de waarde `wishlist_uuid` op." - -#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:423 -#: engine/core/graphene/mutations.py:451 engine/core/graphene/mutations.py:479 -#: engine/core/graphene/mutations.py:529 +#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:424 +#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480 +#: engine/core/graphene/mutations.py:531 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "wens {wishlist_uuid} niet gevonden!" -#: engine/core/graphene/mutations.py:401 +#: engine/core/graphene/mutations.py:402 msgid "add a product to the wishlist" msgstr "Een product aan de bestelling toevoegen" -#: engine/core/graphene/mutations.py:429 +#: engine/core/graphene/mutations.py:430 msgid "remove a product from the wishlist" msgstr "Een product uit de bestelling verwijderen" -#: engine/core/graphene/mutations.py:457 +#: engine/core/graphene/mutations.py:458 msgid "remove all products from the wishlist" msgstr "Een product uit de bestelling verwijderen" -#: engine/core/graphene/mutations.py:485 +#: engine/core/graphene/mutations.py:486 msgid "buy all products from the wishlist" msgstr "Een product uit de bestelling verwijderen" -#: engine/core/graphene/mutations.py:535 +#: engine/core/graphene/mutations.py:537 msgid "buy a product" msgstr "Een bestelling kopen" -#: engine/core/graphene/mutations.py:542 +#: engine/core/graphene/mutations.py:544 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" msgstr "" "Stuur de attributen als de string opgemaakt als attr1=waarde1,attr2=waarde2" -#: engine/core/graphene/mutations.py:580 +#: engine/core/graphene/mutations.py:583 msgid "add or delete a feedback for orderproduct" msgstr "Feedback toevoegen of verwijderen voor het orderproduct" -#: engine/core/graphene/mutations.py:606 +#: engine/core/graphene/mutations.py:610 msgid "action must be either `add` or `remove`" msgstr "De actie moet `toevoegen` of `verwijderen` zijn!" -#: engine/core/graphene/mutations.py:609 +#: engine/core/graphene/mutations.py:613 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderproduct {order_product_uuid} niet gevonden!" -#: engine/core/graphene/mutations.py:616 +#: engine/core/graphene/mutations.py:620 msgid "original address string provided by the user" msgstr "Originele adresstring geleverd door de gebruiker" -#: engine/core/graphene/mutations.py:653 engine/core/models.py:986 -#: engine/core/models.py:999 engine/core/models.py:1443 -#: engine/core/models.py:1474 engine/core/models.py:1505 -#: engine/core/viewsets.py:760 +#: engine/core/graphene/mutations.py:662 engine/core/models.py:1079 +#: engine/core/models.py:1092 engine/core/models.py:1544 +#: engine/core/models.py:1575 engine/core/models.py:1606 +#: engine/core/viewsets.py:790 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} bestaat niet: {uuid}!" -#: engine/core/graphene/mutations.py:667 +#: engine/core/graphene/mutations.py:676 msgid "limit must be between 1 and 10" msgstr "Limiet moet tussen 1 en 10 liggen" -#: engine/core/graphene/mutations.py:716 +#: engine/core/graphene/mutations.py:726 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - werkt als een charme" -#: engine/core/graphene/object_types.py:84 -#: engine/core/graphene/object_types.py:420 -#: engine/core/graphene/object_types.py:471 engine/core/models.py:803 -#: engine/core/models.py:1297 engine/core/models.py:2033 +#: engine/core/graphene/object_types.py:88 +#: engine/core/graphene/object_types.py:425 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:889 +#: engine/core/models.py:1394 engine/core/models.py:2139 msgid "attributes" msgstr "Attributen" -#: engine/core/graphene/object_types.py:97 +#: engine/core/graphene/object_types.py:101 msgid "grouped attributes" msgstr "Gegroepeerde kenmerken" -#: engine/core/graphene/object_types.py:104 +#: engine/core/graphene/object_types.py:108 msgid "groups of attributes" msgstr "Groepen van kenmerken" -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:217 -#: engine/core/graphene/object_types.py:255 engine/core/models.py:440 +#: engine/core/graphene/object_types.py:122 +#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:264 engine/core/models.py:489 msgid "categories" msgstr "Categorieën" -#: engine/core/graphene/object_types.py:134 engine/core/models.py:511 +#: engine/core/graphene/object_types.py:138 engine/core/models.py:564 msgid "brands" msgstr "Merken" -#: engine/core/graphene/object_types.py:219 +#: engine/core/graphene/object_types.py:226 msgid "category image url" msgstr "Categorieën" -#: engine/core/graphene/object_types.py:220 -#: engine/core/graphene/object_types.py:365 engine/core/models.py:278 +#: engine/core/graphene/object_types.py:227 +#: engine/core/graphene/object_types.py:369 engine/core/models.py:301 msgid "markup percentage" msgstr "Opwaarderingspercentage" -#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:231 msgid "which attributes and values can be used for filtering this category." msgstr "" "Welke attributen en waarden kunnen worden gebruikt om deze categorie te " "filteren." -#: engine/core/graphene/object_types.py:230 +#: engine/core/graphene/object_types.py:237 msgid "" "minimum and maximum prices for products in this category, if available." msgstr "" "Minimale en maximale prijzen voor producten in deze categorie, indien " "beschikbaar." -#: engine/core/graphene/object_types.py:234 +#: engine/core/graphene/object_types.py:240 +msgid "brands in this category" +msgstr "Merken in deze categorie" + +#: engine/core/graphene/object_types.py:242 msgid "tags for this category" msgstr "Tags voor deze categorie" -#: engine/core/graphene/object_types.py:237 +#: engine/core/graphene/object_types.py:245 msgid "products in this category" msgstr "Producten in deze categorie" -#: engine/core/graphene/object_types.py:372 engine/core/models.py:183 +#: engine/core/graphene/object_types.py:376 engine/core/models.py:202 msgid "vendors" msgstr "Verkopers" -#: engine/core/graphene/object_types.py:376 +#: engine/core/graphene/object_types.py:380 msgid "Latitude (Y coordinate)" msgstr "Breedtegraad (Y-coördinaat)" -#: engine/core/graphene/object_types.py:377 +#: engine/core/graphene/object_types.py:381 msgid "Longitude (X coordinate)" msgstr "Lengtegraad (X-coördinaat)" -#: engine/core/graphene/object_types.py:406 +#: engine/core/graphene/object_types.py:411 msgid "comment" msgstr "Hoe" -#: engine/core/graphene/object_types.py:408 -#: engine/core/graphene/object_types.py:542 +#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:548 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "Waarderingswaarde van 1 tot en met 10, of 0 indien niet ingesteld." -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:421 msgid "represents feedback from a user." msgstr "Vertegenwoordigt feedback van een gebruiker." -#: engine/core/graphene/object_types.py:421 -#: engine/core/graphene/object_types.py:472 engine/core/models.py:1291 +#: engine/core/graphene/object_types.py:426 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:1388 msgid "notifications" msgstr "Meldingen" -#: engine/core/graphene/object_types.py:423 +#: engine/core/graphene/object_types.py:428 msgid "download url for this order product if applicable" msgstr "Download url voor dit bestelproduct indien van toepassing" -#: engine/core/graphene/object_types.py:425 engine/core/models.py:1856 +#: engine/core/graphene/object_types.py:430 engine/core/models.py:1959 msgid "feedback" msgstr "Feedback" -#: engine/core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:464 msgid "a list of order products in this order" msgstr "Een lijst met bestelde producten in deze bestelling" -#: engine/core/graphene/object_types.py:461 engine/core/models.py:1261 +#: engine/core/graphene/object_types.py:466 engine/core/models.py:1358 msgid "billing address" msgstr "Factuuradres" -#: engine/core/graphene/object_types.py:465 +#: engine/core/graphene/object_types.py:470 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1405,53 +1441,57 @@ msgstr "" "Verzendadres voor deze bestelling, leeg laten als dit hetzelfde is als het " "factuuradres of als dit niet van toepassing is" -#: engine/core/graphene/object_types.py:468 +#: engine/core/graphene/object_types.py:473 msgid "total price of this order" msgstr "Totale prijs van deze bestelling" -#: engine/core/graphene/object_types.py:469 +#: engine/core/graphene/object_types.py:474 msgid "total quantity of products in order" msgstr "Totale hoeveelheid producten in bestelling" -#: engine/core/graphene/object_types.py:470 +#: engine/core/graphene/object_types.py:475 msgid "are all products in the order digital" msgstr "Zijn alle producten in de bestelling digitaal" -#: engine/core/graphene/object_types.py:474 +#: engine/core/graphene/object_types.py:479 msgid "transactions for this order" msgstr "Transacties voor deze bestelling" -#: engine/core/graphene/object_types.py:494 engine/core/models.py:1325 +#: engine/core/graphene/object_types.py:499 engine/core/models.py:1422 msgid "orders" msgstr "Bestellingen" -#: engine/core/graphene/object_types.py:515 +#: engine/core/graphene/object_types.py:520 msgid "image url" msgstr "Afbeelding URL" -#: engine/core/graphene/object_types.py:522 +#: engine/core/graphene/object_types.py:527 msgid "product's images" msgstr "Afbeeldingen van het product" -#: engine/core/graphene/object_types.py:529 engine/core/models.py:439 -#: engine/core/models.py:596 +#: engine/core/graphene/object_types.py:534 engine/core/models.py:488 +#: engine/core/models.py:661 msgid "category" msgstr "Categorie" -#: engine/core/graphene/object_types.py:531 engine/core/models.py:1857 +#: engine/core/graphene/object_types.py:536 engine/core/models.py:1960 msgid "feedbacks" msgstr "Reacties" -#: engine/core/graphene/object_types.py:532 engine/core/models.py:510 -#: engine/core/models.py:605 +#: engine/core/graphene/object_types.py:537 engine/core/models.py:563 +#: engine/core/models.py:670 msgid "brand" msgstr "Merk" -#: engine/core/graphene/object_types.py:534 engine/core/models.py:103 +#: engine/core/graphene/object_types.py:538 +msgid "video url" +msgstr "Video-URL" + +#: engine/core/graphene/object_types.py:540 engine/core/models.py:122 msgid "attribute groups" msgstr "Attribuutgroepen" -#: engine/core/graphene/object_types.py:536 +#: engine/core/graphene/object_types.py:542 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1459,7 +1499,7 @@ msgstr "Attribuutgroepen" msgid "price" msgstr "Prijs" -#: engine/core/graphene/object_types.py:537 +#: engine/core/graphene/object_types.py:543 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1467,39 +1507,39 @@ msgstr "Prijs" msgid "quantity" msgstr "Hoeveelheid" -#: engine/core/graphene/object_types.py:538 +#: engine/core/graphene/object_types.py:544 msgid "number of feedbacks" msgstr "Aantal terugkoppelingen" -#: engine/core/graphene/object_types.py:539 +#: engine/core/graphene/object_types.py:545 msgid "only available for personal orders" msgstr "Producten alleen beschikbaar voor persoonlijke bestellingen" -#: engine/core/graphene/object_types.py:544 +#: engine/core/graphene/object_types.py:550 msgid "discount price" msgstr "Korting" -#: engine/core/graphene/object_types.py:568 engine/core/models.py:682 +#: engine/core/graphene/object_types.py:575 engine/core/models.py:755 msgid "products" msgstr "Producten" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:691 msgid "promocodes" msgstr "Promocodes" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:706 msgid "products on sale" msgstr "Producten te koop" -#: engine/core/graphene/object_types.py:701 engine/core/models.py:935 +#: engine/core/graphene/object_types.py:720 engine/core/models.py:1028 msgid "promotions" msgstr "Promoties" -#: engine/core/graphene/object_types.py:705 engine/core/models.py:182 +#: engine/core/graphene/object_types.py:727 engine/core/models.py:201 msgid "vendor" msgstr "Verkoper" -#: engine/core/graphene/object_types.py:706 engine/core/models.py:681 +#: engine/core/graphene/object_types.py:728 engine/core/models.py:754 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1507,104 +1547,104 @@ msgstr "Verkoper" msgid "product" msgstr "Product" -#: engine/core/graphene/object_types.py:718 engine/core/models.py:958 +#: engine/core/graphene/object_types.py:740 engine/core/models.py:1051 msgid "wishlisted products" msgstr "Gewenste producten" -#: engine/core/graphene/object_types.py:725 engine/core/models.py:975 +#: engine/core/graphene/object_types.py:747 engine/core/models.py:1068 msgid "wishlists" msgstr "Verlanglijst" -#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:752 msgid "tagged products" msgstr "Getagde producten" -#: engine/core/graphene/object_types.py:738 engine/core/models.py:219 -#: engine/core/models.py:611 +#: engine/core/graphene/object_types.py:760 engine/core/models.py:238 +#: engine/core/models.py:676 msgid "product tags" msgstr "Product tags" -#: engine/core/graphene/object_types.py:743 +#: engine/core/graphene/object_types.py:765 msgid "tagged categories" msgstr "Getagde categorieën" -#: engine/core/graphene/object_types.py:751 +#: engine/core/graphene/object_types.py:773 msgid "categories tags" msgstr "Categorieën' tags" -#: engine/core/graphene/object_types.py:755 +#: engine/core/graphene/object_types.py:777 msgid "project name" msgstr "Naam project" -#: engine/core/graphene/object_types.py:756 +#: engine/core/graphene/object_types.py:778 msgid "company name" msgstr "Bedrijfsnaam" -#: engine/core/graphene/object_types.py:757 +#: engine/core/graphene/object_types.py:779 msgid "company address" msgstr "Adres" -#: engine/core/graphene/object_types.py:758 +#: engine/core/graphene/object_types.py:780 msgid "company phone number" msgstr "Telefoonnummer bedrijf" -#: engine/core/graphene/object_types.py:761 +#: engine/core/graphene/object_types.py:783 msgid "email from, sometimes it must be used instead of host user value" msgstr "" "e-mail van', soms moet deze worden gebruikt in plaats van de " "hostgebruikerswaarde" -#: engine/core/graphene/object_types.py:764 +#: engine/core/graphene/object_types.py:786 msgid "email host user" msgstr "Gebruiker e-mail hosten" -#: engine/core/graphene/object_types.py:765 +#: engine/core/graphene/object_types.py:787 msgid "maximum amount for payment" msgstr "Maximumbedrag voor betaling" -#: engine/core/graphene/object_types.py:766 +#: engine/core/graphene/object_types.py:788 msgid "minimum amount for payment" msgstr "Minimumbedrag voor betaling" -#: engine/core/graphene/object_types.py:767 +#: engine/core/graphene/object_types.py:789 msgid "analytics data" msgstr "Analytics-gegevens" -#: engine/core/graphene/object_types.py:768 +#: engine/core/graphene/object_types.py:790 msgid "advertisement data" msgstr "Advertentiegegevens" -#: engine/core/graphene/object_types.py:771 +#: engine/core/graphene/object_types.py:793 msgid "company configuration" msgstr "Configuratie" -#: engine/core/graphene/object_types.py:775 +#: engine/core/graphene/object_types.py:797 msgid "language code" msgstr "Taalcode" -#: engine/core/graphene/object_types.py:776 +#: engine/core/graphene/object_types.py:798 msgid "language name" msgstr "Naam van de taal" -#: engine/core/graphene/object_types.py:777 +#: engine/core/graphene/object_types.py:799 msgid "language flag, if exists :)" msgstr "Taalvlag, indien aanwezig :)" -#: engine/core/graphene/object_types.py:780 +#: engine/core/graphene/object_types.py:802 msgid "supported languages" msgstr "Een lijst met ondersteunde talen opvragen" -#: engine/core/graphene/object_types.py:812 -#: engine/core/graphene/object_types.py:815 -#: engine/core/graphene/object_types.py:818 +#: engine/core/graphene/object_types.py:834 +#: engine/core/graphene/object_types.py:837 +#: engine/core/graphene/object_types.py:840 msgid "products search results" msgstr "Producten zoekresultaten" -#: engine/core/graphene/object_types.py:820 +#: engine/core/graphene/object_types.py:842 msgid "posts search results" msgstr "Zoekresultaten" -#: engine/core/models.py:75 +#: engine/core/models.py:91 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 " @@ -1617,23 +1657,23 @@ msgstr "" "hiërarchische structuur vormt. Dit kan nuttig zijn voor het categoriseren en" " effectiever beheren van attributen in een complex systeem." -#: engine/core/models.py:88 +#: engine/core/models.py:107 msgid "parent of this group" msgstr "Ouder van deze groep" -#: engine/core/models.py:89 +#: engine/core/models.py:108 msgid "parent attribute group" msgstr "Ouderattribuutgroep" -#: engine/core/models.py:93 engine/core/models.py:94 +#: engine/core/models.py:112 engine/core/models.py:113 msgid "attribute group's name" msgstr "Naam attribuutgroep" -#: engine/core/models.py:102 engine/core/models.py:763 +#: engine/core/models.py:121 engine/core/models.py:849 msgid "attribute group" msgstr "Attribuutgroep" -#: engine/core/models.py:108 +#: engine/core/models.py:127 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1652,50 +1692,50 @@ msgstr "" "metadata en beperkingen, waardoor het geschikt is voor gebruik in systemen " "die communiceren met externe verkopers." -#: engine/core/models.py:122 +#: engine/core/models.py:141 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Slaat referenties en eindpunten op die vereist zijn voor API-communicatie " "van de verkoper" -#: engine/core/models.py:124 +#: engine/core/models.py:143 msgid "authentication info" msgstr "Authenticatie-info" -#: engine/core/models.py:129 +#: engine/core/models.py:148 msgid "define the markup for products retrieved from this vendor" msgstr "" "Definieer de opmaak voor producten die zijn opgehaald bij deze leverancier" -#: engine/core/models.py:130 +#: engine/core/models.py:149 msgid "vendor markup percentage" msgstr "Verkoper winstpercentage" -#: engine/core/models.py:134 +#: engine/core/models.py:153 msgid "name of this vendor" msgstr "Naam van deze verkoper" -#: engine/core/models.py:135 +#: engine/core/models.py:154 msgid "vendor name" msgstr "Naam verkoper" -#: engine/core/models.py:150 +#: engine/core/models.py:169 msgid "response file" msgstr "responsbestand" -#: engine/core/models.py:151 +#: engine/core/models.py:170 msgid "vendor's last processing response" msgstr "laatste verwerkingsreactie van verkoper" -#: engine/core/models.py:157 +#: engine/core/models.py:176 msgid "vendor's integration file path" msgstr "Pad integratiebestand verkoper" -#: engine/core/models.py:158 +#: engine/core/models.py:177 msgid "integration path" msgstr "Integratie pad" -#: engine/core/models.py:192 +#: engine/core/models.py:211 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1710,27 +1750,27 @@ msgstr "" "ondersteunt bewerkingen die geëxporteerd worden door mixins en biedt " "aanpassing van metadata voor administratieve doeleinden." -#: engine/core/models.py:204 engine/core/models.py:235 +#: engine/core/models.py:223 engine/core/models.py:254 msgid "internal tag identifier for the product tag" msgstr "Interne tagidentifier voor de producttag" -#: engine/core/models.py:205 engine/core/models.py:236 +#: engine/core/models.py:224 engine/core/models.py:255 msgid "tag name" msgstr "Tag naam" -#: engine/core/models.py:209 engine/core/models.py:240 +#: engine/core/models.py:228 engine/core/models.py:259 msgid "user-friendly name for the product tag" msgstr "Gebruiksvriendelijke naam voor de producttag" -#: engine/core/models.py:210 engine/core/models.py:241 +#: engine/core/models.py:229 engine/core/models.py:260 msgid "tag display name" msgstr "Tag weergavenaam" -#: engine/core/models.py:218 +#: engine/core/models.py:237 msgid "product tag" msgstr "Productlabel" -#: engine/core/models.py:224 +#: engine/core/models.py:243 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 " @@ -1741,15 +1781,15 @@ msgstr "" "associëren en te classificeren. Ze bevat attributen voor een interne " "tagidentifier en een gebruiksvriendelijke weergavenaam." -#: engine/core/models.py:249 +#: engine/core/models.py:268 msgid "category tag" msgstr "categorie tag" -#: engine/core/models.py:250 engine/core/models.py:322 +#: engine/core/models.py:269 engine/core/models.py:345 msgid "category tags" msgstr "categorie tags" -#: engine/core/models.py:255 +#: engine/core/models.py:274 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1772,51 +1812,51 @@ msgstr "" " kunnen specificeren en attributen zoals afbeeldingen, tags of prioriteit " "kunnen toekennen." -#: engine/core/models.py:269 +#: engine/core/models.py:292 msgid "upload an image representing this category" msgstr "Upload een afbeelding die deze categorie vertegenwoordigt" -#: engine/core/models.py:272 +#: engine/core/models.py:295 msgid "category image" msgstr "Categorie afbeelding" -#: engine/core/models.py:277 +#: engine/core/models.py:300 msgid "define a markup percentage for products in this category" msgstr "Definieer een toeslagpercentage voor producten in deze categorie" -#: engine/core/models.py:286 +#: engine/core/models.py:309 msgid "parent of this category to form a hierarchical structure" msgstr "Ouder van deze categorie om een hiërarchische structuur te vormen" -#: engine/core/models.py:287 +#: engine/core/models.py:310 msgid "parent category" msgstr "Oudercategorie" -#: engine/core/models.py:292 +#: engine/core/models.py:315 msgid "category name" msgstr "Naam categorie" -#: engine/core/models.py:293 +#: engine/core/models.py:316 msgid "provide a name for this category" msgstr "Geef deze categorie een naam" -#: engine/core/models.py:300 +#: engine/core/models.py:323 msgid "add a detailed description for this category" msgstr "Voeg een gedetailleerde beschrijving toe voor deze categorie" -#: engine/core/models.py:301 +#: engine/core/models.py:324 msgid "category description" msgstr "Categorie beschrijving" -#: engine/core/models.py:321 +#: engine/core/models.py:344 msgid "tags that help describe or group this category" msgstr "tags die deze categorie helpen beschrijven of groeperen" -#: engine/core/models.py:328 engine/core/models.py:503 +#: engine/core/models.py:351 engine/core/models.py:552 msgid "priority" msgstr "Prioriteit" -#: engine/core/models.py:446 +#: engine/core/models.py:495 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1830,47 +1870,43 @@ msgstr "" "prioriteitsvolgorde. Hiermee kunnen merkgerelateerde gegevens worden " "georganiseerd en weergegeven in de applicatie." -#: engine/core/models.py:456 +#: engine/core/models.py:505 msgid "name of this brand" msgstr "Naam van dit merk" -#: engine/core/models.py:457 +#: engine/core/models.py:506 msgid "brand name" msgstr "Merknaam" -#: engine/core/models.py:464 +#: engine/core/models.py:513 msgid "upload a logo representing this brand" msgstr "Upload een logo dat dit merk vertegenwoordigt" -#: engine/core/models.py:466 +#: engine/core/models.py:515 msgid "brand small image" msgstr "Klein merkimago" -#: engine/core/models.py:472 +#: engine/core/models.py:521 msgid "upload a big logo representing this brand" msgstr "Upload een groot logo dat dit merk vertegenwoordigt" -#: engine/core/models.py:474 +#: engine/core/models.py:523 msgid "brand big image" msgstr "Groot merkimago" -#: engine/core/models.py:479 +#: engine/core/models.py:528 msgid "add a detailed description of the brand" msgstr "Een gedetailleerde beschrijving van het merk toevoegen" -#: engine/core/models.py:480 +#: engine/core/models.py:529 msgid "brand description" msgstr "Merknaam" -#: engine/core/models.py:485 -msgid "optional categories that this brand is associated with" -msgstr "Optionele categorieën waarmee dit merk wordt geassocieerd" +#: engine/core/models.py:534 engine/core/models.py:535 +msgid "DEPRECATED" +msgstr "VEROUWERD" -#: engine/core/models.py:486 -msgid "associated categories" -msgstr "Categorieën" - -#: engine/core/models.py:516 +#: engine/core/models.py:569 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1887,72 +1923,72 @@ msgstr "" "evalueren van beschikbare producten van verschillende leveranciers mogelijk " "te maken." -#: engine/core/models.py:528 +#: engine/core/models.py:581 msgid "the vendor supplying this product stock" msgstr "De verkoper die dit product levert" -#: engine/core/models.py:529 +#: engine/core/models.py:582 msgid "associated vendor" msgstr "Geassocieerde verkoper" -#: engine/core/models.py:533 +#: engine/core/models.py:588 msgid "final price to the customer after markups" msgstr "Eindprijs voor de klant na winstmarges" -#: engine/core/models.py:534 +#: engine/core/models.py:589 msgid "selling price" msgstr "Verkoopprijs" -#: engine/core/models.py:539 +#: engine/core/models.py:594 msgid "the product associated with this stock entry" msgstr "Het product dat bij deze voorraadvermelding hoort" -#: engine/core/models.py:540 engine/core/models.py:828 -#: engine/core/models.py:874 engine/core/models.py:1912 +#: engine/core/models.py:595 engine/core/models.py:914 +#: engine/core/models.py:962 engine/core/models.py:2020 msgid "associated product" msgstr "Bijbehorend product" -#: engine/core/models.py:547 +#: engine/core/models.py:604 msgid "the price paid to the vendor for this product" msgstr "De prijs die voor dit product aan de verkoper is betaald" -#: engine/core/models.py:548 +#: engine/core/models.py:605 msgid "vendor purchase price" msgstr "Aankoopprijs verkoper" -#: engine/core/models.py:552 +#: engine/core/models.py:609 msgid "available quantity of the product in stock" msgstr "Beschikbare hoeveelheid van het product in voorraad" -#: engine/core/models.py:553 +#: engine/core/models.py:610 msgid "quantity in stock" msgstr "Hoeveelheid op voorraad" -#: engine/core/models.py:557 +#: engine/core/models.py:614 msgid "vendor-assigned SKU for identifying the product" msgstr "Door de verkoper toegewezen SKU om het product te identificeren" -#: engine/core/models.py:558 +#: engine/core/models.py:615 msgid "vendor sku" msgstr "Verkoper SKU" -#: engine/core/models.py:564 +#: engine/core/models.py:621 msgid "digital file associated with this stock if applicable" msgstr "Digitaal bestand gekoppeld aan deze voorraad indien van toepassing" -#: engine/core/models.py:565 +#: engine/core/models.py:622 msgid "digital file" msgstr "Digitaal bestand" -#: engine/core/models.py:569 +#: engine/core/models.py:626 msgid "system attributes" msgstr "Systeemeigenschappen" -#: engine/core/models.py:577 +#: engine/core/models.py:636 msgid "stock entries" msgstr "Voorraadboekingen" -#: engine/core/models.py:582 +#: engine/core/models.py:641 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1973,71 +2009,79 @@ msgstr "" "verbeteren. Het wordt gebruikt om productgegevens en de bijbehorende " "informatie te definiëren en te manipuleren binnen een applicatie." -#: engine/core/models.py:595 +#: engine/core/models.py:660 msgid "category this product belongs to" msgstr "Categorie waartoe dit product behoort" -#: engine/core/models.py:604 +#: engine/core/models.py:669 msgid "optionally associate this product with a brand" msgstr "Dit product optioneel koppelen aan een merk" -#: engine/core/models.py:610 +#: engine/core/models.py:675 msgid "tags that help describe or group this product" msgstr "Tags die dit product helpen beschrijven of groeperen" -#: engine/core/models.py:615 +#: engine/core/models.py:680 msgid "indicates whether this product is digitally delivered" msgstr "Geeft aan of dit product digitaal wordt geleverd" -#: engine/core/models.py:616 +#: engine/core/models.py:681 msgid "is product digital" msgstr "Is product digitaal" -#: engine/core/models.py:623 +#: engine/core/models.py:688 msgid "indicates whether this product should be updated from periodic task" msgstr "geeft aan of dit product moet worden bijgewerkt van periodieke taak" -#: engine/core/models.py:625 +#: engine/core/models.py:690 msgid "is product updatable" msgstr "kan het product worden bijgewerkt" -#: engine/core/models.py:631 +#: engine/core/models.py:696 msgid "provide a clear identifying name for the product" msgstr "Zorg voor een duidelijke identificerende naam voor het product" -#: engine/core/models.py:632 +#: engine/core/models.py:697 msgid "product name" msgstr "Naam product" -#: engine/core/models.py:638 engine/core/models.py:923 +#: engine/core/models.py:703 engine/core/models.py:1012 msgid "add a detailed description of the product" msgstr "Voeg een gedetailleerde beschrijving van het product toe" -#: engine/core/models.py:639 +#: engine/core/models.py:704 msgid "product description" msgstr "Productbeschrijving" -#: engine/core/models.py:646 +#: engine/core/models.py:710 +msgid "optional video file for this product" +msgstr "Optioneel videobestand voor dit product" + +#: engine/core/models.py:711 +msgid "product video" +msgstr "Productvideo" + +#: engine/core/models.py:719 msgid "part number for this product" msgstr "Onderdeelnummer voor dit product" -#: engine/core/models.py:647 +#: engine/core/models.py:720 msgid "part number" msgstr "Onderdeelnummer" -#: engine/core/models.py:666 +#: engine/core/models.py:739 msgid "stock keeping unit for this product" msgstr "Voorraadhoudende eenheid voor dit product" -#: engine/core/models.py:673 +#: engine/core/models.py:746 msgid "whether to export this product to marketplaces" msgstr "Of dit product naar marktplaatsen moet worden geëxporteerd" -#: engine/core/models.py:674 +#: engine/core/models.py:747 msgid "Export to Marketplaces" msgstr "Exporteren naar marktplaatsen" -#: engine/core/models.py:749 +#: engine/core/models.py:835 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 " @@ -2054,66 +2098,66 @@ msgstr "" "boolean, array en object. Dit maakt dynamische en flexibele " "gegevensstructurering mogelijk." -#: engine/core/models.py:762 +#: engine/core/models.py:848 msgid "group of this attribute" msgstr "Groep van dit kenmerk" -#: engine/core/models.py:768 +#: engine/core/models.py:854 msgid "string" msgstr "String" -#: engine/core/models.py:769 +#: engine/core/models.py:855 msgid "integer" msgstr "Integer" -#: engine/core/models.py:770 +#: engine/core/models.py:856 msgid "float" msgstr "Vlotter" -#: engine/core/models.py:771 +#: engine/core/models.py:857 msgid "boolean" msgstr "Booleaans" -#: engine/core/models.py:772 +#: engine/core/models.py:858 msgid "array" msgstr "Array" -#: engine/core/models.py:773 +#: engine/core/models.py:859 msgid "object" msgstr "Object" -#: engine/core/models.py:775 +#: engine/core/models.py:861 msgid "type of the attribute's value" msgstr "Type waarde van het kenmerk" -#: engine/core/models.py:776 +#: engine/core/models.py:862 msgid "value type" msgstr "Waardetype" -#: engine/core/models.py:781 +#: engine/core/models.py:867 msgid "name of this attribute" msgstr "Naam van dit kenmerk" -#: engine/core/models.py:782 +#: engine/core/models.py:868 msgid "attribute's name" msgstr "Naam attribuut" -#: engine/core/models.py:787 +#: engine/core/models.py:873 msgid "is filterable" msgstr "kan worden gefilterd" -#: engine/core/models.py:789 +#: engine/core/models.py:875 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." -#: engine/core/models.py:802 engine/core/models.py:820 +#: engine/core/models.py:888 engine/core/models.py:906 #: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Attribuut" -#: engine/core/models.py:808 +#: engine/core/models.py:894 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" @@ -2124,19 +2168,19 @@ msgstr "" "betere organisatie en dynamische weergave van productkenmerken mogelijk " "maakt." -#: engine/core/models.py:819 +#: engine/core/models.py:905 msgid "attribute of this value" msgstr "Attribuut van deze waarde" -#: engine/core/models.py:827 +#: engine/core/models.py:913 msgid "the specific product associated with this attribute's value" msgstr "Het specifieke product geassocieerd met de waarde van dit kenmerk" -#: engine/core/models.py:833 +#: engine/core/models.py:919 msgid "the specific value for this attribute" msgstr "De specifieke waarde voor dit kenmerk" -#: engine/core/models.py:846 +#: engine/core/models.py:934 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -2151,39 +2195,39 @@ msgstr "" "weergavevolgorde te bepalen. Het bevat ook een toegankelijkheidsfunctie met " "alternatieve tekst voor de afbeeldingen." -#: engine/core/models.py:857 +#: engine/core/models.py:945 msgid "provide alternative text for the image for accessibility" msgstr "Geef alternatieve tekst voor de afbeelding voor toegankelijkheid" -#: engine/core/models.py:858 +#: engine/core/models.py:946 msgid "image alt text" msgstr "Alt-tekst afbeelding" -#: engine/core/models.py:861 +#: engine/core/models.py:949 msgid "upload the image file for this product" msgstr "Upload het afbeeldingsbestand voor dit product" -#: engine/core/models.py:862 engine/core/models.py:893 +#: engine/core/models.py:950 engine/core/models.py:982 msgid "product image" msgstr "Product afbeelding" -#: engine/core/models.py:867 +#: engine/core/models.py:955 msgid "determines the order in which images are displayed" msgstr "Bepaalt de volgorde waarin afbeeldingen worden weergegeven" -#: engine/core/models.py:868 +#: engine/core/models.py:956 msgid "display priority" msgstr "Prioriteit weergeven" -#: engine/core/models.py:873 +#: engine/core/models.py:961 msgid "the product that this image represents" msgstr "Het product dat deze afbeelding vertegenwoordigt" -#: engine/core/models.py:894 +#: engine/core/models.py:983 msgid "product images" msgstr "Product afbeeldingen" -#: engine/core/models.py:899 +#: engine/core/models.py:988 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -2200,39 +2244,39 @@ msgstr "" "integreert met de productcatalogus om de betreffende artikelen in de " "campagne te bepalen." -#: engine/core/models.py:911 +#: engine/core/models.py:1000 msgid "percentage discount for the selected products" msgstr "Kortingspercentage voor de geselecteerde producten" -#: engine/core/models.py:912 +#: engine/core/models.py:1001 msgid "discount percentage" msgstr "Kortingspercentage" -#: engine/core/models.py:917 +#: engine/core/models.py:1006 msgid "provide a unique name for this promotion" msgstr "Geef deze promotie een unieke naam" -#: engine/core/models.py:918 +#: engine/core/models.py:1007 msgid "promotion name" msgstr "Naam promotie" -#: engine/core/models.py:924 +#: engine/core/models.py:1013 msgid "promotion description" msgstr "Promotie beschrijving" -#: engine/core/models.py:929 +#: engine/core/models.py:1018 msgid "select which products are included in this promotion" msgstr "Selecteer welke producten onder deze promotie vallen" -#: engine/core/models.py:930 +#: engine/core/models.py:1019 msgid "included products" msgstr "Meegeleverde producten" -#: engine/core/models.py:934 +#: engine/core/models.py:1027 msgid "promotion" msgstr "Promotie" -#: engine/core/models.py:945 +#: engine/core/models.py:1038 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2245,23 +2289,23 @@ msgstr "" "toevoegen en verwijderen van producten, maar ook bewerkingen voor het " "toevoegen en verwijderen van meerdere producten tegelijk." -#: engine/core/models.py:957 +#: engine/core/models.py:1050 msgid "products that the user has marked as wanted" msgstr "Producten die de gebruiker als gewenst heeft gemarkeerd" -#: engine/core/models.py:965 +#: engine/core/models.py:1058 msgid "user who owns this wishlist" msgstr "Gebruiker die eigenaar is van deze verlanglijst" -#: engine/core/models.py:966 +#: engine/core/models.py:1059 msgid "wishlist owner" msgstr "Eigenaar verlanglijstje" -#: engine/core/models.py:974 +#: engine/core/models.py:1067 msgid "wishlist" msgstr "Verlanglijst" -#: engine/core/models.py:1016 +#: engine/core/models.py:1109 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2278,19 +2322,19 @@ msgstr "" "Het breidt functionaliteit uit van specifieke mixins en biedt extra " "aangepaste functies." -#: engine/core/models.py:1031 +#: engine/core/models.py:1124 msgid "documentary" msgstr "Documentaire" -#: engine/core/models.py:1032 +#: engine/core/models.py:1125 msgid "documentaries" msgstr "Documentaires" -#: engine/core/models.py:1042 +#: engine/core/models.py:1135 msgid "unresolved" msgstr "Onopgelost" -#: engine/core/models.py:1047 +#: engine/core/models.py:1140 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2311,59 +2355,59 @@ msgstr "" "klasse maakt het ook mogelijk om een adres met een gebruiker te associëren, " "wat het verwerken van gepersonaliseerde gegevens vergemakkelijkt." -#: engine/core/models.py:1062 +#: engine/core/models.py:1155 msgid "address line for the customer" msgstr "Adresregel voor de klant" -#: engine/core/models.py:1063 +#: engine/core/models.py:1156 msgid "address line" msgstr "Adresregel" -#: engine/core/models.py:1065 +#: engine/core/models.py:1158 msgid "street" msgstr "Straat" -#: engine/core/models.py:1066 +#: engine/core/models.py:1159 msgid "district" msgstr "District" -#: engine/core/models.py:1067 +#: engine/core/models.py:1160 msgid "city" msgstr "Stad" -#: engine/core/models.py:1068 +#: engine/core/models.py:1161 msgid "region" msgstr "Regio" -#: engine/core/models.py:1069 +#: engine/core/models.py:1162 msgid "postal code" msgstr "Postcode" -#: engine/core/models.py:1070 +#: engine/core/models.py:1163 msgid "country" msgstr "Land" -#: engine/core/models.py:1077 +#: engine/core/models.py:1170 msgid "geolocation point: (longitude, latitude)" msgstr "Geolocatie Punt (lengtegraad, breedtegraad)" -#: engine/core/models.py:1083 +#: engine/core/models.py:1176 msgid "full JSON response from geocoder for this address" msgstr "Volledig JSON-antwoord van geocoder voor dit adres" -#: engine/core/models.py:1089 +#: engine/core/models.py:1182 msgid "stored JSON response from the geocoding service" msgstr "Opgeslagen JSON-antwoord van de geocoderingsservice" -#: engine/core/models.py:1099 +#: engine/core/models.py:1192 msgid "address" msgstr "Adres" -#: engine/core/models.py:1100 +#: engine/core/models.py:1193 msgid "addresses" msgstr "Adressen" -#: engine/core/models.py:1112 +#: engine/core/models.py:1205 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2381,76 +2425,76 @@ msgstr "" "te valideren en toe te passen op een bestelling, waarbij ervoor wordt " "gezorgd dat aan de beperkingen wordt voldaan." -#: engine/core/models.py:1126 +#: engine/core/models.py:1219 msgid "unique code used by a user to redeem a discount" msgstr "Unieke code die een gebruiker gebruikt om een korting te verzilveren" -#: engine/core/models.py:1127 +#: engine/core/models.py:1220 msgid "promo code identifier" msgstr "Promo code identificatie" -#: engine/core/models.py:1134 +#: engine/core/models.py:1227 msgid "fixed discount amount applied if percent is not used" msgstr "" "Vast kortingsbedrag dat wordt toegepast als percentage niet wordt gebruikt" -#: engine/core/models.py:1135 +#: engine/core/models.py:1228 msgid "fixed discount amount" msgstr "Vast kortingsbedrag" -#: engine/core/models.py:1141 +#: engine/core/models.py:1234 msgid "percentage discount applied if fixed amount is not used" msgstr "" "Kortingspercentage dat wordt toegepast als het vaste bedrag niet wordt " "gebruikt" -#: engine/core/models.py:1142 +#: engine/core/models.py:1235 msgid "percentage discount" msgstr "Kortingspercentage" -#: engine/core/models.py:1147 +#: engine/core/models.py:1240 msgid "timestamp when the promocode expires" msgstr "Tijdstempel wanneer de promocode verloopt" -#: engine/core/models.py:1148 +#: engine/core/models.py:1241 msgid "end validity time" msgstr "Geldigheidsduur einde" -#: engine/core/models.py:1153 +#: engine/core/models.py:1246 msgid "timestamp from which this promocode is valid" msgstr "Tijdstempel vanaf wanneer deze promocode geldig is" -#: engine/core/models.py:1154 +#: engine/core/models.py:1247 msgid "start validity time" msgstr "Begin geldigheidsduur" -#: engine/core/models.py:1159 +#: engine/core/models.py:1252 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "Tijdstempel wanneer de promocode werd gebruikt, leeg indien nog niet " "gebruikt" -#: engine/core/models.py:1160 +#: engine/core/models.py:1253 msgid "usage timestamp" msgstr "Gebruik tijdstempel" -#: engine/core/models.py:1165 +#: engine/core/models.py:1258 msgid "user assigned to this promocode if applicable" msgstr "Gebruiker toegewezen aan deze promocode indien van toepassing" -#: engine/core/models.py:1166 +#: engine/core/models.py:1259 msgid "assigned user" msgstr "Toegewezen gebruiker" -#: engine/core/models.py:1173 +#: engine/core/models.py:1266 msgid "promo code" msgstr "Kortingscode" -#: engine/core/models.py:1174 +#: engine/core/models.py:1267 msgid "promo codes" msgstr "Actiecodes" -#: engine/core/models.py:1190 +#: engine/core/models.py:1283 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2458,16 +2502,16 @@ msgstr "" "Er moet slechts één type korting worden gedefinieerd (bedrag of percentage)," " maar niet beide of geen van beide." -#: engine/core/models.py:1212 +#: engine/core/models.py:1305 msgid "promocode already used" msgstr "Promocode is al gebruikt" -#: engine/core/models.py:1234 +#: engine/core/models.py:1327 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Ongeldig kortingstype voor promocode {self.uuid}!" -#: engine/core/models.py:1243 +#: engine/core/models.py:1336 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 " @@ -2485,142 +2529,142 @@ msgstr "" "bijgewerkt. De functionaliteit ondersteunt ook het beheer van de producten " "in de levenscyclus van de bestelling." -#: engine/core/models.py:1260 +#: engine/core/models.py:1357 msgid "the billing address used for this order" msgstr "Het factuuradres dat voor deze bestelling is gebruikt" -#: engine/core/models.py:1268 +#: engine/core/models.py:1365 msgid "optional promo code applied to this order" msgstr "Optionele promotiecode toegepast op deze bestelling" -#: engine/core/models.py:1269 +#: engine/core/models.py:1366 msgid "applied promo code" msgstr "Kortingscode toegepast" -#: engine/core/models.py:1277 +#: engine/core/models.py:1374 msgid "the shipping address used for this order" msgstr "Het verzendadres dat voor deze bestelling is gebruikt" -#: engine/core/models.py:1278 +#: engine/core/models.py:1375 msgid "shipping address" msgstr "Verzendadres" -#: engine/core/models.py:1284 +#: engine/core/models.py:1381 msgid "current status of the order in its lifecycle" msgstr "Huidige status van de order in zijn levenscyclus" -#: engine/core/models.py:1285 +#: engine/core/models.py:1382 msgid "order status" msgstr "Bestelstatus" -#: engine/core/models.py:1290 engine/core/models.py:1889 +#: engine/core/models.py:1387 engine/core/models.py:1997 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" -#: engine/core/models.py:1296 +#: engine/core/models.py:1393 msgid "json representation of order attributes for this order" msgstr "JSON-weergave van bestelattributen voor deze bestelling" -#: engine/core/models.py:1302 +#: engine/core/models.py:1399 msgid "the user who placed the order" msgstr "De gebruiker die de bestelling heeft geplaatst" -#: engine/core/models.py:1303 +#: engine/core/models.py:1400 msgid "user" msgstr "Gebruiker" -#: engine/core/models.py:1309 +#: engine/core/models.py:1406 msgid "the timestamp when the order was finalized" msgstr "De tijdstempel waarop de bestelling is afgerond" -#: engine/core/models.py:1310 +#: engine/core/models.py:1407 msgid "buy time" msgstr "Tijd kopen" -#: engine/core/models.py:1317 +#: engine/core/models.py:1414 msgid "a human-readable identifier for the order" msgstr "Een menselijk leesbare identificatiecode voor de bestelling" -#: engine/core/models.py:1318 +#: engine/core/models.py:1415 msgid "human readable id" msgstr "menselijk leesbare ID" -#: engine/core/models.py:1324 +#: engine/core/models.py:1421 msgid "order" msgstr "Bestel" -#: engine/core/models.py:1371 +#: engine/core/models.py:1468 msgid "a user must have only one pending order at a time" msgstr "Een gebruiker mag maar één lopende order tegelijk hebben!" -#: engine/core/models.py:1404 +#: engine/core/models.py:1504 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." -#: engine/core/models.py:1410 +#: engine/core/models.py:1510 msgid "you cannot add inactive products to order" msgstr "U kunt geen inactieve producten toevoegen aan uw bestelling" -#: engine/core/models.py:1432 +#: engine/core/models.py:1533 msgid "you cannot add more products than available in stock" msgstr "Je kunt niet meer producten toevoegen dan er op voorraad zijn" -#: engine/core/models.py:1456 engine/core/models.py:1485 -#: engine/core/models.py:1495 +#: engine/core/models.py:1557 engine/core/models.py:1586 +#: engine/core/models.py:1596 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." -#: engine/core/models.py:1480 +#: engine/core/models.py:1581 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} bestaat niet met query <{query}>!" -#: engine/core/models.py:1519 +#: engine/core/models.py:1620 msgid "promocode does not exist" msgstr "Promocode bestaat niet" -#: engine/core/models.py:1534 +#: engine/core/models.py:1635 msgid "you can only buy physical products with shipping address specified" msgstr "Je kunt alleen fysieke producten kopen met opgegeven verzendadres!" -#: engine/core/models.py:1555 +#: engine/core/models.py:1656 msgid "address does not exist" msgstr "Adres bestaat niet" -#: engine/core/models.py:1577 engine/core/models.py:1656 +#: engine/core/models.py:1678 engine/core/models.py:1757 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." -#: engine/core/models.py:1583 engine/core/models.py:1649 +#: engine/core/models.py:1684 engine/core/models.py:1750 msgid "invalid force value" msgstr "Ongeldige krachtwaarde" -#: engine/core/models.py:1589 engine/core/models.py:1660 +#: engine/core/models.py:1690 engine/core/models.py:1761 msgid "you cannot purchase an empty order!" msgstr "Je kunt geen lege bestelling kopen!" -#: engine/core/models.py:1610 +#: engine/core/models.py:1711 msgid "you cannot buy an order without a user" msgstr "" "U kunt geen producten verwijderen uit een bestelling die niet in behandeling" " is." -#: engine/core/models.py:1624 +#: engine/core/models.py:1725 msgid "a user without a balance cannot buy with balance" msgstr "Een gebruiker zonder saldo kan niet kopen met saldo!" -#: engine/core/models.py:1630 +#: engine/core/models.py:1731 msgid "insufficient funds to complete the order" msgstr "Onvoldoende fondsen om de bestelling te voltooien" -#: engine/core/models.py:1671 +#: engine/core/models.py:1772 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2628,7 +2672,7 @@ msgstr "" "u niet kunt kopen zonder registratie, geef dan de volgende informatie: " "klantnaam, e-mail klant, telefoonnummer klant" -#: engine/core/models.py:1682 +#: engine/core/models.py:1783 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2636,7 +2680,7 @@ msgstr "" "Ongeldige betalingsmethode: {payment_method} van " "{available_payment_methods}!" -#: engine/core/models.py:1813 +#: engine/core/models.py:1916 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2652,34 +2696,34 @@ msgstr "" "gebruikt databasevelden om feedbackgegevens effectief te modelleren en te " "beheren." -#: engine/core/models.py:1825 +#: engine/core/models.py:1928 msgid "user-provided comments about their experience with the product" msgstr "Opmerkingen van gebruikers over hun ervaring met het product" -#: engine/core/models.py:1826 +#: engine/core/models.py:1929 msgid "feedback comments" msgstr "Reacties" -#: engine/core/models.py:1834 +#: engine/core/models.py:1937 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" -#: engine/core/models.py:1836 +#: engine/core/models.py:1939 msgid "related order product" msgstr "Gerelateerd product bestellen" -#: engine/core/models.py:1841 +#: engine/core/models.py:1944 msgid "user-assigned rating for the product" msgstr "Door de gebruiker toegekende waardering voor het product" -#: engine/core/models.py:1842 +#: engine/core/models.py:1945 msgid "product rating" msgstr "Productbeoordeling" -#: engine/core/models.py:1862 +#: engine/core/models.py:1965 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2702,110 +2746,110 @@ msgstr "" "digitale producten. Het model integreert met de modellen Order en Product en" " slaat een verwijzing ernaar op." -#: engine/core/models.py:1877 +#: engine/core/models.py:1985 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" -#: engine/core/models.py:1878 +#: engine/core/models.py:1986 msgid "purchase price at order time" msgstr "Aankoopprijs bij bestelling" -#: engine/core/models.py:1883 +#: engine/core/models.py:1991 msgid "internal comments for admins about this ordered product" msgstr "Interne opmerkingen voor beheerders over dit bestelde product" -#: engine/core/models.py:1884 +#: engine/core/models.py:1992 msgid "internal comments" msgstr "Interne opmerkingen" -#: engine/core/models.py:1890 +#: engine/core/models.py:1998 msgid "user notifications" msgstr "Meldingen van gebruikers" -#: engine/core/models.py:1895 +#: engine/core/models.py:2003 msgid "json representation of this item's attributes" msgstr "JSON weergave van de attributen van dit item" -#: engine/core/models.py:1896 +#: engine/core/models.py:2004 msgid "ordered product attributes" msgstr "Geordende producteigenschappen" -#: engine/core/models.py:1901 +#: engine/core/models.py:2009 msgid "reference to the parent order that contains this product" msgstr "Verwijzing naar de bovenliggende bestelling die dit product bevat" -#: engine/core/models.py:1902 +#: engine/core/models.py:2010 msgid "parent order" msgstr "Ouderlijk bevel" -#: engine/core/models.py:1911 +#: engine/core/models.py:2019 msgid "the specific product associated with this order line" msgstr "Het specifieke product dat bij deze bestelregel hoort" -#: engine/core/models.py:1918 +#: engine/core/models.py:2026 msgid "quantity of this specific product in the order" msgstr "Hoeveelheid van dit specifieke product in de bestelling" -#: engine/core/models.py:1919 +#: engine/core/models.py:2027 msgid "product quantity" msgstr "Hoeveelheid product" -#: engine/core/models.py:1926 +#: engine/core/models.py:2034 msgid "current status of this product in the order" msgstr "Huidige status van dit product in de bestelling" -#: engine/core/models.py:1927 +#: engine/core/models.py:2035 msgid "product line status" msgstr "Status productlijn" -#: engine/core/models.py:1998 +#: engine/core/models.py:2106 msgid "order product must have an order" msgstr "Orderproduct moet een bijbehorende order hebben!" -#: engine/core/models.py:2000 +#: engine/core/models.py:2108 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Verkeerde actie opgegeven voor feedback: {action}!" -#: engine/core/models.py:2017 +#: engine/core/models.py:2125 msgid "you cannot feedback an order which is not received" msgstr "" "U kunt geen producten verwijderen uit een bestelling die niet in behandeling" " is." -#: engine/core/models.py:2026 +#: engine/core/models.py:2132 engine/core/models.py:2227 msgid "name" msgstr "Naam" -#: engine/core/models.py:2028 +#: engine/core/models.py:2134 msgid "URL of the integration" msgstr "URL van de integratie" -#: engine/core/models.py:2031 +#: engine/core/models.py:2137 msgid "authentication credentials" msgstr "Authenticatiegegevens" -#: engine/core/models.py:2054 +#: engine/core/models.py:2160 msgid "you can only have one default CRM provider" msgstr "Je kunt maar één standaard CRM-provider hebben" -#: engine/core/models.py:2064 +#: engine/core/models.py:2170 msgid "CRM" msgstr "CRM" -#: engine/core/models.py:2065 +#: engine/core/models.py:2171 msgid "CRMs" msgstr "CRM's" -#: engine/core/models.py:2081 +#: engine/core/models.py:2187 msgid "order CRM link" msgstr "CRM link van bestelling" -#: engine/core/models.py:2082 +#: engine/core/models.py:2188 msgid "orders CRM links" msgstr "CRM-koppelingen voor bestellingen" -#: engine/core/models.py:2087 +#: engine/core/models.py:2193 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2822,14 +2866,38 @@ msgstr "" "om een URL te genereren voor het downloaden van de activa wanneer de " "bijbehorende order een voltooide status heeft." -#: engine/core/models.py:2103 +#: engine/core/models.py:2209 msgid "download" msgstr "Downloaden" -#: engine/core/models.py:2104 +#: engine/core/models.py:2210 msgid "downloads" msgstr "Downloads" +#: engine/core/models.py:2228 +msgid "descriptive name for the image" +msgstr "Beschrijvende naam voor de afbeelding" + +#: engine/core/models.py:2233 +msgid "image file pasted in the markdown editor" +msgstr "Afbeeldingsbestand geplakt in de markdown-editor" + +#: engine/core/models.py:2239 +msgid "alt text" +msgstr "Andere tekst" + +#: engine/core/models.py:2240 +msgid "alternative text for accessibility" +msgstr "Alternatieve tekst voor toegankelijkheid" + +#: engine/core/models.py:2244 +msgid "pasted image" +msgstr "Gekopieerde afbeelding" + +#: engine/core/models.py:2245 +msgid "pasted images" +msgstr "Gekopieerde afbeeldingen" + #: engine/core/serializers/utility.py:91 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." @@ -2838,6 +2906,16 @@ msgstr "" "productidentificatie opgeven." #: engine/core/sitemaps.py:25 +#: engine/core/templates/admin_doc/bookmarklets.html:8 +#: engine/core/templates/admin_doc/index.html:8 +#: engine/core/templates/admin_doc/missing_docutils.html:8 +#: engine/core/templates/admin_doc/model_detail.html:8 +#: engine/core/templates/admin_doc/model_index.html:8 +#: engine/core/templates/admin_doc/template_detail.html:8 +#: engine/core/templates/admin_doc/template_filter_index.html:8 +#: engine/core/templates/admin_doc/template_tag_index.html:8 +#: engine/core/templates/admin_doc/view_detail.html:8 +#: engine/core/templates/admin_doc/view_index.html:8 msgid "Home" msgstr "Home" @@ -2890,45 +2968,34 @@ msgstr "Bruto" msgid "Dashboard" msgstr "Dashboard" -#: engine/core/templates/admin/dashboard/_income_overview.html:7 +#: engine/core/templates/admin/dashboard/_income_overview.html:6 msgid "Income overview" msgstr "Overzicht inkomsten" -#: engine/core/templates/admin/dashboard/_income_overview.html:31 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Net" +#: engine/core/templates/admin/dashboard/_income_overview.html:16 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" msgstr "Netto-inkomsten" -#: engine/core/templates/admin/dashboard/_income_overview.html:37 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Taxes" -msgstr "Belastingen" - -#: engine/core/templates/admin/dashboard/_income_overview.html:43 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 +#: engine/core/templates/admin/dashboard/_income_overview.html:21 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 msgid "Returns" msgstr "Geeft" -#: engine/core/templates/admin/dashboard/_income_overview.html:48 -msgid "Gross (pie total)" -msgstr "Bruto-omzet" - -#: engine/core/templates/admin/dashboard/_income_overview.html:72 -msgid "No data" -msgstr "Geen datum" - +#: engine/core/templates/admin/dashboard/_income_overview.html:26 #: engine/core/templates/admin/dashboard/_kpis.html:6 msgid "GMV" msgstr "GMV" +#: engine/core/templates/admin/dashboard/_income_overview.html:50 +msgid "No data" +msgstr "Geen datum" + #: engine/core/templates/admin/dashboard/_kpis.html:34 msgid "AOV" msgstr "AOV" -#: engine/core/templates/admin/dashboard/_kpis.html:48 -msgid "Net revenue" -msgstr "Netto-inkomsten" - #: engine/core/templates/admin/dashboard/_kpis.html:62 msgid "Refund rate" msgstr "Restitutie" @@ -2941,7 +3008,7 @@ msgstr "Geretourneerd" msgid "Low stock" msgstr "Lage voorraad" -#: engine/core/templates/admin/dashboard/_low_stock.html:29 +#: engine/core/templates/admin/dashboard/_low_stock.html:33 msgid "No low stock items." msgstr "Geen artikelen met weinig voorraad." @@ -2998,6 +3065,304 @@ msgstr "Geen categorieverkopen in de afgelopen 30 dagen." msgid "Django site admin" msgstr "Django website beheerder" +#: engine/core/templates/admin_doc/bookmarklets.html:4 +#: engine/core/templates/admin_doc/bookmarklets.html:17 +msgid "Documentation bookmarklets" +msgstr "Documentatie-bookmarklets" + +#: engine/core/templates/admin_doc/bookmarklets.html:10 +#: engine/core/templates/admin_doc/index.html:4 +#: engine/core/templates/admin_doc/index.html:10 +#: engine/core/templates/admin_doc/index.html:15 +#: engine/core/templates/admin_doc/missing_docutils.html:10 +#: engine/core/templates/admin_doc/missing_docutils.html:19 +#: engine/core/templates/admin_doc/model_detail.html:10 +#: engine/core/templates/admin_doc/model_index.html:10 +#: engine/core/templates/admin_doc/template_detail.html:10 +#: engine/core/templates/admin_doc/template_filter_index.html:10 +#: engine/core/templates/admin_doc/template_tag_index.html:10 +#: engine/core/templates/admin_doc/view_detail.html:10 +#: engine/core/templates/admin_doc/view_index.html:10 +msgid "Documentation" +msgstr "Documentatie" + +#: engine/core/templates/admin_doc/bookmarklets.html:12 +#: engine/core/templates/admin_doc/index.html:53 +msgid "Bookmarklets" +msgstr "Bladwijzers" + +#: engine/core/templates/admin_doc/bookmarklets.html:19 +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Om bookmarklets te installeren, sleept u de link naar uw bladwijzerbalk of " +"klikt u met de rechtermuisknop op de link en voegt u deze toe aan uw " +"bladwijzers. Nu kunt u de bookmarklet selecteren vanaf elke pagina op de " +"site." + +#: engine/core/templates/admin_doc/bookmarklets.html:29 +msgid "Documentation for this page" +msgstr "Documentatie voor deze pagina" + +#: engine/core/templates/admin_doc/bookmarklets.html:31 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Brengt u vanaf elke pagina naar de documentatie voor de weergave die die " +"pagina genereert." + +#: engine/core/templates/admin_doc/index.html:21 +#: engine/core/templates/admin_doc/model_detail.html:12 +#: engine/core/templates/admin_doc/model_index.html:4 +#: engine/core/templates/admin_doc/model_index.html:12 +msgid "Models" +msgstr "Modellen" + +#: engine/core/templates/admin_doc/index.html:23 +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Modellen zijn beschrijvingen van alle objecten in het systeem en de " +"bijbehorende velden. Elk model heeft een lijst met velden die toegankelijk " +"zijn als sjabloonvariabelen." + +#: engine/core/templates/admin_doc/index.html:29 +#: engine/core/templates/admin_doc/view_detail.html:12 +#: engine/core/templates/admin_doc/view_index.html:4 +#: engine/core/templates/admin_doc/view_index.html:12 +msgid "Views" +msgstr "Weergaven" + +#: engine/core/templates/admin_doc/index.html:31 +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Elke pagina op de openbare site wordt gegenereerd door een weergave. De " +"weergave bepaalt welk sjabloon wordt gebruikt om de pagina te genereren en " +"welke objecten beschikbaar zijn voor dat sjabloon." + +#: engine/core/templates/admin_doc/index.html:39 +msgid "List of all the template tags and their functions." +msgstr "Lijst met alle sjabloontags en hun functies." + +#: engine/core/templates/admin_doc/index.html:45 +#: engine/core/templates/admin_doc/template_filter_index.html:12 +msgid "Filters" +msgstr "Filters" + +#: engine/core/templates/admin_doc/index.html:47 +msgid "" +"Filters are actions which can be applied to variables in a template to alter" +" the output." +msgstr "" +"Filters zijn acties die kunnen worden toegepast op variabelen in een " +"sjabloon om de uitvoer te wijzigen." + +#: engine/core/templates/admin_doc/index.html:55 +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Hulpmiddelen voor uw browser om snel toegang te krijgen tot " +"beheerdersfuncties." + +#: engine/core/templates/admin_doc/missing_docutils.html:4 +msgid "Please install docutils" +msgstr "Installeer docutils" + +#: engine/core/templates/admin_doc/missing_docutils.html:20 +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"Het beheerdersdocumentatiesysteem vereist de Python-bibliotheek docutils." + +#: engine/core/templates/admin_doc/missing_docutils.html:21 +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Vraag uw beheerders om docutils te installeren." + +#: engine/core/templates/admin_doc/model_detail.html:4 +#, python-format +msgid "Model: %(name)s" +msgstr "Model: %(name)s" + +#: engine/core/templates/admin_doc/model_detail.html:29 +msgid "Fields" +msgstr "Velden" + +#: engine/core/templates/admin_doc/model_detail.html:36 +msgid "Field" +msgstr "Veld" + +#: engine/core/templates/admin_doc/model_detail.html:37 +msgid "Type" +msgstr "Type" + +#: engine/core/templates/admin_doc/model_detail.html:38 +#: engine/core/templates/admin_doc/model_detail.html:70 +msgid "Description" +msgstr "Beschrijving" + +#: engine/core/templates/admin_doc/model_detail.html:61 +msgid "Methods with arguments" +msgstr "Methoden met argumenten" + +#: engine/core/templates/admin_doc/model_detail.html:68 +msgid "Method" +msgstr "Methode" + +#: engine/core/templates/admin_doc/model_detail.html:69 +msgid "Arguments" +msgstr "Argumenten" + +#: engine/core/templates/admin_doc/model_detail.html:89 +msgid "Back to Model documentation" +msgstr "Terug naar de model documentatie" + +#: engine/core/templates/admin_doc/model_index.html:17 +msgid "Model documentation" +msgstr "Modeldocumentatie" + +#: engine/core/templates/admin_doc/model_index.html:44 +msgid "Model groups" +msgstr "Modelgroepen" + +#: engine/core/templates/admin_doc/template_detail.html:4 +#, python-format +msgid "Template: %(name)s" +msgstr "Sjabloon: %(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:12 +msgid "Templates" +msgstr "Sjablonen" + +#: engine/core/templates/admin_doc/template_detail.html:17 +#, python-format +msgid "" +"Template: %(name)s" +msgstr "" +"Sjabloon: %(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:21 +#, python-format +msgid "Search path for template %(name)s:" +msgstr "Zoekpad voor sjabloon %(name)s:" + +#: engine/core/templates/admin_doc/template_detail.html:29 +msgid "(does not exist)" +msgstr "(bestaat niet)" + +#: engine/core/templates/admin_doc/template_detail.html:40 +msgid "Back to Documentation" +msgstr "Terug naar documentatie" + +#: engine/core/templates/admin_doc/template_filter_index.html:4 +msgid "Template filters" +msgstr "Sjabloonfilters" + +#: engine/core/templates/admin_doc/template_filter_index.html:17 +msgid "Template filter documentation" +msgstr "Documentatie over sjabloonfilters" + +#: engine/core/templates/admin_doc/template_filter_index.html:26 +#: engine/core/templates/admin_doc/template_filter_index.html:52 +msgid "Built-in filters" +msgstr "Ingebouwde filters" + +#: engine/core/templates/admin_doc/template_filter_index.html:29 +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before using" +" the filter." +msgstr "" +"Om deze filters te gebruiken, plaatst u %(code)s in uw sjabloon " +"voordat u het filter gebruikt." + +#: engine/core/templates/admin_doc/template_tag_index.html:4 +msgid "Template tags" +msgstr "Sjabloontags" + +#: engine/core/templates/admin_doc/template_tag_index.html:17 +msgid "Template tag documentation" +msgstr "Documentatie over sjabloontags" + +#: engine/core/templates/admin_doc/template_tag_index.html:26 +#: engine/core/templates/admin_doc/template_tag_index.html:52 +msgid "Built-in tags" +msgstr "Ingebouwde tags" + +#: engine/core/templates/admin_doc/template_tag_index.html:29 +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using the tag." +msgstr "" +"Om deze tags te gebruiken, plaatst u %(code)s in uw sjabloon " +"voordat u de tag gebruikt." + +#: engine/core/templates/admin_doc/view_detail.html:4 +#, python-format +msgid "View: %(name)s" +msgstr "Bekijken: %(name)s" + +#: engine/core/templates/admin_doc/view_detail.html:28 +msgid "Context:" +msgstr "Context:" + +#: engine/core/templates/admin_doc/view_detail.html:33 +msgid "Templates:" +msgstr "Sjablonen:" + +#: engine/core/templates/admin_doc/view_detail.html:41 +msgid "Back to View documentation" +msgstr "Terug naar Documentatie bekijken" + +#: engine/core/templates/admin_doc/view_index.html:17 +msgid "View documentation" +msgstr "Documentatie bekijken" + +#: engine/core/templates/admin_doc/view_index.html:28 +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Weergaven per naamruimte %(name)s" + +#: engine/core/templates/admin_doc/view_index.html:30 +msgid "Views by empty namespace" +msgstr "Weergaven door lege naamruimte" + +#: engine/core/templates/admin_doc/view_index.html:40 +#, python-format +msgid "" +"View function: %(full_name)s. Name: %(url_name)s." +msgstr "" +"Weergavefunctie: %(full_name)s. Naam: " +"%(url_name)s." + +#: engine/core/templates/admin_doc/view_index.html:54 +msgid "Jump to namespace" +msgstr "Ga naar naamruimte" + +#: engine/core/templates/admin_doc/view_index.html:59 +msgid "Empty namespace" +msgstr "Lege naamruimte" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -3098,7 +3463,7 @@ msgstr "" " informatie" #: engine/core/templates/digital_order_delivered_email.html:137 -#: engine/core/templates/json_table_widget.html:6 +#: engine/core/templates/json_table_widget.html:26 msgid "value" msgstr "Waarde" @@ -3118,11 +3483,23 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "Vriendelijke groeten,
het %(project_name)s team" -#: engine/core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:7 +msgid "Key" +msgstr "Sleutel" + +#: engine/core/templates/json_table_widget.html:8 +msgid "Value" +msgstr "Waarde" + +#: engine/core/templates/json_table_widget.html:19 msgid "key" msgstr "Sleutel" -#: engine/core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:32 +msgid "Delete row" +msgstr "Rij verwijderen" + +#: engine/core/templates/json_table_widget.html:44 msgid "Add Row" msgstr "Rij toevoegen" @@ -3210,14 +3587,23 @@ msgstr "U hebt geen toestemming om deze actie uit te voeren." msgid "NOMINATIM_URL must be configured." msgstr "De parameter NOMINATIM_URL moet worden geconfigureerd!" -#: engine/core/validators.py:23 +#: engine/core/validators.py:18 +msgid "could not determine file type" +msgstr "Kan het bestandstype niet bepalen" + +#: engine/core/validators.py:24 +#, python-brace-format +msgid "unsupported video format. supported formats: {supported}" +msgstr "Ondersteund videoformaat. Ondersteunde formaten: {supported}" + +#: engine/core/validators.py:45 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "Afbeeldingsafmetingen mogen niet groter zijn dan w{max_width} x " "h{max_height} pixels" -#: engine/core/views.py:104 +#: engine/core/views.py:108 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3226,7 +3612,7 @@ msgstr "" "terug. Het zorgt ervoor dat het antwoord de juiste inhoudstype header voor " "XML bevat." -#: engine/core/views.py:119 +#: engine/core/views.py:123 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3236,16 +3622,16 @@ msgstr "" "verwerkt het verzoek, haalt het juiste sitemap detail antwoord op en stelt " "de Content-Type header in voor XML." -#: engine/core/views.py:155 +#: engine/core/views.py:174 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "Geeft een lijst met ondersteunde talen en de bijbehorende informatie." -#: engine/core/views.py:182 +#: engine/core/views.py:201 msgid "Returns the parameters of the website as a JSON object." msgstr "Retourneert de parameters van de website als een JSON-object." -#: engine/core/views.py:198 +#: engine/core/views.py:217 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3253,11 +3639,11 @@ msgstr "" "Verwerkt cachebewerkingen zoals het lezen en instellen van cachegegevens met" " een opgegeven sleutel en time-out." -#: engine/core/views.py:220 +#: engine/core/views.py:239 msgid "Handles `contact us` form submissions." msgstr "Handelt `contact met ons` formulier inzendingen af." -#: engine/core/views.py:236 +#: engine/core/views.py:255 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3265,15 +3651,15 @@ msgstr "" "Handelt verzoeken af voor het verwerken en valideren van URL's van inkomende" " POST-verzoeken." -#: engine/core/views.py:273 +#: engine/core/views.py:292 msgid "Handles global search queries." msgstr "Handelt globale zoekopdrachten af." -#: engine/core/views.py:289 +#: engine/core/views.py:308 msgid "Handles the logic of buying as a business without registration." msgstr "Behandelt de logica van kopen als bedrijf zonder registratie." -#: engine/core/views.py:337 +#: engine/core/views.py:356 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3281,33 +3667,33 @@ msgstr "" "Handelt het downloaden af van een digitaal actief dat is gekoppeld aan een bestelling.\n" "Deze functie probeert het digitale activabestand te serveren dat zich in de opslagmap van het project bevindt. Als het bestand niet wordt gevonden, wordt er een HTTP 404-fout weergegeven om aan te geven dat de bron niet beschikbaar is." -#: engine/core/views.py:348 +#: engine/core/views.py:367 msgid "order_product_uuid is required" msgstr "order_product_uuid is vereist" -#: engine/core/views.py:355 +#: engine/core/views.py:374 msgid "order product does not exist" msgstr "bestelproduct bestaat niet" -#: engine/core/views.py:358 +#: engine/core/views.py:377 msgid "you can only download the digital asset once" msgstr "U kunt het digitale goed maar één keer downloaden" -#: engine/core/views.py:362 +#: engine/core/views.py:381 msgid "the order must be paid before downloading the digital asset" msgstr "" "de bestelling moet worden betaald voordat het digitale actief kan worden " "gedownload" -#: engine/core/views.py:369 +#: engine/core/views.py:388 msgid "the order product does not have a product" msgstr "Het bestelde product heeft geen product" -#: engine/core/views.py:412 +#: engine/core/views.py:431 msgid "favicon not found" msgstr "favicon niet gevonden" -#: engine/core/views.py:418 +#: engine/core/views.py:437 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3315,7 +3701,7 @@ msgstr "" "Handelt verzoeken af voor de favicon van een website.\n" "Deze functie probeert het favicon-bestand te serveren dat zich in de statische map van het project bevindt. Als het favicon-bestand niet wordt gevonden, wordt er een HTTP 404-fout weergegeven om aan te geven dat de bron niet beschikbaar is." -#: engine/core/views.py:432 +#: engine/core/views.py:451 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3326,16 +3712,20 @@ msgstr "" "Django admin-interface. Het gebruikt Django's `redirect` functie voor het " "afhandelen van de HTTP-omleiding." -#: engine/core/views.py:445 +#: engine/core/views.py:464 msgid "Returns current version of the Schon. " msgstr "Geeft als resultaat de huidige versie van Schon." -#: engine/core/views.py:674 engine/core/views.py:689 +#: engine/core/views.py:475 +msgid "no image file provided" +msgstr "Geen afbeeldingsbestand opgegeven" + +#: engine/core/views.py:710 engine/core/views.py:725 #, python-format msgid "Revenue & Orders (last %(days)d)" msgstr "Inkomsten en orders (laatste %(days)d)" -#: engine/core/views.py:870 +#: engine/core/views.py:911 msgid "Returns custom variables for Dashboard. " msgstr "Geeft aangepaste variabelen voor Dashboard." @@ -3425,7 +3815,7 @@ msgstr "" "Merk objecten. Het gebruikt Django's ViewSet framework om de implementatie " "van API endpoints voor Merk objecten te vereenvoudigen." -#: engine/core/viewsets.py:458 +#: engine/core/viewsets.py:460 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3443,7 +3833,15 @@ msgstr "" "methoden voor het ophalen van productdetails, het toepassen van machtigingen" " en het verkrijgen van toegang tot gerelateerde feedback over een product." -#: engine/core/viewsets.py:605 +#: engine/core/viewsets.py:541 +msgid "identificator_type and identificators are required" +msgstr "identificator_type en identificators zijn vereist" + +#: engine/core/viewsets.py:554 +msgid "identificator_type must be one of: uuid, slug, sku" +msgstr "identificator_type moet een van de volgende zijn: uuid, slug, sku" + +#: engine/core/viewsets.py:635 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3458,7 +3856,7 @@ msgstr "" " van deze klasse is om gestroomlijnde toegang te bieden tot Vendor-" "gerelateerde bronnen via het Django REST framework." -#: engine/core/viewsets.py:625 +#: engine/core/viewsets.py:655 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3475,7 +3873,7 @@ msgstr "" "implementeren. Het breidt de basis `SchonViewSet` uit en maakt gebruik van " "Django's filtersysteem voor het opvragen van gegevens." -#: engine/core/viewsets.py:652 +#: engine/core/viewsets.py:682 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3495,7 +3893,7 @@ msgstr "" "gebaseerd op de specifieke actie die wordt uitgevoerd en dwingt " "dienovereenkomstig permissies af tijdens de interactie met ordergegevens." -#: engine/core/viewsets.py:914 +#: engine/core/viewsets.py:944 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3510,12 +3908,12 @@ msgstr "" " een gedetailleerde actie voor het afhandelen van feedback op OrderProduct " "instanties" -#: engine/core/viewsets.py:974 +#: engine/core/viewsets.py:1004 msgid "Manages operations related to Product images in the application. " msgstr "" "Beheert bewerkingen met betrekking tot productafbeeldingen in de applicatie." -#: engine/core/viewsets.py:988 +#: engine/core/viewsets.py:1018 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3523,16 +3921,16 @@ msgstr "" "Beheert het ophalen en afhandelen van PromoCode-instanties via verschillende" " API-acties." -#: engine/core/viewsets.py:1019 +#: engine/core/viewsets.py:1049 msgid "Represents a view set for managing promotions. " msgstr "Vertegenwoordigt een view set voor het beheren van promoties." -#: engine/core/viewsets.py:1032 +#: engine/core/viewsets.py:1062 msgid "Handles operations related to Stock data in the system." msgstr "" "Verwerkt bewerkingen met betrekking tot voorraadgegevens in het systeem." -#: engine/core/viewsets.py:1046 +#: engine/core/viewsets.py:1076 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3551,7 +3949,7 @@ msgstr "" "verlanglijstjes kunnen beheren, tenzij er expliciete toestemmingen zijn " "verleend." -#: engine/core/viewsets.py:1183 +#: engine/core/viewsets.py:1213 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3565,12 +3963,12 @@ msgstr "" "gespecialiseerde gedragingen voor verschillende HTTP methoden, serializer " "omzeilingen en toestemmingsafhandeling gebaseerd op de verzoekcontext." -#: engine/core/viewsets.py:1254 +#: engine/core/viewsets.py:1275 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Fout bij geocodering: {e}" -#: engine/core/viewsets.py:1262 +#: engine/core/viewsets.py:1283 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/no_NO/LC_MESSAGES/django.mo b/engine/core/locale/no_NO/LC_MESSAGES/django.mo index fd22d7c2..d43060f9 100644 Binary files a/engine/core/locale/no_NO/LC_MESSAGES/django.mo and b/engine/core/locale/no_NO/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/no_NO/LC_MESSAGES/django.po b/engine/core/locale/no_NO/LC_MESSAGES/django.po index d8a2f9e5..1c3cd849 100644 --- a/engine/core/locale/no_NO/LC_MESSAGES/django.po +++ b/engine/core/locale/no_NO/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -50,113 +50,133 @@ msgstr "Modifisert" msgid "when the object was last modified" msgstr "Når objektet sist ble redigert" -#: engine/core/admin.py:94 +#: engine/core/admin.py:98 msgid "translations" msgstr "Oversettelser" -#: engine/core/admin.py:102 +#: engine/core/admin.py:106 msgid "general" msgstr "Generelt" -#: engine/core/admin.py:106 +#: engine/core/admin.py:110 msgid "relations" msgstr "Relasjoner" -#: engine/core/admin.py:111 +#: engine/core/admin.py:115 msgid "additional info" msgstr "ytterligere informasjon" -#: engine/core/admin.py:133 +#: engine/core/admin.py:137 msgid "metadata" msgstr "Metadata" -#: engine/core/admin.py:141 +#: engine/core/admin.py:145 msgid "timestamps" msgstr "Tidsstempler" -#: engine/core/admin.py:158 +#: engine/core/admin.py:162 #, python-format msgid "Activate selected %(verbose_name_plural)s" msgstr "Aktiver valgt %(verbose_name_plural)s" -#: engine/core/admin.py:166 +#: engine/core/admin.py:170 msgid "selected items have been activated." msgstr "Utvalgte elementer har blitt aktivert!" -#: engine/core/admin.py:174 +#: engine/core/admin.py:178 #, python-format msgid "Deactivate selected %(verbose_name_plural)s" msgstr "Deaktiver valgt %(verbose_name_plural)s" -#: engine/core/admin.py:184 +#: engine/core/admin.py:188 msgid "selected items have been deactivated." msgstr "Utvalgte elementer har blitt deaktivert!" -#: engine/core/admin.py:196 engine/core/graphene/object_types.py:653 -#: engine/core/graphene/object_types.py:660 engine/core/models.py:832 -#: engine/core/models.py:840 +#: engine/core/admin.py:200 engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:673 engine/core/models.py:918 +#: engine/core/models.py:928 msgid "attribute value" msgstr "Attributtverdi" -#: engine/core/admin.py:197 engine/core/graphene/object_types.py:77 -#: engine/core/models.py:841 +#: engine/core/admin.py:201 engine/core/graphene/object_types.py:81 +#: engine/core/models.py:929 msgid "attribute values" msgstr "Attributtverdier" -#: engine/core/admin.py:208 +#: engine/core/admin.py:212 engine/core/models.py:2232 msgid "image" msgstr "Bilde" -#: engine/core/admin.py:209 engine/core/graphene/object_types.py:530 +#: engine/core/admin.py:213 engine/core/graphene/object_types.py:535 msgid "images" msgstr "Bilder" -#: engine/core/admin.py:220 engine/core/models.py:576 +#: engine/core/admin.py:224 engine/core/models.py:635 msgid "stock" msgstr "Lager" -#: engine/core/admin.py:221 engine/core/graphene/object_types.py:713 +#: engine/core/admin.py:225 engine/core/graphene/object_types.py:735 msgid "stocks" msgstr "Aksjer" -#: engine/core/admin.py:232 engine/core/models.py:1938 +#: engine/core/admin.py:236 engine/core/models.py:2046 msgid "order product" msgstr "Bestill produkt" -#: engine/core/admin.py:233 engine/core/graphene/object_types.py:441 -#: engine/core/models.py:1939 +#: engine/core/admin.py:237 engine/core/graphene/object_types.py:446 +#: engine/core/models.py:2047 msgid "order products" msgstr "Bestill produkter" -#: engine/core/admin.py:251 engine/core/admin.py:252 +#: engine/core/admin.py:255 engine/core/admin.py:256 msgid "children" msgstr "Barn" -#: engine/core/admin.py:528 +#: engine/core/admin.py:545 +msgid "video preview" +msgstr "Videoforhåndsvisning" + +#: engine/core/admin.py:551 msgid "has images" msgstr "Har bilder" -#: engine/core/admin.py:531 +#: engine/core/admin.py:554 #, python-format msgid "Export selected %(verbose_name_plural)s to marketplaces' feeds" msgstr "Eksporter valgt %(verbose_name_plural)s til markedsplassers feeds" -#: engine/core/admin.py:542 +#: engine/core/admin.py:565 #, python-format msgid "selected %(verbose_name_plural)s have been marked for export." msgstr "Utvalgte %(verbose_name_plural)s er merket for eksport." -#: engine/core/admin.py:553 +#: engine/core/admin.py:576 #, python-format msgid "Ban selected %(verbose_name_plural)s from marketplaces' feeds" msgstr "Utelukk valgt %(verbose_name_plural)s fra markedsplassers feeds" -#: engine/core/admin.py:564 +#: engine/core/admin.py:587 #, python-format msgid "selected %(verbose_name_plural)s have been banned from export." msgstr "Utvalgte %(verbose_name_plural)s er forbudt å eksportere." -#: engine/core/admin.py:1116 +#: engine/core/admin.py:1030 +msgid "Preview" +msgstr "Forhåndsvisning" + +#: engine/core/admin.py:1031 +msgid "Metadata" +msgstr "Metadata" + +#: engine/core/admin.py:1034 +msgid "preview" +msgstr "Forhåndsvisning" + +#: engine/core/admin.py:1043 +msgid "image preview" +msgstr "Bildeforhåndsvisning" + +#: engine/core/admin.py:1166 msgid "Config" msgstr "Konfigurer" @@ -222,7 +242,7 @@ msgstr "" "OpenApi3-skjema for dette API-et. Format kan velges via innholdsforhandling." " Språk kan velges både med Accept-Language og spørringsparameteren." -#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:36 +#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "Cache I/O" @@ -246,7 +266,7 @@ msgstr "Hent applikasjonens eksponerbare parametere" msgid "send a message to the support team" msgstr "Send en melding til supportteamet" -#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:59 msgid "request a CORSed URL" msgstr "Be om en CORSed URL. Bare https er tillatt." @@ -389,11 +409,11 @@ msgstr "" "Skriv om noen av feltene i en eksisterende kategori for å lagre ikke-" "redigerbare" -#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757 -#: engine/core/docs/drf/viewsets.py:1046 -#: engine/core/graphene/object_types.py:119 -#: engine/core/graphene/object_types.py:239 -#: engine/core/graphene/object_types.py:540 +#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:781 +#: engine/core/docs/drf/viewsets.py:1070 +#: engine/core/graphene/object_types.py:123 +#: engine/core/graphene/object_types.py:247 +#: engine/core/graphene/object_types.py:546 msgid "SEO Meta snapshot" msgstr "SEO Meta-øyeblikksbilde" @@ -691,7 +711,7 @@ msgstr "Hent et enkelt produkt (detaljert visning)" #: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683 #: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725 -#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763 +#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:787 msgid "Product UUID or slug" msgstr "Produkt UUID eller Slug" @@ -718,288 +738,302 @@ msgstr "Slett et produkt" msgid "lists all permitted feedbacks for a product" msgstr "viser alle tillatte tilbakemeldinger for et produkt" -#: engine/core/docs/drf/viewsets.py:758 +#: engine/core/docs/drf/viewsets.py:757 +msgid "retrieve exact products by identifier" +msgstr "Hent nøyaktige produkter etter identifikator" + +#: engine/core/docs/drf/viewsets.py:759 +msgid "" +"retrieve a list of products by identifier type (uuid, slug, or sku). Send a " +"POST request with `identificator_type` and `identificators` (list of " +"values)." +msgstr "" +"Hent en liste over produkter etter identifikasjonstype (uuid, slug eller " +"sku). Send en POST-forespørsel med `identificator_type` og `identificators` " +"(liste over verdier)." + +#: engine/core/docs/drf/viewsets.py:782 msgid "returns a snapshot of the product's SEO meta data" msgstr "Returnerer et øyeblikksbilde av produktets SEO-metadata" -#: engine/core/docs/drf/viewsets.py:779 +#: engine/core/docs/drf/viewsets.py:803 msgid "list all addresses" msgstr "Liste over alle adresser" -#: engine/core/docs/drf/viewsets.py:789 +#: engine/core/docs/drf/viewsets.py:813 msgid "retrieve a single address" msgstr "Hent en enkelt adresse" -#: engine/core/docs/drf/viewsets.py:799 +#: engine/core/docs/drf/viewsets.py:823 msgid "create a new address" msgstr "Opprett en ny adresse" -#: engine/core/docs/drf/viewsets.py:810 +#: engine/core/docs/drf/viewsets.py:834 msgid "delete an address" msgstr "Slett en adresse" -#: engine/core/docs/drf/viewsets.py:820 +#: engine/core/docs/drf/viewsets.py:844 msgid "update an entire address" msgstr "Oppdater en hel adresse" -#: engine/core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:855 msgid "partially update an address" msgstr "Delvis oppdatering av en adresse" -#: engine/core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:866 msgid "autocomplete address suggestions" msgstr "Autofullfør adresseinndata" -#: engine/core/docs/drf/viewsets.py:848 +#: engine/core/docs/drf/viewsets.py:872 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" "Spørringsstreng for rådata, vennligst legg til data fra geo-IP-sluttpunkt" -#: engine/core/docs/drf/viewsets.py:855 +#: engine/core/docs/drf/viewsets.py:879 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "begrenser resultatmengden, 1 < grense < 10, standard: 5" -#: engine/core/docs/drf/viewsets.py:871 +#: engine/core/docs/drf/viewsets.py:895 msgid "list all feedbacks (simple view)" msgstr "liste opp alle tilbakemeldinger (enkel visning)" -#: engine/core/docs/drf/viewsets.py:881 +#: engine/core/docs/drf/viewsets.py:905 msgid "retrieve a single feedback (detailed view)" msgstr "hente en enkelt tilbakemelding (detaljert visning)" -#: engine/core/docs/drf/viewsets.py:888 +#: engine/core/docs/drf/viewsets.py:912 msgid "create a feedback" msgstr "skape en tilbakemelding" -#: engine/core/docs/drf/viewsets.py:895 +#: engine/core/docs/drf/viewsets.py:919 msgid "delete a feedback" msgstr "slette en tilbakemelding" -#: engine/core/docs/drf/viewsets.py:902 +#: engine/core/docs/drf/viewsets.py:926 msgid "rewrite an existing feedback saving non-editables" msgstr "" "omskrive en eksisterende tilbakemelding som lagrer ikke-redigerbare filer" -#: engine/core/docs/drf/viewsets.py:909 +#: engine/core/docs/drf/viewsets.py:933 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" "omskrive noen felter i en eksisterende tilbakemelding og lagre ikke-" "redigerbare" -#: engine/core/docs/drf/viewsets.py:919 +#: engine/core/docs/drf/viewsets.py:943 msgid "list all order–product relations (simple view)" msgstr "liste opp alle ordre-produkt-relasjoner (enkel visning)" -#: engine/core/docs/drf/viewsets.py:929 +#: engine/core/docs/drf/viewsets.py:953 msgid "retrieve a single order–product relation (detailed view)" msgstr "hente en enkelt ordre-produkt-relasjon (detaljert visning)" -#: engine/core/docs/drf/viewsets.py:939 +#: engine/core/docs/drf/viewsets.py:963 msgid "create a new order–product relation" msgstr "opprette en ny ordre-produkt-relasjon" -#: engine/core/docs/drf/viewsets.py:949 +#: engine/core/docs/drf/viewsets.py:973 msgid "replace an existing order–product relation" msgstr "erstatte en eksisterende ordre-produkt-relasjon" -#: engine/core/docs/drf/viewsets.py:959 +#: engine/core/docs/drf/viewsets.py:983 msgid "partially update an existing order–product relation" msgstr "delvis oppdatere en eksisterende ordre-produkt-relasjon" -#: engine/core/docs/drf/viewsets.py:969 +#: engine/core/docs/drf/viewsets.py:993 msgid "delete an order–product relation" msgstr "slette en ordre-produkt-relasjon" -#: engine/core/docs/drf/viewsets.py:979 +#: engine/core/docs/drf/viewsets.py:1003 msgid "add or remove feedback on an order–product relation" msgstr "legge til eller fjerne tilbakemeldinger på en ordre-produkt-relasjon" -#: engine/core/docs/drf/viewsets.py:996 +#: engine/core/docs/drf/viewsets.py:1020 msgid "list all brands (simple view)" msgstr "Liste over alle merker (enkel visning)" -#: engine/core/docs/drf/viewsets.py:1003 +#: engine/core/docs/drf/viewsets.py:1027 msgid "retrieve a single brand (detailed view)" msgstr "Hent ett enkelt merke (detaljert visning)" -#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051 +#: engine/core/docs/drf/viewsets.py:1032 engine/core/docs/drf/viewsets.py:1075 msgid "Brand UUID or slug" msgstr "Merkevare UUID eller slug" -#: engine/core/docs/drf/viewsets.py:1018 +#: engine/core/docs/drf/viewsets.py:1042 msgid "create a brand" msgstr "Skap en merkevare" -#: engine/core/docs/drf/viewsets.py:1025 +#: engine/core/docs/drf/viewsets.py:1049 msgid "delete a brand" msgstr "Slett et merke" -#: engine/core/docs/drf/viewsets.py:1032 +#: engine/core/docs/drf/viewsets.py:1056 msgid "rewrite an existing brand saving non-editables" msgstr "" "Skriv om en eksisterende merkevare som sparer ikke-redigerbare produkter" -#: engine/core/docs/drf/viewsets.py:1039 +#: engine/core/docs/drf/viewsets.py:1063 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "" "Skriv om noen av feltene i en eksisterende kategori for å lagre ikke-" "redigerbare" -#: engine/core/docs/drf/viewsets.py:1064 +#: engine/core/docs/drf/viewsets.py:1088 msgid "list all vendors (simple view)" msgstr "Liste over alle leverandører (enkel visning)" -#: engine/core/docs/drf/viewsets.py:1074 +#: engine/core/docs/drf/viewsets.py:1098 msgid "retrieve a single vendor (detailed view)" msgstr "Hent en enkelt leverandør (detaljert visning)" -#: engine/core/docs/drf/viewsets.py:1081 +#: engine/core/docs/drf/viewsets.py:1105 msgid "create a vendor" msgstr "Opprett en leverandør" -#: engine/core/docs/drf/viewsets.py:1088 +#: engine/core/docs/drf/viewsets.py:1112 msgid "delete a vendor" msgstr "Slett en leverandør" -#: engine/core/docs/drf/viewsets.py:1095 +#: engine/core/docs/drf/viewsets.py:1119 msgid "rewrite an existing vendor saving non-editables" msgstr "Skriv om en eksisterende leverandør som lagrer ikke-redigerbare filer" -#: engine/core/docs/drf/viewsets.py:1102 +#: engine/core/docs/drf/viewsets.py:1126 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "" "Skriv om noen av feltene i en eksisterende kategori for å lagre ikke-" "redigerbare" -#: engine/core/docs/drf/viewsets.py:1112 +#: engine/core/docs/drf/viewsets.py:1136 msgid "list all product images (simple view)" msgstr "Liste over alle produktbilder (enkel visning)" -#: engine/core/docs/drf/viewsets.py:1122 +#: engine/core/docs/drf/viewsets.py:1146 msgid "retrieve a single product image (detailed view)" msgstr "Hent et enkelt produktbilde (detaljert visning)" -#: engine/core/docs/drf/viewsets.py:1129 +#: engine/core/docs/drf/viewsets.py:1153 msgid "create a product image" msgstr "Lag et produktbilde" -#: engine/core/docs/drf/viewsets.py:1139 +#: engine/core/docs/drf/viewsets.py:1163 msgid "delete a product image" msgstr "Slett et produktbilde" -#: engine/core/docs/drf/viewsets.py:1146 +#: engine/core/docs/drf/viewsets.py:1170 msgid "rewrite an existing product image saving non-editables" msgstr "" "Skriv om et eksisterende produktbilde og lagre ikke-redigerbare elementer" -#: engine/core/docs/drf/viewsets.py:1154 +#: engine/core/docs/drf/viewsets.py:1178 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "" "Skriv om noen av feltene i en eksisterende kategori for å lagre ikke-" "redigerbare" -#: engine/core/docs/drf/viewsets.py:1165 +#: engine/core/docs/drf/viewsets.py:1189 msgid "list all promo codes (simple view)" msgstr "Liste over alle kampanjekoder (enkel visning)" -#: engine/core/docs/drf/viewsets.py:1175 +#: engine/core/docs/drf/viewsets.py:1199 msgid "retrieve a single promo code (detailed view)" msgstr "Hent en enkelt kampanjekode (detaljert visning)" -#: engine/core/docs/drf/viewsets.py:1182 +#: engine/core/docs/drf/viewsets.py:1206 msgid "create a promo code" msgstr "Opprett en kampanjekode" -#: engine/core/docs/drf/viewsets.py:1189 +#: engine/core/docs/drf/viewsets.py:1213 msgid "delete a promo code" msgstr "Slett en kampanjekode" -#: engine/core/docs/drf/viewsets.py:1196 +#: engine/core/docs/drf/viewsets.py:1220 msgid "rewrite an existing promo code saving non-editables" msgstr "" "Skriv om en eksisterende kampanjekode for å lagre ikke-redigerbare koder" -#: engine/core/docs/drf/viewsets.py:1203 +#: engine/core/docs/drf/viewsets.py:1227 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "" "Skriv om noen av feltene i en eksisterende kategori for å lagre ikke-" "redigerbare" -#: engine/core/docs/drf/viewsets.py:1213 +#: engine/core/docs/drf/viewsets.py:1237 msgid "list all promotions (simple view)" msgstr "Liste over alle kampanjer (enkel visning)" -#: engine/core/docs/drf/viewsets.py:1223 +#: engine/core/docs/drf/viewsets.py:1247 msgid "retrieve a single promotion (detailed view)" msgstr "Hent en enkelt kampanje (detaljert visning)" -#: engine/core/docs/drf/viewsets.py:1230 +#: engine/core/docs/drf/viewsets.py:1254 msgid "create a promotion" msgstr "Opprett en kampanje" -#: engine/core/docs/drf/viewsets.py:1237 +#: engine/core/docs/drf/viewsets.py:1261 msgid "delete a promotion" msgstr "Slett en kampanje" -#: engine/core/docs/drf/viewsets.py:1244 +#: engine/core/docs/drf/viewsets.py:1268 msgid "rewrite an existing promotion saving non-editables" msgstr "" "Skriv om en eksisterende kampanje for å lagre ikke-redigerbare elementer" -#: engine/core/docs/drf/viewsets.py:1251 +#: engine/core/docs/drf/viewsets.py:1275 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "" "Skriv om noen av feltene i en eksisterende kategori for å lagre ikke-" "redigerbare" -#: engine/core/docs/drf/viewsets.py:1261 +#: engine/core/docs/drf/viewsets.py:1285 msgid "list all stocks (simple view)" msgstr "Liste over alle aksjer (enkel visning)" -#: engine/core/docs/drf/viewsets.py:1268 +#: engine/core/docs/drf/viewsets.py:1292 msgid "retrieve a single stock (detailed view)" msgstr "Hent en enkelt aksje (detaljert visning)" -#: engine/core/docs/drf/viewsets.py:1275 +#: engine/core/docs/drf/viewsets.py:1299 msgid "create a stock record" msgstr "Opprett en lagerpost" -#: engine/core/docs/drf/viewsets.py:1282 +#: engine/core/docs/drf/viewsets.py:1306 msgid "delete a stock record" msgstr "Slett en lagerpost" -#: engine/core/docs/drf/viewsets.py:1289 +#: engine/core/docs/drf/viewsets.py:1313 msgid "rewrite an existing stock record saving non-editables" msgstr "Skriv om en eksisterende lagerpost og lagre ikke-redigerbare varer" -#: engine/core/docs/drf/viewsets.py:1297 +#: engine/core/docs/drf/viewsets.py:1321 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "" "Skriv om noen av feltene i en eksisterende kategori for å lagre ikke-" "redigerbare" -#: engine/core/docs/drf/viewsets.py:1308 +#: engine/core/docs/drf/viewsets.py:1332 msgid "list all product tags (simple view)" msgstr "Liste over alle produkttagger (enkel visning)" -#: engine/core/docs/drf/viewsets.py:1318 +#: engine/core/docs/drf/viewsets.py:1342 msgid "retrieve a single product tag (detailed view)" msgstr "Hent en enkelt produkttagg (detaljert visning)" -#: engine/core/docs/drf/viewsets.py:1325 +#: engine/core/docs/drf/viewsets.py:1349 msgid "create a product tag" msgstr "Opprett en produkttagg" -#: engine/core/docs/drf/viewsets.py:1335 +#: engine/core/docs/drf/viewsets.py:1359 msgid "delete a product tag" msgstr "Slett en produkttagg" -#: engine/core/docs/drf/viewsets.py:1342 +#: engine/core/docs/drf/viewsets.py:1366 msgid "rewrite an existing product tag saving non-editables" msgstr "" "Skriv om en eksisterende produkttagg for å lagre ikke-redigerbare produkter" -#: engine/core/docs/drf/viewsets.py:1350 +#: engine/core/docs/drf/viewsets.py:1374 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "" "Skriv om noen av feltene i en eksisterende kategori for å lagre ikke-" @@ -1010,375 +1044,377 @@ msgstr "" msgid "no search term provided." msgstr "Ingen søkeord oppgitt." -#: engine/core/filters.py:78 engine/core/filters.py:484 -#: engine/core/filters.py:625 +#: engine/core/filters.py:79 engine/core/filters.py:485 +#: engine/core/filters.py:626 msgid "Search" msgstr "Søk" -#: engine/core/filters.py:79 engine/core/filters.py:663 -#: engine/core/filters.py:692 +#: engine/core/filters.py:80 engine/core/filters.py:664 +#: engine/core/filters.py:693 msgid "UUID" msgstr "UUID" -#: engine/core/filters.py:80 engine/core/filters.py:487 -#: engine/core/filters.py:627 +#: engine/core/filters.py:81 engine/core/filters.py:488 +#: engine/core/filters.py:628 msgid "Name" msgstr "Navn" -#: engine/core/filters.py:82 engine/core/filters.py:630 +#: engine/core/filters.py:83 engine/core/filters.py:631 msgid "Categories" msgstr "Kategorier" -#: engine/core/filters.py:86 +#: engine/core/filters.py:87 msgid "Categories Slugs" msgstr "Kategorier Snegler" -#: engine/core/filters.py:88 engine/core/filters.py:495 +#: engine/core/filters.py:89 engine/core/filters.py:496 +#: engine/core/templates/admin_doc/index.html:37 +#: engine/core/templates/admin_doc/template_tag_index.html:12 msgid "Tags" msgstr "Tagger" -#: engine/core/filters.py:90 +#: engine/core/filters.py:91 msgid "Min Price" msgstr "Min pris" -#: engine/core/filters.py:93 +#: engine/core/filters.py:94 msgid "Max Price" msgstr "Maks pris" -#: engine/core/filters.py:95 +#: engine/core/filters.py:96 msgid "Is Active" msgstr "Er aktiv" -#: engine/core/filters.py:96 +#: engine/core/filters.py:97 msgid "Brand" msgstr "Merkevare" -#: engine/core/filters.py:97 +#: engine/core/filters.py:98 msgid "Attributes" msgstr "Egenskaper" -#: engine/core/filters.py:99 +#: engine/core/filters.py:100 msgid "Quantity" msgstr "Antall" -#: engine/core/filters.py:101 engine/core/filters.py:489 -#: engine/core/filters.py:628 engine/core/models.py:316 -#: engine/core/models.py:497 engine/core/models.py:663 +#: engine/core/filters.py:102 engine/core/filters.py:490 +#: engine/core/filters.py:629 engine/core/models.py:339 +#: engine/core/models.py:546 engine/core/models.py:736 msgid "Slug" msgstr "Snegl" -#: engine/core/filters.py:102 +#: engine/core/filters.py:103 msgid "Is Digital" msgstr "Er Digital" -#: engine/core/filters.py:104 +#: engine/core/filters.py:105 msgid "Include sub-categories" msgstr "Inkluder underkategorier" -#: engine/core/filters.py:108 +#: engine/core/filters.py:109 msgid "Include personal ordered" msgstr "Inkluder personlig bestilte produkter" -#: engine/core/filters.py:110 engine/core/models.py:667 +#: engine/core/filters.py:111 engine/core/models.py:740 msgid "SKU" msgstr "SKU" -#: engine/core/filters.py:212 +#: engine/core/filters.py:213 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" "Det må finnes en category_uuid for å bruke include_subcategories-flagget" -#: engine/core/filters.py:398 +#: engine/core/filters.py:399 msgid "Search (ID, product name or part number)" msgstr "Søk (ID, produktnavn eller delenummer)" -#: engine/core/filters.py:402 +#: engine/core/filters.py:403 msgid "Bought after (inclusive)" msgstr "Kjøpt etter (inklusive)" -#: engine/core/filters.py:405 +#: engine/core/filters.py:406 msgid "Bought before (inclusive)" msgstr "Kjøpt før (inkludert)" -#: engine/core/filters.py:410 engine/core/filters.py:461 -#: engine/core/filters.py:697 +#: engine/core/filters.py:411 engine/core/filters.py:462 +#: engine/core/filters.py:698 msgid "User email" msgstr "Brukerens e-post" -#: engine/core/filters.py:413 engine/core/filters.py:464 -#: engine/core/filters.py:672 engine/core/filters.py:694 +#: engine/core/filters.py:414 engine/core/filters.py:465 +#: engine/core/filters.py:673 engine/core/filters.py:695 msgid "User UUID" msgstr "Bruker UUID" -#: engine/core/filters.py:415 +#: engine/core/filters.py:416 msgid "Status" msgstr "Status" -#: engine/core/filters.py:419 +#: engine/core/filters.py:420 msgid "Human Readable ID" msgstr "Menneskelig lesbar ID" -#: engine/core/filters.py:488 +#: engine/core/filters.py:489 msgid "Parent" msgstr "Foreldre" -#: engine/core/filters.py:492 +#: engine/core/filters.py:493 msgid "Whole category(has at least 1 product or not)" msgstr "Hele kategorien (har minst 1 produkt eller ikke)" -#: engine/core/filters.py:496 +#: engine/core/filters.py:497 msgid "Level" msgstr "Nivå" -#: engine/core/filters.py:667 +#: engine/core/filters.py:668 msgid "Product UUID" msgstr "Produkt UUID" -#: engine/core/graphene/mutations.py:40 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Nøkkel å lete etter i eller legge inn i hurtigbufferen" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:43 msgid "data to store in cache" msgstr "Data som skal lagres i hurtigbufferen" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:46 msgid "timeout in seconds to set the data for into the cache" msgstr "Tidsavbrudd i sekunder for å legge inn data i hurtigbufferen" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:49 msgid "cached data" msgstr "Bufret data" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:64 msgid "camelized JSON data from the requested URL" msgstr "Camelized JSON-data fra den forespurte URL-en" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:248 +#: engine/core/graphene/mutations.py:69 engine/core/views.py:267 msgid "only URLs starting with http(s):// are allowed" msgstr "Bare nettadresser som begynner med http(s):// er tillatt" -#: engine/core/graphene/mutations.py:86 +#: engine/core/graphene/mutations.py:87 msgid "add a product to the order" msgstr "Legg til et produkt i bestillingen" -#: engine/core/graphene/mutations.py:109 engine/core/graphene/mutations.py:138 -#: engine/core/graphene/mutations.py:254 engine/core/graphene/mutations.py:306 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139 +#: engine/core/graphene/mutations.py:256 engine/core/graphene/mutations.py:308 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Ordre {order_uuid} ikke funnet!" -#: engine/core/graphene/mutations.py:115 engine/core/graphene/mutations.py:166 +#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167 msgid "remove a product from the order" msgstr "Fjern et produkt fra bestillingen" -#: engine/core/graphene/mutations.py:144 +#: engine/core/graphene/mutations.py:145 msgid "remove all products from the order" msgstr "Fjern alle produktene fra bestillingen" -#: engine/core/graphene/mutations.py:189 +#: engine/core/graphene/mutations.py:190 msgid "buy an order" msgstr "Kjøp en ordre" -#: engine/core/graphene/mutations.py:220 engine/core/graphene/mutations.py:282 +#: engine/core/graphene/mutations.py:222 engine/core/graphene/mutations.py:284 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" "Vennligst oppgi enten order_uuid eller order_hr_id - gjensidig utelukkende!" -#: engine/core/graphene/mutations.py:249 engine/core/graphene/mutations.py:524 -#: engine/core/graphene/mutations.py:573 engine/core/viewsets.py:753 +#: engine/core/graphene/mutations.py:251 engine/core/graphene/mutations.py:526 +#: engine/core/graphene/mutations.py:576 engine/core/viewsets.py:783 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Feil type kom fra order.buy()-metoden: {type(instance)!s}" -#: engine/core/graphene/mutations.py:260 +#: engine/core/graphene/mutations.py:262 msgid "perform an action on a list of products in the order" msgstr "Utfør en handling på en liste over produkter i bestillingen" -#: engine/core/graphene/mutations.py:265 +#: engine/core/graphene/mutations.py:267 msgid "remove/add" msgstr "Fjern/legg til" -#: engine/core/graphene/mutations.py:301 engine/core/graphene/mutations.py:342 +#: engine/core/graphene/mutations.py:303 engine/core/graphene/mutations.py:342 msgid "action must be either add or remove" msgstr "Handlingen må enten være \"legg til\" eller \"fjern\"!" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:314 msgid "perform an action on a list of products in the wishlist" msgstr "Utføre en handling på en liste over produkter i ønskelisten" -#: engine/core/graphene/mutations.py:330 -msgid "please provide wishlist_uuid value" -msgstr "Vennligst oppgi verdien `wishlist_uuid`." - -#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:423 -#: engine/core/graphene/mutations.py:451 engine/core/graphene/mutations.py:479 -#: engine/core/graphene/mutations.py:529 +#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:424 +#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480 +#: engine/core/graphene/mutations.py:531 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Ønskeliste {wishlist_uuid} ikke funnet!" -#: engine/core/graphene/mutations.py:401 +#: engine/core/graphene/mutations.py:402 msgid "add a product to the wishlist" msgstr "Legg til et produkt i bestillingen" -#: engine/core/graphene/mutations.py:429 +#: engine/core/graphene/mutations.py:430 msgid "remove a product from the wishlist" msgstr "Fjern et produkt fra bestillingen" -#: engine/core/graphene/mutations.py:457 +#: engine/core/graphene/mutations.py:458 msgid "remove all products from the wishlist" msgstr "Fjern et produkt fra bestillingen" -#: engine/core/graphene/mutations.py:485 +#: engine/core/graphene/mutations.py:486 msgid "buy all products from the wishlist" msgstr "Fjern et produkt fra bestillingen" -#: engine/core/graphene/mutations.py:535 +#: engine/core/graphene/mutations.py:537 msgid "buy a product" msgstr "Kjøp en ordre" -#: engine/core/graphene/mutations.py:542 +#: engine/core/graphene/mutations.py:544 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" msgstr "" "Send attributtene som en streng formatert som attr1=verdi1,attr2=verdi2" -#: engine/core/graphene/mutations.py:580 +#: engine/core/graphene/mutations.py:583 msgid "add or delete a feedback for orderproduct" msgstr "Legg til eller slett en tilbakemelding for ordreproduktet" -#: engine/core/graphene/mutations.py:606 +#: engine/core/graphene/mutations.py:610 msgid "action must be either `add` or `remove`" msgstr "Handlingen må være enten `add` eller `remove`!" -#: engine/core/graphene/mutations.py:609 +#: engine/core/graphene/mutations.py:613 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Bestill produkt {order_product_uuid} ikke funnet!" -#: engine/core/graphene/mutations.py:616 +#: engine/core/graphene/mutations.py:620 msgid "original address string provided by the user" msgstr "Opprinnelig adressestreng oppgitt av brukeren" -#: engine/core/graphene/mutations.py:653 engine/core/models.py:986 -#: engine/core/models.py:999 engine/core/models.py:1443 -#: engine/core/models.py:1474 engine/core/models.py:1505 -#: engine/core/viewsets.py:760 +#: engine/core/graphene/mutations.py:662 engine/core/models.py:1079 +#: engine/core/models.py:1092 engine/core/models.py:1544 +#: engine/core/models.py:1575 engine/core/models.py:1606 +#: engine/core/viewsets.py:790 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} eksisterer ikke: {uuid}!" -#: engine/core/graphene/mutations.py:667 +#: engine/core/graphene/mutations.py:676 msgid "limit must be between 1 and 10" msgstr "Grensen må være mellom 1 og 10" -#: engine/core/graphene/mutations.py:716 +#: engine/core/graphene/mutations.py:726 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - fungerer som en drøm" -#: engine/core/graphene/object_types.py:84 -#: engine/core/graphene/object_types.py:420 -#: engine/core/graphene/object_types.py:471 engine/core/models.py:803 -#: engine/core/models.py:1297 engine/core/models.py:2033 +#: engine/core/graphene/object_types.py:88 +#: engine/core/graphene/object_types.py:425 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:889 +#: engine/core/models.py:1394 engine/core/models.py:2139 msgid "attributes" msgstr "Egenskaper" -#: engine/core/graphene/object_types.py:97 +#: engine/core/graphene/object_types.py:101 msgid "grouped attributes" msgstr "Grupperte attributter" -#: engine/core/graphene/object_types.py:104 +#: engine/core/graphene/object_types.py:108 msgid "groups of attributes" msgstr "Grupper av attributter" -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:217 -#: engine/core/graphene/object_types.py:255 engine/core/models.py:440 +#: engine/core/graphene/object_types.py:122 +#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:264 engine/core/models.py:489 msgid "categories" msgstr "Kategorier" -#: engine/core/graphene/object_types.py:134 engine/core/models.py:511 +#: engine/core/graphene/object_types.py:138 engine/core/models.py:564 msgid "brands" msgstr "Merkevarer" -#: engine/core/graphene/object_types.py:219 +#: engine/core/graphene/object_types.py:226 msgid "category image url" msgstr "Kategorier" -#: engine/core/graphene/object_types.py:220 -#: engine/core/graphene/object_types.py:365 engine/core/models.py:278 +#: engine/core/graphene/object_types.py:227 +#: engine/core/graphene/object_types.py:369 engine/core/models.py:301 msgid "markup percentage" msgstr "Påslag i prosent" -#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:231 msgid "which attributes and values can be used for filtering this category." msgstr "" "Hvilke attributter og verdier som kan brukes til å filtrere denne " "kategorien." -#: engine/core/graphene/object_types.py:230 +#: engine/core/graphene/object_types.py:237 msgid "" "minimum and maximum prices for products in this category, if available." msgstr "" "Minimums- og maksimumspriser for produkter i denne kategorien, hvis " "tilgjengelig." -#: engine/core/graphene/object_types.py:234 +#: engine/core/graphene/object_types.py:240 +msgid "brands in this category" +msgstr "Merker i denne kategorien" + +#: engine/core/graphene/object_types.py:242 msgid "tags for this category" msgstr "Tagger for denne kategorien" -#: engine/core/graphene/object_types.py:237 +#: engine/core/graphene/object_types.py:245 msgid "products in this category" msgstr "Produkter i denne kategorien" -#: engine/core/graphene/object_types.py:372 engine/core/models.py:183 +#: engine/core/graphene/object_types.py:376 engine/core/models.py:202 msgid "vendors" msgstr "Leverandører" -#: engine/core/graphene/object_types.py:376 +#: engine/core/graphene/object_types.py:380 msgid "Latitude (Y coordinate)" msgstr "Breddegrad (Y-koordinat)" -#: engine/core/graphene/object_types.py:377 +#: engine/core/graphene/object_types.py:381 msgid "Longitude (X coordinate)" msgstr "Lengdegrad (X-koordinat)" -#: engine/core/graphene/object_types.py:406 +#: engine/core/graphene/object_types.py:411 msgid "comment" msgstr "Hvordan" -#: engine/core/graphene/object_types.py:408 -#: engine/core/graphene/object_types.py:542 +#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:548 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "Vurderingsverdi fra 1 til og med 10, eller 0 hvis den ikke er angitt." -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:421 msgid "represents feedback from a user." msgstr "Representerer tilbakemeldinger fra en bruker." -#: engine/core/graphene/object_types.py:421 -#: engine/core/graphene/object_types.py:472 engine/core/models.py:1291 +#: engine/core/graphene/object_types.py:426 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:1388 msgid "notifications" msgstr "Varsler" -#: engine/core/graphene/object_types.py:423 +#: engine/core/graphene/object_types.py:428 msgid "download url for this order product if applicable" msgstr "Last ned url for dette bestillingsproduktet, hvis aktuelt" -#: engine/core/graphene/object_types.py:425 engine/core/models.py:1856 +#: engine/core/graphene/object_types.py:430 engine/core/models.py:1959 msgid "feedback" msgstr "Tilbakemeldinger" -#: engine/core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:464 msgid "a list of order products in this order" msgstr "En liste over bestillingsprodukter i denne rekkefølgen" -#: engine/core/graphene/object_types.py:461 engine/core/models.py:1261 +#: engine/core/graphene/object_types.py:466 engine/core/models.py:1358 msgid "billing address" msgstr "Faktureringsadresse" -#: engine/core/graphene/object_types.py:465 +#: engine/core/graphene/object_types.py:470 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1386,53 +1422,57 @@ msgstr "" "Leveringsadresse for denne bestillingen, la den stå tom hvis den er den " "samme som faktureringsadressen eller hvis den ikke er relevant" -#: engine/core/graphene/object_types.py:468 +#: engine/core/graphene/object_types.py:473 msgid "total price of this order" msgstr "Totalpris for denne bestillingen" -#: engine/core/graphene/object_types.py:469 +#: engine/core/graphene/object_types.py:474 msgid "total quantity of products in order" msgstr "Totalt antall produkter i bestillingen" -#: engine/core/graphene/object_types.py:470 +#: engine/core/graphene/object_types.py:475 msgid "are all products in the order digital" msgstr "Er alle produktene i bestillingen digitale" -#: engine/core/graphene/object_types.py:474 +#: engine/core/graphene/object_types.py:479 msgid "transactions for this order" msgstr "Transaksjoner for denne bestillingen" -#: engine/core/graphene/object_types.py:494 engine/core/models.py:1325 +#: engine/core/graphene/object_types.py:499 engine/core/models.py:1422 msgid "orders" msgstr "Bestillinger" -#: engine/core/graphene/object_types.py:515 +#: engine/core/graphene/object_types.py:520 msgid "image url" msgstr "Bilde-URL" -#: engine/core/graphene/object_types.py:522 +#: engine/core/graphene/object_types.py:527 msgid "product's images" msgstr "Bilder av produktet" -#: engine/core/graphene/object_types.py:529 engine/core/models.py:439 -#: engine/core/models.py:596 +#: engine/core/graphene/object_types.py:534 engine/core/models.py:488 +#: engine/core/models.py:661 msgid "category" msgstr "Kategori" -#: engine/core/graphene/object_types.py:531 engine/core/models.py:1857 +#: engine/core/graphene/object_types.py:536 engine/core/models.py:1960 msgid "feedbacks" msgstr "Tilbakemeldinger" -#: engine/core/graphene/object_types.py:532 engine/core/models.py:510 -#: engine/core/models.py:605 +#: engine/core/graphene/object_types.py:537 engine/core/models.py:563 +#: engine/core/models.py:670 msgid "brand" msgstr "Merkevare" -#: engine/core/graphene/object_types.py:534 engine/core/models.py:103 +#: engine/core/graphene/object_types.py:538 +msgid "video url" +msgstr "Video-URL" + +#: engine/core/graphene/object_types.py:540 engine/core/models.py:122 msgid "attribute groups" msgstr "Attributtgrupper" -#: engine/core/graphene/object_types.py:536 +#: engine/core/graphene/object_types.py:542 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1440,7 +1480,7 @@ msgstr "Attributtgrupper" msgid "price" msgstr "Pris" -#: engine/core/graphene/object_types.py:537 +#: engine/core/graphene/object_types.py:543 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1448,39 +1488,39 @@ msgstr "Pris" msgid "quantity" msgstr "Antall" -#: engine/core/graphene/object_types.py:538 +#: engine/core/graphene/object_types.py:544 msgid "number of feedbacks" msgstr "Antall tilbakemeldinger" -#: engine/core/graphene/object_types.py:539 +#: engine/core/graphene/object_types.py:545 msgid "only available for personal orders" msgstr "Produkter kun tilgjengelig for personlige bestillinger" -#: engine/core/graphene/object_types.py:544 +#: engine/core/graphene/object_types.py:550 msgid "discount price" msgstr "Rabattert pris" -#: engine/core/graphene/object_types.py:568 engine/core/models.py:682 +#: engine/core/graphene/object_types.py:575 engine/core/models.py:755 msgid "products" msgstr "Produkter" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:691 msgid "promocodes" msgstr "Promokoder" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:706 msgid "products on sale" msgstr "Produkter på salg" -#: engine/core/graphene/object_types.py:701 engine/core/models.py:935 +#: engine/core/graphene/object_types.py:720 engine/core/models.py:1028 msgid "promotions" msgstr "Kampanjer" -#: engine/core/graphene/object_types.py:705 engine/core/models.py:182 +#: engine/core/graphene/object_types.py:727 engine/core/models.py:201 msgid "vendor" msgstr "Leverandør" -#: engine/core/graphene/object_types.py:706 engine/core/models.py:681 +#: engine/core/graphene/object_types.py:728 engine/core/models.py:754 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1488,102 +1528,102 @@ msgstr "Leverandør" msgid "product" msgstr "Produkt" -#: engine/core/graphene/object_types.py:718 engine/core/models.py:958 +#: engine/core/graphene/object_types.py:740 engine/core/models.py:1051 msgid "wishlisted products" msgstr "Produkter på ønskelisten" -#: engine/core/graphene/object_types.py:725 engine/core/models.py:975 +#: engine/core/graphene/object_types.py:747 engine/core/models.py:1068 msgid "wishlists" msgstr "Ønskelister" -#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:752 msgid "tagged products" msgstr "Merkede produkter" -#: engine/core/graphene/object_types.py:738 engine/core/models.py:219 -#: engine/core/models.py:611 +#: engine/core/graphene/object_types.py:760 engine/core/models.py:238 +#: engine/core/models.py:676 msgid "product tags" msgstr "Produktmerker" -#: engine/core/graphene/object_types.py:743 +#: engine/core/graphene/object_types.py:765 msgid "tagged categories" msgstr "Merkede kategorier" -#: engine/core/graphene/object_types.py:751 +#: engine/core/graphene/object_types.py:773 msgid "categories tags" msgstr "Kategorier' tagger" -#: engine/core/graphene/object_types.py:755 +#: engine/core/graphene/object_types.py:777 msgid "project name" msgstr "Prosjektets navn" -#: engine/core/graphene/object_types.py:756 +#: engine/core/graphene/object_types.py:778 msgid "company name" msgstr "Selskapets navn" -#: engine/core/graphene/object_types.py:757 +#: engine/core/graphene/object_types.py:779 msgid "company address" msgstr "Selskapets adresse" -#: engine/core/graphene/object_types.py:758 +#: engine/core/graphene/object_types.py:780 msgid "company phone number" msgstr "Telefonnummer til selskapet" -#: engine/core/graphene/object_types.py:761 +#: engine/core/graphene/object_types.py:783 msgid "email from, sometimes it must be used instead of host user value" msgstr "\"e-post fra\", noen ganger må den brukes i stedet for vertsbrukerverdien" -#: engine/core/graphene/object_types.py:764 +#: engine/core/graphene/object_types.py:786 msgid "email host user" msgstr "E-post vert bruker" -#: engine/core/graphene/object_types.py:765 +#: engine/core/graphene/object_types.py:787 msgid "maximum amount for payment" msgstr "Maksimalt beløp for betaling" -#: engine/core/graphene/object_types.py:766 +#: engine/core/graphene/object_types.py:788 msgid "minimum amount for payment" msgstr "Minimumsbeløp for betaling" -#: engine/core/graphene/object_types.py:767 +#: engine/core/graphene/object_types.py:789 msgid "analytics data" msgstr "Analysedata" -#: engine/core/graphene/object_types.py:768 +#: engine/core/graphene/object_types.py:790 msgid "advertisement data" msgstr "Annonsedata" -#: engine/core/graphene/object_types.py:771 +#: engine/core/graphene/object_types.py:793 msgid "company configuration" msgstr "Konfigurasjon" -#: engine/core/graphene/object_types.py:775 +#: engine/core/graphene/object_types.py:797 msgid "language code" msgstr "Språkkode" -#: engine/core/graphene/object_types.py:776 +#: engine/core/graphene/object_types.py:798 msgid "language name" msgstr "Navn på språk" -#: engine/core/graphene/object_types.py:777 +#: engine/core/graphene/object_types.py:799 msgid "language flag, if exists :)" msgstr "Språkflagg, hvis det finnes :)" -#: engine/core/graphene/object_types.py:780 +#: engine/core/graphene/object_types.py:802 msgid "supported languages" msgstr "Få en liste over språk som støttes" -#: engine/core/graphene/object_types.py:812 -#: engine/core/graphene/object_types.py:815 -#: engine/core/graphene/object_types.py:818 +#: engine/core/graphene/object_types.py:834 +#: engine/core/graphene/object_types.py:837 +#: engine/core/graphene/object_types.py:840 msgid "products search results" msgstr "Søkeresultater for produkter" -#: engine/core/graphene/object_types.py:820 +#: engine/core/graphene/object_types.py:842 msgid "posts search results" msgstr "Søkeresultater for produkter" -#: engine/core/models.py:75 +#: engine/core/models.py:91 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 " @@ -1596,23 +1636,23 @@ msgstr "" "struktur. Dette kan være nyttig for å kategorisere og administrere " "attributter på en mer effektiv måte i et komplekst system." -#: engine/core/models.py:88 +#: engine/core/models.py:107 msgid "parent of this group" msgstr "Foreldre til denne gruppen" -#: engine/core/models.py:89 +#: engine/core/models.py:108 msgid "parent attribute group" msgstr "Overordnet attributtgruppe" -#: engine/core/models.py:93 engine/core/models.py:94 +#: engine/core/models.py:112 engine/core/models.py:113 msgid "attribute group's name" msgstr "Attributtgruppens navn" -#: engine/core/models.py:102 engine/core/models.py:763 +#: engine/core/models.py:121 engine/core/models.py:849 msgid "attribute group" msgstr "Attributtgruppe" -#: engine/core/models.py:108 +#: engine/core/models.py:127 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1631,49 +1671,49 @@ msgstr "" "som gjør den egnet for bruk i systemer som samhandler med " "tredjepartsleverandører." -#: engine/core/models.py:122 +#: engine/core/models.py:141 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Lagrer legitimasjon og endepunkter som kreves for leverandørens API-" "kommunikasjon" -#: engine/core/models.py:124 +#: engine/core/models.py:143 msgid "authentication info" msgstr "Autentiseringsinformasjon" -#: engine/core/models.py:129 +#: engine/core/models.py:148 msgid "define the markup for products retrieved from this vendor" msgstr "Definer påslag for produkter som hentes fra denne leverandøren" -#: engine/core/models.py:130 +#: engine/core/models.py:149 msgid "vendor markup percentage" msgstr "Leverandørens påslagsprosent" -#: engine/core/models.py:134 +#: engine/core/models.py:153 msgid "name of this vendor" msgstr "Navn på denne leverandøren" -#: engine/core/models.py:135 +#: engine/core/models.py:154 msgid "vendor name" msgstr "Leverandørens navn" -#: engine/core/models.py:150 +#: engine/core/models.py:169 msgid "response file" msgstr "svarfil" -#: engine/core/models.py:151 +#: engine/core/models.py:170 msgid "vendor's last processing response" msgstr "leverandørens siste behandlingssvar" -#: engine/core/models.py:157 +#: engine/core/models.py:176 msgid "vendor's integration file path" msgstr "Leverandørens integrasjonsfilbane" -#: engine/core/models.py:158 +#: engine/core/models.py:177 msgid "integration path" msgstr "Integreringsvei" -#: engine/core/models.py:192 +#: engine/core/models.py:211 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1688,27 +1728,27 @@ msgstr "" "operasjoner som eksporteres gjennom mixins, og gir metadatatilpasning for " "administrative formål." -#: engine/core/models.py:204 engine/core/models.py:235 +#: engine/core/models.py:223 engine/core/models.py:254 msgid "internal tag identifier for the product tag" msgstr "Intern tagg-identifikator for produkttaggen" -#: engine/core/models.py:205 engine/core/models.py:236 +#: engine/core/models.py:224 engine/core/models.py:255 msgid "tag name" msgstr "Tagg navn" -#: engine/core/models.py:209 engine/core/models.py:240 +#: engine/core/models.py:228 engine/core/models.py:259 msgid "user-friendly name for the product tag" msgstr "Brukervennlig navn for produkttaggen" -#: engine/core/models.py:210 engine/core/models.py:241 +#: engine/core/models.py:229 engine/core/models.py:260 msgid "tag display name" msgstr "Visningsnavn for taggen" -#: engine/core/models.py:218 +#: engine/core/models.py:237 msgid "product tag" msgstr "Produktmerke" -#: engine/core/models.py:224 +#: engine/core/models.py:243 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 " @@ -1719,15 +1759,15 @@ msgstr "" "produkter. Den inneholder attributter for en intern tagg-identifikator og et" " brukervennlig visningsnavn." -#: engine/core/models.py:249 +#: engine/core/models.py:268 msgid "category tag" msgstr "kategorimerke" -#: engine/core/models.py:250 engine/core/models.py:322 +#: engine/core/models.py:269 engine/core/models.py:345 msgid "category tags" msgstr "kategorikoder" -#: engine/core/models.py:255 +#: engine/core/models.py:274 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1749,51 +1789,51 @@ msgstr "" "spesifisere navn, beskrivelse og hierarki for kategoriene, samt tildele " "attributter som bilder, tagger eller prioritet." -#: engine/core/models.py:269 +#: engine/core/models.py:292 msgid "upload an image representing this category" msgstr "Last opp et bilde som representerer denne kategorien" -#: engine/core/models.py:272 +#: engine/core/models.py:295 msgid "category image" msgstr "Kategori bilde" -#: engine/core/models.py:277 +#: engine/core/models.py:300 msgid "define a markup percentage for products in this category" msgstr "Definer en påslagsprosent for produkter i denne kategorien" -#: engine/core/models.py:286 +#: engine/core/models.py:309 msgid "parent of this category to form a hierarchical structure" msgstr "Overordnet til denne kategorien for å danne en hierarkisk struktur" -#: engine/core/models.py:287 +#: engine/core/models.py:310 msgid "parent category" msgstr "Overordnet kategori" -#: engine/core/models.py:292 +#: engine/core/models.py:315 msgid "category name" msgstr "Navn på kategori" -#: engine/core/models.py:293 +#: engine/core/models.py:316 msgid "provide a name for this category" msgstr "Oppgi et navn for denne kategorien" -#: engine/core/models.py:300 +#: engine/core/models.py:323 msgid "add a detailed description for this category" msgstr "Legg til en detaljert beskrivelse for denne kategorien" -#: engine/core/models.py:301 +#: engine/core/models.py:324 msgid "category description" msgstr "Beskrivelse av kategori" -#: engine/core/models.py:321 +#: engine/core/models.py:344 msgid "tags that help describe or group this category" msgstr "tagger som bidrar til å beskrive eller gruppere denne kategorien" -#: engine/core/models.py:328 engine/core/models.py:503 +#: engine/core/models.py:351 engine/core/models.py:552 msgid "priority" msgstr "Prioritet" -#: engine/core/models.py:446 +#: engine/core/models.py:495 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1807,47 +1847,43 @@ msgstr "" "prioriteringsrekkefølge. Den gjør det mulig å organisere og representere " "merkerelaterte data i applikasjonen." -#: engine/core/models.py:456 +#: engine/core/models.py:505 msgid "name of this brand" msgstr "Navnet på dette merket" -#: engine/core/models.py:457 +#: engine/core/models.py:506 msgid "brand name" msgstr "Merkenavn" -#: engine/core/models.py:464 +#: engine/core/models.py:513 msgid "upload a logo representing this brand" msgstr "Last opp en logo som representerer dette varemerket" -#: engine/core/models.py:466 +#: engine/core/models.py:515 msgid "brand small image" msgstr "Merkevare lite image" -#: engine/core/models.py:472 +#: engine/core/models.py:521 msgid "upload a big logo representing this brand" msgstr "Last opp en stor logo som representerer dette varemerket" -#: engine/core/models.py:474 +#: engine/core/models.py:523 msgid "brand big image" msgstr "Merkevare med stort image" -#: engine/core/models.py:479 +#: engine/core/models.py:528 msgid "add a detailed description of the brand" msgstr "Legg til en detaljert beskrivelse av merket" -#: engine/core/models.py:480 +#: engine/core/models.py:529 msgid "brand description" msgstr "Varemerkebeskrivelse" -#: engine/core/models.py:485 -msgid "optional categories that this brand is associated with" -msgstr "Valgfrie kategorier som dette merket er assosiert med" +#: engine/core/models.py:534 engine/core/models.py:535 +msgid "DEPRECATED" +msgstr "UTGÅTT" -#: engine/core/models.py:486 -msgid "associated categories" -msgstr "Kategorier" - -#: engine/core/models.py:516 +#: engine/core/models.py:569 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1863,72 +1899,72 @@ msgstr "" "lagerstyringssystemet for å muliggjøre sporing og evaluering av produkter " "som er tilgjengelige fra ulike leverandører." -#: engine/core/models.py:528 +#: engine/core/models.py:581 msgid "the vendor supplying this product stock" msgstr "Leverandøren som leverer dette produktet lagerfører" -#: engine/core/models.py:529 +#: engine/core/models.py:582 msgid "associated vendor" msgstr "Tilknyttet leverandør" -#: engine/core/models.py:533 +#: engine/core/models.py:588 msgid "final price to the customer after markups" msgstr "Sluttpris til kunden etter påslag" -#: engine/core/models.py:534 +#: engine/core/models.py:589 msgid "selling price" msgstr "Salgspris" -#: engine/core/models.py:539 +#: engine/core/models.py:594 msgid "the product associated with this stock entry" msgstr "Produktet som er knyttet til denne lagerposten" -#: engine/core/models.py:540 engine/core/models.py:828 -#: engine/core/models.py:874 engine/core/models.py:1912 +#: engine/core/models.py:595 engine/core/models.py:914 +#: engine/core/models.py:962 engine/core/models.py:2020 msgid "associated product" msgstr "Tilhørende produkt" -#: engine/core/models.py:547 +#: engine/core/models.py:604 msgid "the price paid to the vendor for this product" msgstr "Prisen som er betalt til leverandøren for dette produktet" -#: engine/core/models.py:548 +#: engine/core/models.py:605 msgid "vendor purchase price" msgstr "Leverandørens innkjøpspris" -#: engine/core/models.py:552 +#: engine/core/models.py:609 msgid "available quantity of the product in stock" msgstr "Tilgjengelig mengde av produktet på lager" -#: engine/core/models.py:553 +#: engine/core/models.py:610 msgid "quantity in stock" msgstr "Antall på lager" -#: engine/core/models.py:557 +#: engine/core/models.py:614 msgid "vendor-assigned SKU for identifying the product" msgstr "Leverandørens SKU for identifisering av produktet" -#: engine/core/models.py:558 +#: engine/core/models.py:615 msgid "vendor sku" msgstr "Leverandørens SKU" -#: engine/core/models.py:564 +#: engine/core/models.py:621 msgid "digital file associated with this stock if applicable" msgstr "Digital fil knyttet til denne aksjen, hvis aktuelt" -#: engine/core/models.py:565 +#: engine/core/models.py:622 msgid "digital file" msgstr "Digital fil" -#: engine/core/models.py:569 +#: engine/core/models.py:626 msgid "system attributes" msgstr "Systemattributter" -#: engine/core/models.py:577 +#: engine/core/models.py:636 msgid "stock entries" msgstr "Lageroppføringer" -#: engine/core/models.py:582 +#: engine/core/models.py:641 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1949,71 +1985,79 @@ msgstr "" "ytelsen. Den brukes til å definere og manipulere produktdata og tilhørende " "informasjon i en applikasjon." -#: engine/core/models.py:595 +#: engine/core/models.py:660 msgid "category this product belongs to" msgstr "Kategori dette produktet tilhører" -#: engine/core/models.py:604 +#: engine/core/models.py:669 msgid "optionally associate this product with a brand" msgstr "Du kan eventuelt knytte dette produktet til et varemerke" -#: engine/core/models.py:610 +#: engine/core/models.py:675 msgid "tags that help describe or group this product" msgstr "Tagger som bidrar til å beskrive eller gruppere dette produktet" -#: engine/core/models.py:615 +#: engine/core/models.py:680 msgid "indicates whether this product is digitally delivered" msgstr "Angir om dette produktet leveres digitalt" -#: engine/core/models.py:616 +#: engine/core/models.py:681 msgid "is product digital" msgstr "Er produktet digitalt" -#: engine/core/models.py:623 +#: engine/core/models.py:688 msgid "indicates whether this product should be updated from periodic task" msgstr "angir om dette produktet skal oppdateres fra periodisk oppgave" -#: engine/core/models.py:625 +#: engine/core/models.py:690 msgid "is product updatable" msgstr "er produktet oppdaterbart" -#: engine/core/models.py:631 +#: engine/core/models.py:696 msgid "provide a clear identifying name for the product" msgstr "Gi produktet et tydelig navn som identifiserer det" -#: engine/core/models.py:632 +#: engine/core/models.py:697 msgid "product name" msgstr "Produktnavn" -#: engine/core/models.py:638 engine/core/models.py:923 +#: engine/core/models.py:703 engine/core/models.py:1012 msgid "add a detailed description of the product" msgstr "Legg til en detaljert beskrivelse av produktet" -#: engine/core/models.py:639 +#: engine/core/models.py:704 msgid "product description" msgstr "Produktbeskrivelse" -#: engine/core/models.py:646 +#: engine/core/models.py:710 +msgid "optional video file for this product" +msgstr "Valgfri videofil for dette produktet" + +#: engine/core/models.py:711 +msgid "product video" +msgstr "Produktvideo" + +#: engine/core/models.py:719 msgid "part number for this product" msgstr "Delenummer for dette produktet" -#: engine/core/models.py:647 +#: engine/core/models.py:720 msgid "part number" msgstr "Delenummer" -#: engine/core/models.py:666 +#: engine/core/models.py:739 msgid "stock keeping unit for this product" msgstr "Lagerholdsenhet for dette produktet" -#: engine/core/models.py:673 +#: engine/core/models.py:746 msgid "whether to export this product to marketplaces" msgstr "Om dette produktet skal eksporteres til markedsplasser" -#: engine/core/models.py:674 +#: engine/core/models.py:747 msgid "Export to Marketplaces" msgstr "Eksporter til markedsplasser" -#: engine/core/models.py:749 +#: engine/core/models.py:835 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 " @@ -2029,66 +2073,66 @@ msgstr "" "float, boolsk, matrise og objekt. Dette gir mulighet for dynamisk og " "fleksibel datastrukturering." -#: engine/core/models.py:762 +#: engine/core/models.py:848 msgid "group of this attribute" msgstr "Gruppe av dette attributtet" -#: engine/core/models.py:768 +#: engine/core/models.py:854 msgid "string" msgstr "Streng" -#: engine/core/models.py:769 +#: engine/core/models.py:855 msgid "integer" msgstr "Heltall" -#: engine/core/models.py:770 +#: engine/core/models.py:856 msgid "float" msgstr "Flyter" -#: engine/core/models.py:771 +#: engine/core/models.py:857 msgid "boolean" msgstr "Boolsk" -#: engine/core/models.py:772 +#: engine/core/models.py:858 msgid "array" msgstr "Array" -#: engine/core/models.py:773 +#: engine/core/models.py:859 msgid "object" msgstr "Objekt" -#: engine/core/models.py:775 +#: engine/core/models.py:861 msgid "type of the attribute's value" msgstr "Type av attributtets verdi" -#: engine/core/models.py:776 +#: engine/core/models.py:862 msgid "value type" msgstr "Verditype" -#: engine/core/models.py:781 +#: engine/core/models.py:867 msgid "name of this attribute" msgstr "Navn på dette attributtet" -#: engine/core/models.py:782 +#: engine/core/models.py:868 msgid "attribute's name" msgstr "Attributtets navn" -#: engine/core/models.py:787 +#: engine/core/models.py:873 msgid "is filterable" msgstr "er filtrerbar" -#: engine/core/models.py:789 +#: engine/core/models.py:875 msgid "designates whether this attribute can be used for filtering or not" msgstr "" "Hvilke attributter og verdier som kan brukes til å filtrere denne " "kategorien." -#: engine/core/models.py:802 engine/core/models.py:820 +#: engine/core/models.py:888 engine/core/models.py:906 #: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Attributt" -#: engine/core/models.py:808 +#: engine/core/models.py:894 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" @@ -2098,19 +2142,19 @@ msgstr "" "produkt. Den knytter \"attributtet\" til en unik \"verdi\", noe som gir " "bedre organisering og dynamisk representasjon av produktegenskaper." -#: engine/core/models.py:819 +#: engine/core/models.py:905 msgid "attribute of this value" msgstr "Attributt for denne verdien" -#: engine/core/models.py:827 +#: engine/core/models.py:913 msgid "the specific product associated with this attribute's value" msgstr "Det spesifikke produktet som er knyttet til dette attributtets verdi" -#: engine/core/models.py:833 +#: engine/core/models.py:919 msgid "the specific value for this attribute" msgstr "Den spesifikke verdien for dette attributtet" -#: engine/core/models.py:846 +#: engine/core/models.py:934 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -2124,39 +2168,39 @@ msgstr "" "produkter og bestemme visningsrekkefølgen. Den inneholder også en " "tilgjengelighetsfunksjon med alternativ tekst for bildene." -#: engine/core/models.py:857 +#: engine/core/models.py:945 msgid "provide alternative text for the image for accessibility" msgstr "Gi alternativ tekst til bildet for tilgjengelighet" -#: engine/core/models.py:858 +#: engine/core/models.py:946 msgid "image alt text" msgstr "Alt-tekst til bilder" -#: engine/core/models.py:861 +#: engine/core/models.py:949 msgid "upload the image file for this product" msgstr "Last opp bildefilen for dette produktet" -#: engine/core/models.py:862 engine/core/models.py:893 +#: engine/core/models.py:950 engine/core/models.py:982 msgid "product image" msgstr "Produktbilde" -#: engine/core/models.py:867 +#: engine/core/models.py:955 msgid "determines the order in which images are displayed" msgstr "Bestemmer rekkefølgen bildene skal vises i" -#: engine/core/models.py:868 +#: engine/core/models.py:956 msgid "display priority" msgstr "Prioritet på skjermen" -#: engine/core/models.py:873 +#: engine/core/models.py:961 msgid "the product that this image represents" msgstr "Produktet som dette bildet representerer" -#: engine/core/models.py:894 +#: engine/core/models.py:983 msgid "product images" msgstr "Produktbilder" -#: engine/core/models.py:899 +#: engine/core/models.py:988 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -2172,39 +2216,39 @@ msgstr "" "produktene. Den integreres med produktkatalogen for å finne de berørte " "varene i kampanjen." -#: engine/core/models.py:911 +#: engine/core/models.py:1000 msgid "percentage discount for the selected products" msgstr "Prosentvis rabatt for de valgte produktene" -#: engine/core/models.py:912 +#: engine/core/models.py:1001 msgid "discount percentage" msgstr "Rabattprosent" -#: engine/core/models.py:917 +#: engine/core/models.py:1006 msgid "provide a unique name for this promotion" msgstr "Oppgi et unikt navn for denne kampanjen" -#: engine/core/models.py:918 +#: engine/core/models.py:1007 msgid "promotion name" msgstr "Navn på kampanjen" -#: engine/core/models.py:924 +#: engine/core/models.py:1013 msgid "promotion description" msgstr "Beskrivelse av kampanjen" -#: engine/core/models.py:929 +#: engine/core/models.py:1018 msgid "select which products are included in this promotion" msgstr "Velg hvilke produkter som er inkludert i denne kampanjen" -#: engine/core/models.py:930 +#: engine/core/models.py:1019 msgid "included products" msgstr "Inkluderte produkter" -#: engine/core/models.py:934 +#: engine/core/models.py:1027 msgid "promotion" msgstr "Markedsføring" -#: engine/core/models.py:945 +#: engine/core/models.py:1038 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2216,23 +2260,23 @@ msgstr "" "produkter, og støtter operasjoner som å legge til og fjerne produkter, samt " "operasjoner for å legge til og fjerne flere produkter samtidig." -#: engine/core/models.py:957 +#: engine/core/models.py:1050 msgid "products that the user has marked as wanted" msgstr "Produkter som brukeren har merket som ønsket" -#: engine/core/models.py:965 +#: engine/core/models.py:1058 msgid "user who owns this wishlist" msgstr "Bruker som eier denne ønskelisten" -#: engine/core/models.py:966 +#: engine/core/models.py:1059 msgid "wishlist owner" msgstr "Ønskelistens eier" -#: engine/core/models.py:974 +#: engine/core/models.py:1067 msgid "wishlist" msgstr "Ønskeliste" -#: engine/core/models.py:1016 +#: engine/core/models.py:1109 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2248,19 +2292,19 @@ msgstr "" "utvider funksjonaliteten fra spesifikke mixins og tilbyr flere tilpassede " "funksjoner." -#: engine/core/models.py:1031 +#: engine/core/models.py:1124 msgid "documentary" msgstr "Dokumentarfilm" -#: engine/core/models.py:1032 +#: engine/core/models.py:1125 msgid "documentaries" msgstr "Dokumentarfilmer" -#: engine/core/models.py:1042 +#: engine/core/models.py:1135 msgid "unresolved" msgstr "Uavklart" -#: engine/core/models.py:1047 +#: engine/core/models.py:1140 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2281,59 +2325,59 @@ msgstr "" " å knytte en adresse til en bruker, noe som gjør det enklere å tilpasse " "datahåndteringen." -#: engine/core/models.py:1062 +#: engine/core/models.py:1155 msgid "address line for the customer" msgstr "Adresselinje for kunden" -#: engine/core/models.py:1063 +#: engine/core/models.py:1156 msgid "address line" msgstr "Adresselinje" -#: engine/core/models.py:1065 +#: engine/core/models.py:1158 msgid "street" msgstr "Gate" -#: engine/core/models.py:1066 +#: engine/core/models.py:1159 msgid "district" msgstr "Distrikt" -#: engine/core/models.py:1067 +#: engine/core/models.py:1160 msgid "city" msgstr "By" -#: engine/core/models.py:1068 +#: engine/core/models.py:1161 msgid "region" msgstr "Region" -#: engine/core/models.py:1069 +#: engine/core/models.py:1162 msgid "postal code" msgstr "Postnummer" -#: engine/core/models.py:1070 +#: engine/core/models.py:1163 msgid "country" msgstr "Land" -#: engine/core/models.py:1077 +#: engine/core/models.py:1170 msgid "geolocation point: (longitude, latitude)" msgstr "Geolokaliseringspunkt(lengdegrad, breddegrad)" -#: engine/core/models.py:1083 +#: engine/core/models.py:1176 msgid "full JSON response from geocoder for this address" msgstr "Fullstendig JSON-svar fra geokoderen for denne adressen" -#: engine/core/models.py:1089 +#: engine/core/models.py:1182 msgid "stored JSON response from the geocoding service" msgstr "Lagret JSON-svar fra geokodingstjenesten" -#: engine/core/models.py:1099 +#: engine/core/models.py:1192 msgid "address" msgstr "Adresse" -#: engine/core/models.py:1100 +#: engine/core/models.py:1193 msgid "addresses" msgstr "Adresser" -#: engine/core/models.py:1112 +#: engine/core/models.py:1205 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2350,73 +2394,73 @@ msgstr "" "kampanjekoden på en bestilling, samtidig som den sikrer at begrensningene er" " oppfylt." -#: engine/core/models.py:1126 +#: engine/core/models.py:1219 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" -#: engine/core/models.py:1127 +#: engine/core/models.py:1220 msgid "promo code identifier" msgstr "Kampanjekode-identifikator" -#: engine/core/models.py:1134 +#: engine/core/models.py:1227 msgid "fixed discount amount applied if percent is not used" msgstr "Fast rabattbeløp som brukes hvis prosent ikke brukes" -#: engine/core/models.py:1135 +#: engine/core/models.py:1228 msgid "fixed discount amount" msgstr "Fast rabattbeløp" -#: engine/core/models.py:1141 +#: engine/core/models.py:1234 msgid "percentage discount applied if fixed amount is not used" msgstr "Prosentvis rabatt hvis fast beløp ikke brukes" -#: engine/core/models.py:1142 +#: engine/core/models.py:1235 msgid "percentage discount" msgstr "Prosentvis rabatt" -#: engine/core/models.py:1147 +#: engine/core/models.py:1240 msgid "timestamp when the promocode expires" msgstr "Tidsstempel for når kampanjekoden utløper" -#: engine/core/models.py:1148 +#: engine/core/models.py:1241 msgid "end validity time" msgstr "Slutt gyldighetstid" -#: engine/core/models.py:1153 +#: engine/core/models.py:1246 msgid "timestamp from which this promocode is valid" msgstr "Tidsstempel som denne kampanjekoden er gyldig fra" -#: engine/core/models.py:1154 +#: engine/core/models.py:1247 msgid "start validity time" msgstr "Start gyldighetstid" -#: engine/core/models.py:1159 +#: engine/core/models.py:1252 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å" -#: engine/core/models.py:1160 +#: engine/core/models.py:1253 msgid "usage timestamp" msgstr "Tidsstempel for bruk" -#: engine/core/models.py:1165 +#: engine/core/models.py:1258 msgid "user assigned to this promocode if applicable" msgstr "Bruker som er tilordnet denne kampanjekoden, hvis aktuelt" -#: engine/core/models.py:1166 +#: engine/core/models.py:1259 msgid "assigned user" msgstr "Tilordnet bruker" -#: engine/core/models.py:1173 +#: engine/core/models.py:1266 msgid "promo code" msgstr "Kampanjekode" -#: engine/core/models.py:1174 +#: engine/core/models.py:1267 msgid "promo codes" msgstr "Kampanjekoder" -#: engine/core/models.py:1190 +#: engine/core/models.py:1283 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2424,16 +2468,16 @@ msgstr "" "Bare én type rabatt skal defineres (beløp eller prosent), men ikke begge " "eller ingen av delene." -#: engine/core/models.py:1212 +#: engine/core/models.py:1305 msgid "promocode already used" msgstr "Promokoden har allerede blitt brukt" -#: engine/core/models.py:1234 +#: engine/core/models.py:1327 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Ugyldig rabattype for kampanjekode {self.uuid}!" -#: engine/core/models.py:1243 +#: engine/core/models.py:1336 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 " @@ -2450,141 +2494,141 @@ msgstr "" "kan oppdateres. På samme måte støtter funksjonaliteten håndtering av " "produktene i bestillingens livssyklus." -#: engine/core/models.py:1260 +#: engine/core/models.py:1357 msgid "the billing address used for this order" msgstr "Faktureringsadressen som brukes for denne bestillingen" -#: engine/core/models.py:1268 +#: engine/core/models.py:1365 msgid "optional promo code applied to this order" msgstr "Valgfri kampanjekode brukt på denne bestillingen" -#: engine/core/models.py:1269 +#: engine/core/models.py:1366 msgid "applied promo code" msgstr "Anvendt kampanjekode" -#: engine/core/models.py:1277 +#: engine/core/models.py:1374 msgid "the shipping address used for this order" msgstr "Leveringsadressen som brukes for denne bestillingen" -#: engine/core/models.py:1278 +#: engine/core/models.py:1375 msgid "shipping address" msgstr "Leveringsadresse" -#: engine/core/models.py:1284 +#: engine/core/models.py:1381 msgid "current status of the order in its lifecycle" msgstr "Ordrens nåværende status i livssyklusen" -#: engine/core/models.py:1285 +#: engine/core/models.py:1382 msgid "order status" msgstr "Order status" -#: engine/core/models.py:1290 engine/core/models.py:1889 +#: engine/core/models.py:1387 engine/core/models.py:1997 msgid "json structure of notifications to display to users" msgstr "" "JSON-struktur for varsler som skal vises til brukere, i admin-grensesnittet " "brukes tabellvisningen" -#: engine/core/models.py:1296 +#: engine/core/models.py:1393 msgid "json representation of order attributes for this order" msgstr "JSON-representasjon av ordreattributter for denne ordren" -#: engine/core/models.py:1302 +#: engine/core/models.py:1399 msgid "the user who placed the order" msgstr "Brukeren som har lagt inn bestillingen" -#: engine/core/models.py:1303 +#: engine/core/models.py:1400 msgid "user" msgstr "Bruker" -#: engine/core/models.py:1309 +#: engine/core/models.py:1406 msgid "the timestamp when the order was finalized" msgstr "Tidsstempel for når bestillingen ble fullført" -#: engine/core/models.py:1310 +#: engine/core/models.py:1407 msgid "buy time" msgstr "Kjøp tid" -#: engine/core/models.py:1317 +#: engine/core/models.py:1414 msgid "a human-readable identifier for the order" msgstr "En menneskelig lesbar identifikator for bestillingen" -#: engine/core/models.py:1318 +#: engine/core/models.py:1415 msgid "human readable id" msgstr "ID som kan leses av mennesker" -#: engine/core/models.py:1324 +#: engine/core/models.py:1421 msgid "order" msgstr "Bestilling" -#: engine/core/models.py:1371 +#: engine/core/models.py:1468 msgid "a user must have only one pending order at a time" msgstr "En bruker kan bare ha én ventende ordre om gangen!" -#: engine/core/models.py:1404 +#: engine/core/models.py:1504 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" -#: engine/core/models.py:1410 +#: engine/core/models.py:1510 msgid "you cannot add inactive products to order" msgstr "Du kan ikke legge til inaktive produkter i bestillingen" -#: engine/core/models.py:1432 +#: engine/core/models.py:1533 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" -#: engine/core/models.py:1456 engine/core/models.py:1485 -#: engine/core/models.py:1495 +#: engine/core/models.py:1557 engine/core/models.py:1586 +#: engine/core/models.py:1596 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" -#: engine/core/models.py:1480 +#: engine/core/models.py:1581 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} finnes ikke med spørring <{query}>!" -#: engine/core/models.py:1519 +#: engine/core/models.py:1620 msgid "promocode does not exist" msgstr "Promokoden finnes ikke" -#: engine/core/models.py:1534 +#: engine/core/models.py:1635 msgid "you can only buy physical products with shipping address specified" msgstr "Du kan bare kjøpe fysiske produkter med oppgitt leveringsadresse!" -#: engine/core/models.py:1555 +#: engine/core/models.py:1656 msgid "address does not exist" msgstr "Adressen eksisterer ikke" -#: engine/core/models.py:1577 engine/core/models.py:1656 +#: engine/core/models.py:1678 engine/core/models.py:1757 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." -#: engine/core/models.py:1583 engine/core/models.py:1649 +#: engine/core/models.py:1684 engine/core/models.py:1750 msgid "invalid force value" msgstr "Ugyldig kraftverdi" -#: engine/core/models.py:1589 engine/core/models.py:1660 +#: engine/core/models.py:1690 engine/core/models.py:1761 msgid "you cannot purchase an empty order!" msgstr "Du kan ikke kjøpe en tom ordre!" -#: engine/core/models.py:1610 +#: engine/core/models.py:1711 msgid "you cannot buy an order without a user" msgstr "Du kan ikke kjøpe en ordre uten en bruker!" -#: engine/core/models.py:1624 +#: engine/core/models.py:1725 msgid "a user without a balance cannot buy with balance" msgstr "En bruker uten saldo kan ikke kjøpe med saldo!" -#: engine/core/models.py:1630 +#: engine/core/models.py:1731 msgid "insufficient funds to complete the order" msgstr "Utilstrekkelige midler til å fullføre bestillingen" -#: engine/core/models.py:1671 +#: engine/core/models.py:1772 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2592,14 +2636,14 @@ msgstr "" "du kan ikke kjøpe uten registrering, vennligst oppgi følgende informasjon: " "kundenavn, kundens e-postadresse, kundens telefonnummer" -#: engine/core/models.py:1682 +#: engine/core/models.py:1783 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "Ugyldig betalingsmetode: {payment_method} fra {available_payment_methods}!" -#: engine/core/models.py:1813 +#: engine/core/models.py:1916 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2614,34 +2658,34 @@ msgstr "" "og en brukertildelt vurdering. Klassen bruker databasefelt for å modellere " "og administrere tilbakemeldingsdata på en effektiv måte." -#: engine/core/models.py:1825 +#: engine/core/models.py:1928 msgid "user-provided comments about their experience with the product" msgstr "Brukerkommentarer om deres erfaringer med produktet" -#: engine/core/models.py:1826 +#: engine/core/models.py:1929 msgid "feedback comments" msgstr "Tilbakemeldinger og kommentarer" -#: engine/core/models.py:1834 +#: engine/core/models.py:1937 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" -#: engine/core/models.py:1836 +#: engine/core/models.py:1939 msgid "related order product" msgstr "Relatert bestillingsprodukt" -#: engine/core/models.py:1841 +#: engine/core/models.py:1944 msgid "user-assigned rating for the product" msgstr "Brukertildelt vurdering for produktet" -#: engine/core/models.py:1842 +#: engine/core/models.py:1945 msgid "product rating" msgstr "Produktvurdering" -#: engine/core/models.py:1862 +#: engine/core/models.py:1965 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2664,109 +2708,109 @@ msgstr "" "Modellen integreres med Order- og Product-modellene og lagrer en referanse " "til disse." -#: engine/core/models.py:1877 +#: engine/core/models.py:1985 msgid "the price paid by the customer for this product at purchase time" msgstr "Prisen kunden betalte for dette produktet på kjøpstidspunktet" -#: engine/core/models.py:1878 +#: engine/core/models.py:1986 msgid "purchase price at order time" msgstr "Innkjøpspris på bestillingstidspunktet" -#: engine/core/models.py:1883 +#: engine/core/models.py:1991 msgid "internal comments for admins about this ordered product" msgstr "Interne kommentarer for administratorer om dette bestilte produktet" -#: engine/core/models.py:1884 +#: engine/core/models.py:1992 msgid "internal comments" msgstr "Interne kommentarer" -#: engine/core/models.py:1890 +#: engine/core/models.py:1998 msgid "user notifications" msgstr "Brukervarsler" -#: engine/core/models.py:1895 +#: engine/core/models.py:2003 msgid "json representation of this item's attributes" msgstr "JSON-representasjon av dette elementets attributter" -#: engine/core/models.py:1896 +#: engine/core/models.py:2004 msgid "ordered product attributes" msgstr "Bestilte produktegenskaper" -#: engine/core/models.py:1901 +#: engine/core/models.py:2009 msgid "reference to the parent order that contains this product" msgstr "" "Referanse til den overordnede bestillingen som inneholder dette produktet" -#: engine/core/models.py:1902 +#: engine/core/models.py:2010 msgid "parent order" msgstr "Overordnet ordre" -#: engine/core/models.py:1911 +#: engine/core/models.py:2019 msgid "the specific product associated with this order line" msgstr "Det spesifikke produktet som er knyttet til denne ordrelinjen" -#: engine/core/models.py:1918 +#: engine/core/models.py:2026 msgid "quantity of this specific product in the order" msgstr "Antall av dette spesifikke produktet i bestillingen" -#: engine/core/models.py:1919 +#: engine/core/models.py:2027 msgid "product quantity" msgstr "Produktmengde" -#: engine/core/models.py:1926 +#: engine/core/models.py:2034 msgid "current status of this product in the order" msgstr "Nåværende status for dette produktet i bestillingen" -#: engine/core/models.py:1927 +#: engine/core/models.py:2035 msgid "product line status" msgstr "Status for produktlinjen" -#: engine/core/models.py:1998 +#: engine/core/models.py:2106 msgid "order product must have an order" msgstr "Orderproduct må ha en tilknyttet ordre!" -#: engine/core/models.py:2000 +#: engine/core/models.py:2108 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Feil handling angitt for tilbakemelding: {action}!" -#: engine/core/models.py:2017 +#: engine/core/models.py:2125 msgid "you cannot feedback an order which is not received" msgstr "du kan ikke gi tilbakemelding på en bestilling som ikke er mottatt" -#: engine/core/models.py:2026 +#: engine/core/models.py:2132 engine/core/models.py:2227 msgid "name" msgstr "Navn" -#: engine/core/models.py:2028 +#: engine/core/models.py:2134 msgid "URL of the integration" msgstr "URL-adressen til integrasjonen" -#: engine/core/models.py:2031 +#: engine/core/models.py:2137 msgid "authentication credentials" msgstr "Legitimasjon for autentisering" -#: engine/core/models.py:2054 +#: engine/core/models.py:2160 msgid "you can only have one default CRM provider" msgstr "Du kan bare ha én standard CRM-leverandør" -#: engine/core/models.py:2064 +#: engine/core/models.py:2170 msgid "CRM" msgstr "CRM" -#: engine/core/models.py:2065 +#: engine/core/models.py:2171 msgid "CRMs" msgstr "CRM" -#: engine/core/models.py:2081 +#: engine/core/models.py:2187 msgid "order CRM link" msgstr "Ordre CRM-kobling" -#: engine/core/models.py:2082 +#: engine/core/models.py:2188 msgid "orders CRM links" msgstr "CRM-koblinger for bestillinger" -#: engine/core/models.py:2087 +#: engine/core/models.py:2193 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2783,14 +2827,38 @@ msgstr "" "for å generere en URL for nedlasting av ressursen når den tilknyttede " "bestillingen har status som fullført." -#: engine/core/models.py:2103 +#: engine/core/models.py:2209 msgid "download" msgstr "Last ned" -#: engine/core/models.py:2104 +#: engine/core/models.py:2210 msgid "downloads" msgstr "Nedlastinger" +#: engine/core/models.py:2228 +msgid "descriptive name for the image" +msgstr "Beskrivende navn for bildet" + +#: engine/core/models.py:2233 +msgid "image file pasted in the markdown editor" +msgstr "Bildefil limt inn i markdown-redigeringsprogrammet" + +#: engine/core/models.py:2239 +msgid "alt text" +msgstr "Annen tekst" + +#: engine/core/models.py:2240 +msgid "alternative text for accessibility" +msgstr "Alternativ tekst for tilgjengelighet" + +#: engine/core/models.py:2244 +msgid "pasted image" +msgstr "Limt inn bilde" + +#: engine/core/models.py:2245 +msgid "pasted images" +msgstr "Limte bilder" + #: engine/core/serializers/utility.py:91 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." @@ -2799,6 +2867,16 @@ msgstr "" "tilbakemelding." #: engine/core/sitemaps.py:25 +#: engine/core/templates/admin_doc/bookmarklets.html:8 +#: engine/core/templates/admin_doc/index.html:8 +#: engine/core/templates/admin_doc/missing_docutils.html:8 +#: engine/core/templates/admin_doc/model_detail.html:8 +#: engine/core/templates/admin_doc/model_index.html:8 +#: engine/core/templates/admin_doc/template_detail.html:8 +#: engine/core/templates/admin_doc/template_filter_index.html:8 +#: engine/core/templates/admin_doc/template_tag_index.html:8 +#: engine/core/templates/admin_doc/view_detail.html:8 +#: engine/core/templates/admin_doc/view_index.html:8 msgid "Home" msgstr "Hjem" @@ -2851,45 +2929,34 @@ msgstr "Brutto" msgid "Dashboard" msgstr "Dashbord" -#: engine/core/templates/admin/dashboard/_income_overview.html:7 +#: engine/core/templates/admin/dashboard/_income_overview.html:6 msgid "Income overview" msgstr "Oversikt over inntekter" -#: engine/core/templates/admin/dashboard/_income_overview.html:31 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Net" +#: engine/core/templates/admin/dashboard/_income_overview.html:16 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" msgstr "Netto inntekter" -#: engine/core/templates/admin/dashboard/_income_overview.html:37 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Taxes" -msgstr "Skatter og avgifter" - -#: engine/core/templates/admin/dashboard/_income_overview.html:43 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 +#: engine/core/templates/admin/dashboard/_income_overview.html:21 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 msgid "Returns" msgstr "Retur" -#: engine/core/templates/admin/dashboard/_income_overview.html:48 -msgid "Gross (pie total)" -msgstr "Brutto inntekter" - -#: engine/core/templates/admin/dashboard/_income_overview.html:72 -msgid "No data" -msgstr "Ingen dato" - +#: engine/core/templates/admin/dashboard/_income_overview.html:26 #: engine/core/templates/admin/dashboard/_kpis.html:6 msgid "GMV" msgstr "GMV" +#: engine/core/templates/admin/dashboard/_income_overview.html:50 +msgid "No data" +msgstr "Ingen dato" + #: engine/core/templates/admin/dashboard/_kpis.html:34 msgid "AOV" msgstr "AOV" -#: engine/core/templates/admin/dashboard/_kpis.html:48 -msgid "Net revenue" -msgstr "Netto inntekter" - #: engine/core/templates/admin/dashboard/_kpis.html:62 msgid "Refund rate" msgstr "Refusjonsgrad" @@ -2902,7 +2969,7 @@ msgstr "Returneres" msgid "Low stock" msgstr "Lav lagerbeholdning" -#: engine/core/templates/admin/dashboard/_low_stock.html:29 +#: engine/core/templates/admin/dashboard/_low_stock.html:33 msgid "No low stock items." msgstr "Ingen varer med lav lagerbeholdning." @@ -2959,6 +3026,300 @@ msgstr "Ingen kategorisalg de siste 30 dagene." msgid "Django site admin" msgstr "Django site admin" +#: engine/core/templates/admin_doc/bookmarklets.html:4 +#: engine/core/templates/admin_doc/bookmarklets.html:17 +msgid "Documentation bookmarklets" +msgstr "Dokumentasjonsbokmerker" + +#: engine/core/templates/admin_doc/bookmarklets.html:10 +#: engine/core/templates/admin_doc/index.html:4 +#: engine/core/templates/admin_doc/index.html:10 +#: engine/core/templates/admin_doc/index.html:15 +#: engine/core/templates/admin_doc/missing_docutils.html:10 +#: engine/core/templates/admin_doc/missing_docutils.html:19 +#: engine/core/templates/admin_doc/model_detail.html:10 +#: engine/core/templates/admin_doc/model_index.html:10 +#: engine/core/templates/admin_doc/template_detail.html:10 +#: engine/core/templates/admin_doc/template_filter_index.html:10 +#: engine/core/templates/admin_doc/template_tag_index.html:10 +#: engine/core/templates/admin_doc/view_detail.html:10 +#: engine/core/templates/admin_doc/view_index.html:10 +msgid "Documentation" +msgstr "Dokumentasjon" + +#: engine/core/templates/admin_doc/bookmarklets.html:12 +#: engine/core/templates/admin_doc/index.html:53 +msgid "Bookmarklets" +msgstr "Bokmerker" + +#: engine/core/templates/admin_doc/bookmarklets.html:19 +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"For å installere bokmerker, dra lenken til bokmerkeverktøylinjen, eller " +"høyreklikk på lenken og legg den til i bokmerkene dine. Nå kan du velge " +"bokmerket fra hvilken som helst side på nettstedet." + +#: engine/core/templates/admin_doc/bookmarklets.html:29 +msgid "Documentation for this page" +msgstr "Dokumentasjon for denne siden" + +#: engine/core/templates/admin_doc/bookmarklets.html:31 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Tar deg fra hvilken som helst side til dokumentasjonen for visningen som " +"genererer den siden." + +#: engine/core/templates/admin_doc/index.html:21 +#: engine/core/templates/admin_doc/model_detail.html:12 +#: engine/core/templates/admin_doc/model_index.html:4 +#: engine/core/templates/admin_doc/model_index.html:12 +msgid "Models" +msgstr "Modeller" + +#: engine/core/templates/admin_doc/index.html:23 +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Modeller er beskrivelser av alle objektene i systemet og deres tilknyttede " +"felt. Hver modell har en liste over felt som kan nås som malvariabler." + +#: engine/core/templates/admin_doc/index.html:29 +#: engine/core/templates/admin_doc/view_detail.html:12 +#: engine/core/templates/admin_doc/view_index.html:4 +#: engine/core/templates/admin_doc/view_index.html:12 +msgid "Views" +msgstr "Visninger" + +#: engine/core/templates/admin_doc/index.html:31 +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Hver side på det offentlige nettstedet genereres av en visning. Visningen " +"definerer hvilken mal som brukes til å generere siden og hvilke objekter som" +" er tilgjengelige for den malen." + +#: engine/core/templates/admin_doc/index.html:39 +msgid "List of all the template tags and their functions." +msgstr "Liste over alle mal-tagger og deres funksjoner." + +#: engine/core/templates/admin_doc/index.html:45 +#: engine/core/templates/admin_doc/template_filter_index.html:12 +msgid "Filters" +msgstr "Filtre" + +#: engine/core/templates/admin_doc/index.html:47 +msgid "" +"Filters are actions which can be applied to variables in a template to alter" +" the output." +msgstr "" +"Filtre er handlinger som kan brukes på variabler i en mal for å endre " +"utdataene." + +#: engine/core/templates/admin_doc/index.html:55 +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Verktøy for nettleseren din for rask tilgang til administratorfunksjoner." + +#: engine/core/templates/admin_doc/missing_docutils.html:4 +msgid "Please install docutils" +msgstr "Vennligst installer docutils" + +#: engine/core/templates/admin_doc/missing_docutils.html:20 +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"Administrasjonsdokumentasjonssystemet krever Pythons docutils-bibliotek." + +#: engine/core/templates/admin_doc/missing_docutils.html:21 +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Be administratorene dine om å installere docutils." + +#: engine/core/templates/admin_doc/model_detail.html:4 +#, python-format +msgid "Model: %(name)s" +msgstr "Modell: %(name)s" + +#: engine/core/templates/admin_doc/model_detail.html:29 +msgid "Fields" +msgstr "Felt" + +#: engine/core/templates/admin_doc/model_detail.html:36 +msgid "Field" +msgstr "Felt" + +#: engine/core/templates/admin_doc/model_detail.html:37 +msgid "Type" +msgstr "Type" + +#: engine/core/templates/admin_doc/model_detail.html:38 +#: engine/core/templates/admin_doc/model_detail.html:70 +msgid "Description" +msgstr "Beskrivelse" + +#: engine/core/templates/admin_doc/model_detail.html:61 +msgid "Methods with arguments" +msgstr "Metoder med argumenter" + +#: engine/core/templates/admin_doc/model_detail.html:68 +msgid "Method" +msgstr "Metode" + +#: engine/core/templates/admin_doc/model_detail.html:69 +msgid "Arguments" +msgstr "Argumenter" + +#: engine/core/templates/admin_doc/model_detail.html:89 +msgid "Back to Model documentation" +msgstr "Tilbake til modelldokumentasjon" + +#: engine/core/templates/admin_doc/model_index.html:17 +msgid "Model documentation" +msgstr "Modell dokumentasjon" + +#: engine/core/templates/admin_doc/model_index.html:44 +msgid "Model groups" +msgstr "Modellgrupper" + +#: engine/core/templates/admin_doc/template_detail.html:4 +#, python-format +msgid "Template: %(name)s" +msgstr "Mal: %(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:12 +msgid "Templates" +msgstr "Maler" + +#: engine/core/templates/admin_doc/template_detail.html:17 +#, python-format +msgid "" +"Template: %(name)s" +msgstr "" +"Mal: %(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:21 +#, python-format +msgid "Search path for template %(name)s:" +msgstr "Søkesti for mal %(name)s:" + +#: engine/core/templates/admin_doc/template_detail.html:29 +msgid "(does not exist)" +msgstr "(eksisterer ikke)" + +#: engine/core/templates/admin_doc/template_detail.html:40 +msgid "Back to Documentation" +msgstr "Tilbake til dokumentasjon" + +#: engine/core/templates/admin_doc/template_filter_index.html:4 +msgid "Template filters" +msgstr "Malfiltre" + +#: engine/core/templates/admin_doc/template_filter_index.html:17 +msgid "Template filter documentation" +msgstr "Dokumentasjon for malfilter" + +#: engine/core/templates/admin_doc/template_filter_index.html:26 +#: engine/core/templates/admin_doc/template_filter_index.html:52 +msgid "Built-in filters" +msgstr "Innebygde filtre" + +#: engine/core/templates/admin_doc/template_filter_index.html:29 +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before using" +" the filter." +msgstr "" +"For å bruke disse filtrene, legg inn %(code)s i malen din før du " +"bruker filteret." + +#: engine/core/templates/admin_doc/template_tag_index.html:4 +msgid "Template tags" +msgstr "Malsmerker" + +#: engine/core/templates/admin_doc/template_tag_index.html:17 +msgid "Template tag documentation" +msgstr "Dokumentasjon for mal-tagger" + +#: engine/core/templates/admin_doc/template_tag_index.html:26 +#: engine/core/templates/admin_doc/template_tag_index.html:52 +msgid "Built-in tags" +msgstr "Innebygde tagger" + +#: engine/core/templates/admin_doc/template_tag_index.html:29 +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using the tag." +msgstr "" +"For å bruke disse taggene, legg inn %(code)s i malen din før du " +"bruker taggen." + +#: engine/core/templates/admin_doc/view_detail.html:4 +#, python-format +msgid "View: %(name)s" +msgstr "Vis: %(name)s" + +#: engine/core/templates/admin_doc/view_detail.html:28 +msgid "Context:" +msgstr "Kontekst:" + +#: engine/core/templates/admin_doc/view_detail.html:33 +msgid "Templates:" +msgstr "Maler:" + +#: engine/core/templates/admin_doc/view_detail.html:41 +msgid "Back to View documentation" +msgstr "Tilbake til Vis dokumentasjon" + +#: engine/core/templates/admin_doc/view_index.html:17 +msgid "View documentation" +msgstr "Vis dokumentasjon" + +#: engine/core/templates/admin_doc/view_index.html:28 +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Visninger etter navnerom %(name)s" + +#: engine/core/templates/admin_doc/view_index.html:30 +msgid "Views by empty namespace" +msgstr "Visninger etter tomt navnerom" + +#: engine/core/templates/admin_doc/view_index.html:40 +#, python-format +msgid "" +"View function: %(full_name)s. Name: %(url_name)s." +msgstr "" +"Vis funksjon: %(full_name)s. Navn: %(url_name)s." + +#: engine/core/templates/admin_doc/view_index.html:54 +msgid "Jump to namespace" +msgstr "Gå til navnerom" + +#: engine/core/templates/admin_doc/view_index.html:59 +msgid "Empty namespace" +msgstr "Tomt navnerom" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -3059,7 +3420,7 @@ msgstr "" " informasjon" #: engine/core/templates/digital_order_delivered_email.html:137 -#: engine/core/templates/json_table_widget.html:6 +#: engine/core/templates/json_table_widget.html:26 msgid "value" msgstr "Verdi" @@ -3079,11 +3440,23 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "Med vennlig hilsen,
teamet %(project_name)s" -#: engine/core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:7 +msgid "Key" +msgstr "Nøkkel" + +#: engine/core/templates/json_table_widget.html:8 +msgid "Value" +msgstr "Verdi" + +#: engine/core/templates/json_table_widget.html:19 msgid "key" msgstr "Nøkkel" -#: engine/core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:32 +msgid "Delete row" +msgstr "Slett rad" + +#: engine/core/templates/json_table_widget.html:44 msgid "Add Row" msgstr "Legg til rad" @@ -3170,13 +3543,22 @@ msgstr "Du har ikke tillatelse til å utføre denne handlingen." msgid "NOMINATIM_URL must be configured." msgstr "Parameteren NOMINATIM_URL må være konfigurert!" -#: engine/core/validators.py:23 +#: engine/core/validators.py:18 +msgid "could not determine file type" +msgstr "Kunne ikke bestemme filtype" + +#: engine/core/validators.py:24 +#, python-brace-format +msgid "unsupported video format. supported formats: {supported}" +msgstr "Ikke-støttet videoformat. Støttede formater: {supported}" + +#: engine/core/validators.py:45 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "Bildedimensjonene bør ikke overstige b{max_width} x h{max_height} piksler!" -#: engine/core/views.py:104 +#: engine/core/views.py:108 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3184,7 +3566,7 @@ msgstr "" "Håndterer forespørselen om områdekartindeksen og returnerer et XML-svar. Den" " sørger for at svaret inneholder riktig innholdstypeoverskrift for XML." -#: engine/core/views.py:119 +#: engine/core/views.py:123 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3194,17 +3576,17 @@ msgstr "" "behandler forespørselen, henter det aktuelle detaljsvaret for områdekartet " "og angir overskriften Content-Type for XML." -#: engine/core/views.py:155 +#: engine/core/views.py:174 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Returnerer en liste over språk som støttes, med tilhørende informasjon." -#: engine/core/views.py:182 +#: engine/core/views.py:201 msgid "Returns the parameters of the website as a JSON object." msgstr "Returnerer nettstedets parametere som et JSON-objekt." -#: engine/core/views.py:198 +#: engine/core/views.py:217 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3212,11 +3594,11 @@ msgstr "" "Håndterer cache-operasjoner som lesing og innstilling av cachedata med en " "spesifisert nøkkel og tidsavbrudd." -#: engine/core/views.py:220 +#: engine/core/views.py:239 msgid "Handles `contact us` form submissions." msgstr "Håndterer innsendinger av `kontakt oss`-skjemaer." -#: engine/core/views.py:236 +#: engine/core/views.py:255 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3224,15 +3606,15 @@ msgstr "" "Håndterer forespørsler om behandling og validering av URL-er fra innkommende" " POST-forespørsler." -#: engine/core/views.py:273 +#: engine/core/views.py:292 msgid "Handles global search queries." msgstr "Håndterer globale søk." -#: engine/core/views.py:289 +#: engine/core/views.py:308 msgid "Handles the logic of buying as a business without registration." msgstr "Håndterer logikken med å kjøpe som en bedrift uten registrering." -#: engine/core/views.py:337 +#: engine/core/views.py:356 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3240,31 +3622,31 @@ msgstr "" "Håndterer nedlastingen av en digital ressurs som er knyttet til en bestilling.\n" "Denne funksjonen forsøker å levere den digitale ressursfilen som ligger i lagringskatalogen til prosjektet. Hvis filen ikke blir funnet, vises en HTTP 404-feil for å indikere at ressursen ikke er tilgjengelig." -#: engine/core/views.py:348 +#: engine/core/views.py:367 msgid "order_product_uuid is required" msgstr "order_product_uuid er påkrevd" -#: engine/core/views.py:355 +#: engine/core/views.py:374 msgid "order product does not exist" msgstr "ordreproduktet eksisterer ikke" -#: engine/core/views.py:358 +#: engine/core/views.py:377 msgid "you can only download the digital asset once" msgstr "Du kan bare laste ned den digitale ressursen én gang" -#: engine/core/views.py:362 +#: engine/core/views.py:381 msgid "the order must be paid before downloading the digital asset" msgstr "bestillingen må betales før nedlasting av den digitale ressursen" -#: engine/core/views.py:369 +#: engine/core/views.py:388 msgid "the order product does not have a product" msgstr "Ordreproduktet har ikke et produkt" -#: engine/core/views.py:412 +#: engine/core/views.py:431 msgid "favicon not found" msgstr "favicon ble ikke funnet" -#: engine/core/views.py:418 +#: engine/core/views.py:437 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3272,7 +3654,7 @@ msgstr "" "Håndterer forespørsler om faviconet til et nettsted.\n" "Denne funksjonen forsøker å vise favicon-filen som ligger i den statiske katalogen i prosjektet. Hvis favicon-filen ikke blir funnet, vises en HTTP 404-feil for å indikere at ressursen ikke er tilgjengelig." -#: engine/core/views.py:432 +#: engine/core/views.py:451 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3283,16 +3665,20 @@ msgstr "" "administrasjonsgrensesnittet. Den bruker Djangos `redirect`-funksjon for å " "håndtere HTTP-omdirigeringen." -#: engine/core/views.py:445 +#: engine/core/views.py:464 msgid "Returns current version of the Schon. " msgstr "Returnerer gjeldende versjon av Schon." -#: engine/core/views.py:674 engine/core/views.py:689 +#: engine/core/views.py:475 +msgid "no image file provided" +msgstr "Ingen bildefil oppgitt" + +#: engine/core/views.py:710 engine/core/views.py:725 #, python-format msgid "Revenue & Orders (last %(days)d)" msgstr "Inntekter og bestillinger (siste %(days)d)" -#: engine/core/views.py:870 +#: engine/core/views.py:911 msgid "Returns custom variables for Dashboard. " msgstr "Returnerer egendefinerte variabler for Dashboard." @@ -3380,7 +3766,7 @@ msgstr "" "Brand-objekter. Den bruker Djangos ViewSet-rammeverk for å forenkle " "implementeringen av API-sluttpunkter for Brand-objekter." -#: engine/core/viewsets.py:458 +#: engine/core/viewsets.py:460 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3398,7 +3784,15 @@ msgstr "" "for å hente produktdetaljer, tildele tillatelser og få tilgang til relaterte" " tilbakemeldinger om et produkt." -#: engine/core/viewsets.py:605 +#: engine/core/viewsets.py:541 +msgid "identificator_type and identificators are required" +msgstr "identificator_type og identificators er obligatoriske" + +#: engine/core/viewsets.py:554 +msgid "identificator_type must be one of: uuid, slug, sku" +msgstr "identificator_type må være ett av følgende: uuid, slug, sku" + +#: engine/core/viewsets.py:635 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3413,7 +3807,7 @@ msgstr "" " gi strømlinjeformet tilgang til Vendor-relaterte ressurser gjennom Django " "REST-rammeverket." -#: engine/core/viewsets.py:625 +#: engine/core/viewsets.py:655 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3430,7 +3824,7 @@ msgstr "" "tilbakemeldingsobjekter. Den utvider basisklassen `schonViewSet` og bruker " "Djangos filtreringssystem for å spørre etter data." -#: engine/core/viewsets.py:652 +#: engine/core/viewsets.py:682 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3449,7 +3843,7 @@ msgstr "" "serialisatorer basert på den spesifikke handlingen som utføres, og håndhever" " tillatelser i samsvar med dette under samhandling med ordredata." -#: engine/core/viewsets.py:914 +#: engine/core/viewsets.py:944 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3464,11 +3858,11 @@ msgstr "" " tillegg inneholder det en detaljert handling for håndtering av " "tilbakemeldinger på OrderProduct-instanser" -#: engine/core/viewsets.py:974 +#: engine/core/viewsets.py:1004 msgid "Manages operations related to Product images in the application. " msgstr "Administrerer operasjoner knyttet til produktbilder i applikasjonen." -#: engine/core/viewsets.py:988 +#: engine/core/viewsets.py:1018 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3476,15 +3870,15 @@ msgstr "" "Administrerer henting og håndtering av PromoCode-instanser gjennom ulike " "API-handlinger." -#: engine/core/viewsets.py:1019 +#: engine/core/viewsets.py:1049 msgid "Represents a view set for managing promotions. " msgstr "Representerer et visningssett for håndtering av kampanjer." -#: engine/core/viewsets.py:1032 +#: engine/core/viewsets.py:1062 msgid "Handles operations related to Stock data in the system." msgstr "Håndterer operasjoner knyttet til lagerdata i systemet." -#: engine/core/viewsets.py:1046 +#: engine/core/viewsets.py:1076 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3502,7 +3896,7 @@ msgstr "" "integrert for å sikre at brukere bare kan administrere sine egne ønskelister" " med mindre eksplisitte tillatelser er gitt." -#: engine/core/viewsets.py:1183 +#: engine/core/viewsets.py:1213 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3516,12 +3910,12 @@ msgstr "" "inkluderer spesialisert atferd for ulike HTTP-metoder, overstyring av " "serializer og håndtering av tillatelser basert på forespørselskonteksten." -#: engine/core/viewsets.py:1254 +#: engine/core/viewsets.py:1275 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Feil i geokoding: {e}" -#: engine/core/viewsets.py:1262 +#: engine/core/viewsets.py:1283 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/pl_PL/LC_MESSAGES/django.mo b/engine/core/locale/pl_PL/LC_MESSAGES/django.mo index 15855bcd..0c3fcd7c 100644 Binary files a/engine/core/locale/pl_PL/LC_MESSAGES/django.mo and b/engine/core/locale/pl_PL/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/pl_PL/LC_MESSAGES/django.po b/engine/core/locale/pl_PL/LC_MESSAGES/django.po index 92d2fb4b..4260f8e1 100644 --- a/engine/core/locale/pl_PL/LC_MESSAGES/django.po +++ b/engine/core/locale/pl_PL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -51,113 +51,133 @@ msgstr "Zmodyfikowany" msgid "when the object was last modified" msgstr "Kiedy obiekt był ostatnio edytowany" -#: engine/core/admin.py:94 +#: engine/core/admin.py:98 msgid "translations" msgstr "Tłumaczenia" -#: engine/core/admin.py:102 +#: engine/core/admin.py:106 msgid "general" msgstr "Ogólne" -#: engine/core/admin.py:106 +#: engine/core/admin.py:110 msgid "relations" msgstr "Relacje" -#: engine/core/admin.py:111 +#: engine/core/admin.py:115 msgid "additional info" msgstr "dodatkowe informacje" -#: engine/core/admin.py:133 +#: engine/core/admin.py:137 msgid "metadata" msgstr "Metadane" -#: engine/core/admin.py:141 +#: engine/core/admin.py:145 msgid "timestamps" msgstr "Znaczniki czasu" -#: engine/core/admin.py:158 +#: engine/core/admin.py:162 #, python-format msgid "Activate selected %(verbose_name_plural)s" msgstr "Aktywuj wybrane %(verbose_name_plural)s" -#: engine/core/admin.py:166 +#: engine/core/admin.py:170 msgid "selected items have been activated." msgstr "Wybrane elementy zostały aktywowane!" -#: engine/core/admin.py:174 +#: engine/core/admin.py:178 #, python-format msgid "Deactivate selected %(verbose_name_plural)s" msgstr "Wyłącz wybrane %(verbose_name_plural)s" -#: engine/core/admin.py:184 +#: engine/core/admin.py:188 msgid "selected items have been deactivated." msgstr "Wybrane elementy zostały dezaktywowane!" -#: engine/core/admin.py:196 engine/core/graphene/object_types.py:653 -#: engine/core/graphene/object_types.py:660 engine/core/models.py:832 -#: engine/core/models.py:840 +#: engine/core/admin.py:200 engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:673 engine/core/models.py:918 +#: engine/core/models.py:928 msgid "attribute value" msgstr "Wartość atrybutu" -#: engine/core/admin.py:197 engine/core/graphene/object_types.py:77 -#: engine/core/models.py:841 +#: engine/core/admin.py:201 engine/core/graphene/object_types.py:81 +#: engine/core/models.py:929 msgid "attribute values" msgstr "Wartości atrybutów" -#: engine/core/admin.py:208 +#: engine/core/admin.py:212 engine/core/models.py:2232 msgid "image" msgstr "Obraz" -#: engine/core/admin.py:209 engine/core/graphene/object_types.py:530 +#: engine/core/admin.py:213 engine/core/graphene/object_types.py:535 msgid "images" msgstr "Obrazy" -#: engine/core/admin.py:220 engine/core/models.py:576 +#: engine/core/admin.py:224 engine/core/models.py:635 msgid "stock" msgstr "Stan magazynowy" -#: engine/core/admin.py:221 engine/core/graphene/object_types.py:713 +#: engine/core/admin.py:225 engine/core/graphene/object_types.py:735 msgid "stocks" msgstr "Akcje" -#: engine/core/admin.py:232 engine/core/models.py:1938 +#: engine/core/admin.py:236 engine/core/models.py:2046 msgid "order product" msgstr "Zamów produkt" -#: engine/core/admin.py:233 engine/core/graphene/object_types.py:441 -#: engine/core/models.py:1939 +#: engine/core/admin.py:237 engine/core/graphene/object_types.py:446 +#: engine/core/models.py:2047 msgid "order products" msgstr "Zamawianie produktów" -#: engine/core/admin.py:251 engine/core/admin.py:252 +#: engine/core/admin.py:255 engine/core/admin.py:256 msgid "children" msgstr "Dzieci" -#: engine/core/admin.py:528 +#: engine/core/admin.py:545 +msgid "video preview" +msgstr "Podgląd wideo" + +#: engine/core/admin.py:551 msgid "has images" msgstr "Zawiera obrazy" -#: engine/core/admin.py:531 +#: engine/core/admin.py:554 #, python-format msgid "Export selected %(verbose_name_plural)s to marketplaces' feeds" msgstr "Eksportuj wybrane %(verbose_name_plural)s do kanałów rynkowych" -#: engine/core/admin.py:542 +#: engine/core/admin.py:565 #, python-format msgid "selected %(verbose_name_plural)s have been marked for export." msgstr "Wybrane %(verbose_name_plural)s zostały oznaczone do eksportu." -#: engine/core/admin.py:553 +#: engine/core/admin.py:576 #, python-format msgid "Ban selected %(verbose_name_plural)s from marketplaces' feeds" msgstr "Zablokuj wybrany %(verbose_name_plural)s z kanałów rynkowych" -#: engine/core/admin.py:564 +#: engine/core/admin.py:587 #, python-format msgid "selected %(verbose_name_plural)s have been banned from export." msgstr "Wybrane %(verbose_name_plural)s zostały objęte zakazem eksportu." -#: engine/core/admin.py:1116 +#: engine/core/admin.py:1030 +msgid "Preview" +msgstr "Podgląd" + +#: engine/core/admin.py:1031 +msgid "Metadata" +msgstr "Metadane" + +#: engine/core/admin.py:1034 +msgid "preview" +msgstr "Podgląd" + +#: engine/core/admin.py:1043 +msgid "image preview" +msgstr "Podgląd obrazu" + +#: engine/core/admin.py:1166 msgid "Config" msgstr "Konfiguracja" @@ -224,7 +244,7 @@ msgstr "" "negocjację treści. Język można wybrać za pomocą Accept-Language i parametru " "zapytania." -#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:36 +#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "Pamięć podręczna we/wy" @@ -248,7 +268,7 @@ msgstr "Uzyskaj dostępne parametry aplikacji" msgid "send a message to the support team" msgstr "Wyślij wiadomość do zespołu wsparcia" -#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:59 msgid "request a CORSed URL" msgstr "Żądanie adresu URL CORSed. Dozwolony jest tylko protokół https." @@ -391,11 +411,11 @@ msgstr "" "Przepisz niektóre pola istniejącej kategorii, zapisując elementy " "nieedytowalne" -#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757 -#: engine/core/docs/drf/viewsets.py:1046 -#: engine/core/graphene/object_types.py:119 -#: engine/core/graphene/object_types.py:239 -#: engine/core/graphene/object_types.py:540 +#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:781 +#: engine/core/docs/drf/viewsets.py:1070 +#: engine/core/graphene/object_types.py:123 +#: engine/core/graphene/object_types.py:247 +#: engine/core/graphene/object_types.py:546 msgid "SEO Meta snapshot" msgstr "SEO Meta snapshot" @@ -698,7 +718,7 @@ msgstr "Pobieranie pojedynczego produktu (widok szczegółowy)" #: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683 #: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725 -#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763 +#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:787 msgid "Product UUID or slug" msgstr "UUID produktu lub Slug" @@ -725,288 +745,302 @@ msgstr "Usuń produkt" msgid "lists all permitted feedbacks for a product" msgstr "wyświetla wszystkie dozwolone informacje zwrotne dotyczące produktu" -#: engine/core/docs/drf/viewsets.py:758 +#: engine/core/docs/drf/viewsets.py:757 +msgid "retrieve exact products by identifier" +msgstr "Pobierz dokładne produkty według identyfikatora" + +#: engine/core/docs/drf/viewsets.py:759 +msgid "" +"retrieve a list of products by identifier type (uuid, slug, or sku). Send a " +"POST request with `identificator_type` and `identificators` (list of " +"values)." +msgstr "" +"pobierz listę produktów według typu identyfikatora (uuid, slug lub sku). " +"Wyślij żądanie POST z `identificator_type` i `identificators` (listą " +"wartości)." + +#: engine/core/docs/drf/viewsets.py:782 msgid "returns a snapshot of the product's SEO meta data" msgstr "Zwraca migawkę metadanych SEO produktu." -#: engine/core/docs/drf/viewsets.py:779 +#: engine/core/docs/drf/viewsets.py:803 msgid "list all addresses" msgstr "Lista wszystkich adresów" -#: engine/core/docs/drf/viewsets.py:789 +#: engine/core/docs/drf/viewsets.py:813 msgid "retrieve a single address" msgstr "Pobieranie pojedynczego adresu" -#: engine/core/docs/drf/viewsets.py:799 +#: engine/core/docs/drf/viewsets.py:823 msgid "create a new address" msgstr "Utwórz nowy adres" -#: engine/core/docs/drf/viewsets.py:810 +#: engine/core/docs/drf/viewsets.py:834 msgid "delete an address" msgstr "Usuwanie adresu" -#: engine/core/docs/drf/viewsets.py:820 +#: engine/core/docs/drf/viewsets.py:844 msgid "update an entire address" msgstr "Aktualizacja całego adresu" -#: engine/core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:855 msgid "partially update an address" msgstr "Częściowa aktualizacja adresu" -#: engine/core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:866 msgid "autocomplete address suggestions" msgstr "Wprowadzanie adresu w trybie autouzupełniania" -#: engine/core/docs/drf/viewsets.py:848 +#: engine/core/docs/drf/viewsets.py:872 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" "Ciąg zapytania danych nieprzetworzonych, należy dołączyć dane z punktu " "końcowego geo-IP" -#: engine/core/docs/drf/viewsets.py:855 +#: engine/core/docs/drf/viewsets.py:879 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "ogranicza ilość wyników, 1 < limit < 10, domyślnie: 5" -#: engine/core/docs/drf/viewsets.py:871 +#: engine/core/docs/drf/viewsets.py:895 msgid "list all feedbacks (simple view)" msgstr "lista wszystkich opinii (widok prosty)" -#: engine/core/docs/drf/viewsets.py:881 +#: engine/core/docs/drf/viewsets.py:905 msgid "retrieve a single feedback (detailed view)" msgstr "pobieranie pojedynczej informacji zwrotnej (widok szczegółowy)" -#: engine/core/docs/drf/viewsets.py:888 +#: engine/core/docs/drf/viewsets.py:912 msgid "create a feedback" msgstr "utworzyć informację zwrotną" -#: engine/core/docs/drf/viewsets.py:895 +#: engine/core/docs/drf/viewsets.py:919 msgid "delete a feedback" msgstr "usuwanie opinii" -#: engine/core/docs/drf/viewsets.py:902 +#: engine/core/docs/drf/viewsets.py:926 msgid "rewrite an existing feedback saving non-editables" msgstr "" "przepisanie istniejącej informacji zwrotnej z zachowaniem elementów " "nieedytowalnych" -#: engine/core/docs/drf/viewsets.py:909 +#: engine/core/docs/drf/viewsets.py:933 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" "Przepisz niektóre pola istniejącej kategorii, zapisując elementy " "nieedytowalne" -#: engine/core/docs/drf/viewsets.py:919 +#: engine/core/docs/drf/viewsets.py:943 msgid "list all order–product relations (simple view)" msgstr "lista wszystkich relacji zamówienie-produkt (widok prosty)" -#: engine/core/docs/drf/viewsets.py:929 +#: engine/core/docs/drf/viewsets.py:953 msgid "retrieve a single order–product relation (detailed view)" msgstr "pobranie pojedynczej relacji zamówienie-produkt (widok szczegółowy)" -#: engine/core/docs/drf/viewsets.py:939 +#: engine/core/docs/drf/viewsets.py:963 msgid "create a new order–product relation" msgstr "utworzyć nową relację zamówienie-produkt" -#: engine/core/docs/drf/viewsets.py:949 +#: engine/core/docs/drf/viewsets.py:973 msgid "replace an existing order–product relation" msgstr "zastąpić istniejącą relację zamówienie-produkt" -#: engine/core/docs/drf/viewsets.py:959 +#: engine/core/docs/drf/viewsets.py:983 msgid "partially update an existing order–product relation" msgstr "częściowa aktualizacja istniejącej relacji zamówienie-produkt" -#: engine/core/docs/drf/viewsets.py:969 +#: engine/core/docs/drf/viewsets.py:993 msgid "delete an order–product relation" msgstr "usunąć relację zamówienie-produkt" -#: engine/core/docs/drf/viewsets.py:979 +#: engine/core/docs/drf/viewsets.py:1003 msgid "add or remove feedback on an order–product relation" msgstr "dodawanie lub usuwanie opinii na temat relacji zamówienie-produkt" -#: engine/core/docs/drf/viewsets.py:996 +#: engine/core/docs/drf/viewsets.py:1020 msgid "list all brands (simple view)" msgstr "Lista wszystkich marek (widok prosty)" -#: engine/core/docs/drf/viewsets.py:1003 +#: engine/core/docs/drf/viewsets.py:1027 msgid "retrieve a single brand (detailed view)" msgstr "Pobieranie pojedynczej marki (widok szczegółowy)" -#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051 +#: engine/core/docs/drf/viewsets.py:1032 engine/core/docs/drf/viewsets.py:1075 msgid "Brand UUID or slug" msgstr "Brand UUID lub slug" -#: engine/core/docs/drf/viewsets.py:1018 +#: engine/core/docs/drf/viewsets.py:1042 msgid "create a brand" msgstr "Stwórz markę" -#: engine/core/docs/drf/viewsets.py:1025 +#: engine/core/docs/drf/viewsets.py:1049 msgid "delete a brand" msgstr "Usuń markę" -#: engine/core/docs/drf/viewsets.py:1032 +#: engine/core/docs/drf/viewsets.py:1056 msgid "rewrite an existing brand saving non-editables" msgstr "Przepisz istniejącą markę, oszczędzając materiały nieedytowalne" -#: engine/core/docs/drf/viewsets.py:1039 +#: engine/core/docs/drf/viewsets.py:1063 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "" "Przepisz niektóre pola istniejącej kategorii, zapisując elementy " "nieedytowalne" -#: engine/core/docs/drf/viewsets.py:1064 +#: engine/core/docs/drf/viewsets.py:1088 msgid "list all vendors (simple view)" msgstr "Lista wszystkich sprzedawców (widok prosty)" -#: engine/core/docs/drf/viewsets.py:1074 +#: engine/core/docs/drf/viewsets.py:1098 msgid "retrieve a single vendor (detailed view)" msgstr "Pobieranie pojedynczego dostawcy (widok szczegółowy)" -#: engine/core/docs/drf/viewsets.py:1081 +#: engine/core/docs/drf/viewsets.py:1105 msgid "create a vendor" msgstr "Utwórz sprzedawcę" -#: engine/core/docs/drf/viewsets.py:1088 +#: engine/core/docs/drf/viewsets.py:1112 msgid "delete a vendor" msgstr "Usuń sprzedawcę" -#: engine/core/docs/drf/viewsets.py:1095 +#: engine/core/docs/drf/viewsets.py:1119 msgid "rewrite an existing vendor saving non-editables" msgstr "Przepisz istniejącego dostawcę, zapisując nieedytowalne elementy" -#: engine/core/docs/drf/viewsets.py:1102 +#: engine/core/docs/drf/viewsets.py:1126 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "" "Przepisz niektóre pola istniejącej kategorii, zapisując elementy " "nieedytowalne" -#: engine/core/docs/drf/viewsets.py:1112 +#: engine/core/docs/drf/viewsets.py:1136 msgid "list all product images (simple view)" msgstr "Lista wszystkich zdjęć produktów (widok prosty)" -#: engine/core/docs/drf/viewsets.py:1122 +#: engine/core/docs/drf/viewsets.py:1146 msgid "retrieve a single product image (detailed view)" msgstr "Pobieranie pojedynczego obrazu produktu (widok szczegółowy)" -#: engine/core/docs/drf/viewsets.py:1129 +#: engine/core/docs/drf/viewsets.py:1153 msgid "create a product image" msgstr "Utwórz obraz produktu" -#: engine/core/docs/drf/viewsets.py:1139 +#: engine/core/docs/drf/viewsets.py:1163 msgid "delete a product image" msgstr "Usuwanie obrazu produktu" -#: engine/core/docs/drf/viewsets.py:1146 +#: engine/core/docs/drf/viewsets.py:1170 msgid "rewrite an existing product image saving non-editables" msgstr "Przepisz istniejący obraz produktu, zapisując nieedytowalne elementy" -#: engine/core/docs/drf/viewsets.py:1154 +#: engine/core/docs/drf/viewsets.py:1178 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "" "Przepisz niektóre pola istniejącej kategorii, zapisując elementy " "nieedytowalne" -#: engine/core/docs/drf/viewsets.py:1165 +#: engine/core/docs/drf/viewsets.py:1189 msgid "list all promo codes (simple view)" msgstr "Lista wszystkich kodów promocyjnych (widok prosty)" -#: engine/core/docs/drf/viewsets.py:1175 +#: engine/core/docs/drf/viewsets.py:1199 msgid "retrieve a single promo code (detailed view)" msgstr "Pobieranie pojedynczego kodu promocyjnego (widok szczegółowy)" -#: engine/core/docs/drf/viewsets.py:1182 +#: engine/core/docs/drf/viewsets.py:1206 msgid "create a promo code" msgstr "Utwórz kod promocyjny" -#: engine/core/docs/drf/viewsets.py:1189 +#: engine/core/docs/drf/viewsets.py:1213 msgid "delete a promo code" msgstr "Usuń kod promocyjny" -#: engine/core/docs/drf/viewsets.py:1196 +#: engine/core/docs/drf/viewsets.py:1220 msgid "rewrite an existing promo code saving non-editables" msgstr "" "Przepisz istniejący kod promocyjny, oszczędzając nieedytowalne elementy" -#: engine/core/docs/drf/viewsets.py:1203 +#: engine/core/docs/drf/viewsets.py:1227 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "" "Przepisz niektóre pola istniejącej kategorii, zapisując elementy " "nieedytowalne" -#: engine/core/docs/drf/viewsets.py:1213 +#: engine/core/docs/drf/viewsets.py:1237 msgid "list all promotions (simple view)" msgstr "Lista wszystkich promocji (widok prosty)" -#: engine/core/docs/drf/viewsets.py:1223 +#: engine/core/docs/drf/viewsets.py:1247 msgid "retrieve a single promotion (detailed view)" msgstr "Pobieranie pojedynczej promocji (widok szczegółowy)" -#: engine/core/docs/drf/viewsets.py:1230 +#: engine/core/docs/drf/viewsets.py:1254 msgid "create a promotion" msgstr "Utwórz promocję" -#: engine/core/docs/drf/viewsets.py:1237 +#: engine/core/docs/drf/viewsets.py:1261 msgid "delete a promotion" msgstr "Usuń promocję" -#: engine/core/docs/drf/viewsets.py:1244 +#: engine/core/docs/drf/viewsets.py:1268 msgid "rewrite an existing promotion saving non-editables" msgstr "Przepisz istniejącą promocję, zapisując nieedytowalne elementy" -#: engine/core/docs/drf/viewsets.py:1251 +#: engine/core/docs/drf/viewsets.py:1275 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "" "Przepisz niektóre pola istniejącej kategorii, zapisując elementy " "nieedytowalne" -#: engine/core/docs/drf/viewsets.py:1261 +#: engine/core/docs/drf/viewsets.py:1285 msgid "list all stocks (simple view)" msgstr "Lista wszystkich akcji (widok prosty)" -#: engine/core/docs/drf/viewsets.py:1268 +#: engine/core/docs/drf/viewsets.py:1292 msgid "retrieve a single stock (detailed view)" msgstr "Pobieranie pojedynczego zasobu (widok szczegółowy)" -#: engine/core/docs/drf/viewsets.py:1275 +#: engine/core/docs/drf/viewsets.py:1299 msgid "create a stock record" msgstr "Tworzenie rekordu zapasów" -#: engine/core/docs/drf/viewsets.py:1282 +#: engine/core/docs/drf/viewsets.py:1306 msgid "delete a stock record" msgstr "Usuwanie rekordu zapasów" -#: engine/core/docs/drf/viewsets.py:1289 +#: engine/core/docs/drf/viewsets.py:1313 msgid "rewrite an existing stock record saving non-editables" msgstr "" "Przepisanie istniejącego rekordu magazynowego z zachowaniem elementów " "nieedytowalnych" -#: engine/core/docs/drf/viewsets.py:1297 +#: engine/core/docs/drf/viewsets.py:1321 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "" "Przepisz niektóre pola istniejącej kategorii, zapisując elementy " "nieedytowalne" -#: engine/core/docs/drf/viewsets.py:1308 +#: engine/core/docs/drf/viewsets.py:1332 msgid "list all product tags (simple view)" msgstr "Lista wszystkich tagów produktów (widok prosty)" -#: engine/core/docs/drf/viewsets.py:1318 +#: engine/core/docs/drf/viewsets.py:1342 msgid "retrieve a single product tag (detailed view)" msgstr "Pobieranie pojedynczego tagu produktu (widok szczegółowy)" -#: engine/core/docs/drf/viewsets.py:1325 +#: engine/core/docs/drf/viewsets.py:1349 msgid "create a product tag" msgstr "Utwórz tag produktu" -#: engine/core/docs/drf/viewsets.py:1335 +#: engine/core/docs/drf/viewsets.py:1359 msgid "delete a product tag" msgstr "Usuwanie tagu produktu" -#: engine/core/docs/drf/viewsets.py:1342 +#: engine/core/docs/drf/viewsets.py:1366 msgid "rewrite an existing product tag saving non-editables" msgstr "Przepisz istniejący tag produktu, zapisując nieedytowalne elementy" -#: engine/core/docs/drf/viewsets.py:1350 +#: engine/core/docs/drf/viewsets.py:1374 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "" "Przepisz niektóre pola istniejącej kategorii, zapisując elementy " @@ -1017,232 +1051,230 @@ msgstr "" msgid "no search term provided." msgstr "Nie podano wyszukiwanego hasła." -#: engine/core/filters.py:78 engine/core/filters.py:484 -#: engine/core/filters.py:625 +#: engine/core/filters.py:79 engine/core/filters.py:485 +#: engine/core/filters.py:626 msgid "Search" msgstr "Wyszukiwanie" -#: engine/core/filters.py:79 engine/core/filters.py:663 -#: engine/core/filters.py:692 +#: engine/core/filters.py:80 engine/core/filters.py:664 +#: engine/core/filters.py:693 msgid "UUID" msgstr "UUID" -#: engine/core/filters.py:80 engine/core/filters.py:487 -#: engine/core/filters.py:627 +#: engine/core/filters.py:81 engine/core/filters.py:488 +#: engine/core/filters.py:628 msgid "Name" msgstr "Nazwa" -#: engine/core/filters.py:82 engine/core/filters.py:630 +#: engine/core/filters.py:83 engine/core/filters.py:631 msgid "Categories" msgstr "Kategorie" -#: engine/core/filters.py:86 +#: engine/core/filters.py:87 msgid "Categories Slugs" msgstr "Kategorie Ślimaki" -#: engine/core/filters.py:88 engine/core/filters.py:495 +#: engine/core/filters.py:89 engine/core/filters.py:496 +#: engine/core/templates/admin_doc/index.html:37 +#: engine/core/templates/admin_doc/template_tag_index.html:12 msgid "Tags" msgstr "Tagi" -#: engine/core/filters.py:90 +#: engine/core/filters.py:91 msgid "Min Price" msgstr "Cena minimalna" -#: engine/core/filters.py:93 +#: engine/core/filters.py:94 msgid "Max Price" msgstr "Maksymalna cena" -#: engine/core/filters.py:95 +#: engine/core/filters.py:96 msgid "Is Active" msgstr "Jest aktywny" -#: engine/core/filters.py:96 +#: engine/core/filters.py:97 msgid "Brand" msgstr "Marka" -#: engine/core/filters.py:97 +#: engine/core/filters.py:98 msgid "Attributes" msgstr "Atrybuty" -#: engine/core/filters.py:99 +#: engine/core/filters.py:100 msgid "Quantity" msgstr "Ilość" -#: engine/core/filters.py:101 engine/core/filters.py:489 -#: engine/core/filters.py:628 engine/core/models.py:316 -#: engine/core/models.py:497 engine/core/models.py:663 +#: engine/core/filters.py:102 engine/core/filters.py:490 +#: engine/core/filters.py:629 engine/core/models.py:339 +#: engine/core/models.py:546 engine/core/models.py:736 msgid "Slug" msgstr "Ślimak" -#: engine/core/filters.py:102 +#: engine/core/filters.py:103 msgid "Is Digital" msgstr "Czy cyfrowy" -#: engine/core/filters.py:104 +#: engine/core/filters.py:105 msgid "Include sub-categories" msgstr "Uwzględnienie podkategorii" -#: engine/core/filters.py:108 +#: engine/core/filters.py:109 msgid "Include personal ordered" msgstr "Obejmuje produkty zamawiane osobiście" -#: engine/core/filters.py:110 engine/core/models.py:667 +#: engine/core/filters.py:111 engine/core/models.py:740 msgid "SKU" msgstr "SKU" -#: engine/core/filters.py:212 +#: engine/core/filters.py:213 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "Aby użyć flagi include_subcategories, musi istnieć category_uuid" -#: engine/core/filters.py:398 +#: engine/core/filters.py:399 msgid "Search (ID, product name or part number)" msgstr "Wyszukiwanie (ID, nazwa produktu lub numer części)" -#: engine/core/filters.py:402 +#: engine/core/filters.py:403 msgid "Bought after (inclusive)" msgstr "Kupione po (włącznie)" -#: engine/core/filters.py:405 +#: engine/core/filters.py:406 msgid "Bought before (inclusive)" msgstr "Kupione wcześniej (włącznie)" -#: engine/core/filters.py:410 engine/core/filters.py:461 -#: engine/core/filters.py:697 +#: engine/core/filters.py:411 engine/core/filters.py:462 +#: engine/core/filters.py:698 msgid "User email" msgstr "E-mail użytkownika" -#: engine/core/filters.py:413 engine/core/filters.py:464 -#: engine/core/filters.py:672 engine/core/filters.py:694 +#: engine/core/filters.py:414 engine/core/filters.py:465 +#: engine/core/filters.py:673 engine/core/filters.py:695 msgid "User UUID" msgstr "UUID użytkownika" -#: engine/core/filters.py:415 +#: engine/core/filters.py:416 msgid "Status" msgstr "Status" -#: engine/core/filters.py:419 +#: engine/core/filters.py:420 msgid "Human Readable ID" msgstr "Identyfikator czytelny dla człowieka" -#: engine/core/filters.py:488 +#: engine/core/filters.py:489 msgid "Parent" msgstr "Rodzic" -#: engine/core/filters.py:492 +#: engine/core/filters.py:493 msgid "Whole category(has at least 1 product or not)" msgstr "Cała kategoria (ma co najmniej 1 produkt lub nie)" -#: engine/core/filters.py:496 +#: engine/core/filters.py:497 msgid "Level" msgstr "Poziom" -#: engine/core/filters.py:667 +#: engine/core/filters.py:668 msgid "Product UUID" msgstr "UUID produktu" -#: engine/core/graphene/mutations.py:40 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Klucz do wyszukania lub ustawienia w pamięci podręcznej" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:43 msgid "data to store in cache" msgstr "Dane do przechowywania w pamięci podręcznej" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:46 msgid "timeout in seconds to set the data for into the cache" msgstr "Limit czasu w sekundach na wprowadzenie danych do pamięci podręcznej" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:49 msgid "cached data" msgstr "Dane w pamięci podręcznej" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:64 msgid "camelized JSON data from the requested URL" msgstr "Kamelizowane dane JSON z żądanego adresu URL" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:248 +#: engine/core/graphene/mutations.py:69 engine/core/views.py:267 msgid "only URLs starting with http(s):// are allowed" msgstr "Dozwolone są tylko adresy URL zaczynające się od http(s)://" -#: engine/core/graphene/mutations.py:86 +#: engine/core/graphene/mutations.py:87 msgid "add a product to the order" msgstr "Dodawanie produktu do zamówienia" -#: engine/core/graphene/mutations.py:109 engine/core/graphene/mutations.py:138 -#: engine/core/graphene/mutations.py:254 engine/core/graphene/mutations.py:306 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139 +#: engine/core/graphene/mutations.py:256 engine/core/graphene/mutations.py:308 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Nie znaleziono zamówienia {order_uuid}!" -#: engine/core/graphene/mutations.py:115 engine/core/graphene/mutations.py:166 +#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167 msgid "remove a product from the order" msgstr "Usunięcie produktu z zamówienia" -#: engine/core/graphene/mutations.py:144 +#: engine/core/graphene/mutations.py:145 msgid "remove all products from the order" msgstr "Usuń wszystkie produkty z zamówienia" -#: engine/core/graphene/mutations.py:189 +#: engine/core/graphene/mutations.py:190 msgid "buy an order" msgstr "Kup zamówienie" -#: engine/core/graphene/mutations.py:220 engine/core/graphene/mutations.py:282 +#: engine/core/graphene/mutations.py:222 engine/core/graphene/mutations.py:284 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "Podaj albo order_uuid albo order_hr_id - wzajemnie się wykluczają!" -#: engine/core/graphene/mutations.py:249 engine/core/graphene/mutations.py:524 -#: engine/core/graphene/mutations.py:573 engine/core/viewsets.py:753 +#: engine/core/graphene/mutations.py:251 engine/core/graphene/mutations.py:526 +#: engine/core/graphene/mutations.py:576 engine/core/viewsets.py:783 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Nieprawidłowy typ pochodzi z metody order.buy(): {type(instance)!s}" -#: engine/core/graphene/mutations.py:260 +#: engine/core/graphene/mutations.py:262 msgid "perform an action on a list of products in the order" msgstr "Wykonanie akcji na liście produktów w zamówieniu" -#: engine/core/graphene/mutations.py:265 +#: engine/core/graphene/mutations.py:267 msgid "remove/add" msgstr "Usuń/Dodaj" -#: engine/core/graphene/mutations.py:301 engine/core/graphene/mutations.py:342 +#: engine/core/graphene/mutations.py:303 engine/core/graphene/mutations.py:342 msgid "action must be either add or remove" msgstr "Akcją musi być \"dodaj\" lub \"usuń\"!" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:314 msgid "perform an action on a list of products in the wishlist" msgstr "Wykonanie akcji na liście produktów na liście życzeń" -#: engine/core/graphene/mutations.py:330 -msgid "please provide wishlist_uuid value" -msgstr "Podaj wartość `wishlist_uuid`." - -#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:423 -#: engine/core/graphene/mutations.py:451 engine/core/graphene/mutations.py:479 -#: engine/core/graphene/mutations.py:529 +#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:424 +#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480 +#: engine/core/graphene/mutations.py:531 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Lista życzeń {wishlist_uuid} nie została znaleziona!" -#: engine/core/graphene/mutations.py:401 +#: engine/core/graphene/mutations.py:402 msgid "add a product to the wishlist" msgstr "Dodawanie produktu do zamówienia" -#: engine/core/graphene/mutations.py:429 +#: engine/core/graphene/mutations.py:430 msgid "remove a product from the wishlist" msgstr "Usunięcie produktu z zamówienia" -#: engine/core/graphene/mutations.py:457 +#: engine/core/graphene/mutations.py:458 msgid "remove all products from the wishlist" msgstr "Usunięcie produktu z zamówienia" -#: engine/core/graphene/mutations.py:485 +#: engine/core/graphene/mutations.py:486 msgid "buy all products from the wishlist" msgstr "Usunięcie produktu z zamówienia" -#: engine/core/graphene/mutations.py:535 +#: engine/core/graphene/mutations.py:537 msgid "buy a product" msgstr "Kup zamówienie" -#: engine/core/graphene/mutations.py:542 +#: engine/core/graphene/mutations.py:544 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" @@ -1250,139 +1282,143 @@ msgstr "" "Prześlij atrybuty jako ciąg znaków sformatowany w następujący sposób: " "attr1=value1,attr2=value2" -#: engine/core/graphene/mutations.py:580 +#: engine/core/graphene/mutations.py:583 msgid "add or delete a feedback for orderproduct" msgstr "Dodawanie lub usuwanie opinii dla produktu zamówienia" -#: engine/core/graphene/mutations.py:606 +#: engine/core/graphene/mutations.py:610 msgid "action must be either `add` or `remove`" msgstr "Akcją musi być `add` lub `remove`!" -#: engine/core/graphene/mutations.py:609 +#: engine/core/graphene/mutations.py:613 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderproduct {order_product_uuid} nie został znaleziony!" -#: engine/core/graphene/mutations.py:616 +#: engine/core/graphene/mutations.py:620 msgid "original address string provided by the user" msgstr "Oryginalny ciąg adresu podany przez użytkownika" -#: engine/core/graphene/mutations.py:653 engine/core/models.py:986 -#: engine/core/models.py:999 engine/core/models.py:1443 -#: engine/core/models.py:1474 engine/core/models.py:1505 -#: engine/core/viewsets.py:760 +#: engine/core/graphene/mutations.py:662 engine/core/models.py:1079 +#: engine/core/models.py:1092 engine/core/models.py:1544 +#: engine/core/models.py:1575 engine/core/models.py:1606 +#: engine/core/viewsets.py:790 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} nie istnieje: {uuid}!" -#: engine/core/graphene/mutations.py:667 +#: engine/core/graphene/mutations.py:676 msgid "limit must be between 1 and 10" msgstr "Limit musi wynosić od 1 do 10" -#: engine/core/graphene/mutations.py:716 +#: engine/core/graphene/mutations.py:726 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - działa jak urok" -#: engine/core/graphene/object_types.py:84 -#: engine/core/graphene/object_types.py:420 -#: engine/core/graphene/object_types.py:471 engine/core/models.py:803 -#: engine/core/models.py:1297 engine/core/models.py:2033 +#: engine/core/graphene/object_types.py:88 +#: engine/core/graphene/object_types.py:425 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:889 +#: engine/core/models.py:1394 engine/core/models.py:2139 msgid "attributes" msgstr "Atrybuty" -#: engine/core/graphene/object_types.py:97 +#: engine/core/graphene/object_types.py:101 msgid "grouped attributes" msgstr "Atrybuty pogrupowane" -#: engine/core/graphene/object_types.py:104 +#: engine/core/graphene/object_types.py:108 msgid "groups of attributes" msgstr "Grupy atrybutów" -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:217 -#: engine/core/graphene/object_types.py:255 engine/core/models.py:440 +#: engine/core/graphene/object_types.py:122 +#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:264 engine/core/models.py:489 msgid "categories" msgstr "Kategorie" -#: engine/core/graphene/object_types.py:134 engine/core/models.py:511 +#: engine/core/graphene/object_types.py:138 engine/core/models.py:564 msgid "brands" msgstr "Marki" -#: engine/core/graphene/object_types.py:219 +#: engine/core/graphene/object_types.py:226 msgid "category image url" msgstr "Kategorie" -#: engine/core/graphene/object_types.py:220 -#: engine/core/graphene/object_types.py:365 engine/core/models.py:278 +#: engine/core/graphene/object_types.py:227 +#: engine/core/graphene/object_types.py:369 engine/core/models.py:301 msgid "markup percentage" msgstr "Procentowy narzut" -#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:231 msgid "which attributes and values can be used for filtering this category." msgstr "" "Które atrybuty i wartości mogą być używane do filtrowania tej kategorii." -#: engine/core/graphene/object_types.py:230 +#: engine/core/graphene/object_types.py:237 msgid "" "minimum and maximum prices for products in this category, if available." msgstr "" "Minimalne i maksymalne ceny produktów w tej kategorii, jeśli są dostępne." -#: engine/core/graphene/object_types.py:234 +#: engine/core/graphene/object_types.py:240 +msgid "brands in this category" +msgstr "Marki w tej kategorii" + +#: engine/core/graphene/object_types.py:242 msgid "tags for this category" msgstr "Tagi dla tej kategorii" -#: engine/core/graphene/object_types.py:237 +#: engine/core/graphene/object_types.py:245 msgid "products in this category" msgstr "Produkty w tej kategorii" -#: engine/core/graphene/object_types.py:372 engine/core/models.py:183 +#: engine/core/graphene/object_types.py:376 engine/core/models.py:202 msgid "vendors" msgstr "Sprzedawcy" -#: engine/core/graphene/object_types.py:376 +#: engine/core/graphene/object_types.py:380 msgid "Latitude (Y coordinate)" msgstr "Szerokość geograficzna (współrzędna Y)" -#: engine/core/graphene/object_types.py:377 +#: engine/core/graphene/object_types.py:381 msgid "Longitude (X coordinate)" msgstr "Długość geograficzna (współrzędna X)" -#: engine/core/graphene/object_types.py:406 +#: engine/core/graphene/object_types.py:411 msgid "comment" msgstr "Jak" -#: engine/core/graphene/object_types.py:408 -#: engine/core/graphene/object_types.py:542 +#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:548 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "Wartość oceny od 1 do 10 włącznie lub 0, jeśli nie jest ustawiona." -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:421 msgid "represents feedback from a user." msgstr "Reprezentuje informacje zwrotne od użytkownika." -#: engine/core/graphene/object_types.py:421 -#: engine/core/graphene/object_types.py:472 engine/core/models.py:1291 +#: engine/core/graphene/object_types.py:426 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:1388 msgid "notifications" msgstr "Powiadomienia" -#: engine/core/graphene/object_types.py:423 +#: engine/core/graphene/object_types.py:428 msgid "download url for this order product if applicable" msgstr "Adres URL pobierania dla tego produktu zamówienia, jeśli dotyczy" -#: engine/core/graphene/object_types.py:425 engine/core/models.py:1856 +#: engine/core/graphene/object_types.py:430 engine/core/models.py:1959 msgid "feedback" msgstr "Informacje zwrotne" -#: engine/core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:464 msgid "a list of order products in this order" msgstr "Lista zamówionych produktów w tym zamówieniu" -#: engine/core/graphene/object_types.py:461 engine/core/models.py:1261 +#: engine/core/graphene/object_types.py:466 engine/core/models.py:1358 msgid "billing address" msgstr "Adres rozliczeniowy" -#: engine/core/graphene/object_types.py:465 +#: engine/core/graphene/object_types.py:470 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1390,53 +1426,57 @@ msgstr "" "Adres wysyłki dla tego zamówienia, pozostaw pusty, jeśli jest taki sam jak " "adres rozliczeniowy lub jeśli nie dotyczy" -#: engine/core/graphene/object_types.py:468 +#: engine/core/graphene/object_types.py:473 msgid "total price of this order" msgstr "Całkowita cena tego zamówienia" -#: engine/core/graphene/object_types.py:469 +#: engine/core/graphene/object_types.py:474 msgid "total quantity of products in order" msgstr "Całkowita ilość produktów w zamówieniu" -#: engine/core/graphene/object_types.py:470 +#: engine/core/graphene/object_types.py:475 msgid "are all products in the order digital" msgstr "Czy wszystkie produkty w zamówieniu są cyfrowe?" -#: engine/core/graphene/object_types.py:474 +#: engine/core/graphene/object_types.py:479 msgid "transactions for this order" msgstr "Transakcje dla tego zamówienia" -#: engine/core/graphene/object_types.py:494 engine/core/models.py:1325 +#: engine/core/graphene/object_types.py:499 engine/core/models.py:1422 msgid "orders" msgstr "Zamówienia" -#: engine/core/graphene/object_types.py:515 +#: engine/core/graphene/object_types.py:520 msgid "image url" msgstr "Adres URL obrazu" -#: engine/core/graphene/object_types.py:522 +#: engine/core/graphene/object_types.py:527 msgid "product's images" msgstr "Zdjęcia produktu" -#: engine/core/graphene/object_types.py:529 engine/core/models.py:439 -#: engine/core/models.py:596 +#: engine/core/graphene/object_types.py:534 engine/core/models.py:488 +#: engine/core/models.py:661 msgid "category" msgstr "Kategoria" -#: engine/core/graphene/object_types.py:531 engine/core/models.py:1857 +#: engine/core/graphene/object_types.py:536 engine/core/models.py:1960 msgid "feedbacks" msgstr "Informacje zwrotne" -#: engine/core/graphene/object_types.py:532 engine/core/models.py:510 -#: engine/core/models.py:605 +#: engine/core/graphene/object_types.py:537 engine/core/models.py:563 +#: engine/core/models.py:670 msgid "brand" msgstr "Marka" -#: engine/core/graphene/object_types.py:534 engine/core/models.py:103 +#: engine/core/graphene/object_types.py:538 +msgid "video url" +msgstr "Adres URL filmu" + +#: engine/core/graphene/object_types.py:540 engine/core/models.py:122 msgid "attribute groups" msgstr "Grupy atrybutów" -#: engine/core/graphene/object_types.py:536 +#: engine/core/graphene/object_types.py:542 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1444,7 +1484,7 @@ msgstr "Grupy atrybutów" msgid "price" msgstr "Cena" -#: engine/core/graphene/object_types.py:537 +#: engine/core/graphene/object_types.py:543 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1452,39 +1492,39 @@ msgstr "Cena" msgid "quantity" msgstr "Ilość" -#: engine/core/graphene/object_types.py:538 +#: engine/core/graphene/object_types.py:544 msgid "number of feedbacks" msgstr "Liczba informacji zwrotnych" -#: engine/core/graphene/object_types.py:539 +#: engine/core/graphene/object_types.py:545 msgid "only available for personal orders" msgstr "Produkty dostępne tylko dla zamówień osobistych" -#: engine/core/graphene/object_types.py:544 +#: engine/core/graphene/object_types.py:550 msgid "discount price" msgstr "Cena rabatowa" -#: engine/core/graphene/object_types.py:568 engine/core/models.py:682 +#: engine/core/graphene/object_types.py:575 engine/core/models.py:755 msgid "products" msgstr "Produkty" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:691 msgid "promocodes" msgstr "Promocodes" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:706 msgid "products on sale" msgstr "Produkty w sprzedaży" -#: engine/core/graphene/object_types.py:701 engine/core/models.py:935 +#: engine/core/graphene/object_types.py:720 engine/core/models.py:1028 msgid "promotions" msgstr "Promocje" -#: engine/core/graphene/object_types.py:705 engine/core/models.py:182 +#: engine/core/graphene/object_types.py:727 engine/core/models.py:201 msgid "vendor" msgstr "Sprzedawca" -#: engine/core/graphene/object_types.py:706 engine/core/models.py:681 +#: engine/core/graphene/object_types.py:728 engine/core/models.py:754 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1492,102 +1532,102 @@ msgstr "Sprzedawca" msgid "product" msgstr "Produkt" -#: engine/core/graphene/object_types.py:718 engine/core/models.py:958 +#: engine/core/graphene/object_types.py:740 engine/core/models.py:1051 msgid "wishlisted products" msgstr "Produkty z listy życzeń" -#: engine/core/graphene/object_types.py:725 engine/core/models.py:975 +#: engine/core/graphene/object_types.py:747 engine/core/models.py:1068 msgid "wishlists" msgstr "Listy życzeń" -#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:752 msgid "tagged products" msgstr "Produkty Tagged" -#: engine/core/graphene/object_types.py:738 engine/core/models.py:219 -#: engine/core/models.py:611 +#: engine/core/graphene/object_types.py:760 engine/core/models.py:238 +#: engine/core/models.py:676 msgid "product tags" msgstr "Tagi produktu" -#: engine/core/graphene/object_types.py:743 +#: engine/core/graphene/object_types.py:765 msgid "tagged categories" msgstr "Kategorie oznaczone tagami" -#: engine/core/graphene/object_types.py:751 +#: engine/core/graphene/object_types.py:773 msgid "categories tags" msgstr "Tagi kategorii" -#: engine/core/graphene/object_types.py:755 +#: engine/core/graphene/object_types.py:777 msgid "project name" msgstr "Nazwa projektu" -#: engine/core/graphene/object_types.py:756 +#: engine/core/graphene/object_types.py:778 msgid "company name" msgstr "Nazwa firmy" -#: engine/core/graphene/object_types.py:757 +#: engine/core/graphene/object_types.py:779 msgid "company address" msgstr "Adres firmy" -#: engine/core/graphene/object_types.py:758 +#: engine/core/graphene/object_types.py:780 msgid "company phone number" msgstr "Numer telefonu firmy" -#: engine/core/graphene/object_types.py:761 +#: engine/core/graphene/object_types.py:783 msgid "email from, sometimes it must be used instead of host user value" msgstr "\"email from\", czasami musi być użyty zamiast wartości użytkownika hosta" -#: engine/core/graphene/object_types.py:764 +#: engine/core/graphene/object_types.py:786 msgid "email host user" msgstr "Użytkownik hosta poczty e-mail" -#: engine/core/graphene/object_types.py:765 +#: engine/core/graphene/object_types.py:787 msgid "maximum amount for payment" msgstr "Maksymalna kwota płatności" -#: engine/core/graphene/object_types.py:766 +#: engine/core/graphene/object_types.py:788 msgid "minimum amount for payment" msgstr "Minimalna kwota płatności" -#: engine/core/graphene/object_types.py:767 +#: engine/core/graphene/object_types.py:789 msgid "analytics data" msgstr "Dane analityczne" -#: engine/core/graphene/object_types.py:768 +#: engine/core/graphene/object_types.py:790 msgid "advertisement data" msgstr "Dane reklamowe" -#: engine/core/graphene/object_types.py:771 +#: engine/core/graphene/object_types.py:793 msgid "company configuration" msgstr "Konfiguracja" -#: engine/core/graphene/object_types.py:775 +#: engine/core/graphene/object_types.py:797 msgid "language code" msgstr "Kod języka" -#: engine/core/graphene/object_types.py:776 +#: engine/core/graphene/object_types.py:798 msgid "language name" msgstr "Nazwa języka" -#: engine/core/graphene/object_types.py:777 +#: engine/core/graphene/object_types.py:799 msgid "language flag, if exists :)" msgstr "Flaga języka, jeśli istnieje :)" -#: engine/core/graphene/object_types.py:780 +#: engine/core/graphene/object_types.py:802 msgid "supported languages" msgstr "Pobierz listę obsługiwanych języków" -#: engine/core/graphene/object_types.py:812 -#: engine/core/graphene/object_types.py:815 -#: engine/core/graphene/object_types.py:818 +#: engine/core/graphene/object_types.py:834 +#: engine/core/graphene/object_types.py:837 +#: engine/core/graphene/object_types.py:840 msgid "products search results" msgstr "Wyniki wyszukiwania produktów" -#: engine/core/graphene/object_types.py:820 +#: engine/core/graphene/object_types.py:842 msgid "posts search results" msgstr "Wyniki wyszukiwania produktów" -#: engine/core/models.py:75 +#: engine/core/models.py:91 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 " @@ -1600,23 +1640,23 @@ msgstr "" "bardziej efektywnego kategoryzowania i zarządzania atrybutami w złożonym " "systemie." -#: engine/core/models.py:88 +#: engine/core/models.py:107 msgid "parent of this group" msgstr "Rodzic tej grupy" -#: engine/core/models.py:89 +#: engine/core/models.py:108 msgid "parent attribute group" msgstr "Grupa atrybutów nadrzędnych" -#: engine/core/models.py:93 engine/core/models.py:94 +#: engine/core/models.py:112 engine/core/models.py:113 msgid "attribute group's name" msgstr "Nazwa grupy atrybutów" -#: engine/core/models.py:102 engine/core/models.py:763 +#: engine/core/models.py:121 engine/core/models.py:849 msgid "attribute group" msgstr "Grupa atrybutów" -#: engine/core/models.py:108 +#: engine/core/models.py:127 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1635,49 +1675,49 @@ msgstr "" "ograniczenia, dzięki czemu nadaje się do użytku w systemach, które " "współpracują z zewnętrznymi dostawcami." -#: engine/core/models.py:122 +#: engine/core/models.py:141 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Przechowuje dane uwierzytelniające i punkty końcowe wymagane do komunikacji " "API dostawcy." -#: engine/core/models.py:124 +#: engine/core/models.py:143 msgid "authentication info" msgstr "Informacje o uwierzytelnianiu" -#: engine/core/models.py:129 +#: engine/core/models.py:148 msgid "define the markup for products retrieved from this vendor" msgstr "Definiowanie znaczników dla produktów pobranych od tego dostawcy" -#: engine/core/models.py:130 +#: engine/core/models.py:149 msgid "vendor markup percentage" msgstr "Procentowa marża sprzedawcy" -#: engine/core/models.py:134 +#: engine/core/models.py:153 msgid "name of this vendor" msgstr "Nazwa tego sprzedawcy" -#: engine/core/models.py:135 +#: engine/core/models.py:154 msgid "vendor name" msgstr "Nazwa sprzedawcy" -#: engine/core/models.py:150 +#: engine/core/models.py:169 msgid "response file" msgstr "plik odpowiedzi" -#: engine/core/models.py:151 +#: engine/core/models.py:170 msgid "vendor's last processing response" msgstr "odpowiedź sprzedawcy na ostatnie przetwarzanie" -#: engine/core/models.py:157 +#: engine/core/models.py:176 msgid "vendor's integration file path" msgstr "Ścieżka do pliku integracji dostawcy" -#: engine/core/models.py:158 +#: engine/core/models.py:177 msgid "integration path" msgstr "Ścieżka integracji" -#: engine/core/models.py:192 +#: engine/core/models.py:211 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1692,27 +1732,27 @@ msgstr "" "Obsługuje operacje eksportowane przez mixiny i zapewnia dostosowanie " "metadanych do celów administracyjnych." -#: engine/core/models.py:204 engine/core/models.py:235 +#: engine/core/models.py:223 engine/core/models.py:254 msgid "internal tag identifier for the product tag" msgstr "Wewnętrzny identyfikator tagu produktu" -#: engine/core/models.py:205 engine/core/models.py:236 +#: engine/core/models.py:224 engine/core/models.py:255 msgid "tag name" msgstr "Nazwa tagu" -#: engine/core/models.py:209 engine/core/models.py:240 +#: engine/core/models.py:228 engine/core/models.py:259 msgid "user-friendly name for the product tag" msgstr "Przyjazna dla użytkownika nazwa etykiety produktu" -#: engine/core/models.py:210 engine/core/models.py:241 +#: engine/core/models.py:229 engine/core/models.py:260 msgid "tag display name" msgstr "Wyświetlana nazwa znacznika" -#: engine/core/models.py:218 +#: engine/core/models.py:237 msgid "product tag" msgstr "Etykieta produktu" -#: engine/core/models.py:224 +#: engine/core/models.py:243 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 " @@ -1723,15 +1763,15 @@ msgstr "" "Zawiera atrybuty dla wewnętrznego identyfikatora tagu i przyjaznej dla " "użytkownika nazwy wyświetlanej." -#: engine/core/models.py:249 +#: engine/core/models.py:268 msgid "category tag" msgstr "tag kategorii" -#: engine/core/models.py:250 engine/core/models.py:322 +#: engine/core/models.py:269 engine/core/models.py:345 msgid "category tags" msgstr "tagi kategorii" -#: engine/core/models.py:255 +#: engine/core/models.py:274 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1753,51 +1793,51 @@ msgstr "" "administratorom określanie nazwy, opisu i hierarchii kategorii, a także " "przypisywanie atrybutów, takich jak obrazy, tagi lub priorytety." -#: engine/core/models.py:269 +#: engine/core/models.py:292 msgid "upload an image representing this category" msgstr "Prześlij obraz reprezentujący tę kategorię" -#: engine/core/models.py:272 +#: engine/core/models.py:295 msgid "category image" msgstr "Obraz kategorii" -#: engine/core/models.py:277 +#: engine/core/models.py:300 msgid "define a markup percentage for products in this category" msgstr "Zdefiniuj procentowy narzut dla produktów w tej kategorii." -#: engine/core/models.py:286 +#: engine/core/models.py:309 msgid "parent of this category to form a hierarchical structure" msgstr "Rodzic tej kategorii w celu utworzenia struktury hierarchicznej" -#: engine/core/models.py:287 +#: engine/core/models.py:310 msgid "parent category" msgstr "Kategoria nadrzędna" -#: engine/core/models.py:292 +#: engine/core/models.py:315 msgid "category name" msgstr "Nazwa kategorii" -#: engine/core/models.py:293 +#: engine/core/models.py:316 msgid "provide a name for this category" msgstr "Podaj nazwę dla tej kategorii" -#: engine/core/models.py:300 +#: engine/core/models.py:323 msgid "add a detailed description for this category" msgstr "Dodaj szczegółowy opis dla tej kategorii" -#: engine/core/models.py:301 +#: engine/core/models.py:324 msgid "category description" msgstr "Opis kategorii" -#: engine/core/models.py:321 +#: engine/core/models.py:344 msgid "tags that help describe or group this category" msgstr "tagi, które pomagają opisać lub pogrupować tę kategorię" -#: engine/core/models.py:328 engine/core/models.py:503 +#: engine/core/models.py:351 engine/core/models.py:552 msgid "priority" msgstr "Priorytet" -#: engine/core/models.py:446 +#: engine/core/models.py:495 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1810,47 +1850,43 @@ msgstr "" " unikalny slug i kolejność priorytetów. Pozwala na organizację i " "reprezentację danych związanych z marką w aplikacji." -#: engine/core/models.py:456 +#: engine/core/models.py:505 msgid "name of this brand" msgstr "Nazwa tej marki" -#: engine/core/models.py:457 +#: engine/core/models.py:506 msgid "brand name" msgstr "Nazwa marki" -#: engine/core/models.py:464 +#: engine/core/models.py:513 msgid "upload a logo representing this brand" msgstr "Prześlij logo reprezentujące tę markę" -#: engine/core/models.py:466 +#: engine/core/models.py:515 msgid "brand small image" msgstr "Mały wizerunek marki" -#: engine/core/models.py:472 +#: engine/core/models.py:521 msgid "upload a big logo representing this brand" msgstr "Prześlij duże logo reprezentujące tę markę" -#: engine/core/models.py:474 +#: engine/core/models.py:523 msgid "brand big image" msgstr "Duży wizerunek marki" -#: engine/core/models.py:479 +#: engine/core/models.py:528 msgid "add a detailed description of the brand" msgstr "Dodaj szczegółowy opis marki" -#: engine/core/models.py:480 +#: engine/core/models.py:529 msgid "brand description" msgstr "Opis marki" -#: engine/core/models.py:485 -msgid "optional categories that this brand is associated with" -msgstr "Opcjonalne kategorie, z którymi powiązana jest ta marka" +#: engine/core/models.py:534 engine/core/models.py:535 +msgid "DEPRECATED" +msgstr "WYCOFANE" -#: engine/core/models.py:486 -msgid "associated categories" -msgstr "Kategorie" - -#: engine/core/models.py:516 +#: engine/core/models.py:569 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1866,72 +1902,72 @@ msgstr "" "częścią systemu zarządzania zapasami, umożliwiając śledzenie i ocenę " "produktów dostępnych od różnych dostawców." -#: engine/core/models.py:528 +#: engine/core/models.py:581 msgid "the vendor supplying this product stock" msgstr "Sprzedawca dostarczający ten produkt" -#: engine/core/models.py:529 +#: engine/core/models.py:582 msgid "associated vendor" msgstr "Powiązany sprzedawca" -#: engine/core/models.py:533 +#: engine/core/models.py:588 msgid "final price to the customer after markups" msgstr "Ostateczna cena dla klienta po uwzględnieniu marży" -#: engine/core/models.py:534 +#: engine/core/models.py:589 msgid "selling price" msgstr "Cena sprzedaży" -#: engine/core/models.py:539 +#: engine/core/models.py:594 msgid "the product associated with this stock entry" msgstr "Produkt powiązany z tym wpisem magazynowym" -#: engine/core/models.py:540 engine/core/models.py:828 -#: engine/core/models.py:874 engine/core/models.py:1912 +#: engine/core/models.py:595 engine/core/models.py:914 +#: engine/core/models.py:962 engine/core/models.py:2020 msgid "associated product" msgstr "Produkt powiązany" -#: engine/core/models.py:547 +#: engine/core/models.py:604 msgid "the price paid to the vendor for this product" msgstr "Cena zapłacona sprzedawcy za ten produkt" -#: engine/core/models.py:548 +#: engine/core/models.py:605 msgid "vendor purchase price" msgstr "Cena zakupu przez sprzedawcę" -#: engine/core/models.py:552 +#: engine/core/models.py:609 msgid "available quantity of the product in stock" msgstr "Dostępna ilość produktu w magazynie" -#: engine/core/models.py:553 +#: engine/core/models.py:610 msgid "quantity in stock" msgstr "Ilość w magazynie" -#: engine/core/models.py:557 +#: engine/core/models.py:614 msgid "vendor-assigned SKU for identifying the product" msgstr "Jednostki SKU przypisane przez dostawcę w celu identyfikacji produktu" -#: engine/core/models.py:558 +#: engine/core/models.py:615 msgid "vendor sku" msgstr "SKU sprzedawcy" -#: engine/core/models.py:564 +#: engine/core/models.py:621 msgid "digital file associated with this stock if applicable" msgstr "Plik cyfrowy powiązany z tymi zapasami, jeśli dotyczy" -#: engine/core/models.py:565 +#: engine/core/models.py:622 msgid "digital file" msgstr "Plik cyfrowy" -#: engine/core/models.py:569 +#: engine/core/models.py:626 msgid "system attributes" msgstr "Atrybuty systemu" -#: engine/core/models.py:577 +#: engine/core/models.py:636 msgid "stock entries" msgstr "Zapisy magazynowe" -#: engine/core/models.py:582 +#: engine/core/models.py:641 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1952,72 +1988,80 @@ msgstr "" "definiowania i manipulowania danymi produktu i powiązanymi z nimi " "informacjami w aplikacji." -#: engine/core/models.py:595 +#: engine/core/models.py:660 msgid "category this product belongs to" msgstr "Kategoria, do której należy ten produkt" -#: engine/core/models.py:604 +#: engine/core/models.py:669 msgid "optionally associate this product with a brand" msgstr "Opcjonalnie można powiązać ten produkt z marką" -#: engine/core/models.py:610 +#: engine/core/models.py:675 msgid "tags that help describe or group this product" msgstr "Tagi, które pomagają opisać lub pogrupować ten produkt" -#: engine/core/models.py:615 +#: engine/core/models.py:680 msgid "indicates whether this product is digitally delivered" msgstr "Wskazuje, czy produkt jest dostarczany cyfrowo." -#: engine/core/models.py:616 +#: engine/core/models.py:681 msgid "is product digital" msgstr "Czy produkt jest cyfrowy?" -#: engine/core/models.py:623 +#: engine/core/models.py:688 msgid "indicates whether this product should be updated from periodic task" msgstr "" "wskazuje, czy ten produkt powinien być aktualizowany z zadania okresowego" -#: engine/core/models.py:625 +#: engine/core/models.py:690 msgid "is product updatable" msgstr "czy produkt można aktualizować" -#: engine/core/models.py:631 +#: engine/core/models.py:696 msgid "provide a clear identifying name for the product" msgstr "Wyraźna nazwa identyfikująca produkt" -#: engine/core/models.py:632 +#: engine/core/models.py:697 msgid "product name" msgstr "Nazwa produktu" -#: engine/core/models.py:638 engine/core/models.py:923 +#: engine/core/models.py:703 engine/core/models.py:1012 msgid "add a detailed description of the product" msgstr "Dodaj szczegółowy opis produktu" -#: engine/core/models.py:639 +#: engine/core/models.py:704 msgid "product description" msgstr "Opis produktu" -#: engine/core/models.py:646 +#: engine/core/models.py:710 +msgid "optional video file for this product" +msgstr "Opcjonalny plik wideo dla tego produktu" + +#: engine/core/models.py:711 +msgid "product video" +msgstr "Film o produkcie" + +#: engine/core/models.py:719 msgid "part number for this product" msgstr "Numer części dla tego produktu" -#: engine/core/models.py:647 +#: engine/core/models.py:720 msgid "part number" msgstr "Numer części" -#: engine/core/models.py:666 +#: engine/core/models.py:739 msgid "stock keeping unit for this product" msgstr "Jednostka magazynowa dla tego produktu" -#: engine/core/models.py:673 +#: engine/core/models.py:746 msgid "whether to export this product to marketplaces" msgstr "Czy eksportować ten produkt na rynki" -#: engine/core/models.py:674 +#: engine/core/models.py:747 msgid "Export to Marketplaces" msgstr "Eksport do serwisów handlowych" -#: engine/core/models.py:749 +#: engine/core/models.py:835 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 " @@ -2033,65 +2077,65 @@ msgstr "" "string, integer, float, boolean, array i object. Pozwala to na dynamiczną i " "elastyczną strukturę danych." -#: engine/core/models.py:762 +#: engine/core/models.py:848 msgid "group of this attribute" msgstr "Grupa tego atrybutu" -#: engine/core/models.py:768 +#: engine/core/models.py:854 msgid "string" msgstr "String" -#: engine/core/models.py:769 +#: engine/core/models.py:855 msgid "integer" msgstr "Integer" -#: engine/core/models.py:770 +#: engine/core/models.py:856 msgid "float" msgstr "Pływak" -#: engine/core/models.py:771 +#: engine/core/models.py:857 msgid "boolean" msgstr "Wartość logiczna" -#: engine/core/models.py:772 +#: engine/core/models.py:858 msgid "array" msgstr "Tablica" -#: engine/core/models.py:773 +#: engine/core/models.py:859 msgid "object" msgstr "Obiekt" -#: engine/core/models.py:775 +#: engine/core/models.py:861 msgid "type of the attribute's value" msgstr "Typ wartości atrybutu" -#: engine/core/models.py:776 +#: engine/core/models.py:862 msgid "value type" msgstr "Typ wartości" -#: engine/core/models.py:781 +#: engine/core/models.py:867 msgid "name of this attribute" msgstr "Nazwa tego atrybutu" -#: engine/core/models.py:782 +#: engine/core/models.py:868 msgid "attribute's name" msgstr "Nazwa atrybutu" -#: engine/core/models.py:787 +#: engine/core/models.py:873 msgid "is filterable" msgstr "można filtrować" -#: engine/core/models.py:789 +#: engine/core/models.py:875 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." -#: engine/core/models.py:802 engine/core/models.py:820 +#: engine/core/models.py:888 engine/core/models.py:906 #: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Atrybut" -#: engine/core/models.py:808 +#: engine/core/models.py:894 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" @@ -2101,19 +2145,19 @@ msgstr "" "\"atrybut\" z unikalną \"wartością\", umożliwiając lepszą organizację i " "dynamiczną reprezentację cech produktu." -#: engine/core/models.py:819 +#: engine/core/models.py:905 msgid "attribute of this value" msgstr "Atrybut tej wartości" -#: engine/core/models.py:827 +#: engine/core/models.py:913 msgid "the specific product associated with this attribute's value" msgstr "Konkretny produkt powiązany z wartością tego atrybutu" -#: engine/core/models.py:833 +#: engine/core/models.py:919 msgid "the specific value for this attribute" msgstr "Konkretna wartość dla tego atrybutu" -#: engine/core/models.py:846 +#: engine/core/models.py:934 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -2127,40 +2171,40 @@ msgstr "" "określania kolejności ich wyświetlania. Zawiera również funkcję dostępności " "z tekstem alternatywnym dla obrazów." -#: engine/core/models.py:857 +#: engine/core/models.py:945 msgid "provide alternative text for the image for accessibility" msgstr "" "Zapewnienie alternatywnego tekstu dla obrazu w celu ułatwienia dostępu" -#: engine/core/models.py:858 +#: engine/core/models.py:946 msgid "image alt text" msgstr "Tekst alternatywny obrazu" -#: engine/core/models.py:861 +#: engine/core/models.py:949 msgid "upload the image file for this product" msgstr "Prześlij plik obrazu dla tego produktu" -#: engine/core/models.py:862 engine/core/models.py:893 +#: engine/core/models.py:950 engine/core/models.py:982 msgid "product image" msgstr "Obraz produktu" -#: engine/core/models.py:867 +#: engine/core/models.py:955 msgid "determines the order in which images are displayed" msgstr "Określa kolejność wyświetlania obrazów" -#: engine/core/models.py:868 +#: engine/core/models.py:956 msgid "display priority" msgstr "Priorytet wyświetlania" -#: engine/core/models.py:873 +#: engine/core/models.py:961 msgid "the product that this image represents" msgstr "Produkt, który przedstawia ten obraz" -#: engine/core/models.py:894 +#: engine/core/models.py:983 msgid "product images" msgstr "Zdjęcia produktów" -#: engine/core/models.py:899 +#: engine/core/models.py:988 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -2176,39 +2220,39 @@ msgstr "" "produktami. Integruje się z katalogiem produktów w celu określenia pozycji, " "których dotyczy kampania." -#: engine/core/models.py:911 +#: engine/core/models.py:1000 msgid "percentage discount for the selected products" msgstr "Rabat procentowy na wybrane produkty" -#: engine/core/models.py:912 +#: engine/core/models.py:1001 msgid "discount percentage" msgstr "Procent rabatu" -#: engine/core/models.py:917 +#: engine/core/models.py:1006 msgid "provide a unique name for this promotion" msgstr "Podaj unikalną nazwę tej promocji" -#: engine/core/models.py:918 +#: engine/core/models.py:1007 msgid "promotion name" msgstr "Nazwa promocji" -#: engine/core/models.py:924 +#: engine/core/models.py:1013 msgid "promotion description" msgstr "Opis promocji" -#: engine/core/models.py:929 +#: engine/core/models.py:1018 msgid "select which products are included in this promotion" msgstr "Wybierz produkty objęte promocją" -#: engine/core/models.py:930 +#: engine/core/models.py:1019 msgid "included products" msgstr "Dołączone produkty" -#: engine/core/models.py:934 +#: engine/core/models.py:1027 msgid "promotion" msgstr "Promocja" -#: engine/core/models.py:945 +#: engine/core/models.py:1038 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2220,23 +2264,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." -#: engine/core/models.py:957 +#: engine/core/models.py:1050 msgid "products that the user has marked as wanted" msgstr "Produkty, które użytkownik oznaczył jako poszukiwane" -#: engine/core/models.py:965 +#: engine/core/models.py:1058 msgid "user who owns this wishlist" msgstr "Użytkownik posiadający tę listę życzeń" -#: engine/core/models.py:966 +#: engine/core/models.py:1059 msgid "wishlist owner" msgstr "Właściciel listy życzeń" -#: engine/core/models.py:974 +#: engine/core/models.py:1067 msgid "wishlist" msgstr "Lista życzeń" -#: engine/core/models.py:1016 +#: engine/core/models.py:1109 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2252,19 +2296,19 @@ msgstr "" "funkcjonalność z określonych miksów i zapewnia dodatkowe niestandardowe " "funkcje." -#: engine/core/models.py:1031 +#: engine/core/models.py:1124 msgid "documentary" msgstr "Film dokumentalny" -#: engine/core/models.py:1032 +#: engine/core/models.py:1125 msgid "documentaries" msgstr "Filmy dokumentalne" -#: engine/core/models.py:1042 +#: engine/core/models.py:1135 msgid "unresolved" msgstr "Nierozwiązany" -#: engine/core/models.py:1047 +#: engine/core/models.py:1140 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2286,59 +2330,59 @@ msgstr "" "również powiązanie adresu z użytkownikiem, ułatwiając spersonalizowaną " "obsługę danych." -#: engine/core/models.py:1062 +#: engine/core/models.py:1155 msgid "address line for the customer" msgstr "Linia adresu dla klienta" -#: engine/core/models.py:1063 +#: engine/core/models.py:1156 msgid "address line" msgstr "Linia adresowa" -#: engine/core/models.py:1065 +#: engine/core/models.py:1158 msgid "street" msgstr "ul." -#: engine/core/models.py:1066 +#: engine/core/models.py:1159 msgid "district" msgstr "Okręg" -#: engine/core/models.py:1067 +#: engine/core/models.py:1160 msgid "city" msgstr "Miasto" -#: engine/core/models.py:1068 +#: engine/core/models.py:1161 msgid "region" msgstr "Region" -#: engine/core/models.py:1069 +#: engine/core/models.py:1162 msgid "postal code" msgstr "Kod pocztowy" -#: engine/core/models.py:1070 +#: engine/core/models.py:1163 msgid "country" msgstr "Kraj" -#: engine/core/models.py:1077 +#: engine/core/models.py:1170 msgid "geolocation point: (longitude, latitude)" msgstr "Geolocation Point(Longitude, Latitude)" -#: engine/core/models.py:1083 +#: engine/core/models.py:1176 msgid "full JSON response from geocoder for this address" msgstr "Pełna odpowiedź JSON z geokodera dla tego adresu" -#: engine/core/models.py:1089 +#: engine/core/models.py:1182 msgid "stored JSON response from the geocoding service" msgstr "Przechowywana odpowiedź JSON z usługi geokodowania" -#: engine/core/models.py:1099 +#: engine/core/models.py:1192 msgid "address" msgstr "Adres" -#: engine/core/models.py:1100 +#: engine/core/models.py:1193 msgid "addresses" msgstr "Adresy" -#: engine/core/models.py:1112 +#: engine/core/models.py:1205 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2355,73 +2399,73 @@ msgstr "" "Obejmuje funkcję sprawdzania poprawności i stosowania kodu promocyjnego do " "zamówienia, zapewniając jednocześnie spełnienie ograniczeń." -#: engine/core/models.py:1126 +#: engine/core/models.py:1219 msgid "unique code used by a user to redeem a discount" msgstr "Unikalny kod używany przez użytkownika do realizacji rabatu." -#: engine/core/models.py:1127 +#: engine/core/models.py:1220 msgid "promo code identifier" msgstr "Identyfikator kodu promocyjnego" -#: engine/core/models.py:1134 +#: engine/core/models.py:1227 msgid "fixed discount amount applied if percent is not used" msgstr "Stała kwota rabatu stosowana, jeśli procent nie jest używany" -#: engine/core/models.py:1135 +#: engine/core/models.py:1228 msgid "fixed discount amount" msgstr "Stała kwota rabatu" -#: engine/core/models.py:1141 +#: engine/core/models.py:1234 msgid "percentage discount applied if fixed amount is not used" msgstr "Rabat procentowy stosowany w przypadku niewykorzystania stałej kwoty" -#: engine/core/models.py:1142 +#: engine/core/models.py:1235 msgid "percentage discount" msgstr "Rabat procentowy" -#: engine/core/models.py:1147 +#: engine/core/models.py:1240 msgid "timestamp when the promocode expires" msgstr "Znacznik czasu wygaśnięcia kodu promocyjnego" -#: engine/core/models.py:1148 +#: engine/core/models.py:1241 msgid "end validity time" msgstr "Końcowy czas ważności" -#: engine/core/models.py:1153 +#: engine/core/models.py:1246 msgid "timestamp from which this promocode is valid" msgstr "Znacznik czasu, od którego ten kod promocyjny jest ważny" -#: engine/core/models.py:1154 +#: engine/core/models.py:1247 msgid "start validity time" msgstr "Czas rozpoczęcia ważności" -#: engine/core/models.py:1159 +#: engine/core/models.py:1252 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." -#: engine/core/models.py:1160 +#: engine/core/models.py:1253 msgid "usage timestamp" msgstr "Znacznik czasu użycia" -#: engine/core/models.py:1165 +#: engine/core/models.py:1258 msgid "user assigned to this promocode if applicable" msgstr "Użytkownik przypisany do tego kodu promocyjnego, jeśli dotyczy" -#: engine/core/models.py:1166 +#: engine/core/models.py:1259 msgid "assigned user" msgstr "Przypisany użytkownik" -#: engine/core/models.py:1173 +#: engine/core/models.py:1266 msgid "promo code" msgstr "Kod promocyjny" -#: engine/core/models.py:1174 +#: engine/core/models.py:1267 msgid "promo codes" msgstr "Kody promocyjne" -#: engine/core/models.py:1190 +#: engine/core/models.py:1283 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2429,16 +2473,16 @@ msgstr "" "Należy zdefiniować tylko jeden rodzaj rabatu (kwotowy lub procentowy), ale " "nie oba lub żaden z nich." -#: engine/core/models.py:1212 +#: engine/core/models.py:1305 msgid "promocode already used" msgstr "Kod promocyjny został już wykorzystany" -#: engine/core/models.py:1234 +#: engine/core/models.py:1327 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Nieprawidłowy typ rabatu dla kodu promocyjnego {self.uuid}!" -#: engine/core/models.py:1243 +#: engine/core/models.py:1336 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 " @@ -2455,143 +2499,143 @@ msgstr "" "Funkcjonalność wspiera również zarządzanie produktami w cyklu życia " "zamówienia." -#: engine/core/models.py:1260 +#: engine/core/models.py:1357 msgid "the billing address used for this order" msgstr "Adres rozliczeniowy użyty dla tego zamówienia" -#: engine/core/models.py:1268 +#: engine/core/models.py:1365 msgid "optional promo code applied to this order" msgstr "Opcjonalny kod promocyjny zastosowany do tego zamówienia" -#: engine/core/models.py:1269 +#: engine/core/models.py:1366 msgid "applied promo code" msgstr "Zastosowany kod promocyjny" -#: engine/core/models.py:1277 +#: engine/core/models.py:1374 msgid "the shipping address used for this order" msgstr "Adres wysyłki użyty dla tego zamówienia" -#: engine/core/models.py:1278 +#: engine/core/models.py:1375 msgid "shipping address" msgstr "Adres wysyłki" -#: engine/core/models.py:1284 +#: engine/core/models.py:1381 msgid "current status of the order in its lifecycle" msgstr "Aktualny status zamówienia w jego cyklu życia" -#: engine/core/models.py:1285 +#: engine/core/models.py:1382 msgid "order status" msgstr "Status zamówienia" -#: engine/core/models.py:1290 engine/core/models.py:1889 +#: engine/core/models.py:1387 engine/core/models.py:1997 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" -#: engine/core/models.py:1296 +#: engine/core/models.py:1393 msgid "json representation of order attributes for this order" msgstr "Reprezentacja JSON atrybutów zamówienia dla tego zamówienia" -#: engine/core/models.py:1302 +#: engine/core/models.py:1399 msgid "the user who placed the order" msgstr "Użytkownik, który złożył zamówienie" -#: engine/core/models.py:1303 +#: engine/core/models.py:1400 msgid "user" msgstr "Użytkownik" -#: engine/core/models.py:1309 +#: engine/core/models.py:1406 msgid "the timestamp when the order was finalized" msgstr "Znacznik czasu, kiedy zamówienie zostało sfinalizowane" -#: engine/core/models.py:1310 +#: engine/core/models.py:1407 msgid "buy time" msgstr "Kup czas" -#: engine/core/models.py:1317 +#: engine/core/models.py:1414 msgid "a human-readable identifier for the order" msgstr "Czytelny dla człowieka identyfikator zamówienia" -#: engine/core/models.py:1318 +#: engine/core/models.py:1415 msgid "human readable id" msgstr "Identyfikator czytelny dla człowieka" -#: engine/core/models.py:1324 +#: engine/core/models.py:1421 msgid "order" msgstr "Zamówienie" -#: engine/core/models.py:1371 +#: engine/core/models.py:1468 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!" -#: engine/core/models.py:1404 +#: engine/core/models.py:1504 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." -#: engine/core/models.py:1410 +#: engine/core/models.py:1510 msgid "you cannot add inactive products to order" msgstr "Nie można dodać nieaktywnych produktów do zamówienia" -#: engine/core/models.py:1432 +#: engine/core/models.py:1533 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" -#: engine/core/models.py:1456 engine/core/models.py:1485 -#: engine/core/models.py:1495 +#: engine/core/models.py:1557 engine/core/models.py:1586 +#: engine/core/models.py:1596 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." -#: engine/core/models.py:1480 +#: engine/core/models.py:1581 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} nie istnieje z zapytaniem <{query}>!" -#: engine/core/models.py:1519 +#: engine/core/models.py:1620 msgid "promocode does not exist" msgstr "Kod promocyjny nie istnieje" -#: engine/core/models.py:1534 +#: engine/core/models.py:1635 msgid "you can only buy physical products with shipping address specified" msgstr "Możesz kupować tylko produkty fizyczne z podanym adresem wysyłki!" -#: engine/core/models.py:1555 +#: engine/core/models.py:1656 msgid "address does not exist" msgstr "Adres nie istnieje" -#: engine/core/models.py:1577 engine/core/models.py:1656 +#: engine/core/models.py:1678 engine/core/models.py:1757 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." -#: engine/core/models.py:1583 engine/core/models.py:1649 +#: engine/core/models.py:1684 engine/core/models.py:1750 msgid "invalid force value" msgstr "Nieprawidłowa wartość siły" -#: engine/core/models.py:1589 engine/core/models.py:1660 +#: engine/core/models.py:1690 engine/core/models.py:1761 msgid "you cannot purchase an empty order!" msgstr "Nie można kupić pustego zamówienia!" -#: engine/core/models.py:1610 +#: engine/core/models.py:1711 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." -#: engine/core/models.py:1624 +#: engine/core/models.py:1725 msgid "a user without a balance cannot buy with balance" msgstr "Użytkownik bez salda nie może kupować za saldo!" -#: engine/core/models.py:1630 +#: engine/core/models.py:1731 msgid "insufficient funds to complete the order" msgstr "Niewystarczające środki do zrealizowania zamówienia" -#: engine/core/models.py:1671 +#: engine/core/models.py:1772 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2600,7 +2644,7 @@ msgstr "" "informacje: imię i nazwisko klienta, adres e-mail klienta, numer telefonu " "klienta." -#: engine/core/models.py:1682 +#: engine/core/models.py:1783 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2608,7 +2652,7 @@ msgstr "" "Nieprawidłowa metoda płatności: {payment_method} z " "{available_payment_methods}!" -#: engine/core/models.py:1813 +#: engine/core/models.py:1916 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2624,34 +2668,34 @@ msgstr "" "Klasa wykorzystuje pola bazy danych do efektywnego modelowania i zarządzania" " danymi opinii." -#: engine/core/models.py:1825 +#: engine/core/models.py:1928 msgid "user-provided comments about their experience with the product" msgstr "Komentarze użytkowników na temat ich doświadczeń z produktem" -#: engine/core/models.py:1826 +#: engine/core/models.py:1929 msgid "feedback comments" msgstr "Komentarze zwrotne" -#: engine/core/models.py:1834 +#: engine/core/models.py:1937 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." -#: engine/core/models.py:1836 +#: engine/core/models.py:1939 msgid "related order product" msgstr "Powiązany produkt zamówienia" -#: engine/core/models.py:1841 +#: engine/core/models.py:1944 msgid "user-assigned rating for the product" msgstr "Ocena produktu przypisana przez użytkownika" -#: engine/core/models.py:1842 +#: engine/core/models.py:1945 msgid "product rating" msgstr "Ocena produktu" -#: engine/core/models.py:1862 +#: engine/core/models.py:1965 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2673,112 +2717,112 @@ msgstr "" "pobierania dla produktów cyfrowych. Model ten integruje się z modelami Order" " i Product i przechowuje odniesienia do nich." -#: engine/core/models.py:1877 +#: engine/core/models.py:1985 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." -#: engine/core/models.py:1878 +#: engine/core/models.py:1986 msgid "purchase price at order time" msgstr "Cena zakupu w momencie zamówienia" -#: engine/core/models.py:1883 +#: engine/core/models.py:1991 msgid "internal comments for admins about this ordered product" msgstr "" "Wewnętrzne komentarze dla administratorów dotyczące tego zamówionego " "produktu" -#: engine/core/models.py:1884 +#: engine/core/models.py:1992 msgid "internal comments" msgstr "Uwagi wewnętrzne" -#: engine/core/models.py:1890 +#: engine/core/models.py:1998 msgid "user notifications" msgstr "Powiadomienia użytkownika" -#: engine/core/models.py:1895 +#: engine/core/models.py:2003 msgid "json representation of this item's attributes" msgstr "Reprezentacja JSON atrybutów tego elementu" -#: engine/core/models.py:1896 +#: engine/core/models.py:2004 msgid "ordered product attributes" msgstr "Zamówione atrybuty produktu" -#: engine/core/models.py:1901 +#: engine/core/models.py:2009 msgid "reference to the parent order that contains this product" msgstr "Odniesienie do zamówienia nadrzędnego zawierającego ten produkt" -#: engine/core/models.py:1902 +#: engine/core/models.py:2010 msgid "parent order" msgstr "Zamówienie nadrzędne" -#: engine/core/models.py:1911 +#: engine/core/models.py:2019 msgid "the specific product associated with this order line" msgstr "Konkretny produkt powiązany z tą linią zamówienia" -#: engine/core/models.py:1918 +#: engine/core/models.py:2026 msgid "quantity of this specific product in the order" msgstr "Ilość tego konkretnego produktu w zamówieniu" -#: engine/core/models.py:1919 +#: engine/core/models.py:2027 msgid "product quantity" msgstr "Ilość produktu" -#: engine/core/models.py:1926 +#: engine/core/models.py:2034 msgid "current status of this product in the order" msgstr "Aktualny status tego produktu w zamówieniu" -#: engine/core/models.py:1927 +#: engine/core/models.py:2035 msgid "product line status" msgstr "Status linii produktów" -#: engine/core/models.py:1998 +#: engine/core/models.py:2106 msgid "order product must have an order" msgstr "Orderproduct musi mieć powiązane zamówienie!" -#: engine/core/models.py:2000 +#: engine/core/models.py:2108 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Nieprawidłowa akcja określona dla informacji zwrotnej: {action}!" -#: engine/core/models.py:2017 +#: engine/core/models.py:2125 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." -#: engine/core/models.py:2026 +#: engine/core/models.py:2132 engine/core/models.py:2227 msgid "name" msgstr "Nazwa" -#: engine/core/models.py:2028 +#: engine/core/models.py:2134 msgid "URL of the integration" msgstr "Adres URL integracji" -#: engine/core/models.py:2031 +#: engine/core/models.py:2137 msgid "authentication credentials" msgstr "Dane uwierzytelniające" -#: engine/core/models.py:2054 +#: engine/core/models.py:2160 msgid "you can only have one default CRM provider" msgstr "Można mieć tylko jednego domyślnego dostawcę CRM" -#: engine/core/models.py:2064 +#: engine/core/models.py:2170 msgid "CRM" msgstr "CRM" -#: engine/core/models.py:2065 +#: engine/core/models.py:2171 msgid "CRMs" msgstr "CRM" -#: engine/core/models.py:2081 +#: engine/core/models.py:2187 msgid "order CRM link" msgstr "Łącze CRM zamówienia" -#: engine/core/models.py:2082 +#: engine/core/models.py:2188 msgid "orders CRM links" msgstr "Łącza CRM zamówień" -#: engine/core/models.py:2087 +#: engine/core/models.py:2193 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2795,14 +2839,38 @@ msgstr "" "generowania adresu URL do pobrania zasobu, gdy powiązane zamówienie ma " "status ukończonego." -#: engine/core/models.py:2103 +#: engine/core/models.py:2209 msgid "download" msgstr "Pobierz" -#: engine/core/models.py:2104 +#: engine/core/models.py:2210 msgid "downloads" msgstr "Pliki do pobrania" +#: engine/core/models.py:2228 +msgid "descriptive name for the image" +msgstr "Opisowa nazwa obrazu" + +#: engine/core/models.py:2233 +msgid "image file pasted in the markdown editor" +msgstr "Plik obrazu wklejony w edytorze Markdown" + +#: engine/core/models.py:2239 +msgid "alt text" +msgstr "Inny tekst" + +#: engine/core/models.py:2240 +msgid "alternative text for accessibility" +msgstr "Tekst alternatywny dla dostępności" + +#: engine/core/models.py:2244 +msgid "pasted image" +msgstr "Wklejony obraz" + +#: engine/core/models.py:2245 +msgid "pasted images" +msgstr "Wklejone obrazy" + #: engine/core/serializers/utility.py:91 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." @@ -2811,6 +2879,16 @@ msgstr "" "zamówienia." #: engine/core/sitemaps.py:25 +#: engine/core/templates/admin_doc/bookmarklets.html:8 +#: engine/core/templates/admin_doc/index.html:8 +#: engine/core/templates/admin_doc/missing_docutils.html:8 +#: engine/core/templates/admin_doc/model_detail.html:8 +#: engine/core/templates/admin_doc/model_index.html:8 +#: engine/core/templates/admin_doc/template_detail.html:8 +#: engine/core/templates/admin_doc/template_filter_index.html:8 +#: engine/core/templates/admin_doc/template_tag_index.html:8 +#: engine/core/templates/admin_doc/view_detail.html:8 +#: engine/core/templates/admin_doc/view_index.html:8 msgid "Home" msgstr "Strona główna" @@ -2863,45 +2941,34 @@ msgstr "Brutto" msgid "Dashboard" msgstr "Pulpit nawigacyjny" -#: engine/core/templates/admin/dashboard/_income_overview.html:7 +#: engine/core/templates/admin/dashboard/_income_overview.html:6 msgid "Income overview" msgstr "Przegląd dochodów" -#: engine/core/templates/admin/dashboard/_income_overview.html:31 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Net" +#: engine/core/templates/admin/dashboard/_income_overview.html:16 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" msgstr "Przychody netto" -#: engine/core/templates/admin/dashboard/_income_overview.html:37 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Taxes" -msgstr "Podatki" - -#: engine/core/templates/admin/dashboard/_income_overview.html:43 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 +#: engine/core/templates/admin/dashboard/_income_overview.html:21 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 msgid "Returns" msgstr "Zwroty" -#: engine/core/templates/admin/dashboard/_income_overview.html:48 -msgid "Gross (pie total)" -msgstr "Przychód brutto" - -#: engine/core/templates/admin/dashboard/_income_overview.html:72 -msgid "No data" -msgstr "Brak daty" - +#: engine/core/templates/admin/dashboard/_income_overview.html:26 #: engine/core/templates/admin/dashboard/_kpis.html:6 msgid "GMV" msgstr "GMV" +#: engine/core/templates/admin/dashboard/_income_overview.html:50 +msgid "No data" +msgstr "Brak daty" + #: engine/core/templates/admin/dashboard/_kpis.html:34 msgid "AOV" msgstr "AOV" -#: engine/core/templates/admin/dashboard/_kpis.html:48 -msgid "Net revenue" -msgstr "Przychody netto" - #: engine/core/templates/admin/dashboard/_kpis.html:62 msgid "Refund rate" msgstr "Stopa zwrotu" @@ -2914,7 +2981,7 @@ msgstr "Zwrócony" msgid "Low stock" msgstr "Niskie stany magazynowe" -#: engine/core/templates/admin/dashboard/_low_stock.html:29 +#: engine/core/templates/admin/dashboard/_low_stock.html:33 msgid "No low stock items." msgstr "Brak pozycji o niskim stanie magazynowym." @@ -2971,6 +3038,303 @@ msgstr "Brak sprzedaży kategorii w ciągu ostatnich 30 dni." msgid "Django site admin" msgstr "Administrator strony Django" +#: engine/core/templates/admin_doc/bookmarklets.html:4 +#: engine/core/templates/admin_doc/bookmarklets.html:17 +msgid "Documentation bookmarklets" +msgstr "Zakładki dokumentacji" + +#: engine/core/templates/admin_doc/bookmarklets.html:10 +#: engine/core/templates/admin_doc/index.html:4 +#: engine/core/templates/admin_doc/index.html:10 +#: engine/core/templates/admin_doc/index.html:15 +#: engine/core/templates/admin_doc/missing_docutils.html:10 +#: engine/core/templates/admin_doc/missing_docutils.html:19 +#: engine/core/templates/admin_doc/model_detail.html:10 +#: engine/core/templates/admin_doc/model_index.html:10 +#: engine/core/templates/admin_doc/template_detail.html:10 +#: engine/core/templates/admin_doc/template_filter_index.html:10 +#: engine/core/templates/admin_doc/template_tag_index.html:10 +#: engine/core/templates/admin_doc/view_detail.html:10 +#: engine/core/templates/admin_doc/view_index.html:10 +msgid "Documentation" +msgstr "Dokumentacja" + +#: engine/core/templates/admin_doc/bookmarklets.html:12 +#: engine/core/templates/admin_doc/index.html:53 +msgid "Bookmarklets" +msgstr "Zakładki" + +#: engine/core/templates/admin_doc/bookmarklets.html:19 +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Aby zainstalować skrypty, przeciągnij link do paska zakładek lub kliknij " +"prawym przyciskiem myszy na link i dodaj go do zakładek. Teraz możesz wybrać" +" skrypt z dowolnej strony w witrynie." + +#: engine/core/templates/admin_doc/bookmarklets.html:29 +msgid "Documentation for this page" +msgstr "Dokumentacja tej strony" + +#: engine/core/templates/admin_doc/bookmarklets.html:31 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Przenosi użytkownika z dowolnej strony do dokumentacji widoku, który " +"generuje tę stronę." + +#: engine/core/templates/admin_doc/index.html:21 +#: engine/core/templates/admin_doc/model_detail.html:12 +#: engine/core/templates/admin_doc/model_index.html:4 +#: engine/core/templates/admin_doc/model_index.html:12 +msgid "Models" +msgstr "Modele" + +#: engine/core/templates/admin_doc/index.html:23 +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Modele są opisami wszystkich obiektów w systemie i powiązanych z nimi pól. " +"Każdy model posiada listę pól, do których można uzyskać dostęp jako zmienne " +"szablonu." + +#: engine/core/templates/admin_doc/index.html:29 +#: engine/core/templates/admin_doc/view_detail.html:12 +#: engine/core/templates/admin_doc/view_index.html:4 +#: engine/core/templates/admin_doc/view_index.html:12 +msgid "Views" +msgstr "Widoki" + +#: engine/core/templates/admin_doc/index.html:31 +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Każda strona w witrynie publicznej jest generowana przez widok. Widok " +"określa, który szablon jest używany do generowania strony i które obiekty są" +" dostępne dla tego szablonu." + +#: engine/core/templates/admin_doc/index.html:39 +msgid "List of all the template tags and their functions." +msgstr "Lista wszystkich tagów szablonów i ich funkcji." + +#: engine/core/templates/admin_doc/index.html:45 +#: engine/core/templates/admin_doc/template_filter_index.html:12 +msgid "Filters" +msgstr "Filtry" + +#: engine/core/templates/admin_doc/index.html:47 +msgid "" +"Filters are actions which can be applied to variables in a template to alter" +" the output." +msgstr "" +"Filtry to działania, które można zastosować do zmiennych w szablonie w celu " +"zmiany wyniku." + +#: engine/core/templates/admin_doc/index.html:55 +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Narzędzia dla przeglądarki umożliwiające szybki dostęp do funkcji " +"administracyjnych." + +#: engine/core/templates/admin_doc/missing_docutils.html:4 +msgid "Please install docutils" +msgstr "Proszę zainstalować docutils." + +#: engine/core/templates/admin_doc/missing_docutils.html:20 +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"System dokumentacji administracyjnej wymaga biblioteki Python docutils." + +#: engine/core/templates/admin_doc/missing_docutils.html:21 +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Poproś administratorów o zainstalowanie docutils." + +#: engine/core/templates/admin_doc/model_detail.html:4 +#, python-format +msgid "Model: %(name)s" +msgstr "Model: %(name)s" + +#: engine/core/templates/admin_doc/model_detail.html:29 +msgid "Fields" +msgstr "Pola" + +#: engine/core/templates/admin_doc/model_detail.html:36 +msgid "Field" +msgstr "Pole" + +#: engine/core/templates/admin_doc/model_detail.html:37 +msgid "Type" +msgstr "Typ" + +#: engine/core/templates/admin_doc/model_detail.html:38 +#: engine/core/templates/admin_doc/model_detail.html:70 +msgid "Description" +msgstr "Opis" + +#: engine/core/templates/admin_doc/model_detail.html:61 +msgid "Methods with arguments" +msgstr "Metody z argumentami" + +#: engine/core/templates/admin_doc/model_detail.html:68 +msgid "Method" +msgstr "Metoda" + +#: engine/core/templates/admin_doc/model_detail.html:69 +msgid "Arguments" +msgstr "Argumenty" + +#: engine/core/templates/admin_doc/model_detail.html:89 +msgid "Back to Model documentation" +msgstr "Powrót do dokumentacji modelu" + +#: engine/core/templates/admin_doc/model_index.html:17 +msgid "Model documentation" +msgstr "Dokumentacja modelu" + +#: engine/core/templates/admin_doc/model_index.html:44 +msgid "Model groups" +msgstr "Grupy modelowe" + +#: engine/core/templates/admin_doc/template_detail.html:4 +#, python-format +msgid "Template: %(name)s" +msgstr "Szablon: %(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:12 +msgid "Templates" +msgstr "Szablony" + +#: engine/core/templates/admin_doc/template_detail.html:17 +#, python-format +msgid "" +"Template: %(name)s" +msgstr "" +"Szablon: %(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:21 +#, python-format +msgid "Search path for template %(name)s:" +msgstr "Ścieżka wyszukiwania szablonu %(name)s:" + +#: engine/core/templates/admin_doc/template_detail.html:29 +msgid "(does not exist)" +msgstr "(nie istnieje)" + +#: engine/core/templates/admin_doc/template_detail.html:40 +msgid "Back to Documentation" +msgstr "Powrót do dokumentacji" + +#: engine/core/templates/admin_doc/template_filter_index.html:4 +msgid "Template filters" +msgstr "Filtry szablonów" + +#: engine/core/templates/admin_doc/template_filter_index.html:17 +msgid "Template filter documentation" +msgstr "Dokumentacja filtra szablonów" + +#: engine/core/templates/admin_doc/template_filter_index.html:26 +#: engine/core/templates/admin_doc/template_filter_index.html:52 +msgid "Built-in filters" +msgstr "Wbudowane filtry" + +#: engine/core/templates/admin_doc/template_filter_index.html:29 +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before using" +" the filter." +msgstr "" +"Aby użyć tych filtrów, umieść %(code)s w swoim szablonie przed " +"użyciem filtra." + +#: engine/core/templates/admin_doc/template_tag_index.html:4 +msgid "Template tags" +msgstr "Tagi szablonów" + +#: engine/core/templates/admin_doc/template_tag_index.html:17 +msgid "Template tag documentation" +msgstr "Dokumentacja tagów szablonów" + +#: engine/core/templates/admin_doc/template_tag_index.html:26 +#: engine/core/templates/admin_doc/template_tag_index.html:52 +msgid "Built-in tags" +msgstr "Wbudowane tagi" + +#: engine/core/templates/admin_doc/template_tag_index.html:29 +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using the tag." +msgstr "" +"Aby użyć tych tagów, umieść %(code)s w swoim szablonie przed " +"użyciem tagu." + +#: engine/core/templates/admin_doc/view_detail.html:4 +#, python-format +msgid "View: %(name)s" +msgstr "Widok: %(name)s" + +#: engine/core/templates/admin_doc/view_detail.html:28 +msgid "Context:" +msgstr "Kontekst:" + +#: engine/core/templates/admin_doc/view_detail.html:33 +msgid "Templates:" +msgstr "Szablony:" + +#: engine/core/templates/admin_doc/view_detail.html:41 +msgid "Back to View documentation" +msgstr "Powrót do przeglądania dokumentacji" + +#: engine/core/templates/admin_doc/view_index.html:17 +msgid "View documentation" +msgstr "Zobacz dokumentację" + +#: engine/core/templates/admin_doc/view_index.html:28 +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Widoki według przestrzeni nazw %(name)s" + +#: engine/core/templates/admin_doc/view_index.html:30 +msgid "Views by empty namespace" +msgstr "Widoki według pustej przestrzeni nazw" + +#: engine/core/templates/admin_doc/view_index.html:40 +#, python-format +msgid "" +"View function: %(full_name)s. Name: %(url_name)s." +msgstr "" +"Funkcja widoku: %(full_name)s. Nazwa: " +"%(url_name)s." + +#: engine/core/templates/admin_doc/view_index.html:54 +msgid "Jump to namespace" +msgstr "Przejdź do przestrzeni nazw" + +#: engine/core/templates/admin_doc/view_index.html:59 +msgid "Empty namespace" +msgstr "Pusta przestrzeń nazw" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -3071,7 +3435,7 @@ msgstr "" " informacje" #: engine/core/templates/digital_order_delivered_email.html:137 -#: engine/core/templates/json_table_widget.html:6 +#: engine/core/templates/json_table_widget.html:26 msgid "value" msgstr "Wartość" @@ -3091,11 +3455,23 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "Najlepsze pozdrowienia,
zespół %(project_name)s" -#: engine/core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:7 +msgid "Key" +msgstr "Klucz" + +#: engine/core/templates/json_table_widget.html:8 +msgid "Value" +msgstr "Wartość" + +#: engine/core/templates/json_table_widget.html:19 msgid "key" msgstr "Klucz" -#: engine/core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:32 +msgid "Delete row" +msgstr "Usuń wiersz" + +#: engine/core/templates/json_table_widget.html:44 msgid "Add Row" msgstr "Dodaj wiersz" @@ -3184,13 +3560,22 @@ msgstr "Nie masz uprawnień do wykonania tej akcji." msgid "NOMINATIM_URL must be configured." msgstr "Parametr NOMINATIM_URL musi być skonfigurowany!" -#: engine/core/validators.py:23 +#: engine/core/validators.py:18 +msgid "could not determine file type" +msgstr "Nie można określić typu pliku." + +#: engine/core/validators.py:24 +#, python-brace-format +msgid "unsupported video format. supported formats: {supported}" +msgstr "Nieobsługiwany format wideo. Obsługiwane formaty: {supported}" + +#: engine/core/validators.py:45 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "Wymiary obrazu nie powinny przekraczać w{max_width} x h{max_height} pikseli." -#: engine/core/views.py:104 +#: engine/core/views.py:108 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3198,7 +3583,7 @@ msgstr "" "Obsługuje żądanie indeksu mapy witryny i zwraca odpowiedź XML. Zapewnia, że " "odpowiedź zawiera odpowiedni nagłówek typu zawartości dla XML." -#: engine/core/views.py:119 +#: engine/core/views.py:123 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3208,16 +3593,16 @@ msgstr "" "przetwarza żądanie, pobiera odpowiednią szczegółową odpowiedź mapy witryny i" " ustawia nagłówek Content-Type dla XML." -#: engine/core/views.py:155 +#: engine/core/views.py:174 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "Zwraca listę obsługiwanych języków i odpowiadające im informacje." -#: engine/core/views.py:182 +#: engine/core/views.py:201 msgid "Returns the parameters of the website as a JSON object." msgstr "Zwraca parametry strony internetowej jako obiekt JSON." -#: engine/core/views.py:198 +#: engine/core/views.py:217 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3225,11 +3610,11 @@ msgstr "" "Obsługuje operacje pamięci podręcznej, takie jak odczytywanie i ustawianie " "danych pamięci podręcznej z określonym kluczem i limitem czasu." -#: engine/core/views.py:220 +#: engine/core/views.py:239 msgid "Handles `contact us` form submissions." msgstr "Obsługuje zgłoszenia formularzy `kontaktuj się z nami`." -#: engine/core/views.py:236 +#: engine/core/views.py:255 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3237,15 +3622,15 @@ msgstr "" "Obsługuje żądania przetwarzania i sprawdzania poprawności adresów URL z " "przychodzących żądań POST." -#: engine/core/views.py:273 +#: engine/core/views.py:292 msgid "Handles global search queries." msgstr "Obsługuje globalne zapytania wyszukiwania." -#: engine/core/views.py:289 +#: engine/core/views.py:308 msgid "Handles the logic of buying as a business without registration." msgstr "Obsługuje logikę zakupu jako firma bez rejestracji." -#: engine/core/views.py:337 +#: engine/core/views.py:356 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3253,31 +3638,31 @@ msgstr "" "Obsługuje pobieranie zasobu cyfrowego powiązanego z zamówieniem.\n" "Ta funkcja próbuje obsłużyć plik zasobu cyfrowego znajdujący się w katalogu przechowywania projektu. Jeśli plik nie zostanie znaleziony, zgłaszany jest błąd HTTP 404 wskazujący, że zasób jest niedostępny." -#: engine/core/views.py:348 +#: engine/core/views.py:367 msgid "order_product_uuid is required" msgstr "Order_product_uuid jest wymagany" -#: engine/core/views.py:355 +#: engine/core/views.py:374 msgid "order product does not exist" msgstr "zamówiony produkt nie istnieje" -#: engine/core/views.py:358 +#: engine/core/views.py:377 msgid "you can only download the digital asset once" msgstr "Zasób cyfrowy można pobrać tylko raz" -#: engine/core/views.py:362 +#: engine/core/views.py:381 msgid "the order must be paid before downloading the digital asset" msgstr "zamówienie musi zostać opłacone przed pobraniem zasobu cyfrowego" -#: engine/core/views.py:369 +#: engine/core/views.py:388 msgid "the order product does not have a product" msgstr "Produkt zamówienia nie ma produktu" -#: engine/core/views.py:412 +#: engine/core/views.py:431 msgid "favicon not found" msgstr "nie znaleziono favicon" -#: engine/core/views.py:418 +#: engine/core/views.py:437 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3285,7 +3670,7 @@ msgstr "" "Obsługuje żądania favicon strony internetowej.\n" "Ta funkcja próbuje obsłużyć plik favicon znajdujący się w katalogu statycznym projektu. Jeśli plik favicon nie zostanie znaleziony, zgłaszany jest błąd HTTP 404 wskazujący, że zasób jest niedostępny." -#: engine/core/views.py:432 +#: engine/core/views.py:451 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3296,16 +3681,20 @@ msgstr "" "administratora Django. Używa funkcji `redirect` Django do obsługi " "przekierowania HTTP." -#: engine/core/views.py:445 +#: engine/core/views.py:464 msgid "Returns current version of the Schon. " msgstr "Zwraca aktualną wersję aplikacji Schon." -#: engine/core/views.py:674 engine/core/views.py:689 +#: engine/core/views.py:475 +msgid "no image file provided" +msgstr "Brak pliku obrazu" + +#: engine/core/views.py:710 engine/core/views.py:725 #, python-format msgid "Revenue & Orders (last %(days)d)" msgstr "Przychody i zamówienia (ostatnie %(days)d)" -#: engine/core/views.py:870 +#: engine/core/views.py:911 msgid "Returns custom variables for Dashboard. " msgstr "Zwraca zmienne niestandardowe dla Dashboard." @@ -3393,7 +3782,7 @@ msgstr "" "Brand. Używa frameworka ViewSet Django, aby uprościć implementację punktów " "końcowych API dla obiektów Brand." -#: engine/core/viewsets.py:458 +#: engine/core/viewsets.py:460 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3411,7 +3800,15 @@ msgstr "" " szczegółów produktu, stosowania uprawnień i uzyskiwania dostępu do " "powiązanych informacji zwrotnych o produkcie." -#: engine/core/viewsets.py:605 +#: engine/core/viewsets.py:541 +msgid "identificator_type and identificators are required" +msgstr "identificator_type i identificators są wymagane" + +#: engine/core/viewsets.py:554 +msgid "identificator_type must be one of: uuid, slug, sku" +msgstr "identificator_type musi być jednym z następujących: uuid, slug, sku" + +#: engine/core/viewsets.py:635 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3425,7 +3822,7 @@ msgstr "" " do obsługi różnych działań. Celem tej klasy jest zapewnienie usprawnionego " "dostępu do zasobów związanych z Vendorem poprzez framework Django REST." -#: engine/core/viewsets.py:625 +#: engine/core/viewsets.py:655 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3442,7 +3839,7 @@ msgstr "" "bazowy `SchonViewSet` i wykorzystuje system filtrowania Django do " "odpytywania danych." -#: engine/core/viewsets.py:652 +#: engine/core/viewsets.py:682 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3461,7 +3858,7 @@ msgstr "" "wykorzystuje wiele serializatorów w oparciu o konkretną wykonywaną akcję i " "odpowiednio egzekwuje uprawnienia podczas interakcji z danymi zamówienia." -#: engine/core/viewsets.py:914 +#: engine/core/viewsets.py:944 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3476,26 +3873,26 @@ msgstr "" "szczegółową akcję do obsługi informacji zwrotnych na temat instancji " "OrderProduct" -#: engine/core/viewsets.py:974 +#: engine/core/viewsets.py:1004 msgid "Manages operations related to Product images in the application. " msgstr "Zarządza operacjami związanymi z obrazami produktów w aplikacji." -#: engine/core/viewsets.py:988 +#: engine/core/viewsets.py:1018 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." -#: engine/core/viewsets.py:1019 +#: engine/core/viewsets.py:1049 msgid "Represents a view set for managing promotions. " msgstr "Reprezentuje zestaw widoków do zarządzania promocjami." -#: engine/core/viewsets.py:1032 +#: engine/core/viewsets.py:1062 msgid "Handles operations related to Stock data in the system." msgstr "Obsługuje operacje związane z danymi Stock w systemie." -#: engine/core/viewsets.py:1046 +#: engine/core/viewsets.py:1076 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3513,7 +3910,7 @@ msgstr "" "że użytkownicy mogą zarządzać tylko własnymi listami życzeń, chyba że " "zostaną przyznane wyraźne uprawnienia." -#: engine/core/viewsets.py:1183 +#: engine/core/viewsets.py:1213 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3527,12 +3924,12 @@ msgstr "" "wyspecjalizowane zachowania dla różnych metod HTTP, zastępowanie serializera" " i obsługę uprawnień w oparciu o kontekst żądania." -#: engine/core/viewsets.py:1254 +#: engine/core/viewsets.py:1275 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Błąd geokodowania: {e}" -#: engine/core/viewsets.py:1262 +#: engine/core/viewsets.py:1283 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/pt_BR/LC_MESSAGES/django.mo b/engine/core/locale/pt_BR/LC_MESSAGES/django.mo index fe8da408..f4ee8665 100644 Binary files a/engine/core/locale/pt_BR/LC_MESSAGES/django.mo and b/engine/core/locale/pt_BR/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/pt_BR/LC_MESSAGES/django.po b/engine/core/locale/pt_BR/LC_MESSAGES/django.po index 20472144..a4d0b6d7 100644 --- a/engine/core/locale/pt_BR/LC_MESSAGES/django.po +++ b/engine/core/locale/pt_BR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -51,117 +51,137 @@ msgstr "Modificado" msgid "when the object was last modified" msgstr "Quando o objeto foi editado pela última vez" -#: engine/core/admin.py:94 +#: engine/core/admin.py:98 msgid "translations" msgstr "Traduções" -#: engine/core/admin.py:102 +#: engine/core/admin.py:106 msgid "general" msgstr "Geral" -#: engine/core/admin.py:106 +#: engine/core/admin.py:110 msgid "relations" msgstr "Relações" -#: engine/core/admin.py:111 +#: engine/core/admin.py:115 msgid "additional info" msgstr "informações adicionais" -#: engine/core/admin.py:133 +#: engine/core/admin.py:137 msgid "metadata" msgstr "Metadados" -#: engine/core/admin.py:141 +#: engine/core/admin.py:145 msgid "timestamps" msgstr "Carimbos de data/hora" -#: engine/core/admin.py:158 +#: engine/core/admin.py:162 #, python-format msgid "Activate selected %(verbose_name_plural)s" msgstr "Ativar %(verbose_name_plural)s selecionado" -#: engine/core/admin.py:166 +#: engine/core/admin.py:170 msgid "selected items have been activated." msgstr "Os itens selecionados foram ativados!" -#: engine/core/admin.py:174 +#: engine/core/admin.py:178 #, python-format msgid "Deactivate selected %(verbose_name_plural)s" msgstr "Desativar o selecionado %(verbose_name_plural)s" -#: engine/core/admin.py:184 +#: engine/core/admin.py:188 msgid "selected items have been deactivated." msgstr "Os itens selecionados foram desativados!" -#: engine/core/admin.py:196 engine/core/graphene/object_types.py:653 -#: engine/core/graphene/object_types.py:660 engine/core/models.py:832 -#: engine/core/models.py:840 +#: engine/core/admin.py:200 engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:673 engine/core/models.py:918 +#: engine/core/models.py:928 msgid "attribute value" msgstr "Valor do atributo" -#: engine/core/admin.py:197 engine/core/graphene/object_types.py:77 -#: engine/core/models.py:841 +#: engine/core/admin.py:201 engine/core/graphene/object_types.py:81 +#: engine/core/models.py:929 msgid "attribute values" msgstr "Valores de atributos" -#: engine/core/admin.py:208 +#: engine/core/admin.py:212 engine/core/models.py:2232 msgid "image" msgstr "Imagem" -#: engine/core/admin.py:209 engine/core/graphene/object_types.py:530 +#: engine/core/admin.py:213 engine/core/graphene/object_types.py:535 msgid "images" msgstr "Imagens" -#: engine/core/admin.py:220 engine/core/models.py:576 +#: engine/core/admin.py:224 engine/core/models.py:635 msgid "stock" msgstr "Estoque" -#: engine/core/admin.py:221 engine/core/graphene/object_types.py:713 +#: engine/core/admin.py:225 engine/core/graphene/object_types.py:735 msgid "stocks" msgstr "Ações" -#: engine/core/admin.py:232 engine/core/models.py:1938 +#: engine/core/admin.py:236 engine/core/models.py:2046 msgid "order product" msgstr "Pedido de produto" -#: engine/core/admin.py:233 engine/core/graphene/object_types.py:441 -#: engine/core/models.py:1939 +#: engine/core/admin.py:237 engine/core/graphene/object_types.py:446 +#: engine/core/models.py:2047 msgid "order products" msgstr "Solicitar produtos" -#: engine/core/admin.py:251 engine/core/admin.py:252 +#: engine/core/admin.py:255 engine/core/admin.py:256 msgid "children" msgstr "Crianças" -#: engine/core/admin.py:528 +#: engine/core/admin.py:545 +msgid "video preview" +msgstr "Pré-visualização do vídeo" + +#: engine/core/admin.py:551 msgid "has images" msgstr "Tem imagens" -#: engine/core/admin.py:531 +#: engine/core/admin.py:554 #, python-format msgid "Export selected %(verbose_name_plural)s to marketplaces' feeds" msgstr "Exportar %(verbose_name_plural)s selecionado para feeds de mercados" -#: engine/core/admin.py:542 +#: engine/core/admin.py:565 #, python-format msgid "selected %(verbose_name_plural)s have been marked for export." msgstr "" "Os arquivos selecionados %(verbose_name_plural)s foram marcados para " "exportação." -#: engine/core/admin.py:553 +#: engine/core/admin.py:576 #, python-format msgid "Ban selected %(verbose_name_plural)s from marketplaces' feeds" msgstr "Banir %(verbose_name_plural)s selecionado dos feeds dos mercados" -#: engine/core/admin.py:564 +#: engine/core/admin.py:587 #, python-format msgid "selected %(verbose_name_plural)s have been banned from export." msgstr "" "Os produtos selecionados %(verbose_name_plural)s foram proibidos de " "exportação." -#: engine/core/admin.py:1116 +#: engine/core/admin.py:1030 +msgid "Preview" +msgstr "Pré-visualização" + +#: engine/core/admin.py:1031 +msgid "Metadata" +msgstr "Metadados" + +#: engine/core/admin.py:1034 +msgid "preview" +msgstr "Pré-visualização" + +#: engine/core/admin.py:1043 +msgid "image preview" +msgstr "Pré-visualização da imagem" + +#: engine/core/admin.py:1166 msgid "Config" msgstr "Configuração" @@ -228,7 +248,7 @@ msgstr "" "negociação de conteúdo. O idioma pode ser selecionado com Accept-Language e " "com o parâmetro de consulta." -#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:36 +#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "E/S do cache" @@ -252,7 +272,7 @@ msgstr "Obter os parâmetros expostos do aplicativo" msgid "send a message to the support team" msgstr "Envie uma mensagem para a equipe de suporte" -#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:59 msgid "request a CORSed URL" msgstr "Solicite um URL com CORS. Somente https é permitido." @@ -389,11 +409,11 @@ msgid "rewrite some fields of an existing category saving non-editables" msgstr "" "Reescreva alguns campos de uma categoria existente salvando os não editáveis" -#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757 -#: engine/core/docs/drf/viewsets.py:1046 -#: engine/core/graphene/object_types.py:119 -#: engine/core/graphene/object_types.py:239 -#: engine/core/graphene/object_types.py:540 +#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:781 +#: engine/core/docs/drf/viewsets.py:1070 +#: engine/core/graphene/object_types.py:123 +#: engine/core/graphene/object_types.py:247 +#: engine/core/graphene/object_types.py:546 msgid "SEO Meta snapshot" msgstr "Meta snapshot de SEO" @@ -695,7 +715,7 @@ msgstr "Recuperar um único produto (visualização detalhada)" #: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683 #: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725 -#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763 +#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:787 msgid "Product UUID or slug" msgstr "UUID ou Slug do produto" @@ -722,279 +742,293 @@ msgstr "Excluir um produto" msgid "lists all permitted feedbacks for a product" msgstr "lista todos os feedbacks permitidos para um produto" -#: engine/core/docs/drf/viewsets.py:758 +#: engine/core/docs/drf/viewsets.py:757 +msgid "retrieve exact products by identifier" +msgstr "Recuperar produtos exatos por identificador" + +#: engine/core/docs/drf/viewsets.py:759 +msgid "" +"retrieve a list of products by identifier type (uuid, slug, or sku). Send a " +"POST request with `identificator_type` and `identificators` (list of " +"values)." +msgstr "" +"Recuperar uma lista de produtos por tipo de identificador (uuid, slug ou " +"sku). Enviar uma solicitação POST com `identificador_type` e " +"`identificators` (lista de valores)." + +#: engine/core/docs/drf/viewsets.py:782 msgid "returns a snapshot of the product's SEO meta data" msgstr "Retorna um instantâneo dos metadados de SEO do produto" -#: engine/core/docs/drf/viewsets.py:779 +#: engine/core/docs/drf/viewsets.py:803 msgid "list all addresses" msgstr "Listar todos os endereços" -#: engine/core/docs/drf/viewsets.py:789 +#: engine/core/docs/drf/viewsets.py:813 msgid "retrieve a single address" msgstr "Recuperar um único endereço" -#: engine/core/docs/drf/viewsets.py:799 +#: engine/core/docs/drf/viewsets.py:823 msgid "create a new address" msgstr "Criar um novo endereço" -#: engine/core/docs/drf/viewsets.py:810 +#: engine/core/docs/drf/viewsets.py:834 msgid "delete an address" msgstr "Excluir um endereço" -#: engine/core/docs/drf/viewsets.py:820 +#: engine/core/docs/drf/viewsets.py:844 msgid "update an entire address" msgstr "Atualizar um endereço inteiro" -#: engine/core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:855 msgid "partially update an address" msgstr "Atualizar parcialmente um endereço" -#: engine/core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:866 msgid "autocomplete address suggestions" msgstr "Entrada de endereço com preenchimento automático" -#: engine/core/docs/drf/viewsets.py:848 +#: engine/core/docs/drf/viewsets.py:872 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" "Cadeia de consulta de dados brutos, anexe os dados do ponto de extremidade " "de IP geográfico" -#: engine/core/docs/drf/viewsets.py:855 +#: engine/core/docs/drf/viewsets.py:879 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "limita a quantidade de resultados, 1 < limite < 10, padrão: 5" -#: engine/core/docs/drf/viewsets.py:871 +#: engine/core/docs/drf/viewsets.py:895 msgid "list all feedbacks (simple view)" msgstr "listar todos os feedbacks (visualização simples)" -#: engine/core/docs/drf/viewsets.py:881 +#: engine/core/docs/drf/viewsets.py:905 msgid "retrieve a single feedback (detailed view)" msgstr "recuperar um único feedback (visualização detalhada)" -#: engine/core/docs/drf/viewsets.py:888 +#: engine/core/docs/drf/viewsets.py:912 msgid "create a feedback" msgstr "criar um feedback" -#: engine/core/docs/drf/viewsets.py:895 +#: engine/core/docs/drf/viewsets.py:919 msgid "delete a feedback" msgstr "excluir um feedback" -#: engine/core/docs/drf/viewsets.py:902 +#: engine/core/docs/drf/viewsets.py:926 msgid "rewrite an existing feedback saving non-editables" msgstr "reescrever um feedback existente salvando itens não editáveis" -#: engine/core/docs/drf/viewsets.py:909 +#: engine/core/docs/drf/viewsets.py:933 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" "Reescreva alguns campos de uma categoria existente salvando os não editáveis" -#: engine/core/docs/drf/viewsets.py:919 +#: engine/core/docs/drf/viewsets.py:943 msgid "list all order–product relations (simple view)" msgstr "listar todas as relações pedido-produto (visualização simples)" -#: engine/core/docs/drf/viewsets.py:929 +#: engine/core/docs/drf/viewsets.py:953 msgid "retrieve a single order–product relation (detailed view)" msgstr "recuperar uma única relação pedido-produto (visão detalhada)" -#: engine/core/docs/drf/viewsets.py:939 +#: engine/core/docs/drf/viewsets.py:963 msgid "create a new order–product relation" msgstr "criar uma nova relação pedido-produto" -#: engine/core/docs/drf/viewsets.py:949 +#: engine/core/docs/drf/viewsets.py:973 msgid "replace an existing order–product relation" msgstr "substituir uma relação pedido-produto existente" -#: engine/core/docs/drf/viewsets.py:959 +#: engine/core/docs/drf/viewsets.py:983 msgid "partially update an existing order–product relation" msgstr "atualizar parcialmente uma relação pedido-produto existente" -#: engine/core/docs/drf/viewsets.py:969 +#: engine/core/docs/drf/viewsets.py:993 msgid "delete an order–product relation" msgstr "excluir uma relação pedido-produto" -#: engine/core/docs/drf/viewsets.py:979 +#: engine/core/docs/drf/viewsets.py:1003 msgid "add or remove feedback on an order–product relation" msgstr "adicionar ou remover feedback em uma relação pedido-produto" -#: engine/core/docs/drf/viewsets.py:996 +#: engine/core/docs/drf/viewsets.py:1020 msgid "list all brands (simple view)" msgstr "Listar todas as marcas (visualização simples)" -#: engine/core/docs/drf/viewsets.py:1003 +#: engine/core/docs/drf/viewsets.py:1027 msgid "retrieve a single brand (detailed view)" msgstr "Recuperar uma única marca (visualização detalhada)" -#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051 +#: engine/core/docs/drf/viewsets.py:1032 engine/core/docs/drf/viewsets.py:1075 msgid "Brand UUID or slug" msgstr "UUID ou slug da marca" -#: engine/core/docs/drf/viewsets.py:1018 +#: engine/core/docs/drf/viewsets.py:1042 msgid "create a brand" msgstr "Criar uma marca" -#: engine/core/docs/drf/viewsets.py:1025 +#: engine/core/docs/drf/viewsets.py:1049 msgid "delete a brand" msgstr "Delete a brand" -#: engine/core/docs/drf/viewsets.py:1032 +#: engine/core/docs/drf/viewsets.py:1056 msgid "rewrite an existing brand saving non-editables" msgstr "Reescrever uma marca existente economizando produtos não editáveis" -#: engine/core/docs/drf/viewsets.py:1039 +#: engine/core/docs/drf/viewsets.py:1063 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "" "Reescreva alguns campos de uma categoria existente salvando os não editáveis" -#: engine/core/docs/drf/viewsets.py:1064 +#: engine/core/docs/drf/viewsets.py:1088 msgid "list all vendors (simple view)" msgstr "Listar todos os fornecedores (visualização simples)" -#: engine/core/docs/drf/viewsets.py:1074 +#: engine/core/docs/drf/viewsets.py:1098 msgid "retrieve a single vendor (detailed view)" msgstr "Recuperar um único fornecedor (visão detalhada)" -#: engine/core/docs/drf/viewsets.py:1081 +#: engine/core/docs/drf/viewsets.py:1105 msgid "create a vendor" msgstr "Criar um fornecedor" -#: engine/core/docs/drf/viewsets.py:1088 +#: engine/core/docs/drf/viewsets.py:1112 msgid "delete a vendor" msgstr "Excluir um fornecedor" -#: engine/core/docs/drf/viewsets.py:1095 +#: engine/core/docs/drf/viewsets.py:1119 msgid "rewrite an existing vendor saving non-editables" msgstr "Reescrever um fornecedor existente salvando itens não editáveis" -#: engine/core/docs/drf/viewsets.py:1102 +#: engine/core/docs/drf/viewsets.py:1126 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "" "Reescreva alguns campos de uma categoria existente salvando os não editáveis" -#: engine/core/docs/drf/viewsets.py:1112 +#: engine/core/docs/drf/viewsets.py:1136 msgid "list all product images (simple view)" msgstr "Listar todas as imagens do produto (visualização simples)" -#: engine/core/docs/drf/viewsets.py:1122 +#: engine/core/docs/drf/viewsets.py:1146 msgid "retrieve a single product image (detailed view)" msgstr "Recuperar uma única imagem de produto (visualização detalhada)" -#: engine/core/docs/drf/viewsets.py:1129 +#: engine/core/docs/drf/viewsets.py:1153 msgid "create a product image" msgstr "Criar uma imagem do produto" -#: engine/core/docs/drf/viewsets.py:1139 +#: engine/core/docs/drf/viewsets.py:1163 msgid "delete a product image" msgstr "Excluir uma imagem de produto" -#: engine/core/docs/drf/viewsets.py:1146 +#: engine/core/docs/drf/viewsets.py:1170 msgid "rewrite an existing product image saving non-editables" msgstr "" "Reescrever uma imagem de produto existente salvando itens não editáveis" -#: engine/core/docs/drf/viewsets.py:1154 +#: engine/core/docs/drf/viewsets.py:1178 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "" "Reescreva alguns campos de uma categoria existente salvando os não editáveis" -#: engine/core/docs/drf/viewsets.py:1165 +#: engine/core/docs/drf/viewsets.py:1189 msgid "list all promo codes (simple view)" msgstr "Listar todos os códigos promocionais (visualização simples)" -#: engine/core/docs/drf/viewsets.py:1175 +#: engine/core/docs/drf/viewsets.py:1199 msgid "retrieve a single promo code (detailed view)" msgstr "Recuperar um único código promocional (visualização detalhada)" -#: engine/core/docs/drf/viewsets.py:1182 +#: engine/core/docs/drf/viewsets.py:1206 msgid "create a promo code" msgstr "Criar um código promocional" -#: engine/core/docs/drf/viewsets.py:1189 +#: engine/core/docs/drf/viewsets.py:1213 msgid "delete a promo code" msgstr "Delete a promo code" -#: engine/core/docs/drf/viewsets.py:1196 +#: engine/core/docs/drf/viewsets.py:1220 msgid "rewrite an existing promo code saving non-editables" msgstr "" "Reescreva um código promocional existente salvando itens não editáveis" -#: engine/core/docs/drf/viewsets.py:1203 +#: engine/core/docs/drf/viewsets.py:1227 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "" "Reescreva alguns campos de uma categoria existente salvando os não editáveis" -#: engine/core/docs/drf/viewsets.py:1213 +#: engine/core/docs/drf/viewsets.py:1237 msgid "list all promotions (simple view)" msgstr "Listar todas as promoções (visualização simples)" -#: engine/core/docs/drf/viewsets.py:1223 +#: engine/core/docs/drf/viewsets.py:1247 msgid "retrieve a single promotion (detailed view)" msgstr "Recuperar uma única promoção (visualização detalhada)" -#: engine/core/docs/drf/viewsets.py:1230 +#: engine/core/docs/drf/viewsets.py:1254 msgid "create a promotion" msgstr "Criar uma promoção" -#: engine/core/docs/drf/viewsets.py:1237 +#: engine/core/docs/drf/viewsets.py:1261 msgid "delete a promotion" msgstr "Excluir uma promoção" -#: engine/core/docs/drf/viewsets.py:1244 +#: engine/core/docs/drf/viewsets.py:1268 msgid "rewrite an existing promotion saving non-editables" msgstr "Reescrever uma promoção existente salvando itens não editáveis" -#: engine/core/docs/drf/viewsets.py:1251 +#: engine/core/docs/drf/viewsets.py:1275 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "" "Reescreva alguns campos de uma categoria existente salvando os não editáveis" -#: engine/core/docs/drf/viewsets.py:1261 +#: engine/core/docs/drf/viewsets.py:1285 msgid "list all stocks (simple view)" msgstr "Listar todas as ações (visualização simples)" -#: engine/core/docs/drf/viewsets.py:1268 +#: engine/core/docs/drf/viewsets.py:1292 msgid "retrieve a single stock (detailed view)" msgstr "Recuperar um único estoque (visualização detalhada)" -#: engine/core/docs/drf/viewsets.py:1275 +#: engine/core/docs/drf/viewsets.py:1299 msgid "create a stock record" msgstr "Criar um registro de estoque" -#: engine/core/docs/drf/viewsets.py:1282 +#: engine/core/docs/drf/viewsets.py:1306 msgid "delete a stock record" msgstr "Excluir um registro de estoque" -#: engine/core/docs/drf/viewsets.py:1289 +#: engine/core/docs/drf/viewsets.py:1313 msgid "rewrite an existing stock record saving non-editables" msgstr "" "Reescrever um registro de estoque existente, salvando itens não editáveis" -#: engine/core/docs/drf/viewsets.py:1297 +#: engine/core/docs/drf/viewsets.py:1321 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "" "Reescreva alguns campos de uma categoria existente salvando os não editáveis" -#: engine/core/docs/drf/viewsets.py:1308 +#: engine/core/docs/drf/viewsets.py:1332 msgid "list all product tags (simple view)" msgstr "Listar todas as tags de produtos (visualização simples)" -#: engine/core/docs/drf/viewsets.py:1318 +#: engine/core/docs/drf/viewsets.py:1342 msgid "retrieve a single product tag (detailed view)" msgstr "Recuperar uma única tag de produto (visualização detalhada)" -#: engine/core/docs/drf/viewsets.py:1325 +#: engine/core/docs/drf/viewsets.py:1349 msgid "create a product tag" msgstr "Criar uma tag de produto" -#: engine/core/docs/drf/viewsets.py:1335 +#: engine/core/docs/drf/viewsets.py:1359 msgid "delete a product tag" msgstr "Excluir uma tag de produto" -#: engine/core/docs/drf/viewsets.py:1342 +#: engine/core/docs/drf/viewsets.py:1366 msgid "rewrite an existing product tag saving non-editables" msgstr "Reescrever uma tag de produto existente salvando itens não editáveis" -#: engine/core/docs/drf/viewsets.py:1350 +#: engine/core/docs/drf/viewsets.py:1374 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "" "Reescreva alguns campos de uma categoria existente salvando os não editáveis" @@ -1004,372 +1038,374 @@ msgstr "" msgid "no search term provided." msgstr "Nenhum termo de pesquisa foi fornecido." -#: engine/core/filters.py:78 engine/core/filters.py:484 -#: engine/core/filters.py:625 +#: engine/core/filters.py:79 engine/core/filters.py:485 +#: engine/core/filters.py:626 msgid "Search" msgstr "Pesquisa" -#: engine/core/filters.py:79 engine/core/filters.py:663 -#: engine/core/filters.py:692 +#: engine/core/filters.py:80 engine/core/filters.py:664 +#: engine/core/filters.py:693 msgid "UUID" msgstr "UUID" -#: engine/core/filters.py:80 engine/core/filters.py:487 -#: engine/core/filters.py:627 +#: engine/core/filters.py:81 engine/core/filters.py:488 +#: engine/core/filters.py:628 msgid "Name" msgstr "Nome" -#: engine/core/filters.py:82 engine/core/filters.py:630 +#: engine/core/filters.py:83 engine/core/filters.py:631 msgid "Categories" msgstr "Categorias" -#: engine/core/filters.py:86 +#: engine/core/filters.py:87 msgid "Categories Slugs" msgstr "Categorias Lesmas" -#: engine/core/filters.py:88 engine/core/filters.py:495 +#: engine/core/filters.py:89 engine/core/filters.py:496 +#: engine/core/templates/admin_doc/index.html:37 +#: engine/core/templates/admin_doc/template_tag_index.html:12 msgid "Tags" msgstr "Tags" -#: engine/core/filters.py:90 +#: engine/core/filters.py:91 msgid "Min Price" msgstr "Preço mínimo" -#: engine/core/filters.py:93 +#: engine/core/filters.py:94 msgid "Max Price" msgstr "Preço máximo" -#: engine/core/filters.py:95 +#: engine/core/filters.py:96 msgid "Is Active" msgstr "Está ativo" -#: engine/core/filters.py:96 +#: engine/core/filters.py:97 msgid "Brand" msgstr "Brand" -#: engine/core/filters.py:97 +#: engine/core/filters.py:98 msgid "Attributes" msgstr "Atributos" -#: engine/core/filters.py:99 +#: engine/core/filters.py:100 msgid "Quantity" msgstr "Quantidade" -#: engine/core/filters.py:101 engine/core/filters.py:489 -#: engine/core/filters.py:628 engine/core/models.py:316 -#: engine/core/models.py:497 engine/core/models.py:663 +#: engine/core/filters.py:102 engine/core/filters.py:490 +#: engine/core/filters.py:629 engine/core/models.py:339 +#: engine/core/models.py:546 engine/core/models.py:736 msgid "Slug" msgstr "Lesma" -#: engine/core/filters.py:102 +#: engine/core/filters.py:103 msgid "Is Digital" msgstr "É digital" -#: engine/core/filters.py:104 +#: engine/core/filters.py:105 msgid "Include sub-categories" msgstr "Incluir subcategorias" -#: engine/core/filters.py:108 +#: engine/core/filters.py:109 msgid "Include personal ordered" msgstr "Incluir produtos pessoais encomendados" -#: engine/core/filters.py:110 engine/core/models.py:667 +#: engine/core/filters.py:111 engine/core/models.py:740 msgid "SKU" msgstr "SKU" -#: engine/core/filters.py:212 +#: engine/core/filters.py:213 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" "Deve haver um category_uuid para usar o sinalizador include_subcategories" -#: engine/core/filters.py:398 +#: engine/core/filters.py:399 msgid "Search (ID, product name or part number)" msgstr "Pesquisa (ID, nome do produto ou número de peça)" -#: engine/core/filters.py:402 +#: engine/core/filters.py:403 msgid "Bought after (inclusive)" msgstr "Comprado depois (inclusive)" -#: engine/core/filters.py:405 +#: engine/core/filters.py:406 msgid "Bought before (inclusive)" msgstr "Comprado antes (inclusive)" -#: engine/core/filters.py:410 engine/core/filters.py:461 -#: engine/core/filters.py:697 +#: engine/core/filters.py:411 engine/core/filters.py:462 +#: engine/core/filters.py:698 msgid "User email" msgstr "E-mail do usuário" -#: engine/core/filters.py:413 engine/core/filters.py:464 -#: engine/core/filters.py:672 engine/core/filters.py:694 +#: engine/core/filters.py:414 engine/core/filters.py:465 +#: engine/core/filters.py:673 engine/core/filters.py:695 msgid "User UUID" msgstr "UUID do usuário" -#: engine/core/filters.py:415 +#: engine/core/filters.py:416 msgid "Status" msgstr "Status" -#: engine/core/filters.py:419 +#: engine/core/filters.py:420 msgid "Human Readable ID" msgstr "ID legível por humanos" -#: engine/core/filters.py:488 +#: engine/core/filters.py:489 msgid "Parent" msgstr "Parent" -#: engine/core/filters.py:492 +#: engine/core/filters.py:493 msgid "Whole category(has at least 1 product or not)" msgstr "Toda a categoria (com pelo menos 1 produto ou não)" -#: engine/core/filters.py:496 +#: engine/core/filters.py:497 msgid "Level" msgstr "Nível" -#: engine/core/filters.py:667 +#: engine/core/filters.py:668 msgid "Product UUID" msgstr "UUID do produto" -#: engine/core/graphene/mutations.py:40 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Chave para procurar ou colocar no cache" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:43 msgid "data to store in cache" msgstr "Dados a serem armazenados no cache" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:46 msgid "timeout in seconds to set the data for into the cache" msgstr "Tempo limite em segundos para definir os dados para o cache" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:49 msgid "cached data" msgstr "Dados em cache" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:64 msgid "camelized JSON data from the requested URL" msgstr "Dados JSON camelizados da URL solicitada" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:248 +#: engine/core/graphene/mutations.py:69 engine/core/views.py:267 msgid "only URLs starting with http(s):// are allowed" msgstr "Somente URLs que começam com http(s):// são permitidos" -#: engine/core/graphene/mutations.py:86 +#: engine/core/graphene/mutations.py:87 msgid "add a product to the order" msgstr "Adicionar um produto ao pedido" -#: engine/core/graphene/mutations.py:109 engine/core/graphene/mutations.py:138 -#: engine/core/graphene/mutations.py:254 engine/core/graphene/mutations.py:306 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139 +#: engine/core/graphene/mutations.py:256 engine/core/graphene/mutations.py:308 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Pedido {order_uuid} não encontrado!" -#: engine/core/graphene/mutations.py:115 engine/core/graphene/mutations.py:166 +#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167 msgid "remove a product from the order" msgstr "Remover um produto do pedido" -#: engine/core/graphene/mutations.py:144 +#: engine/core/graphene/mutations.py:145 msgid "remove all products from the order" msgstr "Remover todos os produtos do pedido" -#: engine/core/graphene/mutations.py:189 +#: engine/core/graphene/mutations.py:190 msgid "buy an order" msgstr "Comprar um pedido" -#: engine/core/graphene/mutations.py:220 engine/core/graphene/mutations.py:282 +#: engine/core/graphene/mutations.py:222 engine/core/graphene/mutations.py:284 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "Forneça order_uuid ou order_hr_id - mutuamente exclusivos!" -#: engine/core/graphene/mutations.py:249 engine/core/graphene/mutations.py:524 -#: engine/core/graphene/mutations.py:573 engine/core/viewsets.py:753 +#: engine/core/graphene/mutations.py:251 engine/core/graphene/mutations.py:526 +#: engine/core/graphene/mutations.py:576 engine/core/viewsets.py:783 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "O tipo errado veio do método order.buy(): {type(instance)!s}" -#: engine/core/graphene/mutations.py:260 +#: engine/core/graphene/mutations.py:262 msgid "perform an action on a list of products in the order" msgstr "Executar uma ação em uma lista de produtos no pedido" -#: engine/core/graphene/mutations.py:265 +#: engine/core/graphene/mutations.py:267 msgid "remove/add" msgstr "Remover/Adicionar" -#: engine/core/graphene/mutations.py:301 engine/core/graphene/mutations.py:342 +#: engine/core/graphene/mutations.py:303 engine/core/graphene/mutations.py:342 msgid "action must be either add or remove" msgstr "A ação deve ser \"adicionar\" ou \"remover\"!" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:314 msgid "perform an action on a list of products in the wishlist" msgstr "Executar uma ação em uma lista de produtos na lista de desejos" -#: engine/core/graphene/mutations.py:330 -msgid "please provide wishlist_uuid value" -msgstr "Forneça o valor `wishlist_uuid`." - -#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:423 -#: engine/core/graphene/mutations.py:451 engine/core/graphene/mutations.py:479 -#: engine/core/graphene/mutations.py:529 +#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:424 +#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480 +#: engine/core/graphene/mutations.py:531 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Lista de desejos {wishlist_uuid} não encontrada!" -#: engine/core/graphene/mutations.py:401 +#: engine/core/graphene/mutations.py:402 msgid "add a product to the wishlist" msgstr "Adicionar um produto ao pedido" -#: engine/core/graphene/mutations.py:429 +#: engine/core/graphene/mutations.py:430 msgid "remove a product from the wishlist" msgstr "Remover um produto do pedido" -#: engine/core/graphene/mutations.py:457 +#: engine/core/graphene/mutations.py:458 msgid "remove all products from the wishlist" msgstr "Remover um produto do pedido" -#: engine/core/graphene/mutations.py:485 +#: engine/core/graphene/mutations.py:486 msgid "buy all products from the wishlist" msgstr "Remover um produto do pedido" -#: engine/core/graphene/mutations.py:535 +#: engine/core/graphene/mutations.py:537 msgid "buy a product" msgstr "Comprar um pedido" -#: engine/core/graphene/mutations.py:542 +#: engine/core/graphene/mutations.py:544 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" msgstr "" "Envie os atributos como uma string formatada como attr1=value1,attr2=value2" -#: engine/core/graphene/mutations.py:580 +#: engine/core/graphene/mutations.py:583 msgid "add or delete a feedback for orderproduct" msgstr "Adicionar ou excluir um feedback para o produto do pedido" -#: engine/core/graphene/mutations.py:606 +#: engine/core/graphene/mutations.py:610 msgid "action must be either `add` or `remove`" msgstr "A ação deve ser `add` ou `remove`!" -#: engine/core/graphene/mutations.py:609 +#: engine/core/graphene/mutations.py:613 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderproduct {order_product_uuid} não encontrado!" -#: engine/core/graphene/mutations.py:616 +#: engine/core/graphene/mutations.py:620 msgid "original address string provided by the user" msgstr "Cadeia de endereços original fornecida pelo usuário" -#: engine/core/graphene/mutations.py:653 engine/core/models.py:986 -#: engine/core/models.py:999 engine/core/models.py:1443 -#: engine/core/models.py:1474 engine/core/models.py:1505 -#: engine/core/viewsets.py:760 +#: engine/core/graphene/mutations.py:662 engine/core/models.py:1079 +#: engine/core/models.py:1092 engine/core/models.py:1544 +#: engine/core/models.py:1575 engine/core/models.py:1606 +#: engine/core/viewsets.py:790 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} não existe: {uuid}!" -#: engine/core/graphene/mutations.py:667 +#: engine/core/graphene/mutations.py:676 msgid "limit must be between 1 and 10" msgstr "O limite deve estar entre 1 e 10" -#: engine/core/graphene/mutations.py:716 +#: engine/core/graphene/mutations.py:726 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - funciona muito bem" -#: engine/core/graphene/object_types.py:84 -#: engine/core/graphene/object_types.py:420 -#: engine/core/graphene/object_types.py:471 engine/core/models.py:803 -#: engine/core/models.py:1297 engine/core/models.py:2033 +#: engine/core/graphene/object_types.py:88 +#: engine/core/graphene/object_types.py:425 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:889 +#: engine/core/models.py:1394 engine/core/models.py:2139 msgid "attributes" msgstr "Atributos" -#: engine/core/graphene/object_types.py:97 +#: engine/core/graphene/object_types.py:101 msgid "grouped attributes" msgstr "Atributos agrupados" -#: engine/core/graphene/object_types.py:104 +#: engine/core/graphene/object_types.py:108 msgid "groups of attributes" msgstr "Grupos de atributos" -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:217 -#: engine/core/graphene/object_types.py:255 engine/core/models.py:440 +#: engine/core/graphene/object_types.py:122 +#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:264 engine/core/models.py:489 msgid "categories" msgstr "Categorias" -#: engine/core/graphene/object_types.py:134 engine/core/models.py:511 +#: engine/core/graphene/object_types.py:138 engine/core/models.py:564 msgid "brands" msgstr "Marcas" -#: engine/core/graphene/object_types.py:219 +#: engine/core/graphene/object_types.py:226 msgid "category image url" msgstr "Categorias" -#: engine/core/graphene/object_types.py:220 -#: engine/core/graphene/object_types.py:365 engine/core/models.py:278 +#: engine/core/graphene/object_types.py:227 +#: engine/core/graphene/object_types.py:369 engine/core/models.py:301 msgid "markup percentage" msgstr "Porcentagem de marcação" -#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:231 msgid "which attributes and values can be used for filtering this category." msgstr "" "Quais atributos e valores podem ser usados para filtrar essa categoria." -#: engine/core/graphene/object_types.py:230 +#: engine/core/graphene/object_types.py:237 msgid "" "minimum and maximum prices for products in this category, if available." msgstr "Preços mínimo e máximo dos produtos dessa categoria, se disponíveis." -#: engine/core/graphene/object_types.py:234 +#: engine/core/graphene/object_types.py:240 +msgid "brands in this category" +msgstr "Marcas nesta categoria" + +#: engine/core/graphene/object_types.py:242 msgid "tags for this category" msgstr "Tags para esta categoria" -#: engine/core/graphene/object_types.py:237 +#: engine/core/graphene/object_types.py:245 msgid "products in this category" msgstr "Produtos desta categoria" -#: engine/core/graphene/object_types.py:372 engine/core/models.py:183 +#: engine/core/graphene/object_types.py:376 engine/core/models.py:202 msgid "vendors" msgstr "Vendors" -#: engine/core/graphene/object_types.py:376 +#: engine/core/graphene/object_types.py:380 msgid "Latitude (Y coordinate)" msgstr "Latitude (coordenada Y)" -#: engine/core/graphene/object_types.py:377 +#: engine/core/graphene/object_types.py:381 msgid "Longitude (X coordinate)" msgstr "Longitude (coordenada X)" -#: engine/core/graphene/object_types.py:406 +#: engine/core/graphene/object_types.py:411 msgid "comment" msgstr "Como fazer" -#: engine/core/graphene/object_types.py:408 -#: engine/core/graphene/object_types.py:542 +#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:548 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "" "Valor de classificação de 1 a 10, inclusive, ou 0 se não estiver definido." -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:421 msgid "represents feedback from a user." msgstr "Representa o feedback de um usuário." -#: engine/core/graphene/object_types.py:421 -#: engine/core/graphene/object_types.py:472 engine/core/models.py:1291 +#: engine/core/graphene/object_types.py:426 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:1388 msgid "notifications" msgstr "Notificações" -#: engine/core/graphene/object_types.py:423 +#: engine/core/graphene/object_types.py:428 msgid "download url for this order product if applicable" msgstr "URL de download para este produto do pedido, se aplicável" -#: engine/core/graphene/object_types.py:425 engine/core/models.py:1856 +#: engine/core/graphene/object_types.py:430 engine/core/models.py:1959 msgid "feedback" msgstr "Feedback" -#: engine/core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:464 msgid "a list of order products in this order" msgstr "Uma lista dos produtos solicitados nesse pedido" -#: engine/core/graphene/object_types.py:461 engine/core/models.py:1261 +#: engine/core/graphene/object_types.py:466 engine/core/models.py:1358 msgid "billing address" msgstr "Endereço de cobrança" -#: engine/core/graphene/object_types.py:465 +#: engine/core/graphene/object_types.py:470 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1377,53 +1413,57 @@ msgstr "" "Endereço de entrega para este pedido, deixe em branco se for o mesmo que o " "endereço de cobrança ou se não for aplicável" -#: engine/core/graphene/object_types.py:468 +#: engine/core/graphene/object_types.py:473 msgid "total price of this order" msgstr "Preço total deste pedido" -#: engine/core/graphene/object_types.py:469 +#: engine/core/graphene/object_types.py:474 msgid "total quantity of products in order" msgstr "Quantidade total de produtos no pedido" -#: engine/core/graphene/object_types.py:470 +#: engine/core/graphene/object_types.py:475 msgid "are all products in the order digital" msgstr "Todos os produtos estão no pedido digital?" -#: engine/core/graphene/object_types.py:474 +#: engine/core/graphene/object_types.py:479 msgid "transactions for this order" msgstr "Transações para esta ordem" -#: engine/core/graphene/object_types.py:494 engine/core/models.py:1325 +#: engine/core/graphene/object_types.py:499 engine/core/models.py:1422 msgid "orders" msgstr "Pedidos" -#: engine/core/graphene/object_types.py:515 +#: engine/core/graphene/object_types.py:520 msgid "image url" msgstr "URL da imagem" -#: engine/core/graphene/object_types.py:522 +#: engine/core/graphene/object_types.py:527 msgid "product's images" msgstr "Imagens do produto" -#: engine/core/graphene/object_types.py:529 engine/core/models.py:439 -#: engine/core/models.py:596 +#: engine/core/graphene/object_types.py:534 engine/core/models.py:488 +#: engine/core/models.py:661 msgid "category" msgstr "Categoria" -#: engine/core/graphene/object_types.py:531 engine/core/models.py:1857 +#: engine/core/graphene/object_types.py:536 engine/core/models.py:1960 msgid "feedbacks" msgstr "Feedbacks" -#: engine/core/graphene/object_types.py:532 engine/core/models.py:510 -#: engine/core/models.py:605 +#: engine/core/graphene/object_types.py:537 engine/core/models.py:563 +#: engine/core/models.py:670 msgid "brand" msgstr "Brand" -#: engine/core/graphene/object_types.py:534 engine/core/models.py:103 +#: engine/core/graphene/object_types.py:538 +msgid "video url" +msgstr "URL do vídeo" + +#: engine/core/graphene/object_types.py:540 engine/core/models.py:122 msgid "attribute groups" msgstr "Grupos de atributos" -#: engine/core/graphene/object_types.py:536 +#: engine/core/graphene/object_types.py:542 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1431,7 +1471,7 @@ msgstr "Grupos de atributos" msgid "price" msgstr "Preço" -#: engine/core/graphene/object_types.py:537 +#: engine/core/graphene/object_types.py:543 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1439,39 +1479,39 @@ msgstr "Preço" msgid "quantity" msgstr "Quantidade" -#: engine/core/graphene/object_types.py:538 +#: engine/core/graphene/object_types.py:544 msgid "number of feedbacks" msgstr "Número de feedbacks" -#: engine/core/graphene/object_types.py:539 +#: engine/core/graphene/object_types.py:545 msgid "only available for personal orders" msgstr "Produtos disponíveis apenas para pedidos pessoais" -#: engine/core/graphene/object_types.py:544 +#: engine/core/graphene/object_types.py:550 msgid "discount price" msgstr "Preço com desconto" -#: engine/core/graphene/object_types.py:568 engine/core/models.py:682 +#: engine/core/graphene/object_types.py:575 engine/core/models.py:755 msgid "products" msgstr "Produtos" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:691 msgid "promocodes" msgstr "Códigos promocionais" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:706 msgid "products on sale" msgstr "Produtos à venda" -#: engine/core/graphene/object_types.py:701 engine/core/models.py:935 +#: engine/core/graphene/object_types.py:720 engine/core/models.py:1028 msgid "promotions" msgstr "Promoções" -#: engine/core/graphene/object_types.py:705 engine/core/models.py:182 +#: engine/core/graphene/object_types.py:727 engine/core/models.py:201 msgid "vendor" msgstr "Vendor" -#: engine/core/graphene/object_types.py:706 engine/core/models.py:681 +#: engine/core/graphene/object_types.py:728 engine/core/models.py:754 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1479,103 +1519,103 @@ msgstr "Vendor" msgid "product" msgstr "Produto" -#: engine/core/graphene/object_types.py:718 engine/core/models.py:958 +#: engine/core/graphene/object_types.py:740 engine/core/models.py:1051 msgid "wishlisted products" msgstr "Produtos da lista de desejos" -#: engine/core/graphene/object_types.py:725 engine/core/models.py:975 +#: engine/core/graphene/object_types.py:747 engine/core/models.py:1068 msgid "wishlists" msgstr "Listas de desejos" -#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:752 msgid "tagged products" msgstr "Produtos marcados" -#: engine/core/graphene/object_types.py:738 engine/core/models.py:219 -#: engine/core/models.py:611 +#: engine/core/graphene/object_types.py:760 engine/core/models.py:238 +#: engine/core/models.py:676 msgid "product tags" msgstr "Etiquetas do produto" -#: engine/core/graphene/object_types.py:743 +#: engine/core/graphene/object_types.py:765 msgid "tagged categories" msgstr "Categorias de tags" -#: engine/core/graphene/object_types.py:751 +#: engine/core/graphene/object_types.py:773 msgid "categories tags" msgstr "Tags das categorias" -#: engine/core/graphene/object_types.py:755 +#: engine/core/graphene/object_types.py:777 msgid "project name" msgstr "Nome do projeto" -#: engine/core/graphene/object_types.py:756 +#: engine/core/graphene/object_types.py:778 msgid "company name" msgstr "Nome da empresa" -#: engine/core/graphene/object_types.py:757 +#: engine/core/graphene/object_types.py:779 msgid "company address" msgstr "Endereço da empresa" -#: engine/core/graphene/object_types.py:758 +#: engine/core/graphene/object_types.py:780 msgid "company phone number" msgstr "Número de telefone da empresa" -#: engine/core/graphene/object_types.py:761 +#: engine/core/graphene/object_types.py:783 msgid "email from, sometimes it must be used instead of host user value" msgstr "" "'email from', às vezes ele deve ser usado em vez do valor do usuário do host" -#: engine/core/graphene/object_types.py:764 +#: engine/core/graphene/object_types.py:786 msgid "email host user" msgstr "Usuário do host de e-mail" -#: engine/core/graphene/object_types.py:765 +#: engine/core/graphene/object_types.py:787 msgid "maximum amount for payment" msgstr "Valor máximo para pagamento" -#: engine/core/graphene/object_types.py:766 +#: engine/core/graphene/object_types.py:788 msgid "minimum amount for payment" msgstr "Valor mínimo para pagamento" -#: engine/core/graphene/object_types.py:767 +#: engine/core/graphene/object_types.py:789 msgid "analytics data" msgstr "Dados analíticos" -#: engine/core/graphene/object_types.py:768 +#: engine/core/graphene/object_types.py:790 msgid "advertisement data" msgstr "Dados do anúncio" -#: engine/core/graphene/object_types.py:771 +#: engine/core/graphene/object_types.py:793 msgid "company configuration" msgstr "Configuração" -#: engine/core/graphene/object_types.py:775 +#: engine/core/graphene/object_types.py:797 msgid "language code" msgstr "Código do idioma" -#: engine/core/graphene/object_types.py:776 +#: engine/core/graphene/object_types.py:798 msgid "language name" msgstr "Nome do idioma" -#: engine/core/graphene/object_types.py:777 +#: engine/core/graphene/object_types.py:799 msgid "language flag, if exists :)" msgstr "Sinalizador de idioma, se houver :)" -#: engine/core/graphene/object_types.py:780 +#: engine/core/graphene/object_types.py:802 msgid "supported languages" msgstr "Obter uma lista de idiomas suportados" -#: engine/core/graphene/object_types.py:812 -#: engine/core/graphene/object_types.py:815 -#: engine/core/graphene/object_types.py:818 +#: engine/core/graphene/object_types.py:834 +#: engine/core/graphene/object_types.py:837 +#: engine/core/graphene/object_types.py:840 msgid "products search results" msgstr "Resultados da pesquisa de produtos" -#: engine/core/graphene/object_types.py:820 +#: engine/core/graphene/object_types.py:842 msgid "posts search results" msgstr "Resultados da pesquisa de produtos" -#: engine/core/models.py:75 +#: engine/core/models.py:91 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 " @@ -1588,23 +1628,23 @@ msgstr "" "útil para categorizar e gerenciar atributos de forma mais eficaz em um " "sistema complexo." -#: engine/core/models.py:88 +#: engine/core/models.py:107 msgid "parent of this group" msgstr "Pai deste grupo" -#: engine/core/models.py:89 +#: engine/core/models.py:108 msgid "parent attribute group" msgstr "Grupo de atributos pai" -#: engine/core/models.py:93 engine/core/models.py:94 +#: engine/core/models.py:112 engine/core/models.py:113 msgid "attribute group's name" msgstr "Nome do grupo de atributos" -#: engine/core/models.py:102 engine/core/models.py:763 +#: engine/core/models.py:121 engine/core/models.py:849 msgid "attribute group" msgstr "Grupo de atributos" -#: engine/core/models.py:108 +#: engine/core/models.py:127 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1623,49 +1663,49 @@ msgstr "" " adicionais, tornando-o adequado para uso em sistemas que interagem com " "fornecedores terceirizados." -#: engine/core/models.py:122 +#: engine/core/models.py:141 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" -#: engine/core/models.py:124 +#: engine/core/models.py:143 msgid "authentication info" msgstr "Informações de autenticação" -#: engine/core/models.py:129 +#: engine/core/models.py:148 msgid "define the markup for products retrieved from this vendor" msgstr "Definir a marcação para produtos recuperados desse fornecedor" -#: engine/core/models.py:130 +#: engine/core/models.py:149 msgid "vendor markup percentage" msgstr "Porcentagem da margem de lucro do fornecedor" -#: engine/core/models.py:134 +#: engine/core/models.py:153 msgid "name of this vendor" msgstr "Nome do fornecedor" -#: engine/core/models.py:135 +#: engine/core/models.py:154 msgid "vendor name" msgstr "Nome do fornecedor" -#: engine/core/models.py:150 +#: engine/core/models.py:169 msgid "response file" msgstr "arquivo de resposta" -#: engine/core/models.py:151 +#: engine/core/models.py:170 msgid "vendor's last processing response" msgstr "última resposta de processamento do fornecedor" -#: engine/core/models.py:157 +#: engine/core/models.py:176 msgid "vendor's integration file path" msgstr "Caminho do arquivo de integração do fornecedor" -#: engine/core/models.py:158 +#: engine/core/models.py:177 msgid "integration path" msgstr "Caminho de integração" -#: engine/core/models.py:192 +#: engine/core/models.py:211 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1680,27 +1720,27 @@ msgstr "" "operações exportadas por meio de mixins e fornece personalização de " "metadados para fins administrativos." -#: engine/core/models.py:204 engine/core/models.py:235 +#: engine/core/models.py:223 engine/core/models.py:254 msgid "internal tag identifier for the product tag" msgstr "Identificador de tag interno para a tag do produto" -#: engine/core/models.py:205 engine/core/models.py:236 +#: engine/core/models.py:224 engine/core/models.py:255 msgid "tag name" msgstr "Nome da etiqueta" -#: engine/core/models.py:209 engine/core/models.py:240 +#: engine/core/models.py:228 engine/core/models.py:259 msgid "user-friendly name for the product tag" msgstr "Nome de fácil utilização para a etiqueta do produto" -#: engine/core/models.py:210 engine/core/models.py:241 +#: engine/core/models.py:229 engine/core/models.py:260 msgid "tag display name" msgstr "Nome de exibição da tag" -#: engine/core/models.py:218 +#: engine/core/models.py:237 msgid "product tag" msgstr "Etiqueta do produto" -#: engine/core/models.py:224 +#: engine/core/models.py:243 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 " @@ -1711,15 +1751,15 @@ msgstr "" "Ela inclui atributos para um identificador de tag interno e um nome de " "exibição de fácil utilização." -#: engine/core/models.py:249 +#: engine/core/models.py:268 msgid "category tag" msgstr "tag de categoria" -#: engine/core/models.py:250 engine/core/models.py:322 +#: engine/core/models.py:269 engine/core/models.py:345 msgid "category tags" msgstr "tags de categoria" -#: engine/core/models.py:255 +#: engine/core/models.py:274 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1742,51 +1782,51 @@ msgstr "" "descrição e a hierarquia das categorias, bem como atribuam atributos como " "imagens, tags ou prioridade." -#: engine/core/models.py:269 +#: engine/core/models.py:292 msgid "upload an image representing this category" msgstr "Faça upload de uma imagem que represente essa categoria" -#: engine/core/models.py:272 +#: engine/core/models.py:295 msgid "category image" msgstr "Imagem da categoria" -#: engine/core/models.py:277 +#: engine/core/models.py:300 msgid "define a markup percentage for products in this category" msgstr "Definir uma porcentagem de majoração para os produtos dessa categoria" -#: engine/core/models.py:286 +#: engine/core/models.py:309 msgid "parent of this category to form a hierarchical structure" msgstr "Pai dessa categoria para formar uma estrutura hierárquica" -#: engine/core/models.py:287 +#: engine/core/models.py:310 msgid "parent category" msgstr "Categoria dos pais" -#: engine/core/models.py:292 +#: engine/core/models.py:315 msgid "category name" msgstr "Nome da categoria" -#: engine/core/models.py:293 +#: engine/core/models.py:316 msgid "provide a name for this category" msgstr "Forneça um nome para essa categoria" -#: engine/core/models.py:300 +#: engine/core/models.py:323 msgid "add a detailed description for this category" msgstr "Adicione uma descrição detalhada para essa categoria" -#: engine/core/models.py:301 +#: engine/core/models.py:324 msgid "category description" msgstr "Descrição da categoria" -#: engine/core/models.py:321 +#: engine/core/models.py:344 msgid "tags that help describe or group this category" msgstr "tags que ajudam a descrever ou agrupar essa categoria" -#: engine/core/models.py:328 engine/core/models.py:503 +#: engine/core/models.py:351 engine/core/models.py:552 msgid "priority" msgstr "Prioridade" -#: engine/core/models.py:446 +#: engine/core/models.py:495 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1800,47 +1840,43 @@ msgstr "" "Ela permite a organização e a representação de dados relacionados à marca no" " aplicativo." -#: engine/core/models.py:456 +#: engine/core/models.py:505 msgid "name of this brand" msgstr "Nome da marca" -#: engine/core/models.py:457 +#: engine/core/models.py:506 msgid "brand name" msgstr "Nome da marca" -#: engine/core/models.py:464 +#: engine/core/models.py:513 msgid "upload a logo representing this brand" msgstr "Faça upload de um logotipo que represente essa marca" -#: engine/core/models.py:466 +#: engine/core/models.py:515 msgid "brand small image" msgstr "Imagem pequena da marca" -#: engine/core/models.py:472 +#: engine/core/models.py:521 msgid "upload a big logo representing this brand" msgstr "Faça upload de um logotipo grande que represente essa marca" -#: engine/core/models.py:474 +#: engine/core/models.py:523 msgid "brand big image" msgstr "Imagem de marca grande" -#: engine/core/models.py:479 +#: engine/core/models.py:528 msgid "add a detailed description of the brand" msgstr "Adicione uma descrição detalhada da marca" -#: engine/core/models.py:480 +#: engine/core/models.py:529 msgid "brand description" msgstr "Descrição da marca" -#: engine/core/models.py:485 -msgid "optional categories that this brand is associated with" -msgstr "Categorias opcionais às quais essa marca está associada" +#: engine/core/models.py:534 engine/core/models.py:535 +msgid "DEPRECATED" +msgstr "DESCONTINUADO" -#: engine/core/models.py:486 -msgid "associated categories" -msgstr "Categorias" - -#: engine/core/models.py:516 +#: engine/core/models.py:569 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1856,72 +1892,72 @@ msgstr "" "sistema de gerenciamento de estoque para permitir o rastreamento e a " "avaliação dos produtos disponíveis de vários fornecedores." -#: engine/core/models.py:528 +#: engine/core/models.py:581 msgid "the vendor supplying this product stock" msgstr "O fornecedor que fornece esse estoque de produtos" -#: engine/core/models.py:529 +#: engine/core/models.py:582 msgid "associated vendor" msgstr "Fornecedor associado" -#: engine/core/models.py:533 +#: engine/core/models.py:588 msgid "final price to the customer after markups" msgstr "Preço final para o cliente após as marcações" -#: engine/core/models.py:534 +#: engine/core/models.py:589 msgid "selling price" msgstr "Preço de venda" -#: engine/core/models.py:539 +#: engine/core/models.py:594 msgid "the product associated with this stock entry" msgstr "O produto associado a essa entrada em estoque" -#: engine/core/models.py:540 engine/core/models.py:828 -#: engine/core/models.py:874 engine/core/models.py:1912 +#: engine/core/models.py:595 engine/core/models.py:914 +#: engine/core/models.py:962 engine/core/models.py:2020 msgid "associated product" msgstr "Produto associado" -#: engine/core/models.py:547 +#: engine/core/models.py:604 msgid "the price paid to the vendor for this product" msgstr "O preço pago ao fornecedor por esse produto" -#: engine/core/models.py:548 +#: engine/core/models.py:605 msgid "vendor purchase price" msgstr "Preço de compra do fornecedor" -#: engine/core/models.py:552 +#: engine/core/models.py:609 msgid "available quantity of the product in stock" msgstr "Quantidade disponível do produto em estoque" -#: engine/core/models.py:553 +#: engine/core/models.py:610 msgid "quantity in stock" msgstr "Quantidade em estoque" -#: engine/core/models.py:557 +#: engine/core/models.py:614 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU atribuído pelo fornecedor para identificar o produto" -#: engine/core/models.py:558 +#: engine/core/models.py:615 msgid "vendor sku" msgstr "SKU do fornecedor" -#: engine/core/models.py:564 +#: engine/core/models.py:621 msgid "digital file associated with this stock if applicable" msgstr "Arquivo digital associado a esse estoque, se aplicável" -#: engine/core/models.py:565 +#: engine/core/models.py:622 msgid "digital file" msgstr "Arquivo digital" -#: engine/core/models.py:569 +#: engine/core/models.py:626 msgid "system attributes" msgstr "Atributos do sistema" -#: engine/core/models.py:577 +#: engine/core/models.py:636 msgid "stock entries" msgstr "Entradas de estoque" -#: engine/core/models.py:582 +#: engine/core/models.py:641 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1942,72 +1978,80 @@ msgstr "" "frequência para melhorar o desempenho. É usada para definir e manipular " "dados de produtos e suas informações associadas em um aplicativo." -#: engine/core/models.py:595 +#: engine/core/models.py:660 msgid "category this product belongs to" msgstr "Categoria à qual este produto pertence" -#: engine/core/models.py:604 +#: engine/core/models.py:669 msgid "optionally associate this product with a brand" msgstr "Opcionalmente, associe esse produto a uma marca" -#: engine/core/models.py:610 +#: engine/core/models.py:675 msgid "tags that help describe or group this product" msgstr "Tags que ajudam a descrever ou agrupar este produto" -#: engine/core/models.py:615 +#: engine/core/models.py:680 msgid "indicates whether this product is digitally delivered" msgstr "Indica se esse produto é entregue digitalmente" -#: engine/core/models.py:616 +#: engine/core/models.py:681 msgid "is product digital" msgstr "O produto é digital" -#: engine/core/models.py:623 +#: engine/core/models.py:688 msgid "indicates whether this product should be updated from periodic task" msgstr "" "indica se esse produto deve ser atualizado a partir da tarefa periódica" -#: engine/core/models.py:625 +#: engine/core/models.py:690 msgid "is product updatable" msgstr "o produto é atualizável" -#: engine/core/models.py:631 +#: engine/core/models.py:696 msgid "provide a clear identifying name for the product" msgstr "Fornecer um nome de identificação claro para o produto" -#: engine/core/models.py:632 +#: engine/core/models.py:697 msgid "product name" msgstr "Nome do produto" -#: engine/core/models.py:638 engine/core/models.py:923 +#: engine/core/models.py:703 engine/core/models.py:1012 msgid "add a detailed description of the product" msgstr "Adicione uma descrição detalhada do produto" -#: engine/core/models.py:639 +#: engine/core/models.py:704 msgid "product description" msgstr "Descrição do produto" -#: engine/core/models.py:646 +#: engine/core/models.py:710 +msgid "optional video file for this product" +msgstr "Arquivo de vídeo opcional para este produto" + +#: engine/core/models.py:711 +msgid "product video" +msgstr "Vídeo do produto" + +#: engine/core/models.py:719 msgid "part number for this product" msgstr "Número de peça para este produto" -#: engine/core/models.py:647 +#: engine/core/models.py:720 msgid "part number" msgstr "Número da peça" -#: engine/core/models.py:666 +#: engine/core/models.py:739 msgid "stock keeping unit for this product" msgstr "Unidade de Manutenção de Estoque para este produto" -#: engine/core/models.py:673 +#: engine/core/models.py:746 msgid "whether to export this product to marketplaces" msgstr "Se exportar este produto para mercados" -#: engine/core/models.py:674 +#: engine/core/models.py:747 msgid "Export to Marketplaces" msgstr "Exportar para mercados" -#: engine/core/models.py:749 +#: engine/core/models.py:835 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 " @@ -2023,65 +2067,65 @@ msgstr "" "valores, incluindo string, inteiro, float, booleano, matriz e objeto. Isso " "permite a estruturação dinâmica e flexível dos dados." -#: engine/core/models.py:762 +#: engine/core/models.py:848 msgid "group of this attribute" msgstr "Grupo desse atributo" -#: engine/core/models.py:768 +#: engine/core/models.py:854 msgid "string" msgstr "Cordas" -#: engine/core/models.py:769 +#: engine/core/models.py:855 msgid "integer" msgstr "Inteiro" -#: engine/core/models.py:770 +#: engine/core/models.py:856 msgid "float" msgstr "Flutuação" -#: engine/core/models.py:771 +#: engine/core/models.py:857 msgid "boolean" msgstr "Booleano" -#: engine/core/models.py:772 +#: engine/core/models.py:858 msgid "array" msgstr "Matriz" -#: engine/core/models.py:773 +#: engine/core/models.py:859 msgid "object" msgstr "Objeto" -#: engine/core/models.py:775 +#: engine/core/models.py:861 msgid "type of the attribute's value" msgstr "Tipo do valor do atributo" -#: engine/core/models.py:776 +#: engine/core/models.py:862 msgid "value type" msgstr "Tipo de valor" -#: engine/core/models.py:781 +#: engine/core/models.py:867 msgid "name of this attribute" msgstr "Nome desse atributo" -#: engine/core/models.py:782 +#: engine/core/models.py:868 msgid "attribute's name" msgstr "Nome do atributo" -#: engine/core/models.py:787 +#: engine/core/models.py:873 msgid "is filterable" msgstr "é filtrável" -#: engine/core/models.py:789 +#: engine/core/models.py:875 msgid "designates whether this attribute can be used for filtering or not" msgstr "" "Quais atributos e valores podem ser usados para filtrar essa categoria." -#: engine/core/models.py:802 engine/core/models.py:820 +#: engine/core/models.py:888 engine/core/models.py:906 #: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Atributo" -#: engine/core/models.py:808 +#: engine/core/models.py:894 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" @@ -2091,19 +2135,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." -#: engine/core/models.py:819 +#: engine/core/models.py:905 msgid "attribute of this value" msgstr "Atributo desse valor" -#: engine/core/models.py:827 +#: engine/core/models.py:913 msgid "the specific product associated with this attribute's value" msgstr "O produto específico associado ao valor desse atributo" -#: engine/core/models.py:833 +#: engine/core/models.py:919 msgid "the specific value for this attribute" msgstr "O valor específico para esse atributo" -#: engine/core/models.py:846 +#: engine/core/models.py:934 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -2117,40 +2161,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." -#: engine/core/models.py:857 +#: engine/core/models.py:945 msgid "provide alternative text for the image for accessibility" msgstr "" "Forneça um texto alternativo para a imagem para fins de acessibilidade" -#: engine/core/models.py:858 +#: engine/core/models.py:946 msgid "image alt text" msgstr "Texto alternativo da imagem" -#: engine/core/models.py:861 +#: engine/core/models.py:949 msgid "upload the image file for this product" msgstr "Faça o upload do arquivo de imagem para este produto" -#: engine/core/models.py:862 engine/core/models.py:893 +#: engine/core/models.py:950 engine/core/models.py:982 msgid "product image" msgstr "Imagem do produto" -#: engine/core/models.py:867 +#: engine/core/models.py:955 msgid "determines the order in which images are displayed" msgstr "Determina a ordem em que as imagens são exibidas" -#: engine/core/models.py:868 +#: engine/core/models.py:956 msgid "display priority" msgstr "Prioridade de exibição" -#: engine/core/models.py:873 +#: engine/core/models.py:961 msgid "the product that this image represents" msgstr "O produto que esta imagem representa" -#: engine/core/models.py:894 +#: engine/core/models.py:983 msgid "product images" msgstr "Imagens do produto" -#: engine/core/models.py:899 +#: engine/core/models.py:988 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -2166,39 +2210,39 @@ msgstr "" "vinculá-la aos produtos aplicáveis. Ela se integra ao catálogo de produtos " "para determinar os itens afetados na campanha." -#: engine/core/models.py:911 +#: engine/core/models.py:1000 msgid "percentage discount for the selected products" msgstr "Desconto percentual para os produtos selecionados" -#: engine/core/models.py:912 +#: engine/core/models.py:1001 msgid "discount percentage" msgstr "Porcentagem de desconto" -#: engine/core/models.py:917 +#: engine/core/models.py:1006 msgid "provide a unique name for this promotion" msgstr "Forneça um nome exclusivo para essa promoção" -#: engine/core/models.py:918 +#: engine/core/models.py:1007 msgid "promotion name" msgstr "Nome da promoção" -#: engine/core/models.py:924 +#: engine/core/models.py:1013 msgid "promotion description" msgstr "Descrição da promoção" -#: engine/core/models.py:929 +#: engine/core/models.py:1018 msgid "select which products are included in this promotion" msgstr "Selecione quais produtos estão incluídos nessa promoção" -#: engine/core/models.py:930 +#: engine/core/models.py:1019 msgid "included products" msgstr "Produtos incluídos" -#: engine/core/models.py:934 +#: engine/core/models.py:1027 msgid "promotion" msgstr "Promoção" -#: engine/core/models.py:945 +#: engine/core/models.py:1038 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2211,23 +2255,23 @@ msgstr "" " bem como operações de suporte para adicionar e remover vários produtos de " "uma só vez." -#: engine/core/models.py:957 +#: engine/core/models.py:1050 msgid "products that the user has marked as wanted" msgstr "Produtos que o usuário marcou como desejados" -#: engine/core/models.py:965 +#: engine/core/models.py:1058 msgid "user who owns this wishlist" msgstr "Usuário que possui esta lista de desejos" -#: engine/core/models.py:966 +#: engine/core/models.py:1059 msgid "wishlist owner" msgstr "Proprietário da lista de desejos" -#: engine/core/models.py:974 +#: engine/core/models.py:1067 msgid "wishlist" msgstr "Lista de desejos" -#: engine/core/models.py:1016 +#: engine/core/models.py:1109 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2243,19 +2287,19 @@ msgstr "" "de armazenamento dos arquivos do documentário. Ela estende a funcionalidade " "de mixins específicos e fornece recursos personalizados adicionais." -#: engine/core/models.py:1031 +#: engine/core/models.py:1124 msgid "documentary" msgstr "Documentário" -#: engine/core/models.py:1032 +#: engine/core/models.py:1125 msgid "documentaries" msgstr "Documentários" -#: engine/core/models.py:1042 +#: engine/core/models.py:1135 msgid "unresolved" msgstr "Não resolvido" -#: engine/core/models.py:1047 +#: engine/core/models.py:1140 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2277,59 +2321,59 @@ msgstr "" "associar um endereço a um usuário, facilitando o tratamento personalizado " "dos dados." -#: engine/core/models.py:1062 +#: engine/core/models.py:1155 msgid "address line for the customer" msgstr "Linha de endereço do cliente" -#: engine/core/models.py:1063 +#: engine/core/models.py:1156 msgid "address line" msgstr "Linha de endereço" -#: engine/core/models.py:1065 +#: engine/core/models.py:1158 msgid "street" msgstr "Rua" -#: engine/core/models.py:1066 +#: engine/core/models.py:1159 msgid "district" msgstr "Distrito" -#: engine/core/models.py:1067 +#: engine/core/models.py:1160 msgid "city" msgstr "Cidade" -#: engine/core/models.py:1068 +#: engine/core/models.py:1161 msgid "region" msgstr "Região" -#: engine/core/models.py:1069 +#: engine/core/models.py:1162 msgid "postal code" msgstr "Código postal" -#: engine/core/models.py:1070 +#: engine/core/models.py:1163 msgid "country" msgstr "País" -#: engine/core/models.py:1077 +#: engine/core/models.py:1170 msgid "geolocation point: (longitude, latitude)" msgstr "Ponto de geolocalização (Longitude, Latitude)" -#: engine/core/models.py:1083 +#: engine/core/models.py:1176 msgid "full JSON response from geocoder for this address" msgstr "Resposta JSON completa do geocodificador para este endereço" -#: engine/core/models.py:1089 +#: engine/core/models.py:1182 msgid "stored JSON response from the geocoding service" msgstr "Resposta JSON armazenada do serviço de geocodificação" -#: engine/core/models.py:1099 +#: engine/core/models.py:1192 msgid "address" msgstr "Endereço" -#: engine/core/models.py:1100 +#: engine/core/models.py:1193 msgid "addresses" msgstr "Endereços" -#: engine/core/models.py:1112 +#: engine/core/models.py:1205 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2346,74 +2390,74 @@ msgstr "" "funcionalidade para validar e aplicar o código promocional a um pedido, " "garantindo que as restrições sejam atendidas." -#: engine/core/models.py:1126 +#: engine/core/models.py:1219 msgid "unique code used by a user to redeem a discount" msgstr "Código exclusivo usado por um usuário para resgatar um desconto" -#: engine/core/models.py:1127 +#: engine/core/models.py:1220 msgid "promo code identifier" msgstr "Identificador de código promocional" -#: engine/core/models.py:1134 +#: engine/core/models.py:1227 msgid "fixed discount amount applied if percent is not used" msgstr "Valor de desconto fixo aplicado se a porcentagem não for usada" -#: engine/core/models.py:1135 +#: engine/core/models.py:1228 msgid "fixed discount amount" msgstr "Valor do desconto fixo" -#: engine/core/models.py:1141 +#: engine/core/models.py:1234 msgid "percentage discount applied if fixed amount is not used" msgstr "Desconto percentual aplicado se o valor fixo não for usado" -#: engine/core/models.py:1142 +#: engine/core/models.py:1235 msgid "percentage discount" msgstr "Desconto percentual" -#: engine/core/models.py:1147 +#: engine/core/models.py:1240 msgid "timestamp when the promocode expires" msgstr "Registro de data e hora em que o código promocional expira" -#: engine/core/models.py:1148 +#: engine/core/models.py:1241 msgid "end validity time" msgstr "Tempo de validade final" -#: engine/core/models.py:1153 +#: engine/core/models.py:1246 msgid "timestamp from which this promocode is valid" msgstr "" "Registro de data e hora a partir do qual esse código promocional é válido" -#: engine/core/models.py:1154 +#: engine/core/models.py:1247 msgid "start validity time" msgstr "Hora de início da validade" -#: engine/core/models.py:1159 +#: engine/core/models.py:1252 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" -#: engine/core/models.py:1160 +#: engine/core/models.py:1253 msgid "usage timestamp" msgstr "Registro de data e hora de uso" -#: engine/core/models.py:1165 +#: engine/core/models.py:1258 msgid "user assigned to this promocode if applicable" msgstr "Usuário atribuído a esse código promocional, se aplicável" -#: engine/core/models.py:1166 +#: engine/core/models.py:1259 msgid "assigned user" msgstr "Usuário atribuído" -#: engine/core/models.py:1173 +#: engine/core/models.py:1266 msgid "promo code" msgstr "Código promocional" -#: engine/core/models.py:1174 +#: engine/core/models.py:1267 msgid "promo codes" msgstr "Códigos promocionais" -#: engine/core/models.py:1190 +#: engine/core/models.py:1283 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2421,16 +2465,16 @@ msgstr "" "Apenas um tipo de desconto deve ser definido (valor ou porcentagem), mas não" " ambos ou nenhum." -#: engine/core/models.py:1212 +#: engine/core/models.py:1305 msgid "promocode already used" msgstr "O código promocional já foi usado" -#: engine/core/models.py:1234 +#: engine/core/models.py:1327 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Tipo de desconto inválido para o código promocional {self.uuid}!" -#: engine/core/models.py:1243 +#: engine/core/models.py:1336 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 " @@ -2447,139 +2491,139 @@ msgstr "" "atualizados. Da mesma forma, a funcionalidade suporta o gerenciamento dos " "produtos no ciclo de vida do pedido." -#: engine/core/models.py:1260 +#: engine/core/models.py:1357 msgid "the billing address used for this order" msgstr "O endereço de cobrança usado para esse pedido" -#: engine/core/models.py:1268 +#: engine/core/models.py:1365 msgid "optional promo code applied to this order" msgstr "Código promocional opcional aplicado a este pedido" -#: engine/core/models.py:1269 +#: engine/core/models.py:1366 msgid "applied promo code" msgstr "Código promocional aplicado" -#: engine/core/models.py:1277 +#: engine/core/models.py:1374 msgid "the shipping address used for this order" msgstr "O endereço de entrega usado para esse pedido" -#: engine/core/models.py:1278 +#: engine/core/models.py:1375 msgid "shipping address" msgstr "Endereço de entrega" -#: engine/core/models.py:1284 +#: engine/core/models.py:1381 msgid "current status of the order in its lifecycle" msgstr "Status atual do pedido em seu ciclo de vida" -#: engine/core/models.py:1285 +#: engine/core/models.py:1382 msgid "order status" msgstr "Status do pedido" -#: engine/core/models.py:1290 engine/core/models.py:1889 +#: engine/core/models.py:1387 engine/core/models.py:1997 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" -#: engine/core/models.py:1296 +#: engine/core/models.py:1393 msgid "json representation of order attributes for this order" msgstr "Representação JSON dos atributos do pedido para esse pedido" -#: engine/core/models.py:1302 +#: engine/core/models.py:1399 msgid "the user who placed the order" msgstr "O usuário que fez o pedido" -#: engine/core/models.py:1303 +#: engine/core/models.py:1400 msgid "user" msgstr "Usuário" -#: engine/core/models.py:1309 +#: engine/core/models.py:1406 msgid "the timestamp when the order was finalized" msgstr "O registro de data e hora em que o pedido foi finalizado" -#: engine/core/models.py:1310 +#: engine/core/models.py:1407 msgid "buy time" msgstr "Tempo de compra" -#: engine/core/models.py:1317 +#: engine/core/models.py:1414 msgid "a human-readable identifier for the order" msgstr "Um identificador legível por humanos para o pedido" -#: engine/core/models.py:1318 +#: engine/core/models.py:1415 msgid "human readable id" msgstr "ID legível por humanos" -#: engine/core/models.py:1324 +#: engine/core/models.py:1421 msgid "order" msgstr "Pedido" -#: engine/core/models.py:1371 +#: engine/core/models.py:1468 msgid "a user must have only one pending order at a time" msgstr "Um usuário deve ter apenas uma ordem pendente por vez!" -#: engine/core/models.py:1404 +#: engine/core/models.py:1504 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" -#: engine/core/models.py:1410 +#: engine/core/models.py:1510 msgid "you cannot add inactive products to order" msgstr "Não é possível adicionar produtos inativos ao pedido" -#: engine/core/models.py:1432 +#: engine/core/models.py:1533 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" -#: engine/core/models.py:1456 engine/core/models.py:1485 -#: engine/core/models.py:1495 +#: engine/core/models.py:1557 engine/core/models.py:1586 +#: engine/core/models.py:1596 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" -#: engine/core/models.py:1480 +#: engine/core/models.py:1581 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} não existe com a consulta <{query}>!" -#: engine/core/models.py:1519 +#: engine/core/models.py:1620 msgid "promocode does not exist" msgstr "O código promocional não existe" -#: engine/core/models.py:1534 +#: engine/core/models.py:1635 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!" -#: engine/core/models.py:1555 +#: engine/core/models.py:1656 msgid "address does not exist" msgstr "O endereço não existe" -#: engine/core/models.py:1577 engine/core/models.py:1656 +#: engine/core/models.py:1678 engine/core/models.py:1757 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." -#: engine/core/models.py:1583 engine/core/models.py:1649 +#: engine/core/models.py:1684 engine/core/models.py:1750 msgid "invalid force value" msgstr "Valor de força inválido" -#: engine/core/models.py:1589 engine/core/models.py:1660 +#: engine/core/models.py:1690 engine/core/models.py:1761 msgid "you cannot purchase an empty order!" msgstr "Você não pode comprar um pedido vazio!" -#: engine/core/models.py:1610 +#: engine/core/models.py:1711 msgid "you cannot buy an order without a user" msgstr "Não é possível comprar um pedido sem um usuário!" -#: engine/core/models.py:1624 +#: engine/core/models.py:1725 msgid "a user without a balance cannot buy with balance" msgstr "Um usuário sem saldo não pode comprar com saldo!" -#: engine/core/models.py:1630 +#: engine/core/models.py:1731 msgid "insufficient funds to complete the order" msgstr "Fundos insuficientes para concluir o pedido" -#: engine/core/models.py:1671 +#: engine/core/models.py:1772 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2587,7 +2631,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" -#: engine/core/models.py:1682 +#: engine/core/models.py:1783 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2595,7 +2639,7 @@ msgstr "" "Método de pagamento inválido: {payment_method} de " "{available_payment_methods}!" -#: engine/core/models.py:1813 +#: engine/core/models.py:1916 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2610,35 +2654,35 @@ 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." -#: engine/core/models.py:1825 +#: engine/core/models.py:1928 msgid "user-provided comments about their experience with the product" msgstr "" "Comentários fornecidos pelo usuário sobre sua experiência com o produto" -#: engine/core/models.py:1826 +#: engine/core/models.py:1929 msgid "feedback comments" msgstr "Comentários de feedback" -#: engine/core/models.py:1834 +#: engine/core/models.py:1937 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" -#: engine/core/models.py:1836 +#: engine/core/models.py:1939 msgid "related order product" msgstr "Produto de pedido relacionado" -#: engine/core/models.py:1841 +#: engine/core/models.py:1944 msgid "user-assigned rating for the product" msgstr "Classificação atribuída pelo usuário ao produto" -#: engine/core/models.py:1842 +#: engine/core/models.py:1945 msgid "product rating" msgstr "Avaliação do produto" -#: engine/core/models.py:1862 +#: engine/core/models.py:1965 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2660,109 +2704,109 @@ msgstr "" "para produtos digitais. O modelo se integra aos modelos Order e Product e " "armazena uma referência a eles." -#: engine/core/models.py:1877 +#: engine/core/models.py:1985 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" -#: engine/core/models.py:1878 +#: engine/core/models.py:1986 msgid "purchase price at order time" msgstr "Preço de compra no momento do pedido" -#: engine/core/models.py:1883 +#: engine/core/models.py:1991 msgid "internal comments for admins about this ordered product" msgstr "" "Comentários internos para administradores sobre este produto encomendado" -#: engine/core/models.py:1884 +#: engine/core/models.py:1992 msgid "internal comments" msgstr "Comentários internos" -#: engine/core/models.py:1890 +#: engine/core/models.py:1998 msgid "user notifications" msgstr "Notificações do usuário" -#: engine/core/models.py:1895 +#: engine/core/models.py:2003 msgid "json representation of this item's attributes" msgstr "Representação JSON dos atributos desse item" -#: engine/core/models.py:1896 +#: engine/core/models.py:2004 msgid "ordered product attributes" msgstr "Atributos ordenados do produto" -#: engine/core/models.py:1901 +#: engine/core/models.py:2009 msgid "reference to the parent order that contains this product" msgstr "Referência ao pedido pai que contém esse produto" -#: engine/core/models.py:1902 +#: engine/core/models.py:2010 msgid "parent order" msgstr "Ordem dos pais" -#: engine/core/models.py:1911 +#: engine/core/models.py:2019 msgid "the specific product associated with this order line" msgstr "O produto específico associado a essa linha de pedido" -#: engine/core/models.py:1918 +#: engine/core/models.py:2026 msgid "quantity of this specific product in the order" msgstr "Quantidade desse produto específico no pedido" -#: engine/core/models.py:1919 +#: engine/core/models.py:2027 msgid "product quantity" msgstr "Quantidade do produto" -#: engine/core/models.py:1926 +#: engine/core/models.py:2034 msgid "current status of this product in the order" msgstr "Status atual desse produto no pedido" -#: engine/core/models.py:1927 +#: engine/core/models.py:2035 msgid "product line status" msgstr "Status da linha de produtos" -#: engine/core/models.py:1998 +#: engine/core/models.py:2106 msgid "order product must have an order" msgstr "O Orderproduct deve ter um pedido associado!" -#: engine/core/models.py:2000 +#: engine/core/models.py:2108 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Ação incorreta especificada para o feedback: {action}!" -#: engine/core/models.py:2017 +#: engine/core/models.py:2125 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" -#: engine/core/models.py:2026 +#: engine/core/models.py:2132 engine/core/models.py:2227 msgid "name" msgstr "Nome" -#: engine/core/models.py:2028 +#: engine/core/models.py:2134 msgid "URL of the integration" msgstr "URL da integração" -#: engine/core/models.py:2031 +#: engine/core/models.py:2137 msgid "authentication credentials" msgstr "Credenciais de autenticação" -#: engine/core/models.py:2054 +#: engine/core/models.py:2160 msgid "you can only have one default CRM provider" msgstr "Você só pode ter um provedor de CRM padrão" -#: engine/core/models.py:2064 +#: engine/core/models.py:2170 msgid "CRM" msgstr "CRM" -#: engine/core/models.py:2065 +#: engine/core/models.py:2171 msgid "CRMs" msgstr "CRMs" -#: engine/core/models.py:2081 +#: engine/core/models.py:2187 msgid "order CRM link" msgstr "Link do CRM do pedido" -#: engine/core/models.py:2082 +#: engine/core/models.py:2188 msgid "orders CRM links" msgstr "Links de CRM dos pedidos" -#: engine/core/models.py:2087 +#: engine/core/models.py:2193 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2778,14 +2822,38 @@ 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." -#: engine/core/models.py:2103 +#: engine/core/models.py:2209 msgid "download" msgstr "Baixar" -#: engine/core/models.py:2104 +#: engine/core/models.py:2210 msgid "downloads" msgstr "Downloads" +#: engine/core/models.py:2228 +msgid "descriptive name for the image" +msgstr "Nome descritivo da imagem" + +#: engine/core/models.py:2233 +msgid "image file pasted in the markdown editor" +msgstr "Arquivo de imagem colado no editor de marcação" + +#: engine/core/models.py:2239 +msgid "alt text" +msgstr "Outro texto" + +#: engine/core/models.py:2240 +msgid "alternative text for accessibility" +msgstr "Texto alternativo para acessibilidade" + +#: engine/core/models.py:2244 +msgid "pasted image" +msgstr "Imagem colada" + +#: engine/core/models.py:2245 +msgid "pasted images" +msgstr "Imagens coladas" + #: engine/core/serializers/utility.py:91 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." @@ -2794,6 +2862,16 @@ msgstr "" "pedido para adicionar feedback." #: engine/core/sitemaps.py:25 +#: engine/core/templates/admin_doc/bookmarklets.html:8 +#: engine/core/templates/admin_doc/index.html:8 +#: engine/core/templates/admin_doc/missing_docutils.html:8 +#: engine/core/templates/admin_doc/model_detail.html:8 +#: engine/core/templates/admin_doc/model_index.html:8 +#: engine/core/templates/admin_doc/template_detail.html:8 +#: engine/core/templates/admin_doc/template_filter_index.html:8 +#: engine/core/templates/admin_doc/template_tag_index.html:8 +#: engine/core/templates/admin_doc/view_detail.html:8 +#: engine/core/templates/admin_doc/view_index.html:8 msgid "Home" msgstr "Início" @@ -2846,45 +2924,34 @@ msgstr "Bruto" msgid "Dashboard" msgstr "Painel de controle" -#: engine/core/templates/admin/dashboard/_income_overview.html:7 +#: engine/core/templates/admin/dashboard/_income_overview.html:6 msgid "Income overview" msgstr "Visão geral da renda" -#: engine/core/templates/admin/dashboard/_income_overview.html:31 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Net" +#: engine/core/templates/admin/dashboard/_income_overview.html:16 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" msgstr "Receita líquida" -#: engine/core/templates/admin/dashboard/_income_overview.html:37 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Taxes" -msgstr "Impostos" - -#: engine/core/templates/admin/dashboard/_income_overview.html:43 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 +#: engine/core/templates/admin/dashboard/_income_overview.html:21 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 msgid "Returns" msgstr "Devoluções" -#: engine/core/templates/admin/dashboard/_income_overview.html:48 -msgid "Gross (pie total)" -msgstr "Receita bruta" - -#: engine/core/templates/admin/dashboard/_income_overview.html:72 -msgid "No data" -msgstr "No data" - +#: engine/core/templates/admin/dashboard/_income_overview.html:26 #: engine/core/templates/admin/dashboard/_kpis.html:6 msgid "GMV" msgstr "GMV" +#: engine/core/templates/admin/dashboard/_income_overview.html:50 +msgid "No data" +msgstr "No data" + #: engine/core/templates/admin/dashboard/_kpis.html:34 msgid "AOV" msgstr "AOV" -#: engine/core/templates/admin/dashboard/_kpis.html:48 -msgid "Net revenue" -msgstr "Receita líquida" - #: engine/core/templates/admin/dashboard/_kpis.html:62 msgid "Refund rate" msgstr "Taxa de reembolso" @@ -2897,7 +2964,7 @@ msgstr "Devolvido" msgid "Low stock" msgstr "Estoque baixo" -#: engine/core/templates/admin/dashboard/_low_stock.html:29 +#: engine/core/templates/admin/dashboard/_low_stock.html:33 msgid "No low stock items." msgstr "Não há itens com estoque baixo." @@ -2954,6 +3021,304 @@ msgstr "Nenhuma venda de categoria nos últimos 30 dias." msgid "Django site admin" msgstr "Administrador do site Django" +#: engine/core/templates/admin_doc/bookmarklets.html:4 +#: engine/core/templates/admin_doc/bookmarklets.html:17 +msgid "Documentation bookmarklets" +msgstr "Bookmarklets de documentação" + +#: engine/core/templates/admin_doc/bookmarklets.html:10 +#: engine/core/templates/admin_doc/index.html:4 +#: engine/core/templates/admin_doc/index.html:10 +#: engine/core/templates/admin_doc/index.html:15 +#: engine/core/templates/admin_doc/missing_docutils.html:10 +#: engine/core/templates/admin_doc/missing_docutils.html:19 +#: engine/core/templates/admin_doc/model_detail.html:10 +#: engine/core/templates/admin_doc/model_index.html:10 +#: engine/core/templates/admin_doc/template_detail.html:10 +#: engine/core/templates/admin_doc/template_filter_index.html:10 +#: engine/core/templates/admin_doc/template_tag_index.html:10 +#: engine/core/templates/admin_doc/view_detail.html:10 +#: engine/core/templates/admin_doc/view_index.html:10 +msgid "Documentation" +msgstr "Documentação" + +#: engine/core/templates/admin_doc/bookmarklets.html:12 +#: engine/core/templates/admin_doc/index.html:53 +msgid "Bookmarklets" +msgstr "Bookmarklets" + +#: engine/core/templates/admin_doc/bookmarklets.html:19 +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Para instalar bookmarklets, arraste o link para a barra de favoritos ou " +"clique com o botão direito do mouse no link e adicione-o aos seus favoritos." +" Agora você pode selecionar o bookmarklet em qualquer página do site." + +#: engine/core/templates/admin_doc/bookmarklets.html:29 +msgid "Documentation for this page" +msgstr "Documentação para esta página" + +#: engine/core/templates/admin_doc/bookmarklets.html:31 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Leva você de qualquer página para a documentação da visualização que gera " +"essa página." + +#: engine/core/templates/admin_doc/index.html:21 +#: engine/core/templates/admin_doc/model_detail.html:12 +#: engine/core/templates/admin_doc/model_index.html:4 +#: engine/core/templates/admin_doc/model_index.html:12 +msgid "Models" +msgstr "Modelos" + +#: engine/core/templates/admin_doc/index.html:23 +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Modelos são descrições de todos os objetos no sistema e seus campos " +"associados. Cada modelo tem uma lista de campos que podem ser acessados como" +" variáveis de modelo." + +#: engine/core/templates/admin_doc/index.html:29 +#: engine/core/templates/admin_doc/view_detail.html:12 +#: engine/core/templates/admin_doc/view_index.html:4 +#: engine/core/templates/admin_doc/view_index.html:12 +msgid "Views" +msgstr "Visualizações" + +#: engine/core/templates/admin_doc/index.html:31 +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Cada página do site público é gerada por uma visualização. A visualização " +"define qual modelo é usado para gerar a página e quais objetos estão " +"disponíveis para esse modelo." + +#: engine/core/templates/admin_doc/index.html:39 +msgid "List of all the template tags and their functions." +msgstr "Lista de todas as tags de modelo e suas funções." + +#: engine/core/templates/admin_doc/index.html:45 +#: engine/core/templates/admin_doc/template_filter_index.html:12 +msgid "Filters" +msgstr "Filtros" + +#: engine/core/templates/admin_doc/index.html:47 +msgid "" +"Filters are actions which can be applied to variables in a template to alter" +" the output." +msgstr "" +"Os filtros são ações que podem ser aplicadas a variáveis em um modelo para " +"alterar a saída." + +#: engine/core/templates/admin_doc/index.html:55 +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Ferramentas para o seu navegador acessar rapidamente as funcionalidades " +"administrativas." + +#: engine/core/templates/admin_doc/missing_docutils.html:4 +msgid "Please install docutils" +msgstr "Instale o docutils" + +#: engine/core/templates/admin_doc/missing_docutils.html:20 +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"O sistema de documentação administrativa requer a biblioteca docutils do Python." + +#: engine/core/templates/admin_doc/missing_docutils.html:21 +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Peça aos seus administradores para instalarem docutils." + +#: engine/core/templates/admin_doc/model_detail.html:4 +#, python-format +msgid "Model: %(name)s" +msgstr "Modelo: %(name)s" + +#: engine/core/templates/admin_doc/model_detail.html:29 +msgid "Fields" +msgstr "Campos" + +#: engine/core/templates/admin_doc/model_detail.html:36 +msgid "Field" +msgstr "Campo" + +#: engine/core/templates/admin_doc/model_detail.html:37 +msgid "Type" +msgstr "Tipo" + +#: engine/core/templates/admin_doc/model_detail.html:38 +#: engine/core/templates/admin_doc/model_detail.html:70 +msgid "Description" +msgstr "Descrição" + +#: engine/core/templates/admin_doc/model_detail.html:61 +msgid "Methods with arguments" +msgstr "Métodos com argumentos" + +#: engine/core/templates/admin_doc/model_detail.html:68 +msgid "Method" +msgstr "Método" + +#: engine/core/templates/admin_doc/model_detail.html:69 +msgid "Arguments" +msgstr "Argumentos" + +#: engine/core/templates/admin_doc/model_detail.html:89 +msgid "Back to Model documentation" +msgstr "Voltar à documentação do modelo" + +#: engine/core/templates/admin_doc/model_index.html:17 +msgid "Model documentation" +msgstr "Documentação do modelo" + +#: engine/core/templates/admin_doc/model_index.html:44 +msgid "Model groups" +msgstr "Grupos modelo" + +#: engine/core/templates/admin_doc/template_detail.html:4 +#, python-format +msgid "Template: %(name)s" +msgstr "Modelo: %(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:12 +msgid "Templates" +msgstr "Modelos" + +#: engine/core/templates/admin_doc/template_detail.html:17 +#, python-format +msgid "" +"Template: %(name)s" +msgstr "" +"Modelo: %(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:21 +#, python-format +msgid "Search path for template %(name)s:" +msgstr "" +"Caminho de pesquisa para o modelo %(name)s:" + +#: engine/core/templates/admin_doc/template_detail.html:29 +msgid "(does not exist)" +msgstr "(não existe)" + +#: engine/core/templates/admin_doc/template_detail.html:40 +msgid "Back to Documentation" +msgstr "Voltar para Documentação" + +#: engine/core/templates/admin_doc/template_filter_index.html:4 +msgid "Template filters" +msgstr "Filtros de modelo" + +#: engine/core/templates/admin_doc/template_filter_index.html:17 +msgid "Template filter documentation" +msgstr "Documentação do filtro de modelos" + +#: engine/core/templates/admin_doc/template_filter_index.html:26 +#: engine/core/templates/admin_doc/template_filter_index.html:52 +msgid "Built-in filters" +msgstr "Filtros integrados" + +#: engine/core/templates/admin_doc/template_filter_index.html:29 +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before using" +" the filter." +msgstr "" +"Para usar esses filtros, insira %(code)s em seu modelo antes de usar o" +" filtro." + +#: engine/core/templates/admin_doc/template_tag_index.html:4 +msgid "Template tags" +msgstr "Tags de modelo" + +#: engine/core/templates/admin_doc/template_tag_index.html:17 +msgid "Template tag documentation" +msgstr "Documentação da tag do modelo" + +#: engine/core/templates/admin_doc/template_tag_index.html:26 +#: engine/core/templates/admin_doc/template_tag_index.html:52 +msgid "Built-in tags" +msgstr "Tags integradas" + +#: engine/core/templates/admin_doc/template_tag_index.html:29 +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using the tag." +msgstr "" +"Para usar essas tags, insira %(code)s em seu modelo antes de usar a" +" tag." + +#: engine/core/templates/admin_doc/view_detail.html:4 +#, python-format +msgid "View: %(name)s" +msgstr "Visualizar: %(name)s" + +#: engine/core/templates/admin_doc/view_detail.html:28 +msgid "Context:" +msgstr "Contexto:" + +#: engine/core/templates/admin_doc/view_detail.html:33 +msgid "Templates:" +msgstr "Modelos:" + +#: engine/core/templates/admin_doc/view_detail.html:41 +msgid "Back to View documentation" +msgstr "Voltar para Ver documentação" + +#: engine/core/templates/admin_doc/view_index.html:17 +msgid "View documentation" +msgstr "Ver documentação" + +#: engine/core/templates/admin_doc/view_index.html:28 +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Visualizações por namespace %(name)s" + +#: engine/core/templates/admin_doc/view_index.html:30 +msgid "Views by empty namespace" +msgstr "Visualizações por namespace vazio" + +#: engine/core/templates/admin_doc/view_index.html:40 +#, python-format +msgid "" +"View function: %(full_name)s. Name: %(url_name)s." +msgstr "" +"Função de visualização: %(full_name)s. Nome: " +"%(url_name)s." + +#: engine/core/templates/admin_doc/view_index.html:54 +msgid "Jump to namespace" +msgstr "Ir para o namespace" + +#: engine/core/templates/admin_doc/view_index.html:59 +msgid "Empty namespace" +msgstr "Espaço de nomes vazio" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -3053,7 +3418,7 @@ msgstr "" " informações adicionais" #: engine/core/templates/digital_order_delivered_email.html:137 -#: engine/core/templates/json_table_widget.html:6 +#: engine/core/templates/json_table_widget.html:26 msgid "value" msgstr "Valor" @@ -3073,11 +3438,23 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "Atenciosamente,
a equipe %(project_name)s" -#: engine/core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:7 +msgid "Key" +msgstr "Chave" + +#: engine/core/templates/json_table_widget.html:8 +msgid "Value" +msgstr "Valor" + +#: engine/core/templates/json_table_widget.html:19 msgid "key" msgstr "Chave" -#: engine/core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:32 +msgid "Delete row" +msgstr "Excluir linha" + +#: engine/core/templates/json_table_widget.html:44 msgid "Add Row" msgstr "Adicionar linha" @@ -3164,13 +3541,22 @@ msgstr "Você não tem permissão para executar essa ação." msgid "NOMINATIM_URL must be configured." msgstr "O parâmetro NOMINATIM_URL deve ser configurado!" -#: engine/core/validators.py:23 +#: engine/core/validators.py:18 +msgid "could not determine file type" +msgstr "Não foi possível determinar o tipo de arquivo" + +#: engine/core/validators.py:24 +#, python-brace-format +msgid "unsupported video format. supported formats: {supported}" +msgstr "Formato de vídeo não suportado. Formatos suportados: {supported}" + +#: engine/core/validators.py:45 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "As dimensões da imagem não devem exceder w{max_width} x h{max_height} pixels" -#: engine/core/views.py:104 +#: engine/core/views.py:108 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3179,7 +3565,7 @@ msgstr "" "Ele garante que a resposta inclua o cabeçalho de tipo de conteúdo apropriado" " para XML." -#: engine/core/views.py:119 +#: engine/core/views.py:123 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3189,17 +3575,17 @@ msgstr "" "processa a solicitação, obtém a resposta detalhada apropriada do mapa do " "site e define o cabeçalho Content-Type para XML." -#: engine/core/views.py:155 +#: engine/core/views.py:174 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Retorna uma lista de idiomas suportados e suas informações correspondentes." -#: engine/core/views.py:182 +#: engine/core/views.py:201 msgid "Returns the parameters of the website as a JSON object." msgstr "Retorna os parâmetros do site como um objeto JSON." -#: engine/core/views.py:198 +#: engine/core/views.py:217 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3207,11 +3593,11 @@ msgstr "" "Manipula operações de cache, como ler e definir dados de cache com uma chave" " e um tempo limite especificados." -#: engine/core/views.py:220 +#: engine/core/views.py:239 msgid "Handles `contact us` form submissions." msgstr "Trata os envios de formulários \"entre em contato conosco\"." -#: engine/core/views.py:236 +#: engine/core/views.py:255 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3219,15 +3605,15 @@ msgstr "" "Trata as solicitações de processamento e validação de URLs de solicitações " "POST recebidas." -#: engine/core/views.py:273 +#: engine/core/views.py:292 msgid "Handles global search queries." msgstr "Trata as consultas de pesquisa global." -#: engine/core/views.py:289 +#: engine/core/views.py:308 msgid "Handles the logic of buying as a business without registration." msgstr "Lida com a lógica de comprar como uma empresa sem registro." -#: engine/core/views.py:337 +#: engine/core/views.py:356 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3235,31 +3621,31 @@ msgstr "" "Trata do download de um ativo digital associado a um pedido.\n" "Essa função tenta servir o arquivo de ativo digital localizado no diretório de armazenamento do projeto. Se o arquivo não for encontrado, será gerado um erro HTTP 404 para indicar que o recurso não está disponível." -#: engine/core/views.py:348 +#: engine/core/views.py:367 msgid "order_product_uuid is required" msgstr "order_product_uuid é obrigatório" -#: engine/core/views.py:355 +#: engine/core/views.py:374 msgid "order product does not exist" msgstr "o produto do pedido não existe" -#: engine/core/views.py:358 +#: engine/core/views.py:377 msgid "you can only download the digital asset once" msgstr "Você só pode fazer o download do ativo digital uma vez" -#: engine/core/views.py:362 +#: engine/core/views.py:381 msgid "the order must be paid before downloading the digital asset" msgstr "o pedido deve ser pago antes de fazer o download do ativo digital" -#: engine/core/views.py:369 +#: engine/core/views.py:388 msgid "the order product does not have a product" msgstr "O produto do pedido não tem um produto" -#: engine/core/views.py:412 +#: engine/core/views.py:431 msgid "favicon not found" msgstr "favicon não encontrado" -#: engine/core/views.py:418 +#: engine/core/views.py:437 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3267,7 +3653,7 @@ msgstr "" "Trata as solicitações do favicon de um site.\n" "Essa função tenta servir o arquivo favicon localizado no diretório estático do projeto. Se o arquivo favicon não for encontrado, será gerado um erro HTTP 404 para indicar que o recurso não está disponível." -#: engine/core/views.py:432 +#: engine/core/views.py:451 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3278,16 +3664,20 @@ msgstr "" "índice da interface de administração do Django. Ela usa a função `redirect` " "do Django para lidar com o redirecionamento HTTP." -#: engine/core/views.py:445 +#: engine/core/views.py:464 msgid "Returns current version of the Schon. " msgstr "Retorna a versão atual do Schon." -#: engine/core/views.py:674 engine/core/views.py:689 +#: engine/core/views.py:475 +msgid "no image file provided" +msgstr "Nenhum arquivo de imagem fornecido" + +#: engine/core/views.py:710 engine/core/views.py:725 #, python-format msgid "Revenue & Orders (last %(days)d)" msgstr "Receita e pedidos (último %(days)d)" -#: engine/core/views.py:870 +#: engine/core/views.py:911 msgid "Returns custom variables for Dashboard. " msgstr "Retorna variáveis personalizadas para o Dashboard." @@ -3377,7 +3767,7 @@ msgstr "" "de objetos de marca. Ela usa a estrutura ViewSet do Django para simplificar " "a implementação de pontos de extremidade da API para objetos de marca." -#: engine/core/viewsets.py:458 +#: engine/core/viewsets.py:460 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3395,7 +3785,15 @@ msgstr "" "recuperar detalhes do produto, aplicar permissões e acessar o feedback " "relacionado de um produto." -#: engine/core/viewsets.py:605 +#: engine/core/viewsets.py:541 +msgid "identificator_type and identificators are required" +msgstr "identificador_tipo e identificadores são obrigatórios" + +#: engine/core/viewsets.py:554 +msgid "identificator_type must be one of: uuid, slug, sku" +msgstr "identificador_tipo deve ser um dos seguintes: uuid, slug, sku" + +#: engine/core/viewsets.py:635 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3410,7 +3808,7 @@ msgstr "" "diferentes ações. O objetivo dessa classe é fornecer acesso simplificado aos" " recursos relacionados ao Vendor por meio da estrutura Django REST." -#: engine/core/viewsets.py:625 +#: engine/core/viewsets.py:655 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3427,7 +3825,7 @@ msgstr "" "feedback acessíveis. Ela estende a base `schonViewSet` e faz uso do sistema " "de filtragem do Django para consultar dados." -#: engine/core/viewsets.py:652 +#: engine/core/viewsets.py:682 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3446,7 +3844,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." -#: engine/core/viewsets.py:914 +#: engine/core/viewsets.py:944 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3461,11 +3859,11 @@ msgstr "" "fornece uma ação detalhada para lidar com feedback sobre instâncias de " "OrderProduct" -#: engine/core/viewsets.py:974 +#: engine/core/viewsets.py:1004 msgid "Manages operations related to Product images in the application. " msgstr "Gerencia operações relacionadas a imagens de produtos no aplicativo." -#: engine/core/viewsets.py:988 +#: engine/core/viewsets.py:1018 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3473,15 +3871,15 @@ msgstr "" "Gerencia a recuperação e o manuseio de instâncias de PromoCode por meio de " "várias ações de API." -#: engine/core/viewsets.py:1019 +#: engine/core/viewsets.py:1049 msgid "Represents a view set for managing promotions. " msgstr "Representa um conjunto de visualizações para gerenciar promoções." -#: engine/core/viewsets.py:1032 +#: engine/core/viewsets.py:1062 msgid "Handles operations related to Stock data in the system." msgstr "Trata de operações relacionadas a dados de estoque no sistema." -#: engine/core/viewsets.py:1046 +#: engine/core/viewsets.py:1076 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3500,7 +3898,7 @@ msgstr "" "possam gerenciar suas próprias listas de desejos, a menos que sejam " "concedidas permissões explícitas." -#: engine/core/viewsets.py:1183 +#: engine/core/viewsets.py:1213 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3515,12 +3913,12 @@ msgstr "" "substituições de serializadores e tratamento de permissões com base no " "contexto da solicitação." -#: engine/core/viewsets.py:1254 +#: engine/core/viewsets.py:1275 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Erro de geocodificação: {e}" -#: engine/core/viewsets.py:1262 +#: engine/core/viewsets.py:1283 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/ro_RO/LC_MESSAGES/django.mo b/engine/core/locale/ro_RO/LC_MESSAGES/django.mo index 63988d56..1ef8a934 100644 Binary files a/engine/core/locale/ro_RO/LC_MESSAGES/django.mo and b/engine/core/locale/ro_RO/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/ro_RO/LC_MESSAGES/django.po b/engine/core/locale/ro_RO/LC_MESSAGES/django.po index 629d5abc..7eb9451f 100644 --- a/engine/core/locale/ro_RO/LC_MESSAGES/django.po +++ b/engine/core/locale/ro_RO/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -51,114 +51,134 @@ msgstr "Modificat" msgid "when the object was last modified" msgstr "Când a fost editat obiectul ultima dată" -#: engine/core/admin.py:94 +#: engine/core/admin.py:98 msgid "translations" msgstr "Traduceri" -#: engine/core/admin.py:102 +#: engine/core/admin.py:106 msgid "general" msgstr "Generalități" -#: engine/core/admin.py:106 +#: engine/core/admin.py:110 msgid "relations" msgstr "Relații" -#: engine/core/admin.py:111 +#: engine/core/admin.py:115 msgid "additional info" msgstr "informații suplimentare" -#: engine/core/admin.py:133 +#: engine/core/admin.py:137 msgid "metadata" msgstr "Metadate" -#: engine/core/admin.py:141 +#: engine/core/admin.py:145 msgid "timestamps" msgstr "Timestamps" -#: engine/core/admin.py:158 +#: engine/core/admin.py:162 #, python-format msgid "Activate selected %(verbose_name_plural)s" msgstr "Activați %(verbose_name_plural)s selectat" -#: engine/core/admin.py:166 +#: engine/core/admin.py:170 msgid "selected items have been activated." msgstr "Articolele selectate au fost activate!" -#: engine/core/admin.py:174 +#: engine/core/admin.py:178 #, python-format msgid "Deactivate selected %(verbose_name_plural)s" msgstr "Dezactivează selectat %(verbose_name_plural)s" -#: engine/core/admin.py:184 +#: engine/core/admin.py:188 msgid "selected items have been deactivated." msgstr "Articolele selectate au fost dezactivate!" -#: engine/core/admin.py:196 engine/core/graphene/object_types.py:653 -#: engine/core/graphene/object_types.py:660 engine/core/models.py:832 -#: engine/core/models.py:840 +#: engine/core/admin.py:200 engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:673 engine/core/models.py:918 +#: engine/core/models.py:928 msgid "attribute value" msgstr "Atribut Valoare" -#: engine/core/admin.py:197 engine/core/graphene/object_types.py:77 -#: engine/core/models.py:841 +#: engine/core/admin.py:201 engine/core/graphene/object_types.py:81 +#: engine/core/models.py:929 msgid "attribute values" msgstr "Valori ale atributului" -#: engine/core/admin.py:208 +#: engine/core/admin.py:212 engine/core/models.py:2232 msgid "image" msgstr "Imagine" -#: engine/core/admin.py:209 engine/core/graphene/object_types.py:530 +#: engine/core/admin.py:213 engine/core/graphene/object_types.py:535 msgid "images" msgstr "Imagini" -#: engine/core/admin.py:220 engine/core/models.py:576 +#: engine/core/admin.py:224 engine/core/models.py:635 msgid "stock" msgstr "Stoc" -#: engine/core/admin.py:221 engine/core/graphene/object_types.py:713 +#: engine/core/admin.py:225 engine/core/graphene/object_types.py:735 msgid "stocks" msgstr "Stocuri" -#: engine/core/admin.py:232 engine/core/models.py:1938 +#: engine/core/admin.py:236 engine/core/models.py:2046 msgid "order product" msgstr "Comanda Produs" -#: engine/core/admin.py:233 engine/core/graphene/object_types.py:441 -#: engine/core/models.py:1939 +#: engine/core/admin.py:237 engine/core/graphene/object_types.py:446 +#: engine/core/models.py:2047 msgid "order products" msgstr "Comandați produse" -#: engine/core/admin.py:251 engine/core/admin.py:252 +#: engine/core/admin.py:255 engine/core/admin.py:256 msgid "children" msgstr "Copii" -#: engine/core/admin.py:528 +#: engine/core/admin.py:545 +msgid "video preview" +msgstr "Previzualizare video" + +#: engine/core/admin.py:551 msgid "has images" msgstr "Are imagini" -#: engine/core/admin.py:531 +#: engine/core/admin.py:554 #, python-format msgid "Export selected %(verbose_name_plural)s to marketplaces' feeds" msgstr "Exportați %(verbose_name_plural)s selectat în fluxurile piețelor" -#: engine/core/admin.py:542 +#: engine/core/admin.py:565 #, python-format msgid "selected %(verbose_name_plural)s have been marked for export." msgstr "%(verbose_name_plural)s selectate au fost marcate pentru export." -#: engine/core/admin.py:553 +#: engine/core/admin.py:576 #, python-format msgid "Ban selected %(verbose_name_plural)s from marketplaces' feeds" msgstr "Interziceți %(verbose_name_plural)s selectat din fluxurile piețelor" -#: engine/core/admin.py:564 +#: engine/core/admin.py:587 #, python-format msgid "selected %(verbose_name_plural)s have been banned from export." msgstr "" "Produsele selectate %(verbose_name_plural)s au fost interzise la export." -#: engine/core/admin.py:1116 +#: engine/core/admin.py:1030 +msgid "Preview" +msgstr "Previzualizare" + +#: engine/core/admin.py:1031 +msgid "Metadata" +msgstr "Metadate" + +#: engine/core/admin.py:1034 +msgid "preview" +msgstr "Previzualizare" + +#: engine/core/admin.py:1043 +msgid "image preview" +msgstr "Previzualizare imagine" + +#: engine/core/admin.py:1166 msgid "Config" msgstr "Configurare" @@ -225,7 +245,7 @@ msgstr "" " conținutului. Limba poate fi selectată atât cu Accept-Language, cât și cu " "parametrul de interogare." -#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:36 +#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "Cache I/O" @@ -249,7 +269,7 @@ msgstr "Obțineți parametrii expunibili ai aplicației" msgid "send a message to the support team" msgstr "Trimiteți un mesaj echipei de asistență" -#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:59 msgid "request a CORSed URL" msgstr "Solicitați un URL CORSed. Numai https este permis." @@ -392,11 +412,11 @@ msgstr "" "Rescrieți unele câmpuri ale unei categorii existente, salvând elementele " "needitabile" -#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757 -#: engine/core/docs/drf/viewsets.py:1046 -#: engine/core/graphene/object_types.py:119 -#: engine/core/graphene/object_types.py:239 -#: engine/core/graphene/object_types.py:540 +#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:781 +#: engine/core/docs/drf/viewsets.py:1070 +#: engine/core/graphene/object_types.py:123 +#: engine/core/graphene/object_types.py:247 +#: engine/core/graphene/object_types.py:546 msgid "SEO Meta snapshot" msgstr "SEO Meta snapshot" @@ -701,7 +721,7 @@ msgstr "Recuperarea unui singur produs (vedere detaliată)" #: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683 #: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725 -#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763 +#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:787 msgid "Product UUID or slug" msgstr "UUID sau Slug al produsului" @@ -729,39 +749,53 @@ msgstr "Ștergeți un produs" msgid "lists all permitted feedbacks for a product" msgstr "listează toate feedback-urile permise pentru un produs" -#: engine/core/docs/drf/viewsets.py:758 +#: engine/core/docs/drf/viewsets.py:757 +msgid "retrieve exact products by identifier" +msgstr "Recuperați produsele exacte după identificator" + +#: engine/core/docs/drf/viewsets.py:759 +msgid "" +"retrieve a list of products by identifier type (uuid, slug, or sku). Send a " +"POST request with `identificator_type` and `identificators` (list of " +"values)." +msgstr "" +"recuperați o listă de produse după tipul de identificator (uuid, slug sau " +"sku). Trimiteți o cerere POST cu `identificator_type` și `identificators` " +"(lista de valori)." + +#: engine/core/docs/drf/viewsets.py:782 msgid "returns a snapshot of the product's SEO meta data" msgstr "Returnează un instantaneu al metadatelor SEO ale produsului" -#: engine/core/docs/drf/viewsets.py:779 +#: engine/core/docs/drf/viewsets.py:803 msgid "list all addresses" msgstr "Enumerați toate adresele" -#: engine/core/docs/drf/viewsets.py:789 +#: engine/core/docs/drf/viewsets.py:813 msgid "retrieve a single address" msgstr "Recuperarea unei singure adrese" -#: engine/core/docs/drf/viewsets.py:799 +#: engine/core/docs/drf/viewsets.py:823 msgid "create a new address" msgstr "Creați o adresă nouă" -#: engine/core/docs/drf/viewsets.py:810 +#: engine/core/docs/drf/viewsets.py:834 msgid "delete an address" msgstr "Ștergeți o adresă" -#: engine/core/docs/drf/viewsets.py:820 +#: engine/core/docs/drf/viewsets.py:844 msgid "update an entire address" msgstr "Actualizarea unei adrese întregi" -#: engine/core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:855 msgid "partially update an address" msgstr "Actualizarea parțială a unei adrese" -#: engine/core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:866 msgid "autocomplete address suggestions" msgstr "Autocompletare adresă de intrare" -#: engine/core/docs/drf/viewsets.py:848 +#: engine/core/docs/drf/viewsets.py:872 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" "docker compose exec app poetry run python manage.py deepl_translate -l en-gb" @@ -769,250 +803,250 @@ msgstr "" "it-it -l ja-jp -l kk-kz -l nl-nl -l pl-pl -l pt-br -l ro-ro -l ru-ru -l zh-" "hans -a core -a geo -a plăți -a vibes_auth -a blog" -#: engine/core/docs/drf/viewsets.py:855 +#: engine/core/docs/drf/viewsets.py:879 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "limitează cantitatea de rezultate, 1 < limit < 10, implicit: 5" -#: engine/core/docs/drf/viewsets.py:871 +#: engine/core/docs/drf/viewsets.py:895 msgid "list all feedbacks (simple view)" msgstr "lista tuturor feedback-urilor (vizualizare simplă)" -#: engine/core/docs/drf/viewsets.py:881 +#: engine/core/docs/drf/viewsets.py:905 msgid "retrieve a single feedback (detailed view)" msgstr "recuperați un singur feedback (vizualizare detaliată)" -#: engine/core/docs/drf/viewsets.py:888 +#: engine/core/docs/drf/viewsets.py:912 msgid "create a feedback" msgstr "creați un feedback" -#: engine/core/docs/drf/viewsets.py:895 +#: engine/core/docs/drf/viewsets.py:919 msgid "delete a feedback" msgstr "ștergeți un feedback" -#: engine/core/docs/drf/viewsets.py:902 +#: engine/core/docs/drf/viewsets.py:926 msgid "rewrite an existing feedback saving non-editables" msgstr "rescrierea unui feedback existent cu salvarea elementelor needitabile" -#: engine/core/docs/drf/viewsets.py:909 +#: engine/core/docs/drf/viewsets.py:933 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" "Rescrieți unele câmpuri ale unei categorii existente, salvând elementele " "needitabile" -#: engine/core/docs/drf/viewsets.py:919 +#: engine/core/docs/drf/viewsets.py:943 msgid "list all order–product relations (simple view)" msgstr "lista tuturor relațiilor comandă-produs (vedere simplă)" -#: engine/core/docs/drf/viewsets.py:929 +#: engine/core/docs/drf/viewsets.py:953 msgid "retrieve a single order–product relation (detailed view)" msgstr "recuperarea unei singure relații comandă-produs (vedere detaliată)" -#: engine/core/docs/drf/viewsets.py:939 +#: engine/core/docs/drf/viewsets.py:963 msgid "create a new order–product relation" msgstr "crearea unei noi relații comandă-produs" -#: engine/core/docs/drf/viewsets.py:949 +#: engine/core/docs/drf/viewsets.py:973 msgid "replace an existing order–product relation" msgstr "să înlocuiască o relație comandă-produs existentă" -#: engine/core/docs/drf/viewsets.py:959 +#: engine/core/docs/drf/viewsets.py:983 msgid "partially update an existing order–product relation" msgstr "actualizarea parțială a unei relații comandă-produs existente" -#: engine/core/docs/drf/viewsets.py:969 +#: engine/core/docs/drf/viewsets.py:993 msgid "delete an order–product relation" msgstr "ștergeți o relație comandă-produs" -#: engine/core/docs/drf/viewsets.py:979 +#: engine/core/docs/drf/viewsets.py:1003 msgid "add or remove feedback on an order–product relation" msgstr "adăugarea sau eliminarea feedback-ului într-o relație comandă-produs" -#: engine/core/docs/drf/viewsets.py:996 +#: engine/core/docs/drf/viewsets.py:1020 msgid "list all brands (simple view)" msgstr "Lista tuturor mărcilor (vizualizare simplă)" -#: engine/core/docs/drf/viewsets.py:1003 +#: engine/core/docs/drf/viewsets.py:1027 msgid "retrieve a single brand (detailed view)" msgstr "Recuperarea unei singure mărci (vedere detaliată)" -#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051 +#: engine/core/docs/drf/viewsets.py:1032 engine/core/docs/drf/viewsets.py:1075 msgid "Brand UUID or slug" msgstr "Marca UUID sau slug" -#: engine/core/docs/drf/viewsets.py:1018 +#: engine/core/docs/drf/viewsets.py:1042 msgid "create a brand" msgstr "Creați un brand" -#: engine/core/docs/drf/viewsets.py:1025 +#: engine/core/docs/drf/viewsets.py:1049 msgid "delete a brand" msgstr "Ștergeți un brand" -#: engine/core/docs/drf/viewsets.py:1032 +#: engine/core/docs/drf/viewsets.py:1056 msgid "rewrite an existing brand saving non-editables" msgstr "" "Rescrierea unui brand existent care economisește materiale needitabile" -#: engine/core/docs/drf/viewsets.py:1039 +#: engine/core/docs/drf/viewsets.py:1063 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "" "Rescrieți unele câmpuri ale unei categorii existente, salvând elementele " "needitabile" -#: engine/core/docs/drf/viewsets.py:1064 +#: engine/core/docs/drf/viewsets.py:1088 msgid "list all vendors (simple view)" msgstr "Lista tuturor furnizorilor (vizualizare simplă)" -#: engine/core/docs/drf/viewsets.py:1074 +#: engine/core/docs/drf/viewsets.py:1098 msgid "retrieve a single vendor (detailed view)" msgstr "Recuperarea unui singur furnizor (vedere detaliată)" -#: engine/core/docs/drf/viewsets.py:1081 +#: engine/core/docs/drf/viewsets.py:1105 msgid "create a vendor" msgstr "Creați un furnizor" -#: engine/core/docs/drf/viewsets.py:1088 +#: engine/core/docs/drf/viewsets.py:1112 msgid "delete a vendor" msgstr "Ștergeți un furnizor" -#: engine/core/docs/drf/viewsets.py:1095 +#: engine/core/docs/drf/viewsets.py:1119 msgid "rewrite an existing vendor saving non-editables" msgstr "Rescrierea unui furnizor existent cu salvarea elementelor needitabile" -#: engine/core/docs/drf/viewsets.py:1102 +#: engine/core/docs/drf/viewsets.py:1126 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "" "Rescrieți unele câmpuri ale unei categorii existente, salvând elementele " "needitabile" -#: engine/core/docs/drf/viewsets.py:1112 +#: engine/core/docs/drf/viewsets.py:1136 msgid "list all product images (simple view)" msgstr "Listați toate imaginile produsului (vizualizare simplă)" -#: engine/core/docs/drf/viewsets.py:1122 +#: engine/core/docs/drf/viewsets.py:1146 msgid "retrieve a single product image (detailed view)" msgstr "Preluarea unei singure imagini a produsului (vedere detaliată)" -#: engine/core/docs/drf/viewsets.py:1129 +#: engine/core/docs/drf/viewsets.py:1153 msgid "create a product image" msgstr "Creați o imagine a produsului" -#: engine/core/docs/drf/viewsets.py:1139 +#: engine/core/docs/drf/viewsets.py:1163 msgid "delete a product image" msgstr "Ștergeți imaginea unui produs" -#: engine/core/docs/drf/viewsets.py:1146 +#: engine/core/docs/drf/viewsets.py:1170 msgid "rewrite an existing product image saving non-editables" msgstr "" "Rescrieți o imagine de produs existentă salvând elementele needitabile" -#: engine/core/docs/drf/viewsets.py:1154 +#: engine/core/docs/drf/viewsets.py:1178 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "" "Rescrieți unele câmpuri ale unei categorii existente, salvând elementele " "needitabile" -#: engine/core/docs/drf/viewsets.py:1165 +#: engine/core/docs/drf/viewsets.py:1189 msgid "list all promo codes (simple view)" msgstr "Lista tuturor codurilor promoționale (vizualizare simplă)" -#: engine/core/docs/drf/viewsets.py:1175 +#: engine/core/docs/drf/viewsets.py:1199 msgid "retrieve a single promo code (detailed view)" msgstr "Recuperarea unui singur cod promoțional (vizualizare detaliată)" -#: engine/core/docs/drf/viewsets.py:1182 +#: engine/core/docs/drf/viewsets.py:1206 msgid "create a promo code" msgstr "Creați un cod promoțional" -#: engine/core/docs/drf/viewsets.py:1189 +#: engine/core/docs/drf/viewsets.py:1213 msgid "delete a promo code" msgstr "Ștergeți un cod promoțional" -#: engine/core/docs/drf/viewsets.py:1196 +#: engine/core/docs/drf/viewsets.py:1220 msgid "rewrite an existing promo code saving non-editables" msgstr "Rescrieți un cod promoțional existent, economisind non-editabile" -#: engine/core/docs/drf/viewsets.py:1203 +#: engine/core/docs/drf/viewsets.py:1227 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "" "Rescrieți unele câmpuri ale unei categorii existente, salvând elementele " "needitabile" -#: engine/core/docs/drf/viewsets.py:1213 +#: engine/core/docs/drf/viewsets.py:1237 msgid "list all promotions (simple view)" msgstr "Lista tuturor promoțiilor (vizualizare simplă)" -#: engine/core/docs/drf/viewsets.py:1223 +#: engine/core/docs/drf/viewsets.py:1247 msgid "retrieve a single promotion (detailed view)" msgstr "Recuperarea unei singure promoții (vedere detaliată)" -#: engine/core/docs/drf/viewsets.py:1230 +#: engine/core/docs/drf/viewsets.py:1254 msgid "create a promotion" msgstr "Creați o promoție" -#: engine/core/docs/drf/viewsets.py:1237 +#: engine/core/docs/drf/viewsets.py:1261 msgid "delete a promotion" msgstr "Ștergeți o promovare" -#: engine/core/docs/drf/viewsets.py:1244 +#: engine/core/docs/drf/viewsets.py:1268 msgid "rewrite an existing promotion saving non-editables" msgstr "" "Rescrierea unei promoții existente cu salvarea elementelor needitabile" -#: engine/core/docs/drf/viewsets.py:1251 +#: engine/core/docs/drf/viewsets.py:1275 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "" "Rescrieți unele câmpuri ale unei categorii existente, salvând elementele " "needitabile" -#: engine/core/docs/drf/viewsets.py:1261 +#: engine/core/docs/drf/viewsets.py:1285 msgid "list all stocks (simple view)" msgstr "Lista tuturor stocurilor (vizualizare simplă)" -#: engine/core/docs/drf/viewsets.py:1268 +#: engine/core/docs/drf/viewsets.py:1292 msgid "retrieve a single stock (detailed view)" msgstr "Recuperarea unui singur stoc (vedere detaliată)" -#: engine/core/docs/drf/viewsets.py:1275 +#: engine/core/docs/drf/viewsets.py:1299 msgid "create a stock record" msgstr "Crearea unei fișe de stoc" -#: engine/core/docs/drf/viewsets.py:1282 +#: engine/core/docs/drf/viewsets.py:1306 msgid "delete a stock record" msgstr "Ștergerea unei înregistrări de stoc" -#: engine/core/docs/drf/viewsets.py:1289 +#: engine/core/docs/drf/viewsets.py:1313 msgid "rewrite an existing stock record saving non-editables" msgstr "" "Rescrierea unei fișe de stoc existente cu salvarea elementelor needitabile" -#: engine/core/docs/drf/viewsets.py:1297 +#: engine/core/docs/drf/viewsets.py:1321 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "" "Rescrieți unele câmpuri ale unei categorii existente, salvând elementele " "needitabile" -#: engine/core/docs/drf/viewsets.py:1308 +#: engine/core/docs/drf/viewsets.py:1332 msgid "list all product tags (simple view)" msgstr "Listați toate etichetele produselor (vizualizare simplă)" -#: engine/core/docs/drf/viewsets.py:1318 +#: engine/core/docs/drf/viewsets.py:1342 msgid "retrieve a single product tag (detailed view)" msgstr "Recuperarea unei singure etichete de produs (vizualizare detaliată)" -#: engine/core/docs/drf/viewsets.py:1325 +#: engine/core/docs/drf/viewsets.py:1349 msgid "create a product tag" msgstr "Creați o etichetă de produs" -#: engine/core/docs/drf/viewsets.py:1335 +#: engine/core/docs/drf/viewsets.py:1359 msgid "delete a product tag" msgstr "Ștergeți o etichetă de produs" -#: engine/core/docs/drf/viewsets.py:1342 +#: engine/core/docs/drf/viewsets.py:1366 msgid "rewrite an existing product tag saving non-editables" msgstr "" "Rescrieți o etichetă de produs existentă salvând elementele needitabile" -#: engine/core/docs/drf/viewsets.py:1350 +#: engine/core/docs/drf/viewsets.py:1374 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "" "Rescrieți unele câmpuri ale unei categorii existente, salvând elementele " @@ -1023,235 +1057,233 @@ msgstr "" msgid "no search term provided." msgstr "Nu a fost furnizat niciun termen de căutare." -#: engine/core/filters.py:78 engine/core/filters.py:484 -#: engine/core/filters.py:625 +#: engine/core/filters.py:79 engine/core/filters.py:485 +#: engine/core/filters.py:626 msgid "Search" msgstr "Căutare" -#: engine/core/filters.py:79 engine/core/filters.py:663 -#: engine/core/filters.py:692 +#: engine/core/filters.py:80 engine/core/filters.py:664 +#: engine/core/filters.py:693 msgid "UUID" msgstr "UUID" -#: engine/core/filters.py:80 engine/core/filters.py:487 -#: engine/core/filters.py:627 +#: engine/core/filters.py:81 engine/core/filters.py:488 +#: engine/core/filters.py:628 msgid "Name" msgstr "Nume și prenume" -#: engine/core/filters.py:82 engine/core/filters.py:630 +#: engine/core/filters.py:83 engine/core/filters.py:631 msgid "Categories" msgstr "Categorii" -#: engine/core/filters.py:86 +#: engine/core/filters.py:87 msgid "Categories Slugs" msgstr "Categorii Melci" -#: engine/core/filters.py:88 engine/core/filters.py:495 +#: engine/core/filters.py:89 engine/core/filters.py:496 +#: engine/core/templates/admin_doc/index.html:37 +#: engine/core/templates/admin_doc/template_tag_index.html:12 msgid "Tags" msgstr "Etichete" -#: engine/core/filters.py:90 +#: engine/core/filters.py:91 msgid "Min Price" msgstr "Preț minim" -#: engine/core/filters.py:93 +#: engine/core/filters.py:94 msgid "Max Price" msgstr "Preț maxim" -#: engine/core/filters.py:95 +#: engine/core/filters.py:96 msgid "Is Active" msgstr "Este activ" -#: engine/core/filters.py:96 +#: engine/core/filters.py:97 msgid "Brand" msgstr "Marca" -#: engine/core/filters.py:97 +#: engine/core/filters.py:98 msgid "Attributes" msgstr "Atribute" -#: engine/core/filters.py:99 +#: engine/core/filters.py:100 msgid "Quantity" msgstr "Cantitate" -#: engine/core/filters.py:101 engine/core/filters.py:489 -#: engine/core/filters.py:628 engine/core/models.py:316 -#: engine/core/models.py:497 engine/core/models.py:663 +#: engine/core/filters.py:102 engine/core/filters.py:490 +#: engine/core/filters.py:629 engine/core/models.py:339 +#: engine/core/models.py:546 engine/core/models.py:736 msgid "Slug" msgstr "Melc" -#: engine/core/filters.py:102 +#: engine/core/filters.py:103 msgid "Is Digital" msgstr "Este digital" -#: engine/core/filters.py:104 +#: engine/core/filters.py:105 msgid "Include sub-categories" msgstr "Includeți subcategorii" -#: engine/core/filters.py:108 +#: engine/core/filters.py:109 msgid "Include personal ordered" msgstr "Includeți produsele comandate personal" -#: engine/core/filters.py:110 engine/core/models.py:667 +#: engine/core/filters.py:111 engine/core/models.py:740 msgid "SKU" msgstr "SKU" -#: engine/core/filters.py:212 +#: engine/core/filters.py:213 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" "Trebuie să existe un category_uuid pentru a utiliza flagul " "include_subcategories" -#: engine/core/filters.py:398 +#: engine/core/filters.py:399 msgid "Search (ID, product name or part number)" msgstr "Căutare (ID, numele produsului sau numărul piesei)" -#: engine/core/filters.py:402 +#: engine/core/filters.py:403 msgid "Bought after (inclusive)" msgstr "Cumpărat după (inclusiv)" -#: engine/core/filters.py:405 +#: engine/core/filters.py:406 msgid "Bought before (inclusive)" msgstr "Cumpărat înainte (inclusiv)" -#: engine/core/filters.py:410 engine/core/filters.py:461 -#: engine/core/filters.py:697 +#: engine/core/filters.py:411 engine/core/filters.py:462 +#: engine/core/filters.py:698 msgid "User email" msgstr "E-mail utilizator" -#: engine/core/filters.py:413 engine/core/filters.py:464 -#: engine/core/filters.py:672 engine/core/filters.py:694 +#: engine/core/filters.py:414 engine/core/filters.py:465 +#: engine/core/filters.py:673 engine/core/filters.py:695 msgid "User UUID" msgstr "UUID utilizator" -#: engine/core/filters.py:415 +#: engine/core/filters.py:416 msgid "Status" msgstr "Statut" -#: engine/core/filters.py:419 +#: engine/core/filters.py:420 msgid "Human Readable ID" msgstr "ID lizibil de către om" -#: engine/core/filters.py:488 +#: engine/core/filters.py:489 msgid "Parent" msgstr "Părinte" -#: engine/core/filters.py:492 +#: engine/core/filters.py:493 msgid "Whole category(has at least 1 product or not)" msgstr "Întreaga categorie (are cel puțin 1 produs sau nu)" -#: engine/core/filters.py:496 +#: engine/core/filters.py:497 msgid "Level" msgstr "Nivel" -#: engine/core/filters.py:667 +#: engine/core/filters.py:668 msgid "Product UUID" msgstr "UUID produs" -#: engine/core/graphene/mutations.py:40 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Cheie care trebuie căutată sau introdusă în cache" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:43 msgid "data to store in cache" msgstr "Date de stocat în cache" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:46 msgid "timeout in seconds to set the data for into the cache" msgstr "Timeout în secunde pentru a seta datele în cache" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:49 msgid "cached data" msgstr "Date în cache" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:64 msgid "camelized JSON data from the requested URL" msgstr "Date JSON Camelizate de la URL-ul solicitat" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:248 +#: engine/core/graphene/mutations.py:69 engine/core/views.py:267 msgid "only URLs starting with http(s):// are allowed" msgstr "Sunt permise numai URL-urile care încep cu http(s)://" -#: engine/core/graphene/mutations.py:86 +#: engine/core/graphene/mutations.py:87 msgid "add a product to the order" msgstr "Adăugați un produs la comandă" -#: engine/core/graphene/mutations.py:109 engine/core/graphene/mutations.py:138 -#: engine/core/graphene/mutations.py:254 engine/core/graphene/mutations.py:306 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139 +#: engine/core/graphene/mutations.py:256 engine/core/graphene/mutations.py:308 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Comanda {order_uuid} nu a fost găsită!" -#: engine/core/graphene/mutations.py:115 engine/core/graphene/mutations.py:166 +#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167 msgid "remove a product from the order" msgstr "Eliminați un produs din comandă" -#: engine/core/graphene/mutations.py:144 +#: engine/core/graphene/mutations.py:145 msgid "remove all products from the order" msgstr "Eliminați toate produsele din comandă" -#: engine/core/graphene/mutations.py:189 +#: engine/core/graphene/mutations.py:190 msgid "buy an order" msgstr "Cumpărați o comandă" -#: engine/core/graphene/mutations.py:220 engine/core/graphene/mutations.py:282 +#: engine/core/graphene/mutations.py:222 engine/core/graphene/mutations.py:284 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" "Vă rugăm să furnizați fie order_uuid sau order_hr_id - se exclud reciproc!" -#: engine/core/graphene/mutations.py:249 engine/core/graphene/mutations.py:524 -#: engine/core/graphene/mutations.py:573 engine/core/viewsets.py:753 +#: engine/core/graphene/mutations.py:251 engine/core/graphene/mutations.py:526 +#: engine/core/graphene/mutations.py:576 engine/core/viewsets.py:783 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Metoda order.buy() a generat un tip greșit: {type(instance)!s}" -#: engine/core/graphene/mutations.py:260 +#: engine/core/graphene/mutations.py:262 msgid "perform an action on a list of products in the order" msgstr "Efectuați o acțiune asupra unei liste de produse din comandă" -#: engine/core/graphene/mutations.py:265 +#: engine/core/graphene/mutations.py:267 msgid "remove/add" msgstr "Eliminare/adăugare" -#: engine/core/graphene/mutations.py:301 engine/core/graphene/mutations.py:342 +#: engine/core/graphene/mutations.py:303 engine/core/graphene/mutations.py:342 msgid "action must be either add or remove" msgstr "Acțiunea trebuie să fie fie \"adăugare\" sau \"eliminare\"!" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:314 msgid "perform an action on a list of products in the wishlist" msgstr "Efectuați o acțiune pe o listă de produse din lista de dorințe" -#: engine/core/graphene/mutations.py:330 -msgid "please provide wishlist_uuid value" -msgstr "Vă rugăm să furnizați valoarea `wishlist_uuid`." - -#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:423 -#: engine/core/graphene/mutations.py:451 engine/core/graphene/mutations.py:479 -#: engine/core/graphene/mutations.py:529 +#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:424 +#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480 +#: engine/core/graphene/mutations.py:531 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Wishlist {wishlist_uuid} nu a fost găsit!" -#: engine/core/graphene/mutations.py:401 +#: engine/core/graphene/mutations.py:402 msgid "add a product to the wishlist" msgstr "Adăugați un produs la comandă" -#: engine/core/graphene/mutations.py:429 +#: engine/core/graphene/mutations.py:430 msgid "remove a product from the wishlist" msgstr "Eliminați un produs din comandă" -#: engine/core/graphene/mutations.py:457 +#: engine/core/graphene/mutations.py:458 msgid "remove all products from the wishlist" msgstr "Eliminați un produs din comandă" -#: engine/core/graphene/mutations.py:485 +#: engine/core/graphene/mutations.py:486 msgid "buy all products from the wishlist" msgstr "Eliminați un produs din comandă" -#: engine/core/graphene/mutations.py:535 +#: engine/core/graphene/mutations.py:537 msgid "buy a product" msgstr "Cumpărați o comandă" -#: engine/core/graphene/mutations.py:542 +#: engine/core/graphene/mutations.py:544 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" @@ -1259,141 +1291,145 @@ msgstr "" "Vă rugăm să trimiteți atributele sub formă de șir format ca attr1=valoare1, " "attr2=valoare2" -#: engine/core/graphene/mutations.py:580 +#: engine/core/graphene/mutations.py:583 msgid "add or delete a feedback for orderproduct" msgstr "Adăugați sau ștergeți un feedback pentru comandaprodus" -#: engine/core/graphene/mutations.py:606 +#: engine/core/graphene/mutations.py:610 msgid "action must be either `add` or `remove`" msgstr "Acțiunea trebuie să fie `add` sau `remove`!" -#: engine/core/graphene/mutations.py:609 +#: engine/core/graphene/mutations.py:613 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Comandaprodus {order_product_uuid} nu a fost găsită!" -#: engine/core/graphene/mutations.py:616 +#: engine/core/graphene/mutations.py:620 msgid "original address string provided by the user" msgstr "Șirul de adrese original furnizat de utilizator" -#: engine/core/graphene/mutations.py:653 engine/core/models.py:986 -#: engine/core/models.py:999 engine/core/models.py:1443 -#: engine/core/models.py:1474 engine/core/models.py:1505 -#: engine/core/viewsets.py:760 +#: engine/core/graphene/mutations.py:662 engine/core/models.py:1079 +#: engine/core/models.py:1092 engine/core/models.py:1544 +#: engine/core/models.py:1575 engine/core/models.py:1606 +#: engine/core/viewsets.py:790 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} nu există: {uuid}!" -#: engine/core/graphene/mutations.py:667 +#: engine/core/graphene/mutations.py:676 msgid "limit must be between 1 and 10" msgstr "Limita trebuie să fie între 1 și 10" -#: engine/core/graphene/mutations.py:716 +#: engine/core/graphene/mutations.py:726 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - funcționează ca un farmec" -#: engine/core/graphene/object_types.py:84 -#: engine/core/graphene/object_types.py:420 -#: engine/core/graphene/object_types.py:471 engine/core/models.py:803 -#: engine/core/models.py:1297 engine/core/models.py:2033 +#: engine/core/graphene/object_types.py:88 +#: engine/core/graphene/object_types.py:425 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:889 +#: engine/core/models.py:1394 engine/core/models.py:2139 msgid "attributes" msgstr "Atribute" -#: engine/core/graphene/object_types.py:97 +#: engine/core/graphene/object_types.py:101 msgid "grouped attributes" msgstr "Atribute grupate" -#: engine/core/graphene/object_types.py:104 +#: engine/core/graphene/object_types.py:108 msgid "groups of attributes" msgstr "Grupuri de atribute" -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:217 -#: engine/core/graphene/object_types.py:255 engine/core/models.py:440 +#: engine/core/graphene/object_types.py:122 +#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:264 engine/core/models.py:489 msgid "categories" msgstr "Categorii" -#: engine/core/graphene/object_types.py:134 engine/core/models.py:511 +#: engine/core/graphene/object_types.py:138 engine/core/models.py:564 msgid "brands" msgstr "Mărci" -#: engine/core/graphene/object_types.py:219 +#: engine/core/graphene/object_types.py:226 msgid "category image url" msgstr "Categorii" -#: engine/core/graphene/object_types.py:220 -#: engine/core/graphene/object_types.py:365 engine/core/models.py:278 +#: engine/core/graphene/object_types.py:227 +#: engine/core/graphene/object_types.py:369 engine/core/models.py:301 msgid "markup percentage" msgstr "Procentul de majorare" -#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:231 msgid "which attributes and values can be used for filtering this category." msgstr "" "Atributele și valorile care pot fi utilizate pentru filtrarea acestei " "categorii." -#: engine/core/graphene/object_types.py:230 +#: engine/core/graphene/object_types.py:237 msgid "" "minimum and maximum prices for products in this category, if available." msgstr "" "Prețurile minime și maxime pentru produsele din această categorie, dacă sunt" " disponibile." -#: engine/core/graphene/object_types.py:234 +#: engine/core/graphene/object_types.py:240 +msgid "brands in this category" +msgstr "Mărci din această categorie" + +#: engine/core/graphene/object_types.py:242 msgid "tags for this category" msgstr "Etichete pentru această categorie" -#: engine/core/graphene/object_types.py:237 +#: engine/core/graphene/object_types.py:245 msgid "products in this category" msgstr "Produse din această categorie" -#: engine/core/graphene/object_types.py:372 engine/core/models.py:183 +#: engine/core/graphene/object_types.py:376 engine/core/models.py:202 msgid "vendors" msgstr "Furnizori" -#: engine/core/graphene/object_types.py:376 +#: engine/core/graphene/object_types.py:380 msgid "Latitude (Y coordinate)" msgstr "Latitudine (coordonata Y)" -#: engine/core/graphene/object_types.py:377 +#: engine/core/graphene/object_types.py:381 msgid "Longitude (X coordinate)" msgstr "Longitudine (coordonata X)" -#: engine/core/graphene/object_types.py:406 +#: engine/core/graphene/object_types.py:411 msgid "comment" msgstr "Cum să" -#: engine/core/graphene/object_types.py:408 -#: engine/core/graphene/object_types.py:542 +#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:548 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "Valoare nominală de la 1 la 10, inclusiv, sau 0 dacă nu este setată." -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:421 msgid "represents feedback from a user." msgstr "Reprezintă feedback de la un utilizator." -#: engine/core/graphene/object_types.py:421 -#: engine/core/graphene/object_types.py:472 engine/core/models.py:1291 +#: engine/core/graphene/object_types.py:426 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:1388 msgid "notifications" msgstr "Notificări" -#: engine/core/graphene/object_types.py:423 +#: engine/core/graphene/object_types.py:428 msgid "download url for this order product if applicable" msgstr "URL de descărcare pentru acest produs de comandă, dacă este cazul" -#: engine/core/graphene/object_types.py:425 engine/core/models.py:1856 +#: engine/core/graphene/object_types.py:430 engine/core/models.py:1959 msgid "feedback" msgstr "Feedback" -#: engine/core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:464 msgid "a list of order products in this order" msgstr "O listă a produselor comandate în această comandă" -#: engine/core/graphene/object_types.py:461 engine/core/models.py:1261 +#: engine/core/graphene/object_types.py:466 engine/core/models.py:1358 msgid "billing address" msgstr "Adresa de facturare" -#: engine/core/graphene/object_types.py:465 +#: engine/core/graphene/object_types.py:470 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1401,53 +1437,57 @@ msgstr "" "Adresa de expediere pentru această comandă, lăsați în alb dacă este aceeași " "cu adresa de facturare sau dacă nu se aplică" -#: engine/core/graphene/object_types.py:468 +#: engine/core/graphene/object_types.py:473 msgid "total price of this order" msgstr "Prețul total al acestei comenzi" -#: engine/core/graphene/object_types.py:469 +#: engine/core/graphene/object_types.py:474 msgid "total quantity of products in order" msgstr "Cantitatea totală de produse din comandă" -#: engine/core/graphene/object_types.py:470 +#: engine/core/graphene/object_types.py:475 msgid "are all products in the order digital" msgstr "Sunt toate produsele din comanda digitală" -#: engine/core/graphene/object_types.py:474 +#: engine/core/graphene/object_types.py:479 msgid "transactions for this order" msgstr "Tranzacții pentru această comandă" -#: engine/core/graphene/object_types.py:494 engine/core/models.py:1325 +#: engine/core/graphene/object_types.py:499 engine/core/models.py:1422 msgid "orders" msgstr "Ordine" -#: engine/core/graphene/object_types.py:515 +#: engine/core/graphene/object_types.py:520 msgid "image url" msgstr "URL imagine" -#: engine/core/graphene/object_types.py:522 +#: engine/core/graphene/object_types.py:527 msgid "product's images" msgstr "Imagini ale produsului" -#: engine/core/graphene/object_types.py:529 engine/core/models.py:439 -#: engine/core/models.py:596 +#: engine/core/graphene/object_types.py:534 engine/core/models.py:488 +#: engine/core/models.py:661 msgid "category" msgstr "Categorie" -#: engine/core/graphene/object_types.py:531 engine/core/models.py:1857 +#: engine/core/graphene/object_types.py:536 engine/core/models.py:1960 msgid "feedbacks" msgstr "Feedback-uri" -#: engine/core/graphene/object_types.py:532 engine/core/models.py:510 -#: engine/core/models.py:605 +#: engine/core/graphene/object_types.py:537 engine/core/models.py:563 +#: engine/core/models.py:670 msgid "brand" msgstr "Marca" -#: engine/core/graphene/object_types.py:534 engine/core/models.py:103 +#: engine/core/graphene/object_types.py:538 +msgid "video url" +msgstr "URL-ul videoclipului" + +#: engine/core/graphene/object_types.py:540 engine/core/models.py:122 msgid "attribute groups" msgstr "Grupuri de atribute" -#: engine/core/graphene/object_types.py:536 +#: engine/core/graphene/object_types.py:542 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1455,7 +1495,7 @@ msgstr "Grupuri de atribute" msgid "price" msgstr "Preț" -#: engine/core/graphene/object_types.py:537 +#: engine/core/graphene/object_types.py:543 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1463,39 +1503,39 @@ msgstr "Preț" msgid "quantity" msgstr "Cantitate" -#: engine/core/graphene/object_types.py:538 +#: engine/core/graphene/object_types.py:544 msgid "number of feedbacks" msgstr "Numărul de reacții" -#: engine/core/graphene/object_types.py:539 +#: engine/core/graphene/object_types.py:545 msgid "only available for personal orders" msgstr "Produse disponibile numai pentru comenzi personale" -#: engine/core/graphene/object_types.py:544 +#: engine/core/graphene/object_types.py:550 msgid "discount price" msgstr "Preț redus" -#: engine/core/graphene/object_types.py:568 engine/core/models.py:682 +#: engine/core/graphene/object_types.py:575 engine/core/models.py:755 msgid "products" msgstr "Produse" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:691 msgid "promocodes" msgstr "Coduri promoționale" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:706 msgid "products on sale" msgstr "Produse scoase la vânzare" -#: engine/core/graphene/object_types.py:701 engine/core/models.py:935 +#: engine/core/graphene/object_types.py:720 engine/core/models.py:1028 msgid "promotions" msgstr "Promoții" -#: engine/core/graphene/object_types.py:705 engine/core/models.py:182 +#: engine/core/graphene/object_types.py:727 engine/core/models.py:201 msgid "vendor" msgstr "Furnizor" -#: engine/core/graphene/object_types.py:706 engine/core/models.py:681 +#: engine/core/graphene/object_types.py:728 engine/core/models.py:754 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1503,104 +1543,104 @@ msgstr "Furnizor" msgid "product" msgstr "Produs" -#: engine/core/graphene/object_types.py:718 engine/core/models.py:958 +#: engine/core/graphene/object_types.py:740 engine/core/models.py:1051 msgid "wishlisted products" msgstr "Produse dorite" -#: engine/core/graphene/object_types.py:725 engine/core/models.py:975 +#: engine/core/graphene/object_types.py:747 engine/core/models.py:1068 msgid "wishlists" msgstr "Liste de dorințe" -#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:752 msgid "tagged products" msgstr "Produse etichetate" -#: engine/core/graphene/object_types.py:738 engine/core/models.py:219 -#: engine/core/models.py:611 +#: engine/core/graphene/object_types.py:760 engine/core/models.py:238 +#: engine/core/models.py:676 msgid "product tags" msgstr "Etichete de produs" -#: engine/core/graphene/object_types.py:743 +#: engine/core/graphene/object_types.py:765 msgid "tagged categories" msgstr "Categorii etichetate" -#: engine/core/graphene/object_types.py:751 +#: engine/core/graphene/object_types.py:773 msgid "categories tags" msgstr "Etichete \"Categorii" -#: engine/core/graphene/object_types.py:755 +#: engine/core/graphene/object_types.py:777 msgid "project name" msgstr "Numele proiectului" -#: engine/core/graphene/object_types.py:756 +#: engine/core/graphene/object_types.py:778 msgid "company name" msgstr "Numele companiei" -#: engine/core/graphene/object_types.py:757 +#: engine/core/graphene/object_types.py:779 msgid "company address" msgstr "Adresa companiei" -#: engine/core/graphene/object_types.py:758 +#: engine/core/graphene/object_types.py:780 msgid "company phone number" msgstr "Numărul de telefon al companiei" -#: engine/core/graphene/object_types.py:761 +#: engine/core/graphene/object_types.py:783 msgid "email from, sometimes it must be used instead of host user value" msgstr "" "\"e-mail de la\", uneori trebuie să fie utilizat în locul valorii " "utilizatorului gazdă" -#: engine/core/graphene/object_types.py:764 +#: engine/core/graphene/object_types.py:786 msgid "email host user" msgstr "Utilizator gazdă e-mail" -#: engine/core/graphene/object_types.py:765 +#: engine/core/graphene/object_types.py:787 msgid "maximum amount for payment" msgstr "Suma maximă pentru plată" -#: engine/core/graphene/object_types.py:766 +#: engine/core/graphene/object_types.py:788 msgid "minimum amount for payment" msgstr "Suma minimă pentru plată" -#: engine/core/graphene/object_types.py:767 +#: engine/core/graphene/object_types.py:789 msgid "analytics data" msgstr "Date analitice" -#: engine/core/graphene/object_types.py:768 +#: engine/core/graphene/object_types.py:790 msgid "advertisement data" msgstr "Date publicitare" -#: engine/core/graphene/object_types.py:771 +#: engine/core/graphene/object_types.py:793 msgid "company configuration" msgstr "Configurație" -#: engine/core/graphene/object_types.py:775 +#: engine/core/graphene/object_types.py:797 msgid "language code" msgstr "Codul limbii" -#: engine/core/graphene/object_types.py:776 +#: engine/core/graphene/object_types.py:798 msgid "language name" msgstr "Numele limbii" -#: engine/core/graphene/object_types.py:777 +#: engine/core/graphene/object_types.py:799 msgid "language flag, if exists :)" msgstr "Indicatorul de limbă, dacă există :)" -#: engine/core/graphene/object_types.py:780 +#: engine/core/graphene/object_types.py:802 msgid "supported languages" msgstr "Obțineți o listă a limbilor acceptate" -#: engine/core/graphene/object_types.py:812 -#: engine/core/graphene/object_types.py:815 -#: engine/core/graphene/object_types.py:818 +#: engine/core/graphene/object_types.py:834 +#: engine/core/graphene/object_types.py:837 +#: engine/core/graphene/object_types.py:840 msgid "products search results" msgstr "Rezultate căutare produse" -#: engine/core/graphene/object_types.py:820 +#: engine/core/graphene/object_types.py:842 msgid "posts search results" msgstr "Rezultate căutare produse" -#: engine/core/models.py:75 +#: engine/core/models.py:91 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 " @@ -1613,23 +1653,23 @@ msgstr "" " lucru poate fi util pentru clasificarea și gestionarea mai eficientă a " "atributelor în cadrul unui sistem complex." -#: engine/core/models.py:88 +#: engine/core/models.py:107 msgid "parent of this group" msgstr "Părinte al acestui grup" -#: engine/core/models.py:89 +#: engine/core/models.py:108 msgid "parent attribute group" msgstr "Grup de atribute părinte" -#: engine/core/models.py:93 engine/core/models.py:94 +#: engine/core/models.py:112 engine/core/models.py:113 msgid "attribute group's name" msgstr "Numele grupului de atribute" -#: engine/core/models.py:102 engine/core/models.py:763 +#: engine/core/models.py:121 engine/core/models.py:849 msgid "attribute group" msgstr "Grup de atribute" -#: engine/core/models.py:108 +#: engine/core/models.py:127 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1648,50 +1688,50 @@ msgstr "" "metadate și constrângeri suplimentare, ceea ce îl face potrivit pentru " "utilizarea în sisteme care interacționează cu furnizori terți." -#: engine/core/models.py:122 +#: engine/core/models.py:141 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Stochează acreditările și punctele finale necesare pentru comunicarea API a " "furnizorului" -#: engine/core/models.py:124 +#: engine/core/models.py:143 msgid "authentication info" msgstr "Informații privind autentificarea" -#: engine/core/models.py:129 +#: engine/core/models.py:148 msgid "define the markup for products retrieved from this vendor" msgstr "" "Definirea marjei de profit pentru produsele preluate de la acest furnizor" -#: engine/core/models.py:130 +#: engine/core/models.py:149 msgid "vendor markup percentage" msgstr "Procentul de majorare al furnizorului" -#: engine/core/models.py:134 +#: engine/core/models.py:153 msgid "name of this vendor" msgstr "Numele acestui vânzător" -#: engine/core/models.py:135 +#: engine/core/models.py:154 msgid "vendor name" msgstr "Numele furnizorului" -#: engine/core/models.py:150 +#: engine/core/models.py:169 msgid "response file" msgstr "fișier de răspuns" -#: engine/core/models.py:151 +#: engine/core/models.py:170 msgid "vendor's last processing response" msgstr "ultimul răspuns de prelucrare al vânzătorului" -#: engine/core/models.py:157 +#: engine/core/models.py:176 msgid "vendor's integration file path" msgstr "Calea fișierului de integrare al furnizorului" -#: engine/core/models.py:158 +#: engine/core/models.py:177 msgid "integration path" msgstr "Calea de integrare" -#: engine/core/models.py:192 +#: engine/core/models.py:211 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1706,27 +1746,27 @@ msgstr "" "Aceasta acceptă operațiuni exportate prin mixins și oferă personalizarea " "metadatelor în scopuri administrative." -#: engine/core/models.py:204 engine/core/models.py:235 +#: engine/core/models.py:223 engine/core/models.py:254 msgid "internal tag identifier for the product tag" msgstr "Identificator intern de etichetă pentru eticheta produsului" -#: engine/core/models.py:205 engine/core/models.py:236 +#: engine/core/models.py:224 engine/core/models.py:255 msgid "tag name" msgstr "Nume etichetă" -#: engine/core/models.py:209 engine/core/models.py:240 +#: engine/core/models.py:228 engine/core/models.py:259 msgid "user-friendly name for the product tag" msgstr "Nume ușor de utilizat pentru eticheta produsului" -#: engine/core/models.py:210 engine/core/models.py:241 +#: engine/core/models.py:229 engine/core/models.py:260 msgid "tag display name" msgstr "Nume afișare etichetă" -#: engine/core/models.py:218 +#: engine/core/models.py:237 msgid "product tag" msgstr "Etichetă produs" -#: engine/core/models.py:224 +#: engine/core/models.py:243 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 " @@ -1737,15 +1777,15 @@ msgstr "" "și clasificarea produselor. Aceasta include atribute pentru un identificator" " intern al etichetei și un nume de afișare ușor de utilizat." -#: engine/core/models.py:249 +#: engine/core/models.py:268 msgid "category tag" msgstr "etichetă de categorie" -#: engine/core/models.py:250 engine/core/models.py:322 +#: engine/core/models.py:269 engine/core/models.py:345 msgid "category tags" msgstr "Etichete de categorie" -#: engine/core/models.py:255 +#: engine/core/models.py:274 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1767,52 +1807,52 @@ msgstr "" " administratorilor să specifice numele, descrierea și ierarhia categoriilor," " precum și să atribuie atribute precum imagini, etichete sau prioritate." -#: engine/core/models.py:269 +#: engine/core/models.py:292 msgid "upload an image representing this category" msgstr "Încărcați o imagine care reprezintă această categorie" -#: engine/core/models.py:272 +#: engine/core/models.py:295 msgid "category image" msgstr "Categorie imagine" -#: engine/core/models.py:277 +#: engine/core/models.py:300 msgid "define a markup percentage for products in this category" msgstr "" "Definiți un procent de majorare pentru produsele din această categorie" -#: engine/core/models.py:286 +#: engine/core/models.py:309 msgid "parent of this category to form a hierarchical structure" msgstr "Părinte al acestei categorii pentru a forma o structură ierarhică" -#: engine/core/models.py:287 +#: engine/core/models.py:310 msgid "parent category" msgstr "Categoria de părinți" -#: engine/core/models.py:292 +#: engine/core/models.py:315 msgid "category name" msgstr "Numele categoriei" -#: engine/core/models.py:293 +#: engine/core/models.py:316 msgid "provide a name for this category" msgstr "Furnizați un nume pentru această categorie" -#: engine/core/models.py:300 +#: engine/core/models.py:323 msgid "add a detailed description for this category" msgstr "Adăugați o descriere detaliată pentru această categorie" -#: engine/core/models.py:301 +#: engine/core/models.py:324 msgid "category description" msgstr "Descriere categorie" -#: engine/core/models.py:321 +#: engine/core/models.py:344 msgid "tags that help describe or group this category" msgstr "etichete care ajută la descrierea sau gruparea acestei categorii" -#: engine/core/models.py:328 engine/core/models.py:503 +#: engine/core/models.py:351 engine/core/models.py:552 msgid "priority" msgstr "Prioritate" -#: engine/core/models.py:446 +#: engine/core/models.py:495 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1826,47 +1866,43 @@ msgstr "" "Aceasta permite organizarea și reprezentarea datelor legate de marcă în " "cadrul aplicației." -#: engine/core/models.py:456 +#: engine/core/models.py:505 msgid "name of this brand" msgstr "Denumirea acestui brand" -#: engine/core/models.py:457 +#: engine/core/models.py:506 msgid "brand name" msgstr "Nume de marcă" -#: engine/core/models.py:464 +#: engine/core/models.py:513 msgid "upload a logo representing this brand" msgstr "Încărcați un logo care reprezintă acest brand" -#: engine/core/models.py:466 +#: engine/core/models.py:515 msgid "brand small image" msgstr "Brand imagine mică" -#: engine/core/models.py:472 +#: engine/core/models.py:521 msgid "upload a big logo representing this brand" msgstr "Încărcați un logo mare care reprezintă acest brand" -#: engine/core/models.py:474 +#: engine/core/models.py:523 msgid "brand big image" msgstr "Imagine de marcă mare" -#: engine/core/models.py:479 +#: engine/core/models.py:528 msgid "add a detailed description of the brand" msgstr "Adăugați o descriere detaliată a mărcii" -#: engine/core/models.py:480 +#: engine/core/models.py:529 msgid "brand description" msgstr "Descrierea mărcii" -#: engine/core/models.py:485 -msgid "optional categories that this brand is associated with" -msgstr "Categorii opționale cu care acest brand este asociat" +#: engine/core/models.py:534 engine/core/models.py:535 +msgid "DEPRECATED" +msgstr "DEPRECIAT" -#: engine/core/models.py:486 -msgid "associated categories" -msgstr "Categorii" - -#: engine/core/models.py:516 +#: engine/core/models.py:569 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1882,72 +1918,72 @@ msgstr "" "parte din sistemul de gestionare a stocurilor pentru a permite urmărirea și " "evaluarea produselor disponibile de la diverși furnizori." -#: engine/core/models.py:528 +#: engine/core/models.py:581 msgid "the vendor supplying this product stock" msgstr "Furnizorul care furnizează acest stoc de produse" -#: engine/core/models.py:529 +#: engine/core/models.py:582 msgid "associated vendor" msgstr "Furnizor asociat" -#: engine/core/models.py:533 +#: engine/core/models.py:588 msgid "final price to the customer after markups" msgstr "Prețul final pentru client după majorări" -#: engine/core/models.py:534 +#: engine/core/models.py:589 msgid "selling price" msgstr "Prețul de vânzare" -#: engine/core/models.py:539 +#: engine/core/models.py:594 msgid "the product associated with this stock entry" msgstr "Produsul asociat cu această intrare în stoc" -#: engine/core/models.py:540 engine/core/models.py:828 -#: engine/core/models.py:874 engine/core/models.py:1912 +#: engine/core/models.py:595 engine/core/models.py:914 +#: engine/core/models.py:962 engine/core/models.py:2020 msgid "associated product" msgstr "Produs asociat" -#: engine/core/models.py:547 +#: engine/core/models.py:604 msgid "the price paid to the vendor for this product" msgstr "Prețul plătit vânzătorului pentru acest produs" -#: engine/core/models.py:548 +#: engine/core/models.py:605 msgid "vendor purchase price" msgstr "Prețul de achiziție al furnizorului" -#: engine/core/models.py:552 +#: engine/core/models.py:609 msgid "available quantity of the product in stock" msgstr "Cantitatea disponibilă a produsului în stoc" -#: engine/core/models.py:553 +#: engine/core/models.py:610 msgid "quantity in stock" msgstr "Cantitate în stoc" -#: engine/core/models.py:557 +#: engine/core/models.py:614 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU atribuit de furnizor pentru identificarea produsului" -#: engine/core/models.py:558 +#: engine/core/models.py:615 msgid "vendor sku" msgstr "SKU al furnizorului" -#: engine/core/models.py:564 +#: engine/core/models.py:621 msgid "digital file associated with this stock if applicable" msgstr "Fișier digital asociat cu acest stoc, dacă este cazul" -#: engine/core/models.py:565 +#: engine/core/models.py:622 msgid "digital file" msgstr "Fișier digital" -#: engine/core/models.py:569 +#: engine/core/models.py:626 msgid "system attributes" msgstr "Atribute de sistem" -#: engine/core/models.py:577 +#: engine/core/models.py:636 msgid "stock entries" msgstr "Intrări pe stoc" -#: engine/core/models.py:582 +#: engine/core/models.py:641 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1968,72 +2004,80 @@ 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." -#: engine/core/models.py:595 +#: engine/core/models.py:660 msgid "category this product belongs to" msgstr "Categoria din care face parte acest produs" -#: engine/core/models.py:604 +#: engine/core/models.py:669 msgid "optionally associate this product with a brand" msgstr "Opțional, asociați acest produs cu un brand" -#: engine/core/models.py:610 +#: engine/core/models.py:675 msgid "tags that help describe or group this product" msgstr "Etichete care ajută la descrierea sau gruparea acestui produs" -#: engine/core/models.py:615 +#: engine/core/models.py:680 msgid "indicates whether this product is digitally delivered" msgstr "Indică dacă acest produs este livrat digital" -#: engine/core/models.py:616 +#: engine/core/models.py:681 msgid "is product digital" msgstr "Produsul este digital" -#: engine/core/models.py:623 +#: engine/core/models.py:688 msgid "indicates whether this product should be updated from periodic task" msgstr "" "indică dacă acest produs ar trebui să fie actualizat din sarcina periodică" -#: engine/core/models.py:625 +#: engine/core/models.py:690 msgid "is product updatable" msgstr "produsul este actualizabil" -#: engine/core/models.py:631 +#: engine/core/models.py:696 msgid "provide a clear identifying name for the product" msgstr "Furnizați o denumire clară de identificare a produsului" -#: engine/core/models.py:632 +#: engine/core/models.py:697 msgid "product name" msgstr "Denumirea produsului" -#: engine/core/models.py:638 engine/core/models.py:923 +#: engine/core/models.py:703 engine/core/models.py:1012 msgid "add a detailed description of the product" msgstr "Adăugați o descriere detaliată a produsului" -#: engine/core/models.py:639 +#: engine/core/models.py:704 msgid "product description" msgstr "Descrierea produsului" -#: engine/core/models.py:646 +#: engine/core/models.py:710 +msgid "optional video file for this product" +msgstr "Fișier video opțional pentru acest produs" + +#: engine/core/models.py:711 +msgid "product video" +msgstr "Video despre produs" + +#: engine/core/models.py:719 msgid "part number for this product" msgstr "Numărul piesei pentru acest produs" -#: engine/core/models.py:647 +#: engine/core/models.py:720 msgid "part number" msgstr "Numărul piesei" -#: engine/core/models.py:666 +#: engine/core/models.py:739 msgid "stock keeping unit for this product" msgstr "Stock Keeping Unit pentru acest produs" -#: engine/core/models.py:673 +#: engine/core/models.py:746 msgid "whether to export this product to marketplaces" msgstr "Dacă să exportați acest produs pe piețele comerciale" -#: engine/core/models.py:674 +#: engine/core/models.py:747 msgid "Export to Marketplaces" msgstr "Export către piețe" -#: engine/core/models.py:749 +#: engine/core/models.py:835 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 " @@ -2049,66 +2093,66 @@ msgstr "" "multe tipuri de valori, inclusiv șir, număr întreg, float, boolean, array și" " obiect. Acest lucru permite structurarea dinamică și flexibilă a datelor." -#: engine/core/models.py:762 +#: engine/core/models.py:848 msgid "group of this attribute" msgstr "Grupul acestui atribut" -#: engine/core/models.py:768 +#: engine/core/models.py:854 msgid "string" msgstr "Șir de caractere" -#: engine/core/models.py:769 +#: engine/core/models.py:855 msgid "integer" msgstr "Număr întreg" -#: engine/core/models.py:770 +#: engine/core/models.py:856 msgid "float" msgstr "Float" -#: engine/core/models.py:771 +#: engine/core/models.py:857 msgid "boolean" msgstr "Boolean" -#: engine/core/models.py:772 +#: engine/core/models.py:858 msgid "array" msgstr "Array" -#: engine/core/models.py:773 +#: engine/core/models.py:859 msgid "object" msgstr "Obiect" -#: engine/core/models.py:775 +#: engine/core/models.py:861 msgid "type of the attribute's value" msgstr "Tipul valorii atributului" -#: engine/core/models.py:776 +#: engine/core/models.py:862 msgid "value type" msgstr "Tipul de valoare" -#: engine/core/models.py:781 +#: engine/core/models.py:867 msgid "name of this attribute" msgstr "Denumirea acestui atribut" -#: engine/core/models.py:782 +#: engine/core/models.py:868 msgid "attribute's name" msgstr "Numele atributului" -#: engine/core/models.py:787 +#: engine/core/models.py:873 msgid "is filterable" msgstr "este filtrabil" -#: engine/core/models.py:789 +#: engine/core/models.py:875 msgid "designates whether this attribute can be used for filtering or not" msgstr "" "Atributele și valorile care pot fi utilizate pentru filtrarea acestei " "categorii." -#: engine/core/models.py:802 engine/core/models.py:820 +#: engine/core/models.py:888 engine/core/models.py:906 #: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Atribut" -#: engine/core/models.py:808 +#: engine/core/models.py:894 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" @@ -2118,19 +2162,19 @@ msgstr "" "produs. Leagă \"atributul\" de o \"valoare\" unică, permițând o mai bună " "organizare și reprezentare dinamică a caracteristicilor produsului." -#: engine/core/models.py:819 +#: engine/core/models.py:905 msgid "attribute of this value" msgstr "Atributul acestei valori" -#: engine/core/models.py:827 +#: engine/core/models.py:913 msgid "the specific product associated with this attribute's value" msgstr "Produsul specific asociat cu valoarea acestui atribut" -#: engine/core/models.py:833 +#: engine/core/models.py:919 msgid "the specific value for this attribute" msgstr "Valoarea specifică pentru acest atribut" -#: engine/core/models.py:846 +#: engine/core/models.py:934 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -2145,39 +2189,39 @@ msgstr "" "asemenea, include o funcție de accesibilitate cu text alternativ pentru " "imagini." -#: engine/core/models.py:857 +#: engine/core/models.py:945 msgid "provide alternative text for the image for accessibility" msgstr "Furnizați text alternativ pentru imagine pentru accesibilitate" -#: engine/core/models.py:858 +#: engine/core/models.py:946 msgid "image alt text" msgstr "Textul alt al imaginii" -#: engine/core/models.py:861 +#: engine/core/models.py:949 msgid "upload the image file for this product" msgstr "Încărcați fișierul de imagine pentru acest produs" -#: engine/core/models.py:862 engine/core/models.py:893 +#: engine/core/models.py:950 engine/core/models.py:982 msgid "product image" msgstr "Imaginea produsului" -#: engine/core/models.py:867 +#: engine/core/models.py:955 msgid "determines the order in which images are displayed" msgstr "Determină ordinea în care sunt afișate imaginile" -#: engine/core/models.py:868 +#: engine/core/models.py:956 msgid "display priority" msgstr "Prioritatea afișării" -#: engine/core/models.py:873 +#: engine/core/models.py:961 msgid "the product that this image represents" msgstr "Produsul pe care îl reprezintă această imagine" -#: engine/core/models.py:894 +#: engine/core/models.py:983 msgid "product images" msgstr "Imagini ale produsului" -#: engine/core/models.py:899 +#: engine/core/models.py:988 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -2193,39 +2237,39 @@ msgstr "" "asocierea acesteia la produsele aplicabile. Se integrează cu catalogul de " "produse pentru a determina articolele afectate în cadrul campaniei." -#: engine/core/models.py:911 +#: engine/core/models.py:1000 msgid "percentage discount for the selected products" msgstr "Procentul de reducere pentru produsele selectate" -#: engine/core/models.py:912 +#: engine/core/models.py:1001 msgid "discount percentage" msgstr "Procent de reducere" -#: engine/core/models.py:917 +#: engine/core/models.py:1006 msgid "provide a unique name for this promotion" msgstr "Furnizați un nume unic pentru această promoție" -#: engine/core/models.py:918 +#: engine/core/models.py:1007 msgid "promotion name" msgstr "Numele promoției" -#: engine/core/models.py:924 +#: engine/core/models.py:1013 msgid "promotion description" msgstr "Descrierea promoției" -#: engine/core/models.py:929 +#: engine/core/models.py:1018 msgid "select which products are included in this promotion" msgstr "Selectați ce produse sunt incluse în această promoție" -#: engine/core/models.py:930 +#: engine/core/models.py:1019 msgid "included products" msgstr "Produse incluse" -#: engine/core/models.py:934 +#: engine/core/models.py:1027 msgid "promotion" msgstr "Promovare" -#: engine/core/models.py:945 +#: engine/core/models.py:1038 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2238,23 +2282,23 @@ msgstr "" "precum și operațiuni pentru adăugarea și eliminarea mai multor produse " "simultan." -#: engine/core/models.py:957 +#: engine/core/models.py:1050 msgid "products that the user has marked as wanted" msgstr "Produse pe care utilizatorul le-a marcat ca fiind dorite" -#: engine/core/models.py:965 +#: engine/core/models.py:1058 msgid "user who owns this wishlist" msgstr "Utilizatorul care deține această listă de dorințe" -#: engine/core/models.py:966 +#: engine/core/models.py:1059 msgid "wishlist owner" msgstr "Proprietarul listei de dorințe" -#: engine/core/models.py:974 +#: engine/core/models.py:1067 msgid "wishlist" msgstr "Lista dorințelor" -#: engine/core/models.py:1016 +#: engine/core/models.py:1109 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2271,19 +2315,19 @@ msgstr "" "funcționalitatea mixinilor specifici și oferă caracteristici personalizate " "suplimentare." -#: engine/core/models.py:1031 +#: engine/core/models.py:1124 msgid "documentary" msgstr "Documentar" -#: engine/core/models.py:1032 +#: engine/core/models.py:1125 msgid "documentaries" msgstr "Documentare" -#: engine/core/models.py:1042 +#: engine/core/models.py:1135 msgid "unresolved" msgstr "Nerezolvat" -#: engine/core/models.py:1047 +#: engine/core/models.py:1140 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2305,59 +2349,59 @@ msgstr "" "unei adrese cu un utilizator, facilitând gestionarea personalizată a " "datelor." -#: engine/core/models.py:1062 +#: engine/core/models.py:1155 msgid "address line for the customer" msgstr "Linia de adresă pentru client" -#: engine/core/models.py:1063 +#: engine/core/models.py:1156 msgid "address line" msgstr "Linia de adresă" -#: engine/core/models.py:1065 +#: engine/core/models.py:1158 msgid "street" msgstr "Strada" -#: engine/core/models.py:1066 +#: engine/core/models.py:1159 msgid "district" msgstr "Districtul" -#: engine/core/models.py:1067 +#: engine/core/models.py:1160 msgid "city" msgstr "Oraș" -#: engine/core/models.py:1068 +#: engine/core/models.py:1161 msgid "region" msgstr "Regiunea" -#: engine/core/models.py:1069 +#: engine/core/models.py:1162 msgid "postal code" msgstr "Cod poștal" -#: engine/core/models.py:1070 +#: engine/core/models.py:1163 msgid "country" msgstr "Țara" -#: engine/core/models.py:1077 +#: engine/core/models.py:1170 msgid "geolocation point: (longitude, latitude)" msgstr "Punct de geolocație (longitudine, latitudine)" -#: engine/core/models.py:1083 +#: engine/core/models.py:1176 msgid "full JSON response from geocoder for this address" msgstr "Răspuns JSON complet de la geocoder pentru această adresă" -#: engine/core/models.py:1089 +#: engine/core/models.py:1182 msgid "stored JSON response from the geocoding service" msgstr "Răspuns JSON stocat de la serviciul de geocodare" -#: engine/core/models.py:1099 +#: engine/core/models.py:1192 msgid "address" msgstr "Adresă" -#: engine/core/models.py:1100 +#: engine/core/models.py:1193 msgid "addresses" msgstr "Adrese" -#: engine/core/models.py:1112 +#: engine/core/models.py:1205 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2375,73 +2419,73 @@ msgstr "" " a codului promoțional la o comandă, asigurându-se în același timp că sunt " "respectate constrângerile." -#: engine/core/models.py:1126 +#: engine/core/models.py:1219 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" -#: engine/core/models.py:1127 +#: engine/core/models.py:1220 msgid "promo code identifier" msgstr "Cod promoțional de identificare" -#: engine/core/models.py:1134 +#: engine/core/models.py:1227 msgid "fixed discount amount applied if percent is not used" msgstr "Valoarea fixă a reducerii aplicate dacă procentul nu este utilizat" -#: engine/core/models.py:1135 +#: engine/core/models.py:1228 msgid "fixed discount amount" msgstr "Valoarea fixă a reducerii" -#: engine/core/models.py:1141 +#: engine/core/models.py:1234 msgid "percentage discount applied if fixed amount is not used" msgstr "Procentul de reducere aplicat dacă suma fixă nu este utilizată" -#: engine/core/models.py:1142 +#: engine/core/models.py:1235 msgid "percentage discount" msgstr "Reducere procentuală" -#: engine/core/models.py:1147 +#: engine/core/models.py:1240 msgid "timestamp when the promocode expires" msgstr "Data la care expiră codul promoțional" -#: engine/core/models.py:1148 +#: engine/core/models.py:1241 msgid "end validity time" msgstr "Timpul final de valabilitate" -#: engine/core/models.py:1153 +#: engine/core/models.py:1246 msgid "timestamp from which this promocode is valid" msgstr "Timestamp de la care acest cod promoțional este valabil" -#: engine/core/models.py:1154 +#: engine/core/models.py:1247 msgid "start validity time" msgstr "Ora de începere a valabilității" -#: engine/core/models.py:1159 +#: engine/core/models.py:1252 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ă" -#: engine/core/models.py:1160 +#: engine/core/models.py:1253 msgid "usage timestamp" msgstr "Timestamp de utilizare" -#: engine/core/models.py:1165 +#: engine/core/models.py:1258 msgid "user assigned to this promocode if applicable" msgstr "Utilizatorul atribuit acestui cod promoțional, dacă este cazul" -#: engine/core/models.py:1166 +#: engine/core/models.py:1259 msgid "assigned user" msgstr "Utilizator atribuit" -#: engine/core/models.py:1173 +#: engine/core/models.py:1266 msgid "promo code" msgstr "Cod promoțional" -#: engine/core/models.py:1174 +#: engine/core/models.py:1267 msgid "promo codes" msgstr "Coduri promoționale" -#: engine/core/models.py:1190 +#: engine/core/models.py:1283 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2449,16 +2493,16 @@ msgstr "" "Trebuie definit un singur tip de reducere (sumă sau procent), dar nu ambele " "sau niciuna." -#: engine/core/models.py:1212 +#: engine/core/models.py:1305 msgid "promocode already used" msgstr "Codul promoțional a fost deja utilizat" -#: engine/core/models.py:1234 +#: engine/core/models.py:1327 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Tip de reducere invalid pentru codul promoțional {self.uuid}!" -#: engine/core/models.py:1243 +#: engine/core/models.py:1336 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 " @@ -2475,141 +2519,141 @@ msgstr "" "de expediere sau de facturare. În egală măsură, funcționalitatea sprijină " "gestionarea produselor în ciclul de viață al comenzii." -#: engine/core/models.py:1260 +#: engine/core/models.py:1357 msgid "the billing address used for this order" msgstr "Adresa de facturare utilizată pentru această comandă" -#: engine/core/models.py:1268 +#: engine/core/models.py:1365 msgid "optional promo code applied to this order" msgstr "Cod promoțional opțional aplicat la această comandă" -#: engine/core/models.py:1269 +#: engine/core/models.py:1366 msgid "applied promo code" msgstr "Cod promoțional aplicat" -#: engine/core/models.py:1277 +#: engine/core/models.py:1374 msgid "the shipping address used for this order" msgstr "Adresa de expediere utilizată pentru această comandă" -#: engine/core/models.py:1278 +#: engine/core/models.py:1375 msgid "shipping address" msgstr "Adresa de expediere" -#: engine/core/models.py:1284 +#: engine/core/models.py:1381 msgid "current status of the order in its lifecycle" msgstr "Stadiul actual al comenzii în ciclul său de viață" -#: engine/core/models.py:1285 +#: engine/core/models.py:1382 msgid "order status" msgstr "Stadiul comenzii" -#: engine/core/models.py:1290 engine/core/models.py:1889 +#: engine/core/models.py:1387 engine/core/models.py:1997 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ă" -#: engine/core/models.py:1296 +#: engine/core/models.py:1393 msgid "json representation of order attributes for this order" msgstr "Reprezentarea JSON a atributelor comenzii pentru această comandă" -#: engine/core/models.py:1302 +#: engine/core/models.py:1399 msgid "the user who placed the order" msgstr "Utilizatorul care a plasat comanda" -#: engine/core/models.py:1303 +#: engine/core/models.py:1400 msgid "user" msgstr "Utilizator" -#: engine/core/models.py:1309 +#: engine/core/models.py:1406 msgid "the timestamp when the order was finalized" msgstr "Momentul în care comanda a fost finalizată" -#: engine/core/models.py:1310 +#: engine/core/models.py:1407 msgid "buy time" msgstr "Cumpărați timp" -#: engine/core/models.py:1317 +#: engine/core/models.py:1414 msgid "a human-readable identifier for the order" msgstr "Un identificator ușor de citit pentru comandă" -#: engine/core/models.py:1318 +#: engine/core/models.py:1415 msgid "human readable id" msgstr "ID lizibil de către om" -#: engine/core/models.py:1324 +#: engine/core/models.py:1421 msgid "order" msgstr "Comandă" -#: engine/core/models.py:1371 +#: engine/core/models.py:1468 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!" -#: engine/core/models.py:1404 +#: engine/core/models.py:1504 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" -#: engine/core/models.py:1410 +#: engine/core/models.py:1510 msgid "you cannot add inactive products to order" msgstr "Nu puteți adăuga produse inactive la comandă" -#: engine/core/models.py:1432 +#: engine/core/models.py:1533 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" -#: engine/core/models.py:1456 engine/core/models.py:1485 -#: engine/core/models.py:1495 +#: engine/core/models.py:1557 engine/core/models.py:1586 +#: engine/core/models.py:1596 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" -#: engine/core/models.py:1480 +#: engine/core/models.py:1581 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} nu există cu interogarea <{query}>!" -#: engine/core/models.py:1519 +#: engine/core/models.py:1620 msgid "promocode does not exist" msgstr "Codul promoțional nu există" -#: engine/core/models.py:1534 +#: engine/core/models.py:1635 msgid "you can only buy physical products with shipping address specified" msgstr "" "Puteți cumpăra numai produse fizice cu adresa de expediere specificată!" -#: engine/core/models.py:1555 +#: engine/core/models.py:1656 msgid "address does not exist" msgstr "Adresa nu există" -#: engine/core/models.py:1577 engine/core/models.py:1656 +#: engine/core/models.py:1678 engine/core/models.py:1757 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." -#: engine/core/models.py:1583 engine/core/models.py:1649 +#: engine/core/models.py:1684 engine/core/models.py:1750 msgid "invalid force value" msgstr "Valoare forță invalidă" -#: engine/core/models.py:1589 engine/core/models.py:1660 +#: engine/core/models.py:1690 engine/core/models.py:1761 msgid "you cannot purchase an empty order!" msgstr "Nu puteți achiziționa o comandă goală!" -#: engine/core/models.py:1610 +#: engine/core/models.py:1711 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" -#: engine/core/models.py:1624 +#: engine/core/models.py:1725 msgid "a user without a balance cannot buy with balance" msgstr "Un utilizator fără sold nu poate cumpăra cu sold!" -#: engine/core/models.py:1630 +#: engine/core/models.py:1731 msgid "insufficient funds to complete the order" msgstr "Insuficiența fondurilor pentru finalizarea comenzii" -#: engine/core/models.py:1671 +#: engine/core/models.py:1772 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2617,7 +2661,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" -#: engine/core/models.py:1682 +#: engine/core/models.py:1783 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2625,7 +2669,7 @@ msgstr "" "Metodă de plată invalidă: {payment_method} de la " "{available_payment_methods}!" -#: engine/core/models.py:1813 +#: engine/core/models.py:1916 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2640,35 +2684,35 @@ 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." -#: engine/core/models.py:1825 +#: engine/core/models.py:1928 msgid "user-provided comments about their experience with the product" msgstr "" "Comentarii furnizate de utilizatori cu privire la experiența lor cu produsul" -#: engine/core/models.py:1826 +#: engine/core/models.py:1929 msgid "feedback comments" msgstr "Comentarii de feedback" -#: engine/core/models.py:1834 +#: engine/core/models.py:1937 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" -#: engine/core/models.py:1836 +#: engine/core/models.py:1939 msgid "related order product" msgstr "Produs aferent comenzii" -#: engine/core/models.py:1841 +#: engine/core/models.py:1944 msgid "user-assigned rating for the product" msgstr "Rating atribuit de utilizator pentru produs" -#: engine/core/models.py:1842 +#: engine/core/models.py:1945 msgid "product rating" msgstr "Evaluarea produsului" -#: engine/core/models.py:1862 +#: engine/core/models.py:1965 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2691,110 +2735,110 @@ msgstr "" "produsele digitale. Modelul se integrează cu modelele Order și Product și " "stochează o referință la acestea." -#: engine/core/models.py:1877 +#: engine/core/models.py:1985 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" -#: engine/core/models.py:1878 +#: engine/core/models.py:1986 msgid "purchase price at order time" msgstr "Prețul de achiziție la momentul comenzii" -#: engine/core/models.py:1883 +#: engine/core/models.py:1991 msgid "internal comments for admins about this ordered product" msgstr "" "Comentarii interne pentru administratori cu privire la acest produs comandat" -#: engine/core/models.py:1884 +#: engine/core/models.py:1992 msgid "internal comments" msgstr "Observații interne" -#: engine/core/models.py:1890 +#: engine/core/models.py:1998 msgid "user notifications" msgstr "Notificări pentru utilizatori" -#: engine/core/models.py:1895 +#: engine/core/models.py:2003 msgid "json representation of this item's attributes" msgstr "Reprezentarea JSON a atributelor acestui element" -#: engine/core/models.py:1896 +#: engine/core/models.py:2004 msgid "ordered product attributes" msgstr "Atribute de produs ordonate" -#: engine/core/models.py:1901 +#: engine/core/models.py:2009 msgid "reference to the parent order that contains this product" msgstr "Trimitere la comanda mamă care conține acest produs" -#: engine/core/models.py:1902 +#: engine/core/models.py:2010 msgid "parent order" msgstr "Ordinul părinților" -#: engine/core/models.py:1911 +#: engine/core/models.py:2019 msgid "the specific product associated with this order line" msgstr "Produsul specific asociat cu această linie de comandă" -#: engine/core/models.py:1918 +#: engine/core/models.py:2026 msgid "quantity of this specific product in the order" msgstr "Cantitatea acestui produs specific din comandă" -#: engine/core/models.py:1919 +#: engine/core/models.py:2027 msgid "product quantity" msgstr "Cantitatea produsului" -#: engine/core/models.py:1926 +#: engine/core/models.py:2034 msgid "current status of this product in the order" msgstr "Starea actuală a acestui produs în comandă" -#: engine/core/models.py:1927 +#: engine/core/models.py:2035 msgid "product line status" msgstr "Starea liniei de produse" -#: engine/core/models.py:1998 +#: engine/core/models.py:2106 msgid "order product must have an order" msgstr "Comandaprodusul trebuie să aibă o comandă asociată!" -#: engine/core/models.py:2000 +#: engine/core/models.py:2108 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Acțiune greșită specificată pentru feedback: {action}!" -#: engine/core/models.py:2017 +#: engine/core/models.py:2125 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" -#: engine/core/models.py:2026 +#: engine/core/models.py:2132 engine/core/models.py:2227 msgid "name" msgstr "Nume și prenume" -#: engine/core/models.py:2028 +#: engine/core/models.py:2134 msgid "URL of the integration" msgstr "Adresa URL a integrării" -#: engine/core/models.py:2031 +#: engine/core/models.py:2137 msgid "authentication credentials" msgstr "Acreditări de autentificare" -#: engine/core/models.py:2054 +#: engine/core/models.py:2160 msgid "you can only have one default CRM provider" msgstr "Puteți avea un singur furnizor CRM implicit" -#: engine/core/models.py:2064 +#: engine/core/models.py:2170 msgid "CRM" msgstr "CRM" -#: engine/core/models.py:2065 +#: engine/core/models.py:2171 msgid "CRMs" msgstr "CRM-uri" -#: engine/core/models.py:2081 +#: engine/core/models.py:2187 msgid "order CRM link" msgstr "Legătura CRM a comenzii" -#: engine/core/models.py:2082 +#: engine/core/models.py:2188 msgid "orders CRM links" msgstr "Legături CRM pentru comenzi" -#: engine/core/models.py:2087 +#: engine/core/models.py:2193 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2811,14 +2855,38 @@ msgstr "" "adrese URL pentru descărcarea activului atunci când comanda asociată este în" " stare finalizată." -#: engine/core/models.py:2103 +#: engine/core/models.py:2209 msgid "download" msgstr "Descărcare" -#: engine/core/models.py:2104 +#: engine/core/models.py:2210 msgid "downloads" msgstr "Descărcări" +#: engine/core/models.py:2228 +msgid "descriptive name for the image" +msgstr "Denumire descriptivă pentru imagine" + +#: engine/core/models.py:2233 +msgid "image file pasted in the markdown editor" +msgstr "Fișier imagine inserat în editorul Markdown" + +#: engine/core/models.py:2239 +msgid "alt text" +msgstr "Alt text" + +#: engine/core/models.py:2240 +msgid "alternative text for accessibility" +msgstr "Text alternativ pentru accesibilitate" + +#: engine/core/models.py:2244 +msgid "pasted image" +msgstr "Imagine lipită" + +#: engine/core/models.py:2245 +msgid "pasted images" +msgstr "Imagini lipite" + #: engine/core/serializers/utility.py:91 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." @@ -2827,6 +2895,16 @@ msgstr "" " pentru a adăuga feedback." #: engine/core/sitemaps.py:25 +#: engine/core/templates/admin_doc/bookmarklets.html:8 +#: engine/core/templates/admin_doc/index.html:8 +#: engine/core/templates/admin_doc/missing_docutils.html:8 +#: engine/core/templates/admin_doc/model_detail.html:8 +#: engine/core/templates/admin_doc/model_index.html:8 +#: engine/core/templates/admin_doc/template_detail.html:8 +#: engine/core/templates/admin_doc/template_filter_index.html:8 +#: engine/core/templates/admin_doc/template_tag_index.html:8 +#: engine/core/templates/admin_doc/view_detail.html:8 +#: engine/core/templates/admin_doc/view_index.html:8 msgid "Home" msgstr "Acasă" @@ -2879,45 +2957,34 @@ msgstr "Brut" msgid "Dashboard" msgstr "Tablou de bord" -#: engine/core/templates/admin/dashboard/_income_overview.html:7 +#: engine/core/templates/admin/dashboard/_income_overview.html:6 msgid "Income overview" msgstr "Prezentare generală a veniturilor" -#: engine/core/templates/admin/dashboard/_income_overview.html:31 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Net" +#: engine/core/templates/admin/dashboard/_income_overview.html:16 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" msgstr "Venituri nete" -#: engine/core/templates/admin/dashboard/_income_overview.html:37 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Taxes" -msgstr "Impozite" - -#: engine/core/templates/admin/dashboard/_income_overview.html:43 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 +#: engine/core/templates/admin/dashboard/_income_overview.html:21 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 msgid "Returns" msgstr "Returnări" -#: engine/core/templates/admin/dashboard/_income_overview.html:48 -msgid "Gross (pie total)" -msgstr "Venituri brute" - -#: engine/core/templates/admin/dashboard/_income_overview.html:72 -msgid "No data" -msgstr "Fără dată" - +#: engine/core/templates/admin/dashboard/_income_overview.html:26 #: engine/core/templates/admin/dashboard/_kpis.html:6 msgid "GMV" msgstr "GMV" +#: engine/core/templates/admin/dashboard/_income_overview.html:50 +msgid "No data" +msgstr "Fără dată" + #: engine/core/templates/admin/dashboard/_kpis.html:34 msgid "AOV" msgstr "AOV" -#: engine/core/templates/admin/dashboard/_kpis.html:48 -msgid "Net revenue" -msgstr "Venituri nete" - #: engine/core/templates/admin/dashboard/_kpis.html:62 msgid "Refund rate" msgstr "Rata de rambursare" @@ -2930,7 +2997,7 @@ msgstr "Returnat" msgid "Low stock" msgstr "Stoc redus" -#: engine/core/templates/admin/dashboard/_low_stock.html:29 +#: engine/core/templates/admin/dashboard/_low_stock.html:33 msgid "No low stock items." msgstr "Nu există articole cu stoc redus." @@ -2987,6 +3054,304 @@ msgstr "Nicio categorie de vânzări în ultimele 30 de zile." msgid "Django site admin" msgstr "Administratorul site-ului Django" +#: engine/core/templates/admin_doc/bookmarklets.html:4 +#: engine/core/templates/admin_doc/bookmarklets.html:17 +msgid "Documentation bookmarklets" +msgstr "Bookmarklet-uri pentru documentație" + +#: engine/core/templates/admin_doc/bookmarklets.html:10 +#: engine/core/templates/admin_doc/index.html:4 +#: engine/core/templates/admin_doc/index.html:10 +#: engine/core/templates/admin_doc/index.html:15 +#: engine/core/templates/admin_doc/missing_docutils.html:10 +#: engine/core/templates/admin_doc/missing_docutils.html:19 +#: engine/core/templates/admin_doc/model_detail.html:10 +#: engine/core/templates/admin_doc/model_index.html:10 +#: engine/core/templates/admin_doc/template_detail.html:10 +#: engine/core/templates/admin_doc/template_filter_index.html:10 +#: engine/core/templates/admin_doc/template_tag_index.html:10 +#: engine/core/templates/admin_doc/view_detail.html:10 +#: engine/core/templates/admin_doc/view_index.html:10 +msgid "Documentation" +msgstr "Documentație" + +#: engine/core/templates/admin_doc/bookmarklets.html:12 +#: engine/core/templates/admin_doc/index.html:53 +msgid "Bookmarklets" +msgstr "Marcaje" + +#: engine/core/templates/admin_doc/bookmarklets.html:19 +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Pentru a instala bookmarklet-urile, trageți linkul în bara de marcaje sau " +"faceți clic dreapta pe link și adăugați-l la marcaje. Acum puteți selecta " +"bookmarklet-ul din orice pagină a site-ului." + +#: engine/core/templates/admin_doc/bookmarklets.html:29 +msgid "Documentation for this page" +msgstr "Documentație pentru această pagină" + +#: engine/core/templates/admin_doc/bookmarklets.html:31 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Te redirecționează de pe orice pagină către documentația pentru vizualizarea" +" care generează pagina respectivă." + +#: engine/core/templates/admin_doc/index.html:21 +#: engine/core/templates/admin_doc/model_detail.html:12 +#: engine/core/templates/admin_doc/model_index.html:4 +#: engine/core/templates/admin_doc/model_index.html:12 +msgid "Models" +msgstr "Modele" + +#: engine/core/templates/admin_doc/index.html:23 +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Modelele sunt descrieri ale tuturor obiectelor din sistem și ale câmpurilor " +"asociate acestora. Fiecare model are o listă de câmpuri care pot fi accesate" +" ca variabile de șablon." + +#: engine/core/templates/admin_doc/index.html:29 +#: engine/core/templates/admin_doc/view_detail.html:12 +#: engine/core/templates/admin_doc/view_index.html:4 +#: engine/core/templates/admin_doc/view_index.html:12 +msgid "Views" +msgstr "Vizualizări" + +#: engine/core/templates/admin_doc/index.html:31 +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Fiecare pagină de pe site-ul public este generată de o vizualizare. " +"Vizualizarea definește șablonul utilizat pentru generarea paginii și " +"obiectele disponibile pentru acel șablon." + +#: engine/core/templates/admin_doc/index.html:39 +msgid "List of all the template tags and their functions." +msgstr "Lista tuturor etichetelor șablonului și funcțiile acestora." + +#: engine/core/templates/admin_doc/index.html:45 +#: engine/core/templates/admin_doc/template_filter_index.html:12 +msgid "Filters" +msgstr "Filtre" + +#: engine/core/templates/admin_doc/index.html:47 +msgid "" +"Filters are actions which can be applied to variables in a template to alter" +" the output." +msgstr "" +"Filtrele sunt acțiuni care pot fi aplicate variabilelor dintr-un șablon " +"pentru a modifica rezultatul." + +#: engine/core/templates/admin_doc/index.html:55 +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Instrumente pentru browserul dvs. pentru a accesa rapid funcționalitatea de " +"administrare." + +#: engine/core/templates/admin_doc/missing_docutils.html:4 +msgid "Please install docutils" +msgstr "Vă rugăm să instalați docutils" + +#: engine/core/templates/admin_doc/missing_docutils.html:20 +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"Sistemul de documentare administrativă necesită biblioteca docutils a Python." + +#: engine/core/templates/admin_doc/missing_docutils.html:21 +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Vă rugăm să solicitați administratorilor să instaleze docutils." + +#: engine/core/templates/admin_doc/model_detail.html:4 +#, python-format +msgid "Model: %(name)s" +msgstr "Model: %(name)s" + +#: engine/core/templates/admin_doc/model_detail.html:29 +msgid "Fields" +msgstr "Câmpuri" + +#: engine/core/templates/admin_doc/model_detail.html:36 +msgid "Field" +msgstr "Câmp" + +#: engine/core/templates/admin_doc/model_detail.html:37 +msgid "Type" +msgstr "Tip" + +#: engine/core/templates/admin_doc/model_detail.html:38 +#: engine/core/templates/admin_doc/model_detail.html:70 +msgid "Description" +msgstr "Descriere" + +#: engine/core/templates/admin_doc/model_detail.html:61 +msgid "Methods with arguments" +msgstr "Metode cu argumente" + +#: engine/core/templates/admin_doc/model_detail.html:68 +msgid "Method" +msgstr "Metoda" + +#: engine/core/templates/admin_doc/model_detail.html:69 +msgid "Arguments" +msgstr "Argumente" + +#: engine/core/templates/admin_doc/model_detail.html:89 +msgid "Back to Model documentation" +msgstr "Înapoi la documentația modelului" + +#: engine/core/templates/admin_doc/model_index.html:17 +msgid "Model documentation" +msgstr "Documentația modelului" + +#: engine/core/templates/admin_doc/model_index.html:44 +msgid "Model groups" +msgstr "Grupuri model" + +#: engine/core/templates/admin_doc/template_detail.html:4 +#, python-format +msgid "Template: %(name)s" +msgstr "Șablon: %(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:12 +msgid "Templates" +msgstr "Șabloane" + +#: engine/core/templates/admin_doc/template_detail.html:17 +#, python-format +msgid "" +"Template: %(name)s" +msgstr "" +"Șablon: %(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:21 +#, python-format +msgid "Search path for template %(name)s:" +msgstr "" +"Calea de căutare pentru șablonul %(name)s:" + +#: engine/core/templates/admin_doc/template_detail.html:29 +msgid "(does not exist)" +msgstr "(nu există)" + +#: engine/core/templates/admin_doc/template_detail.html:40 +msgid "Back to Documentation" +msgstr "Înapoi la documentație" + +#: engine/core/templates/admin_doc/template_filter_index.html:4 +msgid "Template filters" +msgstr "Filtre șablon" + +#: engine/core/templates/admin_doc/template_filter_index.html:17 +msgid "Template filter documentation" +msgstr "Documentație filtru șablon" + +#: engine/core/templates/admin_doc/template_filter_index.html:26 +#: engine/core/templates/admin_doc/template_filter_index.html:52 +msgid "Built-in filters" +msgstr "Filtre încorporate" + +#: engine/core/templates/admin_doc/template_filter_index.html:29 +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before using" +" the filter." +msgstr "" +"Pentru a utiliza aceste filtre, introduceți %(code)s în șablonul " +"dvs. înainte de a utiliza filtrul." + +#: engine/core/templates/admin_doc/template_tag_index.html:4 +msgid "Template tags" +msgstr "Etichete șablon" + +#: engine/core/templates/admin_doc/template_tag_index.html:17 +msgid "Template tag documentation" +msgstr "Documentație pentru etichete șablon" + +#: engine/core/templates/admin_doc/template_tag_index.html:26 +#: engine/core/templates/admin_doc/template_tag_index.html:52 +msgid "Built-in tags" +msgstr "Etichete încorporate" + +#: engine/core/templates/admin_doc/template_tag_index.html:29 +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using the tag." +msgstr "" +"Pentru a utiliza aceste etichete, introduceți %(code)s în șablonul " +"dvs. înainte de a utiliza eticheta." + +#: engine/core/templates/admin_doc/view_detail.html:4 +#, python-format +msgid "View: %(name)s" +msgstr "Vizualizare: %(name)s" + +#: engine/core/templates/admin_doc/view_detail.html:28 +msgid "Context:" +msgstr "Context:" + +#: engine/core/templates/admin_doc/view_detail.html:33 +msgid "Templates:" +msgstr "Șabloane:" + +#: engine/core/templates/admin_doc/view_detail.html:41 +msgid "Back to View documentation" +msgstr "Înapoi la Vizualizare documentație" + +#: engine/core/templates/admin_doc/view_index.html:17 +msgid "View documentation" +msgstr "Vizualizați documentația" + +#: engine/core/templates/admin_doc/view_index.html:28 +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Vizualizări după spațiu de nume %(name)s" + +#: engine/core/templates/admin_doc/view_index.html:30 +msgid "Views by empty namespace" +msgstr "Vizualizări după spațiu de nume gol" + +#: engine/core/templates/admin_doc/view_index.html:40 +#, python-format +msgid "" +"View function: %(full_name)s. Name: %(url_name)s." +msgstr "" +"Funcție de vizualizare: %(full_name)s. Nume: " +"%(url_name)s." + +#: engine/core/templates/admin_doc/view_index.html:54 +msgid "Jump to namespace" +msgstr "Salt la spațiul de nume" + +#: engine/core/templates/admin_doc/view_index.html:59 +msgid "Empty namespace" +msgstr "Spațiu de nume gol" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -3087,7 +3452,7 @@ msgstr "" " informații suplimentare" #: engine/core/templates/digital_order_delivered_email.html:137 -#: engine/core/templates/json_table_widget.html:6 +#: engine/core/templates/json_table_widget.html:26 msgid "value" msgstr "Valoare" @@ -3107,11 +3472,23 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "Cele mai bune salutări,
echipa %(project_name)s" -#: engine/core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:7 +msgid "Key" +msgstr "Cheie" + +#: engine/core/templates/json_table_widget.html:8 +msgid "Value" +msgstr "Valoare" + +#: engine/core/templates/json_table_widget.html:19 msgid "key" msgstr "Cheie" -#: engine/core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:32 +msgid "Delete row" +msgstr "Șterge rândul" + +#: engine/core/templates/json_table_widget.html:44 msgid "Add Row" msgstr "Adaugă rând" @@ -3198,14 +3575,23 @@ msgstr "Nu aveți permisiunea de a efectua această acțiune." msgid "NOMINATIM_URL must be configured." msgstr "Parametrul NOMINATIM_URL trebuie să fie configurat!" -#: engine/core/validators.py:23 +#: engine/core/validators.py:18 +msgid "could not determine file type" +msgstr "Nu s-a putut determina tipul fișierului" + +#: engine/core/validators.py:24 +#, python-brace-format +msgid "unsupported video format. supported formats: {supported}" +msgstr "Format video neacceptat. Formate acceptate: {supported}" + +#: engine/core/validators.py:45 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "Dimensiunile imaginii nu trebuie să depășească w{max_width} x h{max_height} " "pixeli" -#: engine/core/views.py:104 +#: engine/core/views.py:108 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3213,7 +3599,7 @@ msgstr "" "Gestionează cererea pentru indexul sitemap și returnează un răspuns XML. Se " "asigură că răspunsul include antetul tip de conținut adecvat pentru XML." -#: engine/core/views.py:119 +#: engine/core/views.py:123 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3223,17 +3609,17 @@ msgstr "" "Această funcție procesează cererea, extrage răspunsul detaliat corespunzător" " al hărții site-ului și stabilește antetul Content-Type pentru XML." -#: engine/core/views.py:155 +#: engine/core/views.py:174 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Returnează o listă a limbilor acceptate și informațiile corespunzătoare." -#: engine/core/views.py:182 +#: engine/core/views.py:201 msgid "Returns the parameters of the website as a JSON object." msgstr "Returnează parametrii site-ului web sub forma unui obiect JSON." -#: engine/core/views.py:198 +#: engine/core/views.py:217 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3241,11 +3627,11 @@ msgstr "" "Gestionează operațiunile din cache, cum ar fi citirea și setarea datelor din" " cache cu o cheie și un timeout specificate." -#: engine/core/views.py:220 +#: engine/core/views.py:239 msgid "Handles `contact us` form submissions." msgstr "Gestionează trimiterea formularelor `contact us`." -#: engine/core/views.py:236 +#: engine/core/views.py:255 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3253,15 +3639,15 @@ msgstr "" "Gestionează cererile de procesare și validare a URL-urilor din cererile POST" " primite." -#: engine/core/views.py:273 +#: engine/core/views.py:292 msgid "Handles global search queries." msgstr "Gestionează interogările de căutare globală." -#: engine/core/views.py:289 +#: engine/core/views.py:308 msgid "Handles the logic of buying as a business without registration." msgstr "Gestionează logica cumpărării ca o afacere fără înregistrare." -#: engine/core/views.py:337 +#: engine/core/views.py:356 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3269,31 +3655,31 @@ msgstr "" "Gestionează descărcarea unui bun digital asociat cu o comandă.\n" "Această funcție încearcă să servească fișierul activului digital situat în directorul de stocare al proiectului. Dacă fișierul nu este găsit, este generată o eroare HTTP 404 pentru a indica faptul că resursa nu este disponibilă." -#: engine/core/views.py:348 +#: engine/core/views.py:367 msgid "order_product_uuid is required" msgstr "order_product_uuid este necesar" -#: engine/core/views.py:355 +#: engine/core/views.py:374 msgid "order product does not exist" msgstr "comanda produsul nu există" -#: engine/core/views.py:358 +#: engine/core/views.py:377 msgid "you can only download the digital asset once" msgstr "Puteți descărca activul digital o singură dată" -#: engine/core/views.py:362 +#: engine/core/views.py:381 msgid "the order must be paid before downloading the digital asset" msgstr "comanda trebuie plătită înainte de descărcarea activului digital" -#: engine/core/views.py:369 +#: engine/core/views.py:388 msgid "the order product does not have a product" msgstr "Produsul de comandă nu are un produs" -#: engine/core/views.py:412 +#: engine/core/views.py:431 msgid "favicon not found" msgstr "favicon nu a fost găsit" -#: engine/core/views.py:418 +#: engine/core/views.py:437 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3301,7 +3687,7 @@ msgstr "" "Gestionează cererile pentru favicon-ul unui site web.\n" "Această funcție încearcă să servească fișierul favicon situat în directorul static al proiectului. Dacă fișierul favicon nu este găsit, este generată o eroare HTTP 404 pentru a indica faptul că resursa nu este disponibilă." -#: engine/core/views.py:432 +#: engine/core/views.py:451 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3312,16 +3698,20 @@ msgstr "" " index a interfeței de administrare Django. Aceasta utilizează funcția " "`redirect` din Django pentru gestionarea redirecționării HTTP." -#: engine/core/views.py:445 +#: engine/core/views.py:464 msgid "Returns current version of the Schon. " msgstr "Returnează versiunea curentă a Schon." -#: engine/core/views.py:674 engine/core/views.py:689 +#: engine/core/views.py:475 +msgid "no image file provided" +msgstr "Nu s-a furnizat niciun fișier imagine" + +#: engine/core/views.py:710 engine/core/views.py:725 #, python-format msgid "Revenue & Orders (last %(days)d)" msgstr "Venituri și comenzi (ultimul %(days)d)" -#: engine/core/views.py:870 +#: engine/core/views.py:911 msgid "Returns custom variables for Dashboard. " msgstr "Returnează variabilele personalizate pentru tabloul de bord." @@ -3412,7 +3802,7 @@ msgstr "" "serializarea obiectelor Brand. Utilizează cadrul ViewSet al Django pentru a " "simplifica implementarea punctelor finale API pentru obiectele Brand." -#: engine/core/viewsets.py:458 +#: engine/core/viewsets.py:460 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3430,7 +3820,16 @@ msgstr "" "metode pentru recuperarea detaliilor produsului, aplicarea permisiunilor și " "accesarea feedback-ului aferent unui produs." -#: engine/core/viewsets.py:605 +#: engine/core/viewsets.py:541 +msgid "identificator_type and identificators are required" +msgstr "identificator_type și identificatori sunt obligatorii" + +#: engine/core/viewsets.py:554 +msgid "identificator_type must be one of: uuid, slug, sku" +msgstr "" +"identificator_type trebuie să fie unul dintre următoarele: uuid, slug, sku" + +#: engine/core/viewsets.py:635 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3445,7 +3844,7 @@ msgstr "" "acestei clase este de a oferi acces simplificat la resursele legate de " "Vendor prin intermediul cadrului REST Django." -#: engine/core/viewsets.py:625 +#: engine/core/viewsets.py:655 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3462,7 +3861,7 @@ msgstr "" "Feedback accesibile. Aceasta extinde clasa de bază `schonViewSet` și " "utilizează sistemul de filtrare Django pentru interogarea datelor." -#: engine/core/viewsets.py:652 +#: engine/core/viewsets.py:682 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3482,7 +3881,7 @@ msgstr "" "de acțiunea specifică efectuată și aplică permisiunile corespunzătoare în " "timpul interacțiunii cu datele comenzii." -#: engine/core/viewsets.py:914 +#: engine/core/viewsets.py:944 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3497,12 +3896,12 @@ msgstr "" "solicitată. În plus, oferă o acțiune detaliată pentru gestionarea feedback-" "ului privind instanțele OrderProduct" -#: engine/core/viewsets.py:974 +#: engine/core/viewsets.py:1004 msgid "Manages operations related to Product images in the application. " msgstr "" "Gestionează operațiunile legate de imaginile produselor din aplicație." -#: engine/core/viewsets.py:988 +#: engine/core/viewsets.py:1018 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3510,16 +3909,16 @@ msgstr "" "Gestionează recuperarea și gestionarea instanțelor PromoCode prin diverse " "acțiuni API." -#: engine/core/viewsets.py:1019 +#: engine/core/viewsets.py:1049 msgid "Represents a view set for managing promotions. " msgstr "Reprezintă un set de vizualizări pentru gestionarea promoțiilor." -#: engine/core/viewsets.py:1032 +#: engine/core/viewsets.py:1062 msgid "Handles operations related to Stock data in the system." msgstr "" "Gestionează operațiunile legate de datele privind stocurile din sistem." -#: engine/core/viewsets.py:1046 +#: engine/core/viewsets.py:1076 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3538,7 +3937,7 @@ msgstr "" "utilizatorii își pot gestiona doar propriile liste de dorințe, cu excepția " "cazului în care sunt acordate permisiuni explicite." -#: engine/core/viewsets.py:1183 +#: engine/core/viewsets.py:1213 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3553,12 +3952,12 @@ msgstr "" "serializatorului și gestionarea permisiunilor în funcție de contextul " "cererii." -#: engine/core/viewsets.py:1254 +#: engine/core/viewsets.py:1275 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Eroare de geocodare: {e}" -#: engine/core/viewsets.py:1262 +#: engine/core/viewsets.py:1283 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/ru_RU/LC_MESSAGES/django.mo b/engine/core/locale/ru_RU/LC_MESSAGES/django.mo index 38d361d9..4a647436 100644 Binary files a/engine/core/locale/ru_RU/LC_MESSAGES/django.mo and b/engine/core/locale/ru_RU/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/ru_RU/LC_MESSAGES/django.po b/engine/core/locale/ru_RU/LC_MESSAGES/django.po index 3bbff2e9..a0e2532d 100644 --- a/engine/core/locale/ru_RU/LC_MESSAGES/django.po +++ b/engine/core/locale/ru_RU/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -51,114 +51,134 @@ msgstr "Модифицированный" msgid "when the object was last modified" msgstr "Когда объект был отредактирован в последний раз" -#: engine/core/admin.py:94 +#: engine/core/admin.py:98 msgid "translations" msgstr "Переводы" -#: engine/core/admin.py:102 +#: engine/core/admin.py:106 msgid "general" msgstr "Общие сведения" -#: engine/core/admin.py:106 +#: engine/core/admin.py:110 msgid "relations" msgstr "Отношения" -#: engine/core/admin.py:111 +#: engine/core/admin.py:115 msgid "additional info" msgstr "дополнительная информация" -#: engine/core/admin.py:133 +#: engine/core/admin.py:137 msgid "metadata" msgstr "Метаданные" -#: engine/core/admin.py:141 +#: engine/core/admin.py:145 msgid "timestamps" msgstr "Временные метки" -#: engine/core/admin.py:158 +#: engine/core/admin.py:162 #, python-format msgid "Activate selected %(verbose_name_plural)s" msgstr "Активировать выбранные %(verbose_name_plural)s" -#: engine/core/admin.py:166 +#: engine/core/admin.py:170 msgid "selected items have been activated." msgstr "Выбранные сущности активированы!" -#: engine/core/admin.py:174 +#: engine/core/admin.py:178 #, python-format msgid "Deactivate selected %(verbose_name_plural)s" msgstr "Деактивировать выбранные %(verbose_name_plural)s" -#: engine/core/admin.py:184 +#: engine/core/admin.py:188 msgid "selected items have been deactivated." msgstr "Выбранные сущности были деактивированы!" -#: engine/core/admin.py:196 engine/core/graphene/object_types.py:653 -#: engine/core/graphene/object_types.py:660 engine/core/models.py:832 -#: engine/core/models.py:840 +#: engine/core/admin.py:200 engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:673 engine/core/models.py:918 +#: engine/core/models.py:928 msgid "attribute value" msgstr "Значение атрибута" -#: engine/core/admin.py:197 engine/core/graphene/object_types.py:77 -#: engine/core/models.py:841 +#: engine/core/admin.py:201 engine/core/graphene/object_types.py:81 +#: engine/core/models.py:929 msgid "attribute values" msgstr "Значения атрибутов" -#: engine/core/admin.py:208 +#: engine/core/admin.py:212 engine/core/models.py:2232 msgid "image" msgstr "Изображение" -#: engine/core/admin.py:209 engine/core/graphene/object_types.py:530 +#: engine/core/admin.py:213 engine/core/graphene/object_types.py:535 msgid "images" msgstr "Изображения" -#: engine/core/admin.py:220 engine/core/models.py:576 +#: engine/core/admin.py:224 engine/core/models.py:635 msgid "stock" msgstr "Наличие" -#: engine/core/admin.py:221 engine/core/graphene/object_types.py:713 +#: engine/core/admin.py:225 engine/core/graphene/object_types.py:735 msgid "stocks" msgstr "Наличия" -#: engine/core/admin.py:232 engine/core/models.py:1938 +#: engine/core/admin.py:236 engine/core/models.py:2046 msgid "order product" msgstr "Заказанный товар" -#: engine/core/admin.py:233 engine/core/graphene/object_types.py:441 -#: engine/core/models.py:1939 +#: engine/core/admin.py:237 engine/core/graphene/object_types.py:446 +#: engine/core/models.py:2047 msgid "order products" msgstr "Заказанные товары" -#: engine/core/admin.py:251 engine/core/admin.py:252 +#: engine/core/admin.py:255 engine/core/admin.py:256 msgid "children" msgstr "Дети" -#: engine/core/admin.py:528 +#: engine/core/admin.py:545 +msgid "video preview" +msgstr "Предварительный просмотр видео" + +#: engine/core/admin.py:551 msgid "has images" msgstr "Имеет изображения" -#: engine/core/admin.py:531 +#: engine/core/admin.py:554 #, python-format msgid "Export selected %(verbose_name_plural)s to marketplaces' feeds" msgstr "Экспорт выбранного %(verbose_name_plural)s в фиды торговых площадок" -#: engine/core/admin.py:542 +#: engine/core/admin.py:565 #, python-format msgid "selected %(verbose_name_plural)s have been marked for export." msgstr "Выбранные %(verbose_name_plural)s помечены для экспорта." -#: engine/core/admin.py:553 +#: engine/core/admin.py:576 #, python-format msgid "Ban selected %(verbose_name_plural)s from marketplaces' feeds" msgstr "" "Запретить отображение %(verbose_name_plural)s в фидах торговых площадок" -#: engine/core/admin.py:564 +#: engine/core/admin.py:587 #, python-format msgid "selected %(verbose_name_plural)s have been banned from export." msgstr "Выбранные %(verbose_name_plural)s были запрещены к экспорту." -#: engine/core/admin.py:1116 +#: engine/core/admin.py:1030 +msgid "Preview" +msgstr "Предварительный просмотр" + +#: engine/core/admin.py:1031 +msgid "Metadata" +msgstr "Метаданные" + +#: engine/core/admin.py:1034 +msgid "preview" +msgstr "Предварительный просмотр" + +#: engine/core/admin.py:1043 +msgid "image preview" +msgstr "Предварительный просмотр изображения" + +#: engine/core/admin.py:1166 msgid "Config" msgstr "Конфигурация" @@ -225,7 +245,7 @@ msgstr "" "содержимого. Язык может быть выбран с помощью Accept-Language и параметра " "запроса." -#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:36 +#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "Ввод/вывод кэша" @@ -249,7 +269,7 @@ msgstr "Получите параметры приложения, которые msgid "send a message to the support team" msgstr "Отправьте сообщение в службу поддержки" -#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:59 msgid "request a CORSed URL" msgstr "Запросите URL-адрес с поддержкой CORS. Допускается только https." @@ -393,11 +413,11 @@ msgstr "" "Переписать некоторые поля существующей категории с сохранением " "нередактируемых полей" -#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757 -#: engine/core/docs/drf/viewsets.py:1046 -#: engine/core/graphene/object_types.py:119 -#: engine/core/graphene/object_types.py:239 -#: engine/core/graphene/object_types.py:540 +#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:781 +#: engine/core/docs/drf/viewsets.py:1070 +#: engine/core/graphene/object_types.py:123 +#: engine/core/graphene/object_types.py:247 +#: engine/core/graphene/object_types.py:546 msgid "SEO Meta snapshot" msgstr "Мета-данные для SEO" @@ -700,7 +720,7 @@ msgstr "Получение одного продукта (подробный п #: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683 #: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725 -#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763 +#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:787 msgid "Product UUID or slug" msgstr "UUID или Slug продукта" @@ -727,291 +747,305 @@ msgstr "Удалить продукт" msgid "lists all permitted feedbacks for a product" msgstr "список всех разрешенных отзывов о продукте" -#: engine/core/docs/drf/viewsets.py:758 +#: engine/core/docs/drf/viewsets.py:757 +msgid "retrieve exact products by identifier" +msgstr "Поиск точных продуктов по идентификатору" + +#: engine/core/docs/drf/viewsets.py:759 +msgid "" +"retrieve a list of products by identifier type (uuid, slug, or sku). Send a " +"POST request with `identificator_type` and `identificators` (list of " +"values)." +msgstr "" +"Получить список продуктов по типу идентификатора (uuid, slug или sku). " +"Отправить POST-запрос с `identificator_type` и `identificators` (список " +"значений)." + +#: engine/core/docs/drf/viewsets.py:782 msgid "returns a snapshot of the product's SEO meta data" msgstr "Возвращает снимок метаданных SEO продукта." -#: engine/core/docs/drf/viewsets.py:779 +#: engine/core/docs/drf/viewsets.py:803 msgid "list all addresses" msgstr "Перечислите все адреса" -#: engine/core/docs/drf/viewsets.py:789 +#: engine/core/docs/drf/viewsets.py:813 msgid "retrieve a single address" msgstr "Получение одного адреса" -#: engine/core/docs/drf/viewsets.py:799 +#: engine/core/docs/drf/viewsets.py:823 msgid "create a new address" msgstr "Создайте новый адрес" -#: engine/core/docs/drf/viewsets.py:810 +#: engine/core/docs/drf/viewsets.py:834 msgid "delete an address" msgstr "Удалить адрес" -#: engine/core/docs/drf/viewsets.py:820 +#: engine/core/docs/drf/viewsets.py:844 msgid "update an entire address" msgstr "Обновление всего адреса" -#: engine/core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:855 msgid "partially update an address" msgstr "Частичное обновление адреса" -#: engine/core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:866 msgid "autocomplete address suggestions" msgstr "Автозаполнение ввода адреса" -#: engine/core/docs/drf/viewsets.py:848 +#: engine/core/docs/drf/viewsets.py:872 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" "Строка запроса сырых данных, пожалуйста, дополните ее данными с конечной " "точки geo-IP" -#: engine/core/docs/drf/viewsets.py:855 +#: engine/core/docs/drf/viewsets.py:879 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "ограничивает количество результатов, 1 < limit < 10, по умолчанию: 5" -#: engine/core/docs/drf/viewsets.py:871 +#: engine/core/docs/drf/viewsets.py:895 msgid "list all feedbacks (simple view)" msgstr "список всех отзывов (простой вид)" -#: engine/core/docs/drf/viewsets.py:881 +#: engine/core/docs/drf/viewsets.py:905 msgid "retrieve a single feedback (detailed view)" msgstr "получить один отзыв (подробный просмотр)" -#: engine/core/docs/drf/viewsets.py:888 +#: engine/core/docs/drf/viewsets.py:912 msgid "create a feedback" msgstr "создать отзыв" -#: engine/core/docs/drf/viewsets.py:895 +#: engine/core/docs/drf/viewsets.py:919 msgid "delete a feedback" msgstr "удалить отзыв" -#: engine/core/docs/drf/viewsets.py:902 +#: engine/core/docs/drf/viewsets.py:926 msgid "rewrite an existing feedback saving non-editables" msgstr "" "Переписать существующую категорию с сохранением нередактируемых объектов" -#: engine/core/docs/drf/viewsets.py:909 +#: engine/core/docs/drf/viewsets.py:933 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" "Переписать некоторые поля существующей категории с сохранением " "нередактируемых полей" -#: engine/core/docs/drf/viewsets.py:919 +#: engine/core/docs/drf/viewsets.py:943 msgid "list all order–product relations (simple view)" msgstr "список всех отношений \"заказ-продукт\" (простой вид)" -#: engine/core/docs/drf/viewsets.py:929 +#: engine/core/docs/drf/viewsets.py:953 msgid "retrieve a single order–product relation (detailed view)" msgstr "получить одно отношение \"заказ-продукт\" (подробный просмотр)" -#: engine/core/docs/drf/viewsets.py:939 +#: engine/core/docs/drf/viewsets.py:963 msgid "create a new order–product relation" msgstr "создать новое отношение \"заказ-продукт" -#: engine/core/docs/drf/viewsets.py:949 +#: engine/core/docs/drf/viewsets.py:973 msgid "replace an existing order–product relation" msgstr "заменить существующее отношение \"заказ-продукт" -#: engine/core/docs/drf/viewsets.py:959 +#: engine/core/docs/drf/viewsets.py:983 msgid "partially update an existing order–product relation" msgstr "частично обновить существующее отношение \"заказ-продукт" -#: engine/core/docs/drf/viewsets.py:969 +#: engine/core/docs/drf/viewsets.py:993 msgid "delete an order–product relation" msgstr "удалить отношение \"заказ-продукт" -#: engine/core/docs/drf/viewsets.py:979 +#: engine/core/docs/drf/viewsets.py:1003 msgid "add or remove feedback on an order–product relation" msgstr "добавлять или удалять отзывы о связи заказ-продукт" -#: engine/core/docs/drf/viewsets.py:996 +#: engine/core/docs/drf/viewsets.py:1020 msgid "list all brands (simple view)" msgstr "Список всех брендов (простой вид)" -#: engine/core/docs/drf/viewsets.py:1003 +#: engine/core/docs/drf/viewsets.py:1027 msgid "retrieve a single brand (detailed view)" msgstr "Извлечение одного бренда (подробный просмотр)" -#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051 +#: engine/core/docs/drf/viewsets.py:1032 engine/core/docs/drf/viewsets.py:1075 msgid "Brand UUID or slug" msgstr "UUID бренда или ссылка" -#: engine/core/docs/drf/viewsets.py:1018 +#: engine/core/docs/drf/viewsets.py:1042 msgid "create a brand" msgstr "Создайте бренд" -#: engine/core/docs/drf/viewsets.py:1025 +#: engine/core/docs/drf/viewsets.py:1049 msgid "delete a brand" msgstr "Удалить бренд" -#: engine/core/docs/drf/viewsets.py:1032 +#: engine/core/docs/drf/viewsets.py:1056 msgid "rewrite an existing brand saving non-editables" msgstr "" "Переписать существующую категорию с сохранением нередактируемых объектов" -#: engine/core/docs/drf/viewsets.py:1039 +#: engine/core/docs/drf/viewsets.py:1063 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "" "Переписать некоторые поля существующей категории с сохранением " "нередактируемых полей" -#: engine/core/docs/drf/viewsets.py:1064 +#: engine/core/docs/drf/viewsets.py:1088 msgid "list all vendors (simple view)" msgstr "Список всех продавцов (простой вид)" -#: engine/core/docs/drf/viewsets.py:1074 +#: engine/core/docs/drf/viewsets.py:1098 msgid "retrieve a single vendor (detailed view)" msgstr "Получение данных по одному поставщику (подробный просмотр)" -#: engine/core/docs/drf/viewsets.py:1081 +#: engine/core/docs/drf/viewsets.py:1105 msgid "create a vendor" msgstr "Создать поставщика" -#: engine/core/docs/drf/viewsets.py:1088 +#: engine/core/docs/drf/viewsets.py:1112 msgid "delete a vendor" msgstr "Удалить поставщика" -#: engine/core/docs/drf/viewsets.py:1095 +#: engine/core/docs/drf/viewsets.py:1119 msgid "rewrite an existing vendor saving non-editables" msgstr "" "Переписать существующую категорию с сохранением нередактируемых объектов" -#: engine/core/docs/drf/viewsets.py:1102 +#: engine/core/docs/drf/viewsets.py:1126 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "" "Переписать некоторые поля существующей категории с сохранением " "нередактируемых полей" -#: engine/core/docs/drf/viewsets.py:1112 +#: engine/core/docs/drf/viewsets.py:1136 msgid "list all product images (simple view)" msgstr "Список всех изображений товаров (простой вид)" -#: engine/core/docs/drf/viewsets.py:1122 +#: engine/core/docs/drf/viewsets.py:1146 msgid "retrieve a single product image (detailed view)" msgstr "Получение изображения одного продукта (детальный просмотр)" -#: engine/core/docs/drf/viewsets.py:1129 +#: engine/core/docs/drf/viewsets.py:1153 msgid "create a product image" msgstr "Создайте изображение продукта" -#: engine/core/docs/drf/viewsets.py:1139 +#: engine/core/docs/drf/viewsets.py:1163 msgid "delete a product image" msgstr "Удаление изображения продукта" -#: engine/core/docs/drf/viewsets.py:1146 +#: engine/core/docs/drf/viewsets.py:1170 msgid "rewrite an existing product image saving non-editables" msgstr "" "Переписать существующую категорию с сохранением нередактируемых объектов" -#: engine/core/docs/drf/viewsets.py:1154 +#: engine/core/docs/drf/viewsets.py:1178 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "" "Переписать некоторые поля существующей категории с сохранением " "нередактируемых полей" -#: engine/core/docs/drf/viewsets.py:1165 +#: engine/core/docs/drf/viewsets.py:1189 msgid "list all promo codes (simple view)" msgstr "Список всех промокодов (простой вид)" -#: engine/core/docs/drf/viewsets.py:1175 +#: engine/core/docs/drf/viewsets.py:1199 msgid "retrieve a single promo code (detailed view)" msgstr "Получение одного промокода (подробный просмотр)" -#: engine/core/docs/drf/viewsets.py:1182 +#: engine/core/docs/drf/viewsets.py:1206 msgid "create a promo code" msgstr "Создайте промокод" -#: engine/core/docs/drf/viewsets.py:1189 +#: engine/core/docs/drf/viewsets.py:1213 msgid "delete a promo code" msgstr "Удалить промокод" -#: engine/core/docs/drf/viewsets.py:1196 +#: engine/core/docs/drf/viewsets.py:1220 msgid "rewrite an existing promo code saving non-editables" msgstr "" "Переписать существующую категорию с сохранением нередактируемых объектов" -#: engine/core/docs/drf/viewsets.py:1203 +#: engine/core/docs/drf/viewsets.py:1227 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "" "Переписать некоторые поля существующей категории с сохранением " "нередактируемых полей" -#: engine/core/docs/drf/viewsets.py:1213 +#: engine/core/docs/drf/viewsets.py:1237 msgid "list all promotions (simple view)" msgstr "Список всех рекламных акций (простой вид)" -#: engine/core/docs/drf/viewsets.py:1223 +#: engine/core/docs/drf/viewsets.py:1247 msgid "retrieve a single promotion (detailed view)" msgstr "Получение одной акции (подробный просмотр)" -#: engine/core/docs/drf/viewsets.py:1230 +#: engine/core/docs/drf/viewsets.py:1254 msgid "create a promotion" msgstr "Создайте рекламную акцию" -#: engine/core/docs/drf/viewsets.py:1237 +#: engine/core/docs/drf/viewsets.py:1261 msgid "delete a promotion" msgstr "Удалить акцию" -#: engine/core/docs/drf/viewsets.py:1244 +#: engine/core/docs/drf/viewsets.py:1268 msgid "rewrite an existing promotion saving non-editables" msgstr "" "Переписать существующую категорию с сохранением нередактируемых объектов" -#: engine/core/docs/drf/viewsets.py:1251 +#: engine/core/docs/drf/viewsets.py:1275 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "" "Переписать некоторые поля существующей категории с сохранением " "нередактируемых полей" -#: engine/core/docs/drf/viewsets.py:1261 +#: engine/core/docs/drf/viewsets.py:1285 msgid "list all stocks (simple view)" msgstr "Список всех акций (простой вид)" -#: engine/core/docs/drf/viewsets.py:1268 +#: engine/core/docs/drf/viewsets.py:1292 msgid "retrieve a single stock (detailed view)" msgstr "Получение одной акции (подробный просмотр)" -#: engine/core/docs/drf/viewsets.py:1275 +#: engine/core/docs/drf/viewsets.py:1299 msgid "create a stock record" msgstr "Создайте запись о запасах" -#: engine/core/docs/drf/viewsets.py:1282 +#: engine/core/docs/drf/viewsets.py:1306 msgid "delete a stock record" msgstr "Удаление записи о запасах" -#: engine/core/docs/drf/viewsets.py:1289 +#: engine/core/docs/drf/viewsets.py:1313 msgid "rewrite an existing stock record saving non-editables" msgstr "" "Переписать существующую категорию с сохранением нередактируемых объектов" -#: engine/core/docs/drf/viewsets.py:1297 +#: engine/core/docs/drf/viewsets.py:1321 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "" "Переписать некоторые поля существующей категории с сохранением " "нередактируемых полей" -#: engine/core/docs/drf/viewsets.py:1308 +#: engine/core/docs/drf/viewsets.py:1332 msgid "list all product tags (simple view)" msgstr "Список всех тегов товара (простой вид)" -#: engine/core/docs/drf/viewsets.py:1318 +#: engine/core/docs/drf/viewsets.py:1342 msgid "retrieve a single product tag (detailed view)" msgstr "Получение одной метки товара (подробный просмотр)" -#: engine/core/docs/drf/viewsets.py:1325 +#: engine/core/docs/drf/viewsets.py:1349 msgid "create a product tag" msgstr "Создайте тег продукта" -#: engine/core/docs/drf/viewsets.py:1335 +#: engine/core/docs/drf/viewsets.py:1359 msgid "delete a product tag" msgstr "Удаление тега продукта" -#: engine/core/docs/drf/viewsets.py:1342 +#: engine/core/docs/drf/viewsets.py:1366 msgid "rewrite an existing product tag saving non-editables" msgstr "" "Переписать существующую категорию с сохранением нередактируемых объектов" -#: engine/core/docs/drf/viewsets.py:1350 +#: engine/core/docs/drf/viewsets.py:1374 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "" "Переписать некоторые поля существующей категории с сохранением " @@ -1022,236 +1056,234 @@ msgstr "" msgid "no search term provided." msgstr "Поисковый запрос не предоставлен." -#: engine/core/filters.py:78 engine/core/filters.py:484 -#: engine/core/filters.py:625 +#: engine/core/filters.py:79 engine/core/filters.py:485 +#: engine/core/filters.py:626 msgid "Search" msgstr "Поиск" -#: engine/core/filters.py:79 engine/core/filters.py:663 -#: engine/core/filters.py:692 +#: engine/core/filters.py:80 engine/core/filters.py:664 +#: engine/core/filters.py:693 msgid "UUID" msgstr "UUID" -#: engine/core/filters.py:80 engine/core/filters.py:487 -#: engine/core/filters.py:627 +#: engine/core/filters.py:81 engine/core/filters.py:488 +#: engine/core/filters.py:628 msgid "Name" msgstr "Имя" -#: engine/core/filters.py:82 engine/core/filters.py:630 +#: engine/core/filters.py:83 engine/core/filters.py:631 msgid "Categories" msgstr "Категории" -#: engine/core/filters.py:86 +#: engine/core/filters.py:87 msgid "Categories Slugs" msgstr "Категории Слизни" -#: engine/core/filters.py:88 engine/core/filters.py:495 +#: engine/core/filters.py:89 engine/core/filters.py:496 +#: engine/core/templates/admin_doc/index.html:37 +#: engine/core/templates/admin_doc/template_tag_index.html:12 msgid "Tags" msgstr "Теги" -#: engine/core/filters.py:90 +#: engine/core/filters.py:91 msgid "Min Price" msgstr "Мин. цена" -#: engine/core/filters.py:93 +#: engine/core/filters.py:94 msgid "Max Price" msgstr "Максимальная цена" -#: engine/core/filters.py:95 +#: engine/core/filters.py:96 msgid "Is Active" msgstr "Активен" -#: engine/core/filters.py:96 +#: engine/core/filters.py:97 msgid "Brand" msgstr "Бренд" -#: engine/core/filters.py:97 +#: engine/core/filters.py:98 msgid "Attributes" msgstr "Атрибуты" -#: engine/core/filters.py:99 +#: engine/core/filters.py:100 msgid "Quantity" msgstr "Количество" -#: engine/core/filters.py:101 engine/core/filters.py:489 -#: engine/core/filters.py:628 engine/core/models.py:316 -#: engine/core/models.py:497 engine/core/models.py:663 +#: engine/core/filters.py:102 engine/core/filters.py:490 +#: engine/core/filters.py:629 engine/core/models.py:339 +#: engine/core/models.py:546 engine/core/models.py:736 msgid "Slug" msgstr "Слаг" -#: engine/core/filters.py:102 +#: engine/core/filters.py:103 msgid "Is Digital" msgstr "Цифровой" -#: engine/core/filters.py:104 +#: engine/core/filters.py:105 msgid "Include sub-categories" msgstr "Включите подкатегории" -#: engine/core/filters.py:108 +#: engine/core/filters.py:109 msgid "Include personal ordered" msgstr "Включите продукты, заказанные лично" -#: engine/core/filters.py:110 engine/core/models.py:667 +#: engine/core/filters.py:111 engine/core/models.py:740 msgid "SKU" msgstr "Артикул" -#: engine/core/filters.py:212 +#: engine/core/filters.py:213 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" "Для использования флага include_subcategories должен быть указан " "category_uuid." -#: engine/core/filters.py:398 +#: engine/core/filters.py:399 msgid "Search (ID, product name or part number)" msgstr "Поиск (идентификатор, название продукта или номер детали)" -#: engine/core/filters.py:402 +#: engine/core/filters.py:403 msgid "Bought after (inclusive)" msgstr "Куплено после (включительно)" -#: engine/core/filters.py:405 +#: engine/core/filters.py:406 msgid "Bought before (inclusive)" msgstr "Куплено ранее (включительно)" -#: engine/core/filters.py:410 engine/core/filters.py:461 -#: engine/core/filters.py:697 +#: engine/core/filters.py:411 engine/core/filters.py:462 +#: engine/core/filters.py:698 msgid "User email" msgstr "Электронная почта пользователя" -#: engine/core/filters.py:413 engine/core/filters.py:464 -#: engine/core/filters.py:672 engine/core/filters.py:694 +#: engine/core/filters.py:414 engine/core/filters.py:465 +#: engine/core/filters.py:673 engine/core/filters.py:695 msgid "User UUID" msgstr "UUID пользователя" -#: engine/core/filters.py:415 +#: engine/core/filters.py:416 msgid "Status" msgstr "Статус" -#: engine/core/filters.py:419 +#: engine/core/filters.py:420 msgid "Human Readable ID" msgstr "Человекочитаемый идентификатор" -#: engine/core/filters.py:488 +#: engine/core/filters.py:489 msgid "Parent" msgstr "Родитель" -#: engine/core/filters.py:492 +#: engine/core/filters.py:493 msgid "Whole category(has at least 1 product or not)" msgstr "Вся категория (есть хотя бы 1 продукт или нет)" -#: engine/core/filters.py:496 +#: engine/core/filters.py:497 msgid "Level" msgstr "Уровень" -#: engine/core/filters.py:667 +#: engine/core/filters.py:668 msgid "Product UUID" msgstr "UUID продукта" -#: engine/core/graphene/mutations.py:40 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Ключ, который нужно найти в тайнике или вложить в него" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:43 msgid "data to store in cache" msgstr "Данные для хранения в кэше" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:46 msgid "timeout in seconds to set the data for into the cache" msgstr "Тайм-аут в секундах для занесения данных в кэш" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:49 msgid "cached data" msgstr "Кэшированные данные" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:64 msgid "camelized JSON data from the requested URL" msgstr "Camelized JSON-данные из запрашиваемого URL" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:248 +#: engine/core/graphene/mutations.py:69 engine/core/views.py:267 msgid "only URLs starting with http(s):// are allowed" msgstr "Допускаются только URL-адреса, начинающиеся с http(s)://" -#: engine/core/graphene/mutations.py:86 +#: engine/core/graphene/mutations.py:87 msgid "add a product to the order" msgstr "Добавить товар в заказ" -#: engine/core/graphene/mutations.py:109 engine/core/graphene/mutations.py:138 -#: engine/core/graphene/mutations.py:254 engine/core/graphene/mutations.py:306 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139 +#: engine/core/graphene/mutations.py:256 engine/core/graphene/mutations.py:308 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Заказ {order_uuid} не найден!" -#: engine/core/graphene/mutations.py:115 engine/core/graphene/mutations.py:166 +#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167 msgid "remove a product from the order" msgstr "Удалить продукт из заказа" -#: engine/core/graphene/mutations.py:144 +#: engine/core/graphene/mutations.py:145 msgid "remove all products from the order" msgstr "Удалить все товары из заказа" -#: engine/core/graphene/mutations.py:189 +#: engine/core/graphene/mutations.py:190 msgid "buy an order" msgstr "Купить заказ" -#: engine/core/graphene/mutations.py:220 engine/core/graphene/mutations.py:282 +#: engine/core/graphene/mutations.py:222 engine/core/graphene/mutations.py:284 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" "Пожалуйста, укажите либо order_uuid, либо order_hr_id - взаимоисключающие " "варианты!" -#: engine/core/graphene/mutations.py:249 engine/core/graphene/mutations.py:524 -#: engine/core/graphene/mutations.py:573 engine/core/viewsets.py:753 +#: engine/core/graphene/mutations.py:251 engine/core/graphene/mutations.py:526 +#: engine/core/graphene/mutations.py:576 engine/core/viewsets.py:783 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Неправильный тип получен из метода order.buy(): {type(instance)!s}" -#: engine/core/graphene/mutations.py:260 +#: engine/core/graphene/mutations.py:262 msgid "perform an action on a list of products in the order" msgstr "Выполните действие над списком товаров в заказе" -#: engine/core/graphene/mutations.py:265 +#: engine/core/graphene/mutations.py:267 msgid "remove/add" msgstr "Удалить/добавить" -#: engine/core/graphene/mutations.py:301 engine/core/graphene/mutations.py:342 +#: engine/core/graphene/mutations.py:303 engine/core/graphene/mutations.py:342 msgid "action must be either add or remove" msgstr "Действие должно быть либо \"добавить\", либо \"удалить\"!" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:314 msgid "perform an action on a list of products in the wishlist" msgstr "Выполните действие над списком продуктов в списке желаний" -#: engine/core/graphene/mutations.py:330 -msgid "please provide wishlist_uuid value" -msgstr "Пожалуйста, укажите значение `wishlist_uuid`." - -#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:423 -#: engine/core/graphene/mutations.py:451 engine/core/graphene/mutations.py:479 -#: engine/core/graphene/mutations.py:529 +#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:424 +#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480 +#: engine/core/graphene/mutations.py:531 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Список желаний {wishlist_uuid} не найден!" -#: engine/core/graphene/mutations.py:401 +#: engine/core/graphene/mutations.py:402 msgid "add a product to the wishlist" msgstr "Добавить товар в заказ" -#: engine/core/graphene/mutations.py:429 +#: engine/core/graphene/mutations.py:430 msgid "remove a product from the wishlist" msgstr "Удалить продукт из заказа" -#: engine/core/graphene/mutations.py:457 +#: engine/core/graphene/mutations.py:458 msgid "remove all products from the wishlist" msgstr "Удалить продукт из заказа" -#: engine/core/graphene/mutations.py:485 +#: engine/core/graphene/mutations.py:486 msgid "buy all products from the wishlist" msgstr "Удалить продукт из заказа" -#: engine/core/graphene/mutations.py:535 +#: engine/core/graphene/mutations.py:537 msgid "buy a product" msgstr "Купить заказ" -#: engine/core/graphene/mutations.py:542 +#: engine/core/graphene/mutations.py:544 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" @@ -1259,141 +1291,145 @@ msgstr "" "Пожалуйста, отправьте атрибуты в виде строки, отформатированной как " "attr1=value1,attr2=value2" -#: engine/core/graphene/mutations.py:580 +#: engine/core/graphene/mutations.py:583 msgid "add or delete a feedback for orderproduct" msgstr "Добавить или удалить отзыв для продукта заказа" -#: engine/core/graphene/mutations.py:606 +#: engine/core/graphene/mutations.py:610 msgid "action must be either `add` or `remove`" msgstr "Действие должно быть либо `add`, либо `remove`!" -#: engine/core/graphene/mutations.py:609 +#: engine/core/graphene/mutations.py:613 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Заказ товара {order_product_uuid} не найден!" -#: engine/core/graphene/mutations.py:616 +#: engine/core/graphene/mutations.py:620 msgid "original address string provided by the user" msgstr "Оригинальная строка адреса, предоставленная пользователем" -#: engine/core/graphene/mutations.py:653 engine/core/models.py:986 -#: engine/core/models.py:999 engine/core/models.py:1443 -#: engine/core/models.py:1474 engine/core/models.py:1505 -#: engine/core/viewsets.py:760 +#: engine/core/graphene/mutations.py:662 engine/core/models.py:1079 +#: engine/core/models.py:1092 engine/core/models.py:1544 +#: engine/core/models.py:1575 engine/core/models.py:1606 +#: engine/core/viewsets.py:790 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} не существует: {uuid}!" -#: engine/core/graphene/mutations.py:667 +#: engine/core/graphene/mutations.py:676 msgid "limit must be between 1 and 10" msgstr "Предел должен быть от 1 до 10" -#: engine/core/graphene/mutations.py:716 +#: engine/core/graphene/mutations.py:726 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - работает как шарм" -#: engine/core/graphene/object_types.py:84 -#: engine/core/graphene/object_types.py:420 -#: engine/core/graphene/object_types.py:471 engine/core/models.py:803 -#: engine/core/models.py:1297 engine/core/models.py:2033 +#: engine/core/graphene/object_types.py:88 +#: engine/core/graphene/object_types.py:425 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:889 +#: engine/core/models.py:1394 engine/core/models.py:2139 msgid "attributes" msgstr "Атрибуты" -#: engine/core/graphene/object_types.py:97 +#: engine/core/graphene/object_types.py:101 msgid "grouped attributes" msgstr "Сгруппированные атрибуты" -#: engine/core/graphene/object_types.py:104 +#: engine/core/graphene/object_types.py:108 msgid "groups of attributes" msgstr "Группы атрибутов" -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:217 -#: engine/core/graphene/object_types.py:255 engine/core/models.py:440 +#: engine/core/graphene/object_types.py:122 +#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:264 engine/core/models.py:489 msgid "categories" msgstr "Категории" -#: engine/core/graphene/object_types.py:134 engine/core/models.py:511 +#: engine/core/graphene/object_types.py:138 engine/core/models.py:564 msgid "brands" msgstr "Бренды" -#: engine/core/graphene/object_types.py:219 +#: engine/core/graphene/object_types.py:226 msgid "category image url" msgstr "Категории" -#: engine/core/graphene/object_types.py:220 -#: engine/core/graphene/object_types.py:365 engine/core/models.py:278 +#: engine/core/graphene/object_types.py:227 +#: engine/core/graphene/object_types.py:369 engine/core/models.py:301 msgid "markup percentage" msgstr "Процент наценки" -#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:231 msgid "which attributes and values can be used for filtering this category." msgstr "" "Какие атрибуты и значения можно использовать для фильтрации этой категории." -#: engine/core/graphene/object_types.py:230 +#: engine/core/graphene/object_types.py:237 msgid "" "minimum and maximum prices for products in this category, if available." msgstr "" "Минимальные и максимальные цены на товары в этой категории, если они " "доступны." -#: engine/core/graphene/object_types.py:234 +#: engine/core/graphene/object_types.py:240 +msgid "brands in this category" +msgstr "Бренды в этой категории" + +#: engine/core/graphene/object_types.py:242 msgid "tags for this category" msgstr "Теги для этой категории" -#: engine/core/graphene/object_types.py:237 +#: engine/core/graphene/object_types.py:245 msgid "products in this category" msgstr "Продукты в этой категории" -#: engine/core/graphene/object_types.py:372 engine/core/models.py:183 +#: engine/core/graphene/object_types.py:376 engine/core/models.py:202 msgid "vendors" msgstr "Поставщики" -#: engine/core/graphene/object_types.py:376 +#: engine/core/graphene/object_types.py:380 msgid "Latitude (Y coordinate)" msgstr "Широта (координата Y)" -#: engine/core/graphene/object_types.py:377 +#: engine/core/graphene/object_types.py:381 msgid "Longitude (X coordinate)" msgstr "Долгота (координата X)" -#: engine/core/graphene/object_types.py:406 +#: engine/core/graphene/object_types.py:411 msgid "comment" msgstr "Как" -#: engine/core/graphene/object_types.py:408 -#: engine/core/graphene/object_types.py:542 +#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:548 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "" "Значение рейтинга от 1 до 10, включительно, или 0, если он не установлен." -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:421 msgid "represents feedback from a user." msgstr "Представляет собой отзыв пользователя." -#: engine/core/graphene/object_types.py:421 -#: engine/core/graphene/object_types.py:472 engine/core/models.py:1291 +#: engine/core/graphene/object_types.py:426 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:1388 msgid "notifications" msgstr "Уведомления" -#: engine/core/graphene/object_types.py:423 +#: engine/core/graphene/object_types.py:428 msgid "download url for this order product if applicable" msgstr "Если применимо, загрузите url для этого продукта заказа" -#: engine/core/graphene/object_types.py:425 engine/core/models.py:1856 +#: engine/core/graphene/object_types.py:430 engine/core/models.py:1959 msgid "feedback" msgstr "Обратная связь" -#: engine/core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:464 msgid "a list of order products in this order" msgstr "Список товаров, заказанных в этом заказе" -#: engine/core/graphene/object_types.py:461 engine/core/models.py:1261 +#: engine/core/graphene/object_types.py:466 engine/core/models.py:1358 msgid "billing address" msgstr "Адрес для выставления счетов" -#: engine/core/graphene/object_types.py:465 +#: engine/core/graphene/object_types.py:470 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1401,53 +1437,57 @@ msgstr "" "Адрес доставки для данного заказа, оставьте пустым, если он совпадает с " "адресом выставления счета или не применяется" -#: engine/core/graphene/object_types.py:468 +#: engine/core/graphene/object_types.py:473 msgid "total price of this order" msgstr "Общая стоимость этого заказа" -#: engine/core/graphene/object_types.py:469 +#: engine/core/graphene/object_types.py:474 msgid "total quantity of products in order" msgstr "Общее количество продуктов в заказе" -#: engine/core/graphene/object_types.py:470 +#: engine/core/graphene/object_types.py:475 msgid "are all products in the order digital" msgstr "Все ли товары в заказе представлены в цифровом виде" -#: engine/core/graphene/object_types.py:474 +#: engine/core/graphene/object_types.py:479 msgid "transactions for this order" msgstr "Операции для этого заказа" -#: engine/core/graphene/object_types.py:494 engine/core/models.py:1325 +#: engine/core/graphene/object_types.py:499 engine/core/models.py:1422 msgid "orders" msgstr "Заказы" -#: engine/core/graphene/object_types.py:515 +#: engine/core/graphene/object_types.py:520 msgid "image url" msgstr "URL-адрес изображения" -#: engine/core/graphene/object_types.py:522 +#: engine/core/graphene/object_types.py:527 msgid "product's images" msgstr "Изображения товара" -#: engine/core/graphene/object_types.py:529 engine/core/models.py:439 -#: engine/core/models.py:596 +#: engine/core/graphene/object_types.py:534 engine/core/models.py:488 +#: engine/core/models.py:661 msgid "category" msgstr "Категория" -#: engine/core/graphene/object_types.py:531 engine/core/models.py:1857 +#: engine/core/graphene/object_types.py:536 engine/core/models.py:1960 msgid "feedbacks" msgstr "Отзывы" -#: engine/core/graphene/object_types.py:532 engine/core/models.py:510 -#: engine/core/models.py:605 +#: engine/core/graphene/object_types.py:537 engine/core/models.py:563 +#: engine/core/models.py:670 msgid "brand" msgstr "Бренд" -#: engine/core/graphene/object_types.py:534 engine/core/models.py:103 +#: engine/core/graphene/object_types.py:538 +msgid "video url" +msgstr "URL видео" + +#: engine/core/graphene/object_types.py:540 engine/core/models.py:122 msgid "attribute groups" msgstr "Группы атрибутов" -#: engine/core/graphene/object_types.py:536 +#: engine/core/graphene/object_types.py:542 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1455,7 +1495,7 @@ msgstr "Группы атрибутов" msgid "price" msgstr "Цена" -#: engine/core/graphene/object_types.py:537 +#: engine/core/graphene/object_types.py:543 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1463,39 +1503,39 @@ msgstr "Цена" msgid "quantity" msgstr "Количество" -#: engine/core/graphene/object_types.py:538 +#: engine/core/graphene/object_types.py:544 msgid "number of feedbacks" msgstr "Количество отзывов" -#: engine/core/graphene/object_types.py:539 +#: engine/core/graphene/object_types.py:545 msgid "only available for personal orders" msgstr "Продукты доступны только для личных заказов" -#: engine/core/graphene/object_types.py:544 +#: engine/core/graphene/object_types.py:550 msgid "discount price" msgstr "Цена со скидкой" -#: engine/core/graphene/object_types.py:568 engine/core/models.py:682 +#: engine/core/graphene/object_types.py:575 engine/core/models.py:755 msgid "products" msgstr "Товары" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:691 msgid "promocodes" msgstr "Промокоды" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:706 msgid "products on sale" msgstr "Продукты в продаже" -#: engine/core/graphene/object_types.py:701 engine/core/models.py:935 +#: engine/core/graphene/object_types.py:720 engine/core/models.py:1028 msgid "promotions" msgstr "Промоакции" -#: engine/core/graphene/object_types.py:705 engine/core/models.py:182 +#: engine/core/graphene/object_types.py:727 engine/core/models.py:201 msgid "vendor" msgstr "Поставщик" -#: engine/core/graphene/object_types.py:706 engine/core/models.py:681 +#: engine/core/graphene/object_types.py:728 engine/core/models.py:754 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1503,104 +1543,104 @@ msgstr "Поставщик" msgid "product" msgstr "Товар" -#: engine/core/graphene/object_types.py:718 engine/core/models.py:958 +#: engine/core/graphene/object_types.py:740 engine/core/models.py:1051 msgid "wishlisted products" msgstr "Продукты из списка желаний" -#: engine/core/graphene/object_types.py:725 engine/core/models.py:975 +#: engine/core/graphene/object_types.py:747 engine/core/models.py:1068 msgid "wishlists" msgstr "Списки желаний" -#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:752 msgid "tagged products" msgstr "Tagged products" -#: engine/core/graphene/object_types.py:738 engine/core/models.py:219 -#: engine/core/models.py:611 +#: engine/core/graphene/object_types.py:760 engine/core/models.py:238 +#: engine/core/models.py:676 msgid "product tags" msgstr "Теги товара" -#: engine/core/graphene/object_types.py:743 +#: engine/core/graphene/object_types.py:765 msgid "tagged categories" msgstr "Категории с метками" -#: engine/core/graphene/object_types.py:751 +#: engine/core/graphene/object_types.py:773 msgid "categories tags" msgstr "Теги категорий" -#: engine/core/graphene/object_types.py:755 +#: engine/core/graphene/object_types.py:777 msgid "project name" msgstr "Название проекта" -#: engine/core/graphene/object_types.py:756 +#: engine/core/graphene/object_types.py:778 msgid "company name" msgstr "Название компании" -#: engine/core/graphene/object_types.py:757 +#: engine/core/graphene/object_types.py:779 msgid "company address" msgstr "Адрес компании" -#: engine/core/graphene/object_types.py:758 +#: engine/core/graphene/object_types.py:780 msgid "company phone number" msgstr "Номер телефона компании" -#: engine/core/graphene/object_types.py:761 +#: engine/core/graphene/object_types.py:783 msgid "email from, sometimes it must be used instead of host user value" msgstr "" "'email from', иногда его нужно использовать вместо значения пользователя " "хоста." -#: engine/core/graphene/object_types.py:764 +#: engine/core/graphene/object_types.py:786 msgid "email host user" msgstr "Пользователь узла электронной почты" -#: engine/core/graphene/object_types.py:765 +#: engine/core/graphene/object_types.py:787 msgid "maximum amount for payment" msgstr "Максимальная сумма для оплаты" -#: engine/core/graphene/object_types.py:766 +#: engine/core/graphene/object_types.py:788 msgid "minimum amount for payment" msgstr "Минимальная сумма для оплаты" -#: engine/core/graphene/object_types.py:767 +#: engine/core/graphene/object_types.py:789 msgid "analytics data" msgstr "Аналитические данные" -#: engine/core/graphene/object_types.py:768 +#: engine/core/graphene/object_types.py:790 msgid "advertisement data" msgstr "Рекламные данные" -#: engine/core/graphene/object_types.py:771 +#: engine/core/graphene/object_types.py:793 msgid "company configuration" msgstr "Конфигурация" -#: engine/core/graphene/object_types.py:775 +#: engine/core/graphene/object_types.py:797 msgid "language code" msgstr "Код языка" -#: engine/core/graphene/object_types.py:776 +#: engine/core/graphene/object_types.py:798 msgid "language name" msgstr "Название языка" -#: engine/core/graphene/object_types.py:777 +#: engine/core/graphene/object_types.py:799 msgid "language flag, if exists :)" msgstr "Языковой флаг, если он существует :)" -#: engine/core/graphene/object_types.py:780 +#: engine/core/graphene/object_types.py:802 msgid "supported languages" msgstr "Получите список поддерживаемых языков" -#: engine/core/graphene/object_types.py:812 -#: engine/core/graphene/object_types.py:815 -#: engine/core/graphene/object_types.py:818 +#: engine/core/graphene/object_types.py:834 +#: engine/core/graphene/object_types.py:837 +#: engine/core/graphene/object_types.py:840 msgid "products search results" msgstr "Результаты поиска товаров" -#: engine/core/graphene/object_types.py:820 +#: engine/core/graphene/object_types.py:842 msgid "posts search results" msgstr "Результаты поиска товаров" -#: engine/core/models.py:75 +#: engine/core/models.py:91 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 " @@ -1613,23 +1653,23 @@ msgstr "" "быть полезно для категоризации и более эффективного управления атрибутами в " "сложной системе." -#: engine/core/models.py:88 +#: engine/core/models.py:107 msgid "parent of this group" msgstr "Родитель этой группы" -#: engine/core/models.py:89 +#: engine/core/models.py:108 msgid "parent attribute group" msgstr "Родительская группа атрибутов" -#: engine/core/models.py:93 engine/core/models.py:94 +#: engine/core/models.py:112 engine/core/models.py:113 msgid "attribute group's name" msgstr "Имя группы атрибутов" -#: engine/core/models.py:102 engine/core/models.py:763 +#: engine/core/models.py:121 engine/core/models.py:849 msgid "attribute group" msgstr "Группа атрибутов" -#: engine/core/models.py:108 +#: engine/core/models.py:127 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1648,49 +1688,49 @@ msgstr "" "метаданные и ограничения, что делает ее пригодной для использования в " "системах, взаимодействующих со сторонними поставщиками." -#: engine/core/models.py:122 +#: engine/core/models.py:141 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Хранит учетные данные и конечные точки, необходимые для взаимодействия с API" " поставщика." -#: engine/core/models.py:124 +#: engine/core/models.py:143 msgid "authentication info" msgstr "Информация об аутентификации" -#: engine/core/models.py:129 +#: engine/core/models.py:148 msgid "define the markup for products retrieved from this vendor" msgstr "Определите наценку для товаров, полученных от этого продавца" -#: engine/core/models.py:130 +#: engine/core/models.py:149 msgid "vendor markup percentage" msgstr "Процент наценки поставщика" -#: engine/core/models.py:134 +#: engine/core/models.py:153 msgid "name of this vendor" msgstr "Имя этого продавца" -#: engine/core/models.py:135 +#: engine/core/models.py:154 msgid "vendor name" msgstr "Название поставщика" -#: engine/core/models.py:150 +#: engine/core/models.py:169 msgid "response file" msgstr "файл ответа" -#: engine/core/models.py:151 +#: engine/core/models.py:170 msgid "vendor's last processing response" msgstr "последний ответ поставщика на обработку" -#: engine/core/models.py:157 +#: engine/core/models.py:176 msgid "vendor's integration file path" msgstr "Путь к файлу интеграции поставщика" -#: engine/core/models.py:158 +#: engine/core/models.py:177 msgid "integration path" msgstr "Путь интеграции" -#: engine/core/models.py:192 +#: engine/core/models.py:211 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1705,27 +1745,27 @@ msgstr "" "экспортируемые через миксины, и обеспечивает настройку метаданных для " "административных целей." -#: engine/core/models.py:204 engine/core/models.py:235 +#: engine/core/models.py:223 engine/core/models.py:254 msgid "internal tag identifier for the product tag" msgstr "Внутренний идентификатор тега для тега продукта" -#: engine/core/models.py:205 engine/core/models.py:236 +#: engine/core/models.py:224 engine/core/models.py:255 msgid "tag name" msgstr "Название тега" -#: engine/core/models.py:209 engine/core/models.py:240 +#: engine/core/models.py:228 engine/core/models.py:259 msgid "user-friendly name for the product tag" msgstr "Удобное название для метки продукта" -#: engine/core/models.py:210 engine/core/models.py:241 +#: engine/core/models.py:229 engine/core/models.py:260 msgid "tag display name" msgstr "Отображаемое имя тега" -#: engine/core/models.py:218 +#: engine/core/models.py:237 msgid "product tag" msgstr "Метка продукта" -#: engine/core/models.py:224 +#: engine/core/models.py:243 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 " @@ -1736,15 +1776,15 @@ msgstr "" "классификации продуктов. Он включает атрибуты для внутреннего идентификатора" " тега и удобного для пользователя отображаемого имени." -#: engine/core/models.py:249 +#: engine/core/models.py:268 msgid "category tag" msgstr "тег категории" -#: engine/core/models.py:250 engine/core/models.py:322 +#: engine/core/models.py:269 engine/core/models.py:345 msgid "category tags" msgstr "теги категорий" -#: engine/core/models.py:255 +#: engine/core/models.py:274 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1766,51 +1806,51 @@ msgstr "" "администраторам указывать название, описание и иерархию категорий, а также " "назначать атрибуты, такие как изображения, теги или приоритет." -#: engine/core/models.py:269 +#: engine/core/models.py:292 msgid "upload an image representing this category" msgstr "Загрузите изображение, представляющее эту категорию" -#: engine/core/models.py:272 +#: engine/core/models.py:295 msgid "category image" msgstr "Изображение категории" -#: engine/core/models.py:277 +#: engine/core/models.py:300 msgid "define a markup percentage for products in this category" msgstr "Определите процент наценки для товаров в этой категории" -#: engine/core/models.py:286 +#: engine/core/models.py:309 msgid "parent of this category to form a hierarchical structure" msgstr "Родитель данной категории для формирования иерархической структуры" -#: engine/core/models.py:287 +#: engine/core/models.py:310 msgid "parent category" msgstr "Родительская категория" -#: engine/core/models.py:292 +#: engine/core/models.py:315 msgid "category name" msgstr "Название категории" -#: engine/core/models.py:293 +#: engine/core/models.py:316 msgid "provide a name for this category" msgstr "Укажите название этой категории" -#: engine/core/models.py:300 +#: engine/core/models.py:323 msgid "add a detailed description for this category" msgstr "Добавьте подробное описание для этой категории" -#: engine/core/models.py:301 +#: engine/core/models.py:324 msgid "category description" msgstr "Описание категории" -#: engine/core/models.py:321 +#: engine/core/models.py:344 msgid "tags that help describe or group this category" msgstr "теги, которые помогают описать или сгруппировать эту категорию" -#: engine/core/models.py:328 engine/core/models.py:503 +#: engine/core/models.py:351 engine/core/models.py:552 msgid "priority" msgstr "Приоритет" -#: engine/core/models.py:446 +#: engine/core/models.py:495 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1823,47 +1863,43 @@ msgstr "" "связанные категории, уникальную метку и порядок приоритетов. Он позволяет " "организовать и представить данные, связанные с брендом, в приложении." -#: engine/core/models.py:456 +#: engine/core/models.py:505 msgid "name of this brand" msgstr "Название этой марки" -#: engine/core/models.py:457 +#: engine/core/models.py:506 msgid "brand name" msgstr "Название бренда" -#: engine/core/models.py:464 +#: engine/core/models.py:513 msgid "upload a logo representing this brand" msgstr "Загрузите логотип, представляющий этот бренд" -#: engine/core/models.py:466 +#: engine/core/models.py:515 msgid "brand small image" msgstr "Маленький образ бренда" -#: engine/core/models.py:472 +#: engine/core/models.py:521 msgid "upload a big logo representing this brand" msgstr "Загрузите большой логотип, представляющий этот бренд" -#: engine/core/models.py:474 +#: engine/core/models.py:523 msgid "brand big image" msgstr "Большой имидж бренда" -#: engine/core/models.py:479 +#: engine/core/models.py:528 msgid "add a detailed description of the brand" msgstr "Добавьте подробное описание бренда" -#: engine/core/models.py:480 +#: engine/core/models.py:529 msgid "brand description" msgstr "Описание бренда" -#: engine/core/models.py:485 -msgid "optional categories that this brand is associated with" -msgstr "Дополнительные категории, с которыми ассоциируется этот бренд" +#: engine/core/models.py:534 engine/core/models.py:535 +msgid "DEPRECATED" +msgstr "УСТАРЕВШИЙ" -#: engine/core/models.py:486 -msgid "associated categories" -msgstr "Категории" - -#: engine/core/models.py:516 +#: engine/core/models.py:569 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1879,72 +1915,72 @@ msgstr "" "активы. Он является частью системы управления запасами, позволяющей " "отслеживать и оценивать продукты, доступные у различных поставщиков." -#: engine/core/models.py:528 +#: engine/core/models.py:581 msgid "the vendor supplying this product stock" msgstr "Поставщик, поставляющий данный товар на склад" -#: engine/core/models.py:529 +#: engine/core/models.py:582 msgid "associated vendor" msgstr "Ассоциированный поставщик" -#: engine/core/models.py:533 +#: engine/core/models.py:588 msgid "final price to the customer after markups" msgstr "Окончательная цена для покупателя после наценок" -#: engine/core/models.py:534 +#: engine/core/models.py:589 msgid "selling price" msgstr "Цена продажи" -#: engine/core/models.py:539 +#: engine/core/models.py:594 msgid "the product associated with this stock entry" msgstr "Продукт, связанный с этой складской записью" -#: engine/core/models.py:540 engine/core/models.py:828 -#: engine/core/models.py:874 engine/core/models.py:1912 +#: engine/core/models.py:595 engine/core/models.py:914 +#: engine/core/models.py:962 engine/core/models.py:2020 msgid "associated product" msgstr "Сопутствующий товар" -#: engine/core/models.py:547 +#: engine/core/models.py:604 msgid "the price paid to the vendor for this product" msgstr "Цена, уплаченная продавцу за этот продукт" -#: engine/core/models.py:548 +#: engine/core/models.py:605 msgid "vendor purchase price" msgstr "Цена покупки у поставщика" -#: engine/core/models.py:552 +#: engine/core/models.py:609 msgid "available quantity of the product in stock" msgstr "Доступное количество продукта на складе" -#: engine/core/models.py:553 +#: engine/core/models.py:610 msgid "quantity in stock" msgstr "Количество на складе" -#: engine/core/models.py:557 +#: engine/core/models.py:614 msgid "vendor-assigned SKU for identifying the product" msgstr "Присвоенный поставщиком SKU для идентификации продукта" -#: engine/core/models.py:558 +#: engine/core/models.py:615 msgid "vendor sku" msgstr "Артикул поставщика" -#: engine/core/models.py:564 +#: engine/core/models.py:621 msgid "digital file associated with this stock if applicable" msgstr "Цифровой файл, связанный с этой акцией, если применимо" -#: engine/core/models.py:565 +#: engine/core/models.py:622 msgid "digital file" msgstr "Цифровой файл" -#: engine/core/models.py:569 +#: engine/core/models.py:626 msgid "system attributes" msgstr "Атрибуты системы" -#: engine/core/models.py:577 +#: engine/core/models.py:636 msgid "stock entries" msgstr "Наличия" -#: engine/core/models.py:582 +#: engine/core/models.py:641 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1965,72 +2001,80 @@ msgstr "" "повышения производительности. Он используется для определения и " "манипулирования данными о товаре и связанной с ним информацией в приложении." -#: engine/core/models.py:595 +#: engine/core/models.py:660 msgid "category this product belongs to" msgstr "Категория, к которой относится этот продукт" -#: engine/core/models.py:604 +#: engine/core/models.py:669 msgid "optionally associate this product with a brand" msgstr "По желанию ассоциируйте этот продукт с брендом" -#: engine/core/models.py:610 +#: engine/core/models.py:675 msgid "tags that help describe or group this product" msgstr "Теги, которые помогают описать или сгруппировать этот продукт" -#: engine/core/models.py:615 +#: engine/core/models.py:680 msgid "indicates whether this product is digitally delivered" msgstr "Указывает, поставляется ли этот продукт в цифровом виде" -#: engine/core/models.py:616 +#: engine/core/models.py:681 msgid "is product digital" msgstr "Является ли продукт цифровым" -#: engine/core/models.py:623 +#: engine/core/models.py:688 msgid "indicates whether this product should be updated from periodic task" msgstr "" "указывает, следует ли обновлять этот продукт из периодического задания" -#: engine/core/models.py:625 +#: engine/core/models.py:690 msgid "is product updatable" msgstr "обновляется ли продукт" -#: engine/core/models.py:631 +#: engine/core/models.py:696 msgid "provide a clear identifying name for the product" msgstr "Обеспечьте четкое идентификационное название продукта" -#: engine/core/models.py:632 +#: engine/core/models.py:697 msgid "product name" msgstr "Название продукта" -#: engine/core/models.py:638 engine/core/models.py:923 +#: engine/core/models.py:703 engine/core/models.py:1012 msgid "add a detailed description of the product" msgstr "Добавьте подробное описание продукта" -#: engine/core/models.py:639 +#: engine/core/models.py:704 msgid "product description" msgstr "Описание товара" -#: engine/core/models.py:646 +#: engine/core/models.py:710 +msgid "optional video file for this product" +msgstr "Дополнительный видеофайл для этого продукта" + +#: engine/core/models.py:711 +msgid "product video" +msgstr "Видео о продукте" + +#: engine/core/models.py:719 msgid "part number for this product" msgstr "Парт. номер для данного товара" -#: engine/core/models.py:647 +#: engine/core/models.py:720 msgid "part number" msgstr "Парт. номер" -#: engine/core/models.py:666 +#: engine/core/models.py:739 msgid "stock keeping unit for this product" msgstr "Единица складского учета для данного продукта" -#: engine/core/models.py:673 +#: engine/core/models.py:746 msgid "whether to export this product to marketplaces" msgstr "Экспортировать ли этот продукт на торговые площадки" -#: engine/core/models.py:674 +#: engine/core/models.py:747 msgid "Export to Marketplaces" msgstr "Экспорт на торговые площадки" -#: engine/core/models.py:749 +#: engine/core/models.py:835 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 " @@ -2047,65 +2091,65 @@ msgstr "" "плавающую форму, булевую форму, массив и объект. Это позволяет динамично и " "гибко структурировать данные." -#: engine/core/models.py:762 +#: engine/core/models.py:848 msgid "group of this attribute" msgstr "Группа этого атрибута" -#: engine/core/models.py:768 +#: engine/core/models.py:854 msgid "string" msgstr "Строка" -#: engine/core/models.py:769 +#: engine/core/models.py:855 msgid "integer" msgstr "Целое число" -#: engine/core/models.py:770 +#: engine/core/models.py:856 msgid "float" msgstr "Поплавок" -#: engine/core/models.py:771 +#: engine/core/models.py:857 msgid "boolean" msgstr "Булево" -#: engine/core/models.py:772 +#: engine/core/models.py:858 msgid "array" msgstr "Массив" -#: engine/core/models.py:773 +#: engine/core/models.py:859 msgid "object" msgstr "Объект" -#: engine/core/models.py:775 +#: engine/core/models.py:861 msgid "type of the attribute's value" msgstr "Тип значения атрибута" -#: engine/core/models.py:776 +#: engine/core/models.py:862 msgid "value type" msgstr "Тип значения" -#: engine/core/models.py:781 +#: engine/core/models.py:867 msgid "name of this attribute" msgstr "Имя этого атрибута" -#: engine/core/models.py:782 +#: engine/core/models.py:868 msgid "attribute's name" msgstr "Имя атрибута" -#: engine/core/models.py:787 +#: engine/core/models.py:873 msgid "is filterable" msgstr "поддается фильтрации" -#: engine/core/models.py:789 +#: engine/core/models.py:875 msgid "designates whether this attribute can be used for filtering or not" msgstr "" "Какие атрибуты и значения можно использовать для фильтрации этой категории." -#: engine/core/models.py:802 engine/core/models.py:820 +#: engine/core/models.py:888 engine/core/models.py:906 #: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Атрибут" -#: engine/core/models.py:808 +#: engine/core/models.py:894 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" @@ -2115,19 +2159,19 @@ msgstr "" " Он связывает \"атрибут\" с уникальным \"значением\", позволяя лучше " "организовать и динамически представить характеристики продукта." -#: engine/core/models.py:819 +#: engine/core/models.py:905 msgid "attribute of this value" msgstr "Атрибут этого значения" -#: engine/core/models.py:827 +#: engine/core/models.py:913 msgid "the specific product associated with this attribute's value" msgstr "Конкретный продукт, связанный со значением этого атрибута" -#: engine/core/models.py:833 +#: engine/core/models.py:919 msgid "the specific value for this attribute" msgstr "Конкретное значение для этого атрибута" -#: engine/core/models.py:846 +#: engine/core/models.py:934 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -2141,41 +2185,41 @@ msgstr "" "товарам и определения порядка их отображения. Он также включает функцию " "доступности с альтернативным текстом для изображений." -#: engine/core/models.py:857 +#: engine/core/models.py:945 msgid "provide alternative text for the image for accessibility" msgstr "" "Предоставьте альтернативный текст для изображения, чтобы обеспечить " "доступность" -#: engine/core/models.py:858 +#: engine/core/models.py:946 msgid "image alt text" msgstr "Альтовый текст изображения" -#: engine/core/models.py:861 +#: engine/core/models.py:949 msgid "upload the image file for this product" msgstr "Загрузите файл изображения для этого продукта" -#: engine/core/models.py:862 engine/core/models.py:893 +#: engine/core/models.py:950 engine/core/models.py:982 msgid "product image" msgstr "Изображение продукта" -#: engine/core/models.py:867 +#: engine/core/models.py:955 msgid "determines the order in which images are displayed" msgstr "Определяет порядок отображения изображений" -#: engine/core/models.py:868 +#: engine/core/models.py:956 msgid "display priority" msgstr "Приоритет отображения" -#: engine/core/models.py:873 +#: engine/core/models.py:961 msgid "the product that this image represents" msgstr "Продукт, который представлен на этом изображении" -#: engine/core/models.py:894 +#: engine/core/models.py:983 msgid "product images" msgstr "Изображения товаров" -#: engine/core/models.py:899 +#: engine/core/models.py:988 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -2191,39 +2235,39 @@ msgstr "" "акции и привязки ее к соответствующим товарам. Он интегрируется с каталогом " "товаров для определения товаров, на которые распространяется акция." -#: engine/core/models.py:911 +#: engine/core/models.py:1000 msgid "percentage discount for the selected products" msgstr "Процентная скидка на выбранные продукты" -#: engine/core/models.py:912 +#: engine/core/models.py:1001 msgid "discount percentage" msgstr "Процент скидки" -#: engine/core/models.py:917 +#: engine/core/models.py:1006 msgid "provide a unique name for this promotion" msgstr "Укажите уникальное имя для этой акции" -#: engine/core/models.py:918 +#: engine/core/models.py:1007 msgid "promotion name" msgstr "Название акции" -#: engine/core/models.py:924 +#: engine/core/models.py:1013 msgid "promotion description" msgstr "Описание акции" -#: engine/core/models.py:929 +#: engine/core/models.py:1018 msgid "select which products are included in this promotion" msgstr "Выберите, какие продукты участвуют в этой акции" -#: engine/core/models.py:930 +#: engine/core/models.py:1019 msgid "included products" msgstr "Включенные продукты" -#: engine/core/models.py:934 +#: engine/core/models.py:1027 msgid "promotion" msgstr "Продвижение" -#: engine/core/models.py:945 +#: engine/core/models.py:1038 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2236,23 +2280,23 @@ msgstr "" "товаров, а также поддерживая операции добавления и удаления нескольких " "товаров одновременно." -#: engine/core/models.py:957 +#: engine/core/models.py:1050 msgid "products that the user has marked as wanted" msgstr "Продукты, которые пользователь отметил как желаемые" -#: engine/core/models.py:965 +#: engine/core/models.py:1058 msgid "user who owns this wishlist" msgstr "Пользователь, владеющий этим списком желаний" -#: engine/core/models.py:966 +#: engine/core/models.py:1059 msgid "wishlist owner" msgstr "Владелец вишлиста" -#: engine/core/models.py:974 +#: engine/core/models.py:1067 msgid "wishlist" msgstr "Список желаний" -#: engine/core/models.py:1016 +#: engine/core/models.py:1109 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2268,19 +2312,19 @@ msgstr "" "документальных файлов. Он расширяет функциональность определенных миксинов и" " предоставляет дополнительные пользовательские возможности." -#: engine/core/models.py:1031 +#: engine/core/models.py:1124 msgid "documentary" msgstr "Документальный фильм" -#: engine/core/models.py:1032 +#: engine/core/models.py:1125 msgid "documentaries" msgstr "Документальные фильмы" -#: engine/core/models.py:1042 +#: engine/core/models.py:1135 msgid "unresolved" msgstr "Неразрешенные" -#: engine/core/models.py:1047 +#: engine/core/models.py:1140 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2301,59 +2345,59 @@ msgstr "" "обработки или проверки. Класс также позволяет ассоциировать адрес с " "пользователем, что облегчает работу с персонализированными данными." -#: engine/core/models.py:1062 +#: engine/core/models.py:1155 msgid "address line for the customer" msgstr "Адресная строка для клиента" -#: engine/core/models.py:1063 +#: engine/core/models.py:1156 msgid "address line" msgstr "Адресная строка" -#: engine/core/models.py:1065 +#: engine/core/models.py:1158 msgid "street" msgstr "Улица" -#: engine/core/models.py:1066 +#: engine/core/models.py:1159 msgid "district" msgstr "Округ" -#: engine/core/models.py:1067 +#: engine/core/models.py:1160 msgid "city" msgstr "Город" -#: engine/core/models.py:1068 +#: engine/core/models.py:1161 msgid "region" msgstr "Регион" -#: engine/core/models.py:1069 +#: engine/core/models.py:1162 msgid "postal code" msgstr "Почтовый индекс" -#: engine/core/models.py:1070 +#: engine/core/models.py:1163 msgid "country" msgstr "Страна" -#: engine/core/models.py:1077 +#: engine/core/models.py:1170 msgid "geolocation point: (longitude, latitude)" msgstr "Геолокационная точка(долгота, широта)" -#: engine/core/models.py:1083 +#: engine/core/models.py:1176 msgid "full JSON response from geocoder for this address" msgstr "Полный JSON-ответ от геокодера для этого адреса" -#: engine/core/models.py:1089 +#: engine/core/models.py:1182 msgid "stored JSON response from the geocoding service" msgstr "Сохраненный JSON-ответ от сервиса геокодирования" -#: engine/core/models.py:1099 +#: engine/core/models.py:1192 msgid "address" msgstr "Адрес" -#: engine/core/models.py:1100 +#: engine/core/models.py:1193 msgid "addresses" msgstr "Адреса" -#: engine/core/models.py:1112 +#: engine/core/models.py:1205 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2370,74 +2414,74 @@ msgstr "" "функциональность для проверки и применения промокода к заказу, обеспечивая " "при этом соблюдение ограничений." -#: engine/core/models.py:1126 +#: engine/core/models.py:1219 msgid "unique code used by a user to redeem a discount" msgstr "Уникальный код, используемый пользователем для получения скидки" -#: engine/core/models.py:1127 +#: engine/core/models.py:1220 msgid "promo code identifier" msgstr "Идентификатор промо-кода" -#: engine/core/models.py:1134 +#: engine/core/models.py:1227 msgid "fixed discount amount applied if percent is not used" msgstr "Фиксированная сумма скидки, применяемая, если процент не используется" -#: engine/core/models.py:1135 +#: engine/core/models.py:1228 msgid "fixed discount amount" msgstr "Фиксированная сумма скидки" -#: engine/core/models.py:1141 +#: engine/core/models.py:1234 msgid "percentage discount applied if fixed amount is not used" msgstr "" "Процентная скидка, применяемая, если фиксированная сумма не используется" -#: engine/core/models.py:1142 +#: engine/core/models.py:1235 msgid "percentage discount" msgstr "Процентная скидка" -#: engine/core/models.py:1147 +#: engine/core/models.py:1240 msgid "timestamp when the promocode expires" msgstr "Временная метка, когда истекает срок действия промокода" -#: engine/core/models.py:1148 +#: engine/core/models.py:1241 msgid "end validity time" msgstr "Время окончания срока действия" -#: engine/core/models.py:1153 +#: engine/core/models.py:1246 msgid "timestamp from which this promocode is valid" msgstr "Время, с которого действует этот промокод" -#: engine/core/models.py:1154 +#: engine/core/models.py:1247 msgid "start validity time" msgstr "Время начала действия" -#: engine/core/models.py:1159 +#: engine/core/models.py:1252 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "Временная метка, когда был использован промокод, пустая, если он еще не " "использовался" -#: engine/core/models.py:1160 +#: engine/core/models.py:1253 msgid "usage timestamp" msgstr "Временная метка использования" -#: engine/core/models.py:1165 +#: engine/core/models.py:1258 msgid "user assigned to this promocode if applicable" msgstr "Пользователь, назначенный на этот промокод, если применимо" -#: engine/core/models.py:1166 +#: engine/core/models.py:1259 msgid "assigned user" msgstr "Назначенный пользователь" -#: engine/core/models.py:1173 +#: engine/core/models.py:1266 msgid "promo code" msgstr "Промокод" -#: engine/core/models.py:1174 +#: engine/core/models.py:1267 msgid "promo codes" msgstr "Промокоды" -#: engine/core/models.py:1190 +#: engine/core/models.py:1283 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2445,16 +2489,16 @@ msgstr "" "Следует определить только один тип скидки (сумма или процент), но не оба или" " ни один из них." -#: engine/core/models.py:1212 +#: engine/core/models.py:1305 msgid "promocode already used" msgstr "Промокоды" -#: engine/core/models.py:1234 +#: engine/core/models.py:1327 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Неверный тип скидки для промокода {self.uuid}!" -#: engine/core/models.py:1243 +#: engine/core/models.py:1336 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 " @@ -2471,139 +2515,139 @@ msgstr "" "доставке или выставлении счета. Кроме того, функциональность поддерживает " "управление продуктами в жизненном цикле заказа." -#: engine/core/models.py:1260 +#: engine/core/models.py:1357 msgid "the billing address used for this order" msgstr "Адрес для выставления счетов, используемый для данного заказа" -#: engine/core/models.py:1268 +#: engine/core/models.py:1365 msgid "optional promo code applied to this order" msgstr "Дополнительный промокод, применяемый к этому заказу" -#: engine/core/models.py:1269 +#: engine/core/models.py:1366 msgid "applied promo code" msgstr "Примененный промокод" -#: engine/core/models.py:1277 +#: engine/core/models.py:1374 msgid "the shipping address used for this order" msgstr "Адрес доставки, используемый для данного заказа" -#: engine/core/models.py:1278 +#: engine/core/models.py:1375 msgid "shipping address" msgstr "Адрес доставки" -#: engine/core/models.py:1284 +#: engine/core/models.py:1381 msgid "current status of the order in its lifecycle" msgstr "Текущий статус заказа в его жизненном цикле" -#: engine/core/models.py:1285 +#: engine/core/models.py:1382 msgid "order status" msgstr "Статус заказа" -#: engine/core/models.py:1290 engine/core/models.py:1889 +#: engine/core/models.py:1387 engine/core/models.py:1997 msgid "json structure of notifications to display to users" msgstr "" "JSON-структура уведомлений для отображения пользователям, в административном" " интерфейсе используется табличный вид" -#: engine/core/models.py:1296 +#: engine/core/models.py:1393 msgid "json representation of order attributes for this order" msgstr "JSON-представление атрибутов заказа для этого заказа" -#: engine/core/models.py:1302 +#: engine/core/models.py:1399 msgid "the user who placed the order" msgstr "Пользователь, разместивший заказ" -#: engine/core/models.py:1303 +#: engine/core/models.py:1400 msgid "user" msgstr "Пользователь" -#: engine/core/models.py:1309 +#: engine/core/models.py:1406 msgid "the timestamp when the order was finalized" msgstr "Временная метка, когда заказ был завершен" -#: engine/core/models.py:1310 +#: engine/core/models.py:1407 msgid "buy time" msgstr "Время покупки" -#: engine/core/models.py:1317 +#: engine/core/models.py:1414 msgid "a human-readable identifier for the order" msgstr "Человекочитаемый идентификатор для заказа" -#: engine/core/models.py:1318 +#: engine/core/models.py:1415 msgid "human readable id" msgstr "человекочитаемый идентификатор" -#: engine/core/models.py:1324 +#: engine/core/models.py:1421 msgid "order" msgstr "Заказ" -#: engine/core/models.py:1371 +#: engine/core/models.py:1468 msgid "a user must have only one pending order at a time" msgstr "Пользователь может одновременно иметь только один отложенный ордер!" -#: engine/core/models.py:1404 +#: engine/core/models.py:1504 msgid "you cannot add products to an order that is not a pending one" msgstr "Вы не можете добавить товары в заказ, который не является отложенным." -#: engine/core/models.py:1410 +#: engine/core/models.py:1510 msgid "you cannot add inactive products to order" msgstr "Вы не можете добавить неактивные товары в заказ" -#: engine/core/models.py:1432 +#: engine/core/models.py:1533 msgid "you cannot add more products than available in stock" msgstr "Вы не можете добавить больше товаров, чем есть на складе" -#: engine/core/models.py:1456 engine/core/models.py:1485 -#: engine/core/models.py:1495 +#: engine/core/models.py:1557 engine/core/models.py:1586 +#: engine/core/models.py:1596 msgid "you cannot remove products from an order that is not a pending one" msgstr "" "Вы не можете удалить товары из заказа, который не является отложенным." -#: engine/core/models.py:1480 +#: engine/core/models.py:1581 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} не существует с запросом <{query}>!" -#: engine/core/models.py:1519 +#: engine/core/models.py:1620 msgid "promocode does not exist" msgstr "Промокод не существует" -#: engine/core/models.py:1534 +#: engine/core/models.py:1635 msgid "you can only buy physical products with shipping address specified" msgstr "" "Вы можете купить физические товары только с указанным адресом доставки!" -#: engine/core/models.py:1555 +#: engine/core/models.py:1656 msgid "address does not exist" msgstr "Адрес не существует" -#: engine/core/models.py:1577 engine/core/models.py:1656 +#: engine/core/models.py:1678 engine/core/models.py:1757 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "В данный момент вы не можете совершить покупку, пожалуйста, повторите " "попытку через несколько минут." -#: engine/core/models.py:1583 engine/core/models.py:1649 +#: engine/core/models.py:1684 engine/core/models.py:1750 msgid "invalid force value" msgstr "Недопустимое значение силы" -#: engine/core/models.py:1589 engine/core/models.py:1660 +#: engine/core/models.py:1690 engine/core/models.py:1761 msgid "you cannot purchase an empty order!" msgstr "Вы не можете приобрести пустой заказ!" -#: engine/core/models.py:1610 +#: engine/core/models.py:1711 msgid "you cannot buy an order without a user" msgstr "Вы не можете купить заказ без пользователя!" -#: engine/core/models.py:1624 +#: engine/core/models.py:1725 msgid "a user without a balance cannot buy with balance" msgstr "Пользователь без баланса не может покупать с балансом!" -#: engine/core/models.py:1630 +#: engine/core/models.py:1731 msgid "insufficient funds to complete the order" msgstr "Недостаточно средств для выполнения заказа" -#: engine/core/models.py:1671 +#: engine/core/models.py:1772 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2611,14 +2655,14 @@ msgstr "" "Вы не можете купить без регистрации, пожалуйста, предоставьте следующую " "информацию: имя клиента, электронная почта клиента, номер телефона клиента" -#: engine/core/models.py:1682 +#: engine/core/models.py:1783 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "Неверный способ оплаты: {payment_method} от {available_payment_methods}!" -#: engine/core/models.py:1813 +#: engine/core/models.py:1916 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2633,33 +2677,33 @@ msgstr "" "пользователем. Класс использует поля базы данных для эффективного " "моделирования и управления данными отзывов." -#: engine/core/models.py:1825 +#: engine/core/models.py:1928 msgid "user-provided comments about their experience with the product" msgstr "Комментарии пользователей об их опыте использования продукта" -#: engine/core/models.py:1826 +#: engine/core/models.py:1929 msgid "feedback comments" msgstr "Комментарии к отзывам" -#: engine/core/models.py:1834 +#: engine/core/models.py:1937 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "Ссылка на конкретный продукт в заказе, о котором идет речь в этом отзыве" -#: engine/core/models.py:1836 +#: engine/core/models.py:1939 msgid "related order product" msgstr "Сопутствующий товар для заказа" -#: engine/core/models.py:1841 +#: engine/core/models.py:1944 msgid "user-assigned rating for the product" msgstr "Присвоенный пользователем рейтинг продукта" -#: engine/core/models.py:1842 +#: engine/core/models.py:1945 msgid "product rating" msgstr "Рейтинг продукции" -#: engine/core/models.py:1862 +#: engine/core/models.py:1965 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2681,109 +2725,109 @@ msgstr "" "для цифровых продуктов. Модель интегрируется с моделями Order и Product и " "хранит ссылки на них." -#: engine/core/models.py:1877 +#: engine/core/models.py:1985 msgid "the price paid by the customer for this product at purchase time" msgstr "Цена, уплаченная клиентом за данный продукт на момент покупки" -#: engine/core/models.py:1878 +#: engine/core/models.py:1986 msgid "purchase price at order time" msgstr "Покупная цена на момент заказа" -#: engine/core/models.py:1883 +#: engine/core/models.py:1991 msgid "internal comments for admins about this ordered product" msgstr "" "Внутренние комментарии для администраторов об этом заказанном продукте" -#: engine/core/models.py:1884 +#: engine/core/models.py:1992 msgid "internal comments" msgstr "Внутренние комментарии" -#: engine/core/models.py:1890 +#: engine/core/models.py:1998 msgid "user notifications" msgstr "Уведомления пользователей" -#: engine/core/models.py:1895 +#: engine/core/models.py:2003 msgid "json representation of this item's attributes" msgstr "JSON-представление атрибутов этого элемента" -#: engine/core/models.py:1896 +#: engine/core/models.py:2004 msgid "ordered product attributes" msgstr "Атрибуты заказанного продукта" -#: engine/core/models.py:1901 +#: engine/core/models.py:2009 msgid "reference to the parent order that contains this product" msgstr "Ссылка на родительский заказ, содержащий данный продукт" -#: engine/core/models.py:1902 +#: engine/core/models.py:2010 msgid "parent order" msgstr "Родительский приказ" -#: engine/core/models.py:1911 +#: engine/core/models.py:2019 msgid "the specific product associated with this order line" msgstr "Конкретный продукт, связанный с этой линией заказа" -#: engine/core/models.py:1918 +#: engine/core/models.py:2026 msgid "quantity of this specific product in the order" msgstr "Количество данного товара в заказе" -#: engine/core/models.py:1919 +#: engine/core/models.py:2027 msgid "product quantity" msgstr "Количество продукта" -#: engine/core/models.py:1926 +#: engine/core/models.py:2034 msgid "current status of this product in the order" msgstr "Текущий статус этого продукта в заказе" -#: engine/core/models.py:1927 +#: engine/core/models.py:2035 msgid "product line status" msgstr "Состояние продуктовой линейки" -#: engine/core/models.py:1998 +#: engine/core/models.py:2106 msgid "order product must have an order" msgstr "У заказанного продукта должен быть связанный с ним заказ!" -#: engine/core/models.py:2000 +#: engine/core/models.py:2108 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Для обратной связи указано неверное действие: {action}!" -#: engine/core/models.py:2017 +#: engine/core/models.py:2125 msgid "you cannot feedback an order which is not received" msgstr "Вы не можете отозвать заказ, который не был получен" -#: engine/core/models.py:2026 +#: engine/core/models.py:2132 engine/core/models.py:2227 msgid "name" msgstr "Имя" -#: engine/core/models.py:2028 +#: engine/core/models.py:2134 msgid "URL of the integration" msgstr "URL-адрес интеграции" -#: engine/core/models.py:2031 +#: engine/core/models.py:2137 msgid "authentication credentials" msgstr "Учетные данные для аутентификации" -#: engine/core/models.py:2054 +#: engine/core/models.py:2160 msgid "you can only have one default CRM provider" msgstr "У вас может быть только один поставщик CRM по умолчанию" -#: engine/core/models.py:2064 +#: engine/core/models.py:2170 msgid "CRM" msgstr "CRM" -#: engine/core/models.py:2065 +#: engine/core/models.py:2171 msgid "CRMs" msgstr "CRM" -#: engine/core/models.py:2081 +#: engine/core/models.py:2187 msgid "order CRM link" msgstr "Ссылка на CRM заказа" -#: engine/core/models.py:2082 +#: engine/core/models.py:2188 msgid "orders CRM links" msgstr "Ссылки на CRM заказов" -#: engine/core/models.py:2087 +#: engine/core/models.py:2193 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2799,14 +2843,40 @@ msgstr "" " общедоступным. Он включает метод для генерации URL-адреса для загрузки " "актива, когда связанный заказ находится в состоянии завершения." -#: engine/core/models.py:2103 +#: engine/core/models.py:2209 msgid "download" msgstr "Скачать" -#: engine/core/models.py:2104 +#: engine/core/models.py:2210 msgid "downloads" msgstr "Скачать" +#: engine/core/models.py:2228 +msgid "descriptive name for the image" +msgstr "Описательное название изображения" + +#: engine/core/models.py:2233 +msgid "image file pasted in the markdown editor" +msgstr "Изображение, вставленное в редактор Markdown" + +#: engine/core/models.py:2239 +msgid "alt text" +msgstr "Другой текст" + +#: engine/core/models.py:2240 +msgid "alternative text for accessibility" +msgstr "" +"Предоставьте альтернативный текст для изображения, чтобы обеспечить " +"доступность" + +#: engine/core/models.py:2244 +msgid "pasted image" +msgstr "Вставленное изображение" + +#: engine/core/models.py:2245 +msgid "pasted images" +msgstr "Вставленные изображения" + #: engine/core/serializers/utility.py:91 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." @@ -2815,6 +2885,16 @@ msgstr "" "продукта заказа." #: engine/core/sitemaps.py:25 +#: engine/core/templates/admin_doc/bookmarklets.html:8 +#: engine/core/templates/admin_doc/index.html:8 +#: engine/core/templates/admin_doc/missing_docutils.html:8 +#: engine/core/templates/admin_doc/model_detail.html:8 +#: engine/core/templates/admin_doc/model_index.html:8 +#: engine/core/templates/admin_doc/template_detail.html:8 +#: engine/core/templates/admin_doc/template_filter_index.html:8 +#: engine/core/templates/admin_doc/template_tag_index.html:8 +#: engine/core/templates/admin_doc/view_detail.html:8 +#: engine/core/templates/admin_doc/view_index.html:8 msgid "Home" msgstr "Главная" @@ -2867,45 +2947,34 @@ msgstr "Брутто" msgid "Dashboard" msgstr "Панель" -#: engine/core/templates/admin/dashboard/_income_overview.html:7 +#: engine/core/templates/admin/dashboard/_income_overview.html:6 msgid "Income overview" msgstr "Обзор доходов" -#: engine/core/templates/admin/dashboard/_income_overview.html:31 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Net" +#: engine/core/templates/admin/dashboard/_income_overview.html:16 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" msgstr "Чистая выручка" -#: engine/core/templates/admin/dashboard/_income_overview.html:37 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Taxes" -msgstr "Налоги" - -#: engine/core/templates/admin/dashboard/_income_overview.html:43 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 +#: engine/core/templates/admin/dashboard/_income_overview.html:21 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 msgid "Returns" msgstr "Возвраты" -#: engine/core/templates/admin/dashboard/_income_overview.html:48 -msgid "Gross (pie total)" -msgstr "Валовая выручка" - -#: engine/core/templates/admin/dashboard/_income_overview.html:72 -msgid "No data" -msgstr "Нет даты" - +#: engine/core/templates/admin/dashboard/_income_overview.html:26 #: engine/core/templates/admin/dashboard/_kpis.html:6 msgid "GMV" msgstr "GMV" +#: engine/core/templates/admin/dashboard/_income_overview.html:50 +msgid "No data" +msgstr "Нет даты" + #: engine/core/templates/admin/dashboard/_kpis.html:34 msgid "AOV" msgstr "AOV" -#: engine/core/templates/admin/dashboard/_kpis.html:48 -msgid "Net revenue" -msgstr "Чистая выручка" - #: engine/core/templates/admin/dashboard/_kpis.html:62 msgid "Refund rate" msgstr "Ставка возврата" @@ -2918,7 +2987,7 @@ msgstr "Возвращено" msgid "Low stock" msgstr "Низкий запас" -#: engine/core/templates/admin/dashboard/_low_stock.html:29 +#: engine/core/templates/admin/dashboard/_low_stock.html:33 msgid "No low stock items." msgstr "Нет товаров с низким уровнем запасов." @@ -2975,6 +3044,303 @@ msgstr "За последние 30 дней не было ни одной про msgid "Django site admin" msgstr "Администратор сайта Django" +#: engine/core/templates/admin_doc/bookmarklets.html:4 +#: engine/core/templates/admin_doc/bookmarklets.html:17 +msgid "Documentation bookmarklets" +msgstr "Закладки документации" + +#: engine/core/templates/admin_doc/bookmarklets.html:10 +#: engine/core/templates/admin_doc/index.html:4 +#: engine/core/templates/admin_doc/index.html:10 +#: engine/core/templates/admin_doc/index.html:15 +#: engine/core/templates/admin_doc/missing_docutils.html:10 +#: engine/core/templates/admin_doc/missing_docutils.html:19 +#: engine/core/templates/admin_doc/model_detail.html:10 +#: engine/core/templates/admin_doc/model_index.html:10 +#: engine/core/templates/admin_doc/template_detail.html:10 +#: engine/core/templates/admin_doc/template_filter_index.html:10 +#: engine/core/templates/admin_doc/template_tag_index.html:10 +#: engine/core/templates/admin_doc/view_detail.html:10 +#: engine/core/templates/admin_doc/view_index.html:10 +msgid "Documentation" +msgstr "Документация" + +#: engine/core/templates/admin_doc/bookmarklets.html:12 +#: engine/core/templates/admin_doc/index.html:53 +msgid "Bookmarklets" +msgstr "Закладки" + +#: engine/core/templates/admin_doc/bookmarklets.html:19 +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Чтобы установить закладки, перетащите ссылку на панель закладок или щелкните" +" правой кнопкой мыши по ссылке и добавьте ее в закладки. Теперь вы можете " +"выбрать закладку с любой страницы сайта." + +#: engine/core/templates/admin_doc/bookmarklets.html:29 +msgid "Documentation for this page" +msgstr "Документация для этой страницы" + +#: engine/core/templates/admin_doc/bookmarklets.html:31 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Переходит с любой страницы к документации по представлению, которое " +"генерирует эту страницу." + +#: engine/core/templates/admin_doc/index.html:21 +#: engine/core/templates/admin_doc/model_detail.html:12 +#: engine/core/templates/admin_doc/model_index.html:4 +#: engine/core/templates/admin_doc/model_index.html:12 +msgid "Models" +msgstr "Модели" + +#: engine/core/templates/admin_doc/index.html:23 +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Модели представляют собой описания всех объектов в системе и связанных с " +"ними полей. Каждая модель имеет список полей, к которым можно получить " +"доступ в качестве переменных шаблона." + +#: engine/core/templates/admin_doc/index.html:29 +#: engine/core/templates/admin_doc/view_detail.html:12 +#: engine/core/templates/admin_doc/view_index.html:4 +#: engine/core/templates/admin_doc/view_index.html:12 +msgid "Views" +msgstr "Просмотры" + +#: engine/core/templates/admin_doc/index.html:31 +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Каждая страница на общедоступном сайте генерируется представлением. " +"Представление определяет, какой шаблон используется для генерации страницы и" +" какие объекты доступны для этого шаблона." + +#: engine/core/templates/admin_doc/index.html:39 +msgid "List of all the template tags and their functions." +msgstr "Список всех тегов шаблонов и их функций." + +#: engine/core/templates/admin_doc/index.html:45 +#: engine/core/templates/admin_doc/template_filter_index.html:12 +msgid "Filters" +msgstr "Фильтры" + +#: engine/core/templates/admin_doc/index.html:47 +msgid "" +"Filters are actions which can be applied to variables in a template to alter" +" the output." +msgstr "" +"Фильтры — это действия, которые можно применять к переменным в шаблоне для " +"изменения результата." + +#: engine/core/templates/admin_doc/index.html:55 +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Инструменты для вашего браузера, позволяющие быстро получить доступ к " +"функциям администрирования." + +#: engine/core/templates/admin_doc/missing_docutils.html:4 +msgid "Please install docutils" +msgstr "Пожалуйста, установите docutils" + +#: engine/core/templates/admin_doc/missing_docutils.html:20 +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"Система административной документации требует библиотеку Python docutils." + +#: engine/core/templates/admin_doc/missing_docutils.html:21 +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Пожалуйста, попросите ваших администраторов установить docutils." + +#: engine/core/templates/admin_doc/model_detail.html:4 +#, python-format +msgid "Model: %(name)s" +msgstr "Модель: %(name)s" + +#: engine/core/templates/admin_doc/model_detail.html:29 +msgid "Fields" +msgstr "Поля" + +#: engine/core/templates/admin_doc/model_detail.html:36 +msgid "Field" +msgstr "Поле" + +#: engine/core/templates/admin_doc/model_detail.html:37 +msgid "Type" +msgstr "Тип" + +#: engine/core/templates/admin_doc/model_detail.html:38 +#: engine/core/templates/admin_doc/model_detail.html:70 +msgid "Description" +msgstr "Описание" + +#: engine/core/templates/admin_doc/model_detail.html:61 +msgid "Methods with arguments" +msgstr "Методы с аргументами" + +#: engine/core/templates/admin_doc/model_detail.html:68 +msgid "Method" +msgstr "Метод" + +#: engine/core/templates/admin_doc/model_detail.html:69 +msgid "Arguments" +msgstr "Аргументы" + +#: engine/core/templates/admin_doc/model_detail.html:89 +msgid "Back to Model documentation" +msgstr "Вернуться к документации по модели" + +#: engine/core/templates/admin_doc/model_index.html:17 +msgid "Model documentation" +msgstr "Документация по модели" + +#: engine/core/templates/admin_doc/model_index.html:44 +msgid "Model groups" +msgstr "Модельные группы" + +#: engine/core/templates/admin_doc/template_detail.html:4 +#, python-format +msgid "Template: %(name)s" +msgstr "Шаблон: %(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:12 +msgid "Templates" +msgstr "Шаблоны" + +#: engine/core/templates/admin_doc/template_detail.html:17 +#, python-format +msgid "" +"Template: %(name)s" +msgstr "" +"Шаблон: %(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:21 +#, python-format +msgid "Search path for template %(name)s:" +msgstr "Путь поиска шаблона %(name)s:" + +#: engine/core/templates/admin_doc/template_detail.html:29 +msgid "(does not exist)" +msgstr "(не существует)" + +#: engine/core/templates/admin_doc/template_detail.html:40 +msgid "Back to Documentation" +msgstr "Вернуться к документации" + +#: engine/core/templates/admin_doc/template_filter_index.html:4 +msgid "Template filters" +msgstr "Фильтры шаблонов" + +#: engine/core/templates/admin_doc/template_filter_index.html:17 +msgid "Template filter documentation" +msgstr "Документация по фильтрам шаблонов" + +#: engine/core/templates/admin_doc/template_filter_index.html:26 +#: engine/core/templates/admin_doc/template_filter_index.html:52 +msgid "Built-in filters" +msgstr "Встроенные фильтры" + +#: engine/core/templates/admin_doc/template_filter_index.html:29 +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before using" +" the filter." +msgstr "" +"Чтобы использовать эти фильтры, добавьте %(code)s в свой шаблон перед " +"использованием фильтра." + +#: engine/core/templates/admin_doc/template_tag_index.html:4 +msgid "Template tags" +msgstr "Теги шаблонов" + +#: engine/core/templates/admin_doc/template_tag_index.html:17 +msgid "Template tag documentation" +msgstr "Документация по тегам шаблонов" + +#: engine/core/templates/admin_doc/template_tag_index.html:26 +#: engine/core/templates/admin_doc/template_tag_index.html:52 +msgid "Built-in tags" +msgstr "Встроенные теги" + +#: engine/core/templates/admin_doc/template_tag_index.html:29 +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using the tag." +msgstr "" +"Чтобы использовать эти теги, добавьте %(code)s в свой шаблон перед " +"использованием тега." + +#: engine/core/templates/admin_doc/view_detail.html:4 +#, python-format +msgid "View: %(name)s" +msgstr "Просмотр: %(name)s" + +#: engine/core/templates/admin_doc/view_detail.html:28 +msgid "Context:" +msgstr "Контекст:" + +#: engine/core/templates/admin_doc/view_detail.html:33 +msgid "Templates:" +msgstr "Шаблоны:" + +#: engine/core/templates/admin_doc/view_detail.html:41 +msgid "Back to View documentation" +msgstr "Вернуться к просмотру документации" + +#: engine/core/templates/admin_doc/view_index.html:17 +msgid "View documentation" +msgstr "Просмотреть документацию" + +#: engine/core/templates/admin_doc/view_index.html:28 +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Просмотры по пространству имен %(name)s" + +#: engine/core/templates/admin_doc/view_index.html:30 +msgid "Views by empty namespace" +msgstr "Просмотры по пустому пространству имен" + +#: engine/core/templates/admin_doc/view_index.html:40 +#, python-format +msgid "" +"View function: %(full_name)s. Name: %(url_name)s." +msgstr "" +"Функция просмотра: %(full_name)s. Имя: " +"%(url_name)s." + +#: engine/core/templates/admin_doc/view_index.html:54 +msgid "Jump to namespace" +msgstr "Перейти к пространству имен" + +#: engine/core/templates/admin_doc/view_index.html:59 +msgid "Empty namespace" +msgstr "Пустое пространство имен" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -3074,7 +3440,7 @@ msgstr "" " информация" #: engine/core/templates/digital_order_delivered_email.html:137 -#: engine/core/templates/json_table_widget.html:6 +#: engine/core/templates/json_table_widget.html:26 msgid "value" msgstr "Значение" @@ -3094,11 +3460,23 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "С наилучшими пожеланиями,
команда %(project_name)s" -#: engine/core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:7 +msgid "Key" +msgstr "Ключ" + +#: engine/core/templates/json_table_widget.html:8 +msgid "Value" +msgstr "Ценность" + +#: engine/core/templates/json_table_widget.html:19 msgid "key" msgstr "Ключ" -#: engine/core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:32 +msgid "Delete row" +msgstr "Удалить строку" + +#: engine/core/templates/json_table_widget.html:44 msgid "Add Row" msgstr "Добавить строку" @@ -3187,14 +3565,23 @@ msgstr "У вас нет разрешения на выполнение этог msgid "NOMINATIM_URL must be configured." msgstr "Параметр NOMINATIM_URL должен быть настроен!" -#: engine/core/validators.py:23 +#: engine/core/validators.py:18 +msgid "could not determine file type" +msgstr "Не удалось определить тип файла" + +#: engine/core/validators.py:24 +#, python-brace-format +msgid "unsupported video format. supported formats: {supported}" +msgstr "Неподдерживаемый формат видео. Поддерживаемые форматы: {supported}" + +#: engine/core/validators.py:45 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "Размеры изображения не должны превышать w{max_width} x h{max_height} " "пикселей" -#: engine/core/views.py:104 +#: engine/core/views.py:108 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3203,7 +3590,7 @@ msgstr "" "Он обеспечивает включение в ответ заголовка типа содержимого, " "соответствующего типу XML." -#: engine/core/views.py:119 +#: engine/core/views.py:123 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3213,17 +3600,17 @@ msgstr "" "обрабатывает запрос, извлекает соответствующий подробный ответ карты сайта и" " устанавливает заголовок Content-Type для XML." -#: engine/core/views.py:155 +#: engine/core/views.py:174 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Возвращает список поддерживаемых языков и соответствующую информацию о них." -#: engine/core/views.py:182 +#: engine/core/views.py:201 msgid "Returns the parameters of the website as a JSON object." msgstr "Возвращает параметры сайта в виде объекта JSON." -#: engine/core/views.py:198 +#: engine/core/views.py:217 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3231,26 +3618,26 @@ msgstr "" "Выполняет операции с кэшем, такие как чтение и установка данных кэша с " "заданным ключом и таймаутом." -#: engine/core/views.py:220 +#: engine/core/views.py:239 msgid "Handles `contact us` form submissions." msgstr "Обрабатывает отправленные формы `contact us`." -#: engine/core/views.py:236 +#: engine/core/views.py:255 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." msgstr "" "Обрабатывает запросы на обработку и проверку URL из входящих POST-запросов." -#: engine/core/views.py:273 +#: engine/core/views.py:292 msgid "Handles global search queries." msgstr "Обрабатывает глобальные поисковые запросы." -#: engine/core/views.py:289 +#: engine/core/views.py:308 msgid "Handles the logic of buying as a business without registration." msgstr "Работает с логикой покупки как бизнеса без регистрации." -#: engine/core/views.py:337 +#: engine/core/views.py:356 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3258,31 +3645,31 @@ msgstr "" "Обрабатывает загрузку цифрового актива, связанного с заказом.\n" "Эта функция пытается обслужить файл цифрового актива, расположенный в каталоге хранения проекта. Если файл не найден, выдается ошибка HTTP 404, указывающая на недоступность ресурса." -#: engine/core/views.py:348 +#: engine/core/views.py:367 msgid "order_product_uuid is required" msgstr "требуется order_product_uuid" -#: engine/core/views.py:355 +#: engine/core/views.py:374 msgid "order product does not exist" msgstr "заказанный товар не существует" -#: engine/core/views.py:358 +#: engine/core/views.py:377 msgid "you can only download the digital asset once" msgstr "Вы можете загрузить цифровой актив только один раз" -#: engine/core/views.py:362 +#: engine/core/views.py:381 msgid "the order must be paid before downloading the digital asset" msgstr "заказ должен быть оплачен до загрузки цифрового актива" -#: engine/core/views.py:369 +#: engine/core/views.py:388 msgid "the order product does not have a product" msgstr "У заказанного продукта нет продукта" -#: engine/core/views.py:412 +#: engine/core/views.py:431 msgid "favicon not found" msgstr "favicon не найден" -#: engine/core/views.py:418 +#: engine/core/views.py:437 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3290,7 +3677,7 @@ msgstr "" "Обрабатывает запросы на фавикон веб-сайта.\n" "Эта функция пытается обслужить файл favicon, расположенный в статической директории проекта. Если файл favicon не найден, выдается ошибка HTTP 404, указывающая на недоступность ресурса." -#: engine/core/views.py:432 +#: engine/core/views.py:451 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3301,16 +3688,20 @@ msgstr "" "администратора Django. Для обработки HTTP-перенаправления используется " "функция Django `redirect`." -#: engine/core/views.py:445 +#: engine/core/views.py:464 msgid "Returns current version of the Schon. " msgstr "Возвращает текущую версию Schon." -#: engine/core/views.py:674 engine/core/views.py:689 +#: engine/core/views.py:475 +msgid "no image file provided" +msgstr "Файл изображения не предоставлен" + +#: engine/core/views.py:710 engine/core/views.py:725 #, python-format msgid "Revenue & Orders (last %(days)d)" msgstr "Доходы и заказы (последние %(days)d)" -#: engine/core/views.py:870 +#: engine/core/views.py:911 msgid "Returns custom variables for Dashboard. " msgstr "Возвращает пользовательские переменные для Dashboard." @@ -3400,7 +3791,7 @@ msgstr "" "сериализации объектов Brand. Он использует фреймворк Django ViewSet для " "упрощения реализации конечных точек API для объектов Brand." -#: engine/core/viewsets.py:458 +#: engine/core/viewsets.py:460 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3418,7 +3809,15 @@ msgstr "" "методы для получения информации о продукте, применения разрешений и доступа " "к связанным отзывам о продукте." -#: engine/core/viewsets.py:605 +#: engine/core/viewsets.py:541 +msgid "identificator_type and identificators are required" +msgstr "identificator_type и identificators являются обязательными" + +#: engine/core/viewsets.py:554 +msgid "identificator_type must be one of: uuid, slug, sku" +msgstr "identificator_type должен быть одним из следующих: uuid, slug, sku" + +#: engine/core/viewsets.py:635 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3433,7 +3832,7 @@ msgstr "" "класса - обеспечить упрощенный доступ к ресурсам, связанным с Vendor, через " "фреймворк Django REST." -#: engine/core/viewsets.py:625 +#: engine/core/viewsets.py:655 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3450,7 +3849,7 @@ msgstr "" "доступа. Он расширяет базовый `schonViewSet` и использует систему фильтрации" " Django для запроса данных." -#: engine/core/viewsets.py:652 +#: engine/core/viewsets.py:682 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3471,7 +3870,7 @@ msgstr "" "соответствующим образом устанавливает разрешения при взаимодействии с " "данными заказа." -#: engine/core/viewsets.py:914 +#: engine/core/viewsets.py:944 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3486,12 +3885,12 @@ msgstr "" " от запрашиваемого действия. Кроме того, он предоставляет подробное действие" " для обработки отзывов об экземплярах OrderProduct" -#: engine/core/viewsets.py:974 +#: engine/core/viewsets.py:1004 msgid "Manages operations related to Product images in the application. " msgstr "" "Управляет операциями, связанными с изображениями продуктов в приложении." -#: engine/core/viewsets.py:988 +#: engine/core/viewsets.py:1018 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3499,16 +3898,16 @@ msgstr "" "Управляет получением и обработкой экземпляров PromoCode с помощью различных " "действий API." -#: engine/core/viewsets.py:1019 +#: engine/core/viewsets.py:1049 msgid "Represents a view set for managing promotions. " msgstr "" "Представляет собой набор представлений для управления рекламными акциями." -#: engine/core/viewsets.py:1032 +#: engine/core/viewsets.py:1062 msgid "Handles operations related to Stock data in the system." msgstr "Выполняет операции, связанные с данными о запасах в системе." -#: engine/core/viewsets.py:1046 +#: engine/core/viewsets.py:1076 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3526,7 +3925,7 @@ msgstr "" "проверка прав доступа гарантирует, что пользователи смогут управлять только " "своими списками желаний, если не предоставлены явные права." -#: engine/core/viewsets.py:1183 +#: engine/core/viewsets.py:1213 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3541,12 +3940,12 @@ msgstr "" "методов HTTP, переопределение сериализатора и обработку разрешений в " "зависимости от контекста запроса." -#: engine/core/viewsets.py:1254 +#: engine/core/viewsets.py:1275 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Ошибка геокодирования: {e}" -#: engine/core/viewsets.py:1262 +#: engine/core/viewsets.py:1283 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/sv_SE/LC_MESSAGES/django.mo b/engine/core/locale/sv_SE/LC_MESSAGES/django.mo index f569663e..80dd41a5 100644 Binary files a/engine/core/locale/sv_SE/LC_MESSAGES/django.mo and b/engine/core/locale/sv_SE/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/sv_SE/LC_MESSAGES/django.po b/engine/core/locale/sv_SE/LC_MESSAGES/django.po index 790455ac..268e4c97 100644 --- a/engine/core/locale/sv_SE/LC_MESSAGES/django.po +++ b/engine/core/locale/sv_SE/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -49,114 +49,134 @@ msgstr "Modifierad" msgid "when the object was last modified" msgstr "När objektet senast redigerades" -#: engine/core/admin.py:94 +#: engine/core/admin.py:98 msgid "translations" msgstr "Översättningar" -#: engine/core/admin.py:102 +#: engine/core/admin.py:106 msgid "general" msgstr "Allmänt" -#: engine/core/admin.py:106 +#: engine/core/admin.py:110 msgid "relations" msgstr "Relationer" -#: engine/core/admin.py:111 +#: engine/core/admin.py:115 msgid "additional info" msgstr "Ytterligare information" -#: engine/core/admin.py:133 +#: engine/core/admin.py:137 msgid "metadata" msgstr "Metadata" -#: engine/core/admin.py:141 +#: engine/core/admin.py:145 msgid "timestamps" msgstr "Tidsstämplar" -#: engine/core/admin.py:158 +#: engine/core/admin.py:162 #, python-format msgid "Activate selected %(verbose_name_plural)s" msgstr "Aktivera valt %(verbose_name_plural)s" -#: engine/core/admin.py:166 +#: engine/core/admin.py:170 msgid "selected items have been activated." msgstr "Valda artiklar har aktiverats!" -#: engine/core/admin.py:174 +#: engine/core/admin.py:178 #, python-format msgid "Deactivate selected %(verbose_name_plural)s" msgstr "Inaktivera vald %(verbose_name_plural)s" -#: engine/core/admin.py:184 +#: engine/core/admin.py:188 msgid "selected items have been deactivated." msgstr "Valda objekt har avaktiverats!" -#: engine/core/admin.py:196 engine/core/graphene/object_types.py:653 -#: engine/core/graphene/object_types.py:660 engine/core/models.py:832 -#: engine/core/models.py:840 +#: engine/core/admin.py:200 engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:673 engine/core/models.py:918 +#: engine/core/models.py:928 msgid "attribute value" msgstr "Attributvärde" -#: engine/core/admin.py:197 engine/core/graphene/object_types.py:77 -#: engine/core/models.py:841 +#: engine/core/admin.py:201 engine/core/graphene/object_types.py:81 +#: engine/core/models.py:929 msgid "attribute values" msgstr "Attributets värden" -#: engine/core/admin.py:208 +#: engine/core/admin.py:212 engine/core/models.py:2232 msgid "image" msgstr "Bild" -#: engine/core/admin.py:209 engine/core/graphene/object_types.py:530 +#: engine/core/admin.py:213 engine/core/graphene/object_types.py:535 msgid "images" msgstr "Bilder" -#: engine/core/admin.py:220 engine/core/models.py:576 +#: engine/core/admin.py:224 engine/core/models.py:635 msgid "stock" msgstr "Stock" -#: engine/core/admin.py:221 engine/core/graphene/object_types.py:713 +#: engine/core/admin.py:225 engine/core/graphene/object_types.py:735 msgid "stocks" msgstr "Stocks" -#: engine/core/admin.py:232 engine/core/models.py:1938 +#: engine/core/admin.py:236 engine/core/models.py:2046 msgid "order product" msgstr "Beställ produkt" -#: engine/core/admin.py:233 engine/core/graphene/object_types.py:441 -#: engine/core/models.py:1939 +#: engine/core/admin.py:237 engine/core/graphene/object_types.py:446 +#: engine/core/models.py:2047 msgid "order products" msgstr "Beställ produkter" -#: engine/core/admin.py:251 engine/core/admin.py:252 +#: engine/core/admin.py:255 engine/core/admin.py:256 msgid "children" msgstr "Barn och ungdomar" -#: engine/core/admin.py:528 +#: engine/core/admin.py:545 +msgid "video preview" +msgstr "Förhandsvisning av video" + +#: engine/core/admin.py:551 msgid "has images" msgstr "Har bilder" -#: engine/core/admin.py:531 +#: engine/core/admin.py:554 #, python-format msgid "Export selected %(verbose_name_plural)s to marketplaces' feeds" msgstr "Exportera vald %(verbose_name_plural)s till marknadsplatsernas flöden" -#: engine/core/admin.py:542 +#: engine/core/admin.py:565 #, python-format msgid "selected %(verbose_name_plural)s have been marked for export." msgstr "Valda %(verbose_name_plural)s har markerats för export." -#: engine/core/admin.py:553 +#: engine/core/admin.py:576 #, python-format msgid "Ban selected %(verbose_name_plural)s from marketplaces' feeds" msgstr "" "Förbjud utvalda %(verbose_name_plural)s från marknadsplatsernas flöden" -#: engine/core/admin.py:564 +#: engine/core/admin.py:587 #, python-format msgid "selected %(verbose_name_plural)s have been banned from export." msgstr "Vissa %(verbose_name_plural)s har förbjudits för export." -#: engine/core/admin.py:1116 +#: engine/core/admin.py:1030 +msgid "Preview" +msgstr "Förhandsgranska" + +#: engine/core/admin.py:1031 +msgid "Metadata" +msgstr "Metadata" + +#: engine/core/admin.py:1034 +msgid "preview" +msgstr "Förhandsgranska" + +#: engine/core/admin.py:1043 +msgid "image preview" +msgstr "Bildförhandsvisning" + +#: engine/core/admin.py:1166 msgid "Config" msgstr "Konfig" @@ -222,7 +242,7 @@ msgstr "" "OpenApi3-schema för detta API. Format kan väljas via innehållsförhandling. " "Språk kan väljas med både Accept-Language och frågeparameter." -#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:36 +#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "Cache I/O" @@ -246,7 +266,7 @@ msgstr "Hämta applikationens exponerbara parametrar" msgid "send a message to the support team" msgstr "Skicka ett meddelande till supportteamet" -#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:59 msgid "request a CORSed URL" msgstr "Begär en CORSed URL. Endast https tillåtet." @@ -383,11 +403,11 @@ msgstr "Skriva om en befintlig kategori som sparar icke-redigerbara" msgid "rewrite some fields of an existing category saving non-editables" msgstr "Skriva om vissa fält i en befintlig kategori spara icke-redigerbara" -#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757 -#: engine/core/docs/drf/viewsets.py:1046 -#: engine/core/graphene/object_types.py:119 -#: engine/core/graphene/object_types.py:239 -#: engine/core/graphene/object_types.py:540 +#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:781 +#: engine/core/docs/drf/viewsets.py:1070 +#: engine/core/graphene/object_types.py:123 +#: engine/core/graphene/object_types.py:247 +#: engine/core/graphene/object_types.py:546 msgid "SEO Meta snapshot" msgstr "SEO Meta snapshot" @@ -685,7 +705,7 @@ msgstr "Hämta en enskild produkt (detaljerad vy)" #: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683 #: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725 -#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763 +#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:787 msgid "Product UUID or slug" msgstr "Produkt UUID eller Slug" @@ -711,280 +731,294 @@ msgstr "Ta bort en produkt" msgid "lists all permitted feedbacks for a product" msgstr "listar alla tillåtna återkopplingar för en produkt" -#: engine/core/docs/drf/viewsets.py:758 +#: engine/core/docs/drf/viewsets.py:757 +msgid "retrieve exact products by identifier" +msgstr "Hämta exakta produkter efter identifierare" + +#: engine/core/docs/drf/viewsets.py:759 +msgid "" +"retrieve a list of products by identifier type (uuid, slug, or sku). Send a " +"POST request with `identificator_type` and `identificators` (list of " +"values)." +msgstr "" +"Hämta en lista över produkter efter identifieringstyp (uuid, slug eller " +"sku). Skicka en POST-begäran med `identificator_type` och `identificators` " +"(lista över värden)." + +#: engine/core/docs/drf/viewsets.py:782 msgid "returns a snapshot of the product's SEO meta data" msgstr "Returnerar en ögonblicksbild av produktens SEO-metadata" -#: engine/core/docs/drf/viewsets.py:779 +#: engine/core/docs/drf/viewsets.py:803 msgid "list all addresses" msgstr "Lista alla adresser" -#: engine/core/docs/drf/viewsets.py:789 +#: engine/core/docs/drf/viewsets.py:813 msgid "retrieve a single address" msgstr "Hämta en enskild adress" -#: engine/core/docs/drf/viewsets.py:799 +#: engine/core/docs/drf/viewsets.py:823 msgid "create a new address" msgstr "Skapa en ny adress" -#: engine/core/docs/drf/viewsets.py:810 +#: engine/core/docs/drf/viewsets.py:834 msgid "delete an address" msgstr "Ta bort en adress" -#: engine/core/docs/drf/viewsets.py:820 +#: engine/core/docs/drf/viewsets.py:844 msgid "update an entire address" msgstr "Uppdatera en hel adress" -#: engine/core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:855 msgid "partially update an address" msgstr "Delvis uppdatera en adress" -#: engine/core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:866 msgid "autocomplete address suggestions" msgstr "Autokomplettering av adressinmatning" -#: engine/core/docs/drf/viewsets.py:848 +#: engine/core/docs/drf/viewsets.py:872 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "Frågesträng för rådata, komplettera med data från geo-IP-slutpunkt" -#: engine/core/docs/drf/viewsets.py:855 +#: engine/core/docs/drf/viewsets.py:879 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "begränsar resultatmängden, 1 < limit < 10, standard: 5" -#: engine/core/docs/drf/viewsets.py:871 +#: engine/core/docs/drf/viewsets.py:895 msgid "list all feedbacks (simple view)" msgstr "lista alla återkopplingar (enkel vy)" -#: engine/core/docs/drf/viewsets.py:881 +#: engine/core/docs/drf/viewsets.py:905 msgid "retrieve a single feedback (detailed view)" msgstr "hämta en enskild feedback (detaljerad vy)" -#: engine/core/docs/drf/viewsets.py:888 +#: engine/core/docs/drf/viewsets.py:912 msgid "create a feedback" msgstr "skapa en återkoppling" -#: engine/core/docs/drf/viewsets.py:895 +#: engine/core/docs/drf/viewsets.py:919 msgid "delete a feedback" msgstr "ta bort en återkoppling" -#: engine/core/docs/drf/viewsets.py:902 +#: engine/core/docs/drf/viewsets.py:926 msgid "rewrite an existing feedback saving non-editables" msgstr "skriva om en befintlig feedback och spara icke-redigerbara filer" -#: engine/core/docs/drf/viewsets.py:909 +#: engine/core/docs/drf/viewsets.py:933 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" "skriva om vissa fält i en befintlig feedback och spara icke-redigerbara fält" -#: engine/core/docs/drf/viewsets.py:919 +#: engine/core/docs/drf/viewsets.py:943 msgid "list all order–product relations (simple view)" msgstr "lista alla order-produktrelationer (enkel vy)" -#: engine/core/docs/drf/viewsets.py:929 +#: engine/core/docs/drf/viewsets.py:953 msgid "retrieve a single order–product relation (detailed view)" msgstr "hämta en enskild order-produktrelation (detaljerad vy)" -#: engine/core/docs/drf/viewsets.py:939 +#: engine/core/docs/drf/viewsets.py:963 msgid "create a new order–product relation" msgstr "skapa en ny relation mellan order och produkt" -#: engine/core/docs/drf/viewsets.py:949 +#: engine/core/docs/drf/viewsets.py:973 msgid "replace an existing order–product relation" msgstr "ersätta en befintlig order-produktrelation" -#: engine/core/docs/drf/viewsets.py:959 +#: engine/core/docs/drf/viewsets.py:983 msgid "partially update an existing order–product relation" msgstr "delvis uppdatera en befintlig order-produktrelation" -#: engine/core/docs/drf/viewsets.py:969 +#: engine/core/docs/drf/viewsets.py:993 msgid "delete an order–product relation" msgstr "ta bort en order-produktrelation" -#: engine/core/docs/drf/viewsets.py:979 +#: engine/core/docs/drf/viewsets.py:1003 msgid "add or remove feedback on an order–product relation" msgstr "lägga till eller ta bort feedback om en order-produktrelation" -#: engine/core/docs/drf/viewsets.py:996 +#: engine/core/docs/drf/viewsets.py:1020 msgid "list all brands (simple view)" msgstr "Lista alla varumärken (enkel vy)" -#: engine/core/docs/drf/viewsets.py:1003 +#: engine/core/docs/drf/viewsets.py:1027 msgid "retrieve a single brand (detailed view)" msgstr "Hämta ett enskilt varumärke (detaljerad vy)" -#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051 +#: engine/core/docs/drf/viewsets.py:1032 engine/core/docs/drf/viewsets.py:1075 msgid "Brand UUID or slug" msgstr "UUID eller slug för varumärke" -#: engine/core/docs/drf/viewsets.py:1018 +#: engine/core/docs/drf/viewsets.py:1042 msgid "create a brand" msgstr "Skapa ett varumärke" -#: engine/core/docs/drf/viewsets.py:1025 +#: engine/core/docs/drf/viewsets.py:1049 msgid "delete a brand" msgstr "Ta bort ett varumärke" -#: engine/core/docs/drf/viewsets.py:1032 +#: engine/core/docs/drf/viewsets.py:1056 msgid "rewrite an existing brand saving non-editables" msgstr "" "Skriva om ett befintligt varumärke och spara icke-redigerbara produkter" -#: engine/core/docs/drf/viewsets.py:1039 +#: engine/core/docs/drf/viewsets.py:1063 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "" "Skriva om vissa fält i ett befintligt varumärke och spara icke-redigerbara " "fält" -#: engine/core/docs/drf/viewsets.py:1064 +#: engine/core/docs/drf/viewsets.py:1088 msgid "list all vendors (simple view)" msgstr "Lista alla leverantörer (enkel vy)" -#: engine/core/docs/drf/viewsets.py:1074 +#: engine/core/docs/drf/viewsets.py:1098 msgid "retrieve a single vendor (detailed view)" msgstr "Hämta en enskild leverantör (detaljerad vy)" -#: engine/core/docs/drf/viewsets.py:1081 +#: engine/core/docs/drf/viewsets.py:1105 msgid "create a vendor" msgstr "Skapa en leverantör" -#: engine/core/docs/drf/viewsets.py:1088 +#: engine/core/docs/drf/viewsets.py:1112 msgid "delete a vendor" msgstr "Ta bort en leverantör" -#: engine/core/docs/drf/viewsets.py:1095 +#: engine/core/docs/drf/viewsets.py:1119 msgid "rewrite an existing vendor saving non-editables" msgstr "Skriva om en befintlig leverantör och spara icke-redigerbara filer" -#: engine/core/docs/drf/viewsets.py:1102 +#: engine/core/docs/drf/viewsets.py:1126 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "" "Skriva om vissa fält i en befintlig leverantör och spara icke-redigerbara " "fält" -#: engine/core/docs/drf/viewsets.py:1112 +#: engine/core/docs/drf/viewsets.py:1136 msgid "list all product images (simple view)" msgstr "Lista alla produktbilder (enkel vy)" -#: engine/core/docs/drf/viewsets.py:1122 +#: engine/core/docs/drf/viewsets.py:1146 msgid "retrieve a single product image (detailed view)" msgstr "Hämta en enskild produktbild (detaljerad vy)" -#: engine/core/docs/drf/viewsets.py:1129 +#: engine/core/docs/drf/viewsets.py:1153 msgid "create a product image" msgstr "Skapa en produktbild" -#: engine/core/docs/drf/viewsets.py:1139 +#: engine/core/docs/drf/viewsets.py:1163 msgid "delete a product image" msgstr "Ta bort en produktbild" -#: engine/core/docs/drf/viewsets.py:1146 +#: engine/core/docs/drf/viewsets.py:1170 msgid "rewrite an existing product image saving non-editables" msgstr "Skriva om en befintlig produktbild och spara icke-redigerbara objekt" -#: engine/core/docs/drf/viewsets.py:1154 +#: engine/core/docs/drf/viewsets.py:1178 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "" "Skriva om några fält i en befintlig produktbild och spara icke-redigerbara " "fält" -#: engine/core/docs/drf/viewsets.py:1165 +#: engine/core/docs/drf/viewsets.py:1189 msgid "list all promo codes (simple view)" msgstr "Lista alla kampanjkoder (enkel vy)" -#: engine/core/docs/drf/viewsets.py:1175 +#: engine/core/docs/drf/viewsets.py:1199 msgid "retrieve a single promo code (detailed view)" msgstr "Hämta en enskild kampanjkod (detaljerad vy)" -#: engine/core/docs/drf/viewsets.py:1182 +#: engine/core/docs/drf/viewsets.py:1206 msgid "create a promo code" msgstr "Skapa en kampanjkod" -#: engine/core/docs/drf/viewsets.py:1189 +#: engine/core/docs/drf/viewsets.py:1213 msgid "delete a promo code" msgstr "Ta bort en kampanjkod" -#: engine/core/docs/drf/viewsets.py:1196 +#: engine/core/docs/drf/viewsets.py:1220 msgid "rewrite an existing promo code saving non-editables" msgstr "Skriva om en befintlig kampanjkod som sparar icke-redigerbara" -#: engine/core/docs/drf/viewsets.py:1203 +#: engine/core/docs/drf/viewsets.py:1227 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "" "Skriva om vissa fält i en befintlig kampanjkod och spara icke-redigerbara " "fält" -#: engine/core/docs/drf/viewsets.py:1213 +#: engine/core/docs/drf/viewsets.py:1237 msgid "list all promotions (simple view)" msgstr "Lista alla kampanjer (enkel vy)" -#: engine/core/docs/drf/viewsets.py:1223 +#: engine/core/docs/drf/viewsets.py:1247 msgid "retrieve a single promotion (detailed view)" msgstr "Hämta en enskild kampanj (detaljerad vy)" -#: engine/core/docs/drf/viewsets.py:1230 +#: engine/core/docs/drf/viewsets.py:1254 msgid "create a promotion" msgstr "Skapa en kampanj" -#: engine/core/docs/drf/viewsets.py:1237 +#: engine/core/docs/drf/viewsets.py:1261 msgid "delete a promotion" msgstr "Ta bort en kampanj" -#: engine/core/docs/drf/viewsets.py:1244 +#: engine/core/docs/drf/viewsets.py:1268 msgid "rewrite an existing promotion saving non-editables" msgstr "Skriv om en befintlig kampanj som sparar icke-redigerbara" -#: engine/core/docs/drf/viewsets.py:1251 +#: engine/core/docs/drf/viewsets.py:1275 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "" "Skriva om vissa fält i en befintlig kampanj och spara icke-redigerbara fält" -#: engine/core/docs/drf/viewsets.py:1261 +#: engine/core/docs/drf/viewsets.py:1285 msgid "list all stocks (simple view)" msgstr "Lista alla aktier (enkel vy)" -#: engine/core/docs/drf/viewsets.py:1268 +#: engine/core/docs/drf/viewsets.py:1292 msgid "retrieve a single stock (detailed view)" msgstr "Hämta en enskild aktie (detaljerad vy)" -#: engine/core/docs/drf/viewsets.py:1275 +#: engine/core/docs/drf/viewsets.py:1299 msgid "create a stock record" msgstr "Skapa en lagerpost" -#: engine/core/docs/drf/viewsets.py:1282 +#: engine/core/docs/drf/viewsets.py:1306 msgid "delete a stock record" msgstr "Ta bort en lagerpost" -#: engine/core/docs/drf/viewsets.py:1289 +#: engine/core/docs/drf/viewsets.py:1313 msgid "rewrite an existing stock record saving non-editables" msgstr "Skriva om en befintlig lagerpost och spara icke-redigerbara uppgifter" -#: engine/core/docs/drf/viewsets.py:1297 +#: engine/core/docs/drf/viewsets.py:1321 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "" "Skriva om vissa fält i en befintlig lagerpost och spara icke-redigerbara " "uppgifter" -#: engine/core/docs/drf/viewsets.py:1308 +#: engine/core/docs/drf/viewsets.py:1332 msgid "list all product tags (simple view)" msgstr "Lista alla produkttaggar (enkel vy)" -#: engine/core/docs/drf/viewsets.py:1318 +#: engine/core/docs/drf/viewsets.py:1342 msgid "retrieve a single product tag (detailed view)" msgstr "Hämta en enskild produkttagg (detaljerad vy)" -#: engine/core/docs/drf/viewsets.py:1325 +#: engine/core/docs/drf/viewsets.py:1349 msgid "create a product tag" msgstr "Skapa en produkttagg" -#: engine/core/docs/drf/viewsets.py:1335 +#: engine/core/docs/drf/viewsets.py:1359 msgid "delete a product tag" msgstr "Ta bort en produkttagg" -#: engine/core/docs/drf/viewsets.py:1342 +#: engine/core/docs/drf/viewsets.py:1366 msgid "rewrite an existing product tag saving non-editables" msgstr "Skriv om en befintlig produkttagg och spara icke-redigerbara objekt" -#: engine/core/docs/drf/viewsets.py:1350 +#: engine/core/docs/drf/viewsets.py:1374 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "" "Skriva om vissa fält i en befintlig produkttagg och spara icke-redigerbara " @@ -995,375 +1029,377 @@ msgstr "" msgid "no search term provided." msgstr "Ingen sökterm angavs." -#: engine/core/filters.py:78 engine/core/filters.py:484 -#: engine/core/filters.py:625 +#: engine/core/filters.py:79 engine/core/filters.py:485 +#: engine/core/filters.py:626 msgid "Search" msgstr "Sök" -#: engine/core/filters.py:79 engine/core/filters.py:663 -#: engine/core/filters.py:692 +#: engine/core/filters.py:80 engine/core/filters.py:664 +#: engine/core/filters.py:693 msgid "UUID" msgstr "UUID" -#: engine/core/filters.py:80 engine/core/filters.py:487 -#: engine/core/filters.py:627 +#: engine/core/filters.py:81 engine/core/filters.py:488 +#: engine/core/filters.py:628 msgid "Name" msgstr "Namn" -#: engine/core/filters.py:82 engine/core/filters.py:630 +#: engine/core/filters.py:83 engine/core/filters.py:631 msgid "Categories" msgstr "Kategorier" -#: engine/core/filters.py:86 +#: engine/core/filters.py:87 msgid "Categories Slugs" msgstr "Kategorier Sniglar" -#: engine/core/filters.py:88 engine/core/filters.py:495 +#: engine/core/filters.py:89 engine/core/filters.py:496 +#: engine/core/templates/admin_doc/index.html:37 +#: engine/core/templates/admin_doc/template_tag_index.html:12 msgid "Tags" msgstr "Etiketter" -#: engine/core/filters.py:90 +#: engine/core/filters.py:91 msgid "Min Price" msgstr "Min pris" -#: engine/core/filters.py:93 +#: engine/core/filters.py:94 msgid "Max Price" msgstr "Max pris" -#: engine/core/filters.py:95 +#: engine/core/filters.py:96 msgid "Is Active" msgstr "Är aktiv" -#: engine/core/filters.py:96 +#: engine/core/filters.py:97 msgid "Brand" msgstr "Varumärke" -#: engine/core/filters.py:97 +#: engine/core/filters.py:98 msgid "Attributes" msgstr "Attribut" -#: engine/core/filters.py:99 +#: engine/core/filters.py:100 msgid "Quantity" msgstr "Kvantitet" -#: engine/core/filters.py:101 engine/core/filters.py:489 -#: engine/core/filters.py:628 engine/core/models.py:316 -#: engine/core/models.py:497 engine/core/models.py:663 +#: engine/core/filters.py:102 engine/core/filters.py:490 +#: engine/core/filters.py:629 engine/core/models.py:339 +#: engine/core/models.py:546 engine/core/models.py:736 msgid "Slug" msgstr "Snigel" -#: engine/core/filters.py:102 +#: engine/core/filters.py:103 msgid "Is Digital" msgstr "Är digital" -#: engine/core/filters.py:104 +#: engine/core/filters.py:105 msgid "Include sub-categories" msgstr "Inkludera underkategorier" -#: engine/core/filters.py:108 +#: engine/core/filters.py:109 msgid "Include personal ordered" msgstr "Inkludera personligt beställda produkter" -#: engine/core/filters.py:110 engine/core/models.py:667 +#: engine/core/filters.py:111 engine/core/models.py:740 msgid "SKU" msgstr "SKU" -#: engine/core/filters.py:212 +#: engine/core/filters.py:213 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" "Det måste finnas en category_uuid för att använda flaggan " "include_subcategories" -#: engine/core/filters.py:398 +#: engine/core/filters.py:399 msgid "Search (ID, product name or part number)" msgstr "Sök (ID, produktnamn eller artikelnummer)" -#: engine/core/filters.py:402 +#: engine/core/filters.py:403 msgid "Bought after (inclusive)" msgstr "Köpt efter (inklusive)" -#: engine/core/filters.py:405 +#: engine/core/filters.py:406 msgid "Bought before (inclusive)" msgstr "Köpt tidigare (inklusive)" -#: engine/core/filters.py:410 engine/core/filters.py:461 -#: engine/core/filters.py:697 +#: engine/core/filters.py:411 engine/core/filters.py:462 +#: engine/core/filters.py:698 msgid "User email" msgstr "Användarens e-post" -#: engine/core/filters.py:413 engine/core/filters.py:464 -#: engine/core/filters.py:672 engine/core/filters.py:694 +#: engine/core/filters.py:414 engine/core/filters.py:465 +#: engine/core/filters.py:673 engine/core/filters.py:695 msgid "User UUID" msgstr "Användarens UUID" -#: engine/core/filters.py:415 +#: engine/core/filters.py:416 msgid "Status" msgstr "Status" -#: engine/core/filters.py:419 +#: engine/core/filters.py:420 msgid "Human Readable ID" msgstr "Human Readable ID" -#: engine/core/filters.py:488 +#: engine/core/filters.py:489 msgid "Parent" msgstr "Förälder" -#: engine/core/filters.py:492 +#: engine/core/filters.py:493 msgid "Whole category(has at least 1 product or not)" msgstr "Hela kategorin (har minst 1 produkt eller inte)" -#: engine/core/filters.py:496 +#: engine/core/filters.py:497 msgid "Level" msgstr "Nivå" -#: engine/core/filters.py:667 +#: engine/core/filters.py:668 msgid "Product UUID" msgstr "Produktens UUID" -#: engine/core/graphene/mutations.py:40 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Nyckel att leta efter i eller sätta in i cachen" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:43 msgid "data to store in cache" msgstr "Data som ska lagras i cacheminnet" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:46 msgid "timeout in seconds to set the data for into the cache" msgstr "Timeout i sekunder för att lägga data i cacheminnet" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:49 msgid "cached data" msgstr "Cachad data" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:64 msgid "camelized JSON data from the requested URL" msgstr "Cameliserad JSON-data från den begärda URL:en" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:248 +#: engine/core/graphene/mutations.py:69 engine/core/views.py:267 msgid "only URLs starting with http(s):// are allowed" msgstr "Endast webbadresser som börjar med http(s):// är tillåtna" -#: engine/core/graphene/mutations.py:86 +#: engine/core/graphene/mutations.py:87 msgid "add a product to the order" msgstr "Lägg till en produkt i ordern" -#: engine/core/graphene/mutations.py:109 engine/core/graphene/mutations.py:138 -#: engine/core/graphene/mutations.py:254 engine/core/graphene/mutations.py:306 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139 +#: engine/core/graphene/mutations.py:256 engine/core/graphene/mutations.py:308 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Order {order_uuid} hittades inte!" -#: engine/core/graphene/mutations.py:115 engine/core/graphene/mutations.py:166 +#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167 msgid "remove a product from the order" msgstr "Ta bort en produkt från ordern" -#: engine/core/graphene/mutations.py:144 +#: engine/core/graphene/mutations.py:145 msgid "remove all products from the order" msgstr "Ta bort alla produkter från ordern" -#: engine/core/graphene/mutations.py:189 +#: engine/core/graphene/mutations.py:190 msgid "buy an order" msgstr "Köpa en order" -#: engine/core/graphene/mutations.py:220 engine/core/graphene/mutations.py:282 +#: engine/core/graphene/mutations.py:222 engine/core/graphene/mutations.py:284 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" "Vänligen ange antingen order_uuid eller order_hr_id - ömsesidigt " "uteslutande!" -#: engine/core/graphene/mutations.py:249 engine/core/graphene/mutations.py:524 -#: engine/core/graphene/mutations.py:573 engine/core/viewsets.py:753 +#: engine/core/graphene/mutations.py:251 engine/core/graphene/mutations.py:526 +#: engine/core/graphene/mutations.py:576 engine/core/viewsets.py:783 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Fel typ kom från order.buy()-metoden: {type(instance)!s}" -#: engine/core/graphene/mutations.py:260 +#: engine/core/graphene/mutations.py:262 msgid "perform an action on a list of products in the order" msgstr "Utför en åtgärd på en lista med produkter i ordern" -#: engine/core/graphene/mutations.py:265 +#: engine/core/graphene/mutations.py:267 msgid "remove/add" msgstr "Ta bort/lägga till" -#: engine/core/graphene/mutations.py:301 engine/core/graphene/mutations.py:342 +#: engine/core/graphene/mutations.py:303 engine/core/graphene/mutations.py:342 msgid "action must be either add or remove" msgstr "Åtgärden måste vara antingen \"lägg till\" eller \"ta bort\"!" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:314 msgid "perform an action on a list of products in the wishlist" msgstr "Utför en åtgärd på en lista med produkter i önskelistan" -#: engine/core/graphene/mutations.py:330 -msgid "please provide wishlist_uuid value" -msgstr "Vänligen ange värdet för `wishlist_uuid`." - -#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:423 -#: engine/core/graphene/mutations.py:451 engine/core/graphene/mutations.py:479 -#: engine/core/graphene/mutations.py:529 +#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:424 +#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480 +#: engine/core/graphene/mutations.py:531 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Önskelista {wishlist_uuid} hittades inte!" -#: engine/core/graphene/mutations.py:401 +#: engine/core/graphene/mutations.py:402 msgid "add a product to the wishlist" msgstr "Lägg till en produkt i ordern" -#: engine/core/graphene/mutations.py:429 +#: engine/core/graphene/mutations.py:430 msgid "remove a product from the wishlist" msgstr "Ta bort en produkt från ordern" -#: engine/core/graphene/mutations.py:457 +#: engine/core/graphene/mutations.py:458 msgid "remove all products from the wishlist" msgstr "Ta bort en produkt från ordern" -#: engine/core/graphene/mutations.py:485 +#: engine/core/graphene/mutations.py:486 msgid "buy all products from the wishlist" msgstr "Ta bort en produkt från ordern" -#: engine/core/graphene/mutations.py:535 +#: engine/core/graphene/mutations.py:537 msgid "buy a product" msgstr "Köpa en order" -#: engine/core/graphene/mutations.py:542 +#: engine/core/graphene/mutations.py:544 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" msgstr "" "Skicka attributen som en sträng formaterad som attr1=värde1,attr2=värde2" -#: engine/core/graphene/mutations.py:580 +#: engine/core/graphene/mutations.py:583 msgid "add or delete a feedback for orderproduct" msgstr "Lägg till eller ta bort en feedback för orderprodukten" -#: engine/core/graphene/mutations.py:606 +#: engine/core/graphene/mutations.py:610 msgid "action must be either `add` or `remove`" msgstr "Åtgärden måste vara antingen `add` eller `remove`!" -#: engine/core/graphene/mutations.py:609 +#: engine/core/graphene/mutations.py:613 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderprodukt {order_product_uuid} hittades inte!" -#: engine/core/graphene/mutations.py:616 +#: engine/core/graphene/mutations.py:620 msgid "original address string provided by the user" msgstr "Originaladresssträng som tillhandahålls av användaren" -#: engine/core/graphene/mutations.py:653 engine/core/models.py:986 -#: engine/core/models.py:999 engine/core/models.py:1443 -#: engine/core/models.py:1474 engine/core/models.py:1505 -#: engine/core/viewsets.py:760 +#: engine/core/graphene/mutations.py:662 engine/core/models.py:1079 +#: engine/core/models.py:1092 engine/core/models.py:1544 +#: engine/core/models.py:1575 engine/core/models.py:1606 +#: engine/core/viewsets.py:790 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} existerar inte: {uuid}!" -#: engine/core/graphene/mutations.py:667 +#: engine/core/graphene/mutations.py:676 msgid "limit must be between 1 and 10" msgstr "Gränsen måste vara mellan 1 och 10" -#: engine/core/graphene/mutations.py:716 +#: engine/core/graphene/mutations.py:726 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - fungerar som en smäck" -#: engine/core/graphene/object_types.py:84 -#: engine/core/graphene/object_types.py:420 -#: engine/core/graphene/object_types.py:471 engine/core/models.py:803 -#: engine/core/models.py:1297 engine/core/models.py:2033 +#: engine/core/graphene/object_types.py:88 +#: engine/core/graphene/object_types.py:425 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:889 +#: engine/core/models.py:1394 engine/core/models.py:2139 msgid "attributes" msgstr "Attribut" -#: engine/core/graphene/object_types.py:97 +#: engine/core/graphene/object_types.py:101 msgid "grouped attributes" msgstr "Grupperade attribut" -#: engine/core/graphene/object_types.py:104 +#: engine/core/graphene/object_types.py:108 msgid "groups of attributes" msgstr "Grupper av attribut" -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:217 -#: engine/core/graphene/object_types.py:255 engine/core/models.py:440 +#: engine/core/graphene/object_types.py:122 +#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:264 engine/core/models.py:489 msgid "categories" msgstr "Kategorier" -#: engine/core/graphene/object_types.py:134 engine/core/models.py:511 +#: engine/core/graphene/object_types.py:138 engine/core/models.py:564 msgid "brands" msgstr "Brands" -#: engine/core/graphene/object_types.py:219 +#: engine/core/graphene/object_types.py:226 msgid "category image url" msgstr "Kategorier" -#: engine/core/graphene/object_types.py:220 -#: engine/core/graphene/object_types.py:365 engine/core/models.py:278 +#: engine/core/graphene/object_types.py:227 +#: engine/core/graphene/object_types.py:369 engine/core/models.py:301 msgid "markup percentage" msgstr "Procentuell påslagning" -#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:231 msgid "which attributes and values can be used for filtering this category." msgstr "" "Vilka attribut och värden som kan användas för att filtrera denna kategori." -#: engine/core/graphene/object_types.py:230 +#: engine/core/graphene/object_types.py:237 msgid "" "minimum and maximum prices for products in this category, if available." msgstr "" "Minsta och högsta pris för produkter i denna kategori, om tillgängligt." -#: engine/core/graphene/object_types.py:234 +#: engine/core/graphene/object_types.py:240 +msgid "brands in this category" +msgstr "Varumärken i denna kategori" + +#: engine/core/graphene/object_types.py:242 msgid "tags for this category" msgstr "Taggar för denna kategori" -#: engine/core/graphene/object_types.py:237 +#: engine/core/graphene/object_types.py:245 msgid "products in this category" msgstr "Produkter i denna kategori" -#: engine/core/graphene/object_types.py:372 engine/core/models.py:183 +#: engine/core/graphene/object_types.py:376 engine/core/models.py:202 msgid "vendors" msgstr "Leverantörer" -#: engine/core/graphene/object_types.py:376 +#: engine/core/graphene/object_types.py:380 msgid "Latitude (Y coordinate)" msgstr "Latitud (Y-koordinat)" -#: engine/core/graphene/object_types.py:377 +#: engine/core/graphene/object_types.py:381 msgid "Longitude (X coordinate)" msgstr "Longitud (X-koordinat)" -#: engine/core/graphene/object_types.py:406 +#: engine/core/graphene/object_types.py:411 msgid "comment" msgstr "Hur gör man" -#: engine/core/graphene/object_types.py:408 -#: engine/core/graphene/object_types.py:542 +#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:548 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "Ratingvärde från 1 till och med 10, eller 0 om det inte är inställt." -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:421 msgid "represents feedback from a user." msgstr "Representerar feedback från en användare." -#: engine/core/graphene/object_types.py:421 -#: engine/core/graphene/object_types.py:472 engine/core/models.py:1291 +#: engine/core/graphene/object_types.py:426 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:1388 msgid "notifications" msgstr "Meddelanden" -#: engine/core/graphene/object_types.py:423 +#: engine/core/graphene/object_types.py:428 msgid "download url for this order product if applicable" msgstr "Nedladdningsadress för denna orderprodukt om tillämpligt" -#: engine/core/graphene/object_types.py:425 engine/core/models.py:1856 +#: engine/core/graphene/object_types.py:430 engine/core/models.py:1959 msgid "feedback" msgstr "Återkoppling" -#: engine/core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:464 msgid "a list of order products in this order" msgstr "En lista över orderprodukter i den här ordern" -#: engine/core/graphene/object_types.py:461 engine/core/models.py:1261 +#: engine/core/graphene/object_types.py:466 engine/core/models.py:1358 msgid "billing address" msgstr "Faktureringsadress" -#: engine/core/graphene/object_types.py:465 +#: engine/core/graphene/object_types.py:470 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1371,53 +1407,57 @@ msgstr "" "Leveransadress för denna order, lämna tom om den är samma som " "faktureringsadressen eller om den inte är tillämplig" -#: engine/core/graphene/object_types.py:468 +#: engine/core/graphene/object_types.py:473 msgid "total price of this order" msgstr "Totalpris för denna order" -#: engine/core/graphene/object_types.py:469 +#: engine/core/graphene/object_types.py:474 msgid "total quantity of products in order" msgstr "Totalt antal produkter i ordern" -#: engine/core/graphene/object_types.py:470 +#: engine/core/graphene/object_types.py:475 msgid "are all products in the order digital" msgstr "Är alla produkter i beställningen digitala" -#: engine/core/graphene/object_types.py:474 +#: engine/core/graphene/object_types.py:479 msgid "transactions for this order" msgstr "Transaktioner för denna order" -#: engine/core/graphene/object_types.py:494 engine/core/models.py:1325 +#: engine/core/graphene/object_types.py:499 engine/core/models.py:1422 msgid "orders" msgstr "Beställningar" -#: engine/core/graphene/object_types.py:515 +#: engine/core/graphene/object_types.py:520 msgid "image url" msgstr "URL för bild" -#: engine/core/graphene/object_types.py:522 +#: engine/core/graphene/object_types.py:527 msgid "product's images" msgstr "Produktens bilder" -#: engine/core/graphene/object_types.py:529 engine/core/models.py:439 -#: engine/core/models.py:596 +#: engine/core/graphene/object_types.py:534 engine/core/models.py:488 +#: engine/core/models.py:661 msgid "category" msgstr "Kategori" -#: engine/core/graphene/object_types.py:531 engine/core/models.py:1857 +#: engine/core/graphene/object_types.py:536 engine/core/models.py:1960 msgid "feedbacks" msgstr "Återkoppling" -#: engine/core/graphene/object_types.py:532 engine/core/models.py:510 -#: engine/core/models.py:605 +#: engine/core/graphene/object_types.py:537 engine/core/models.py:563 +#: engine/core/models.py:670 msgid "brand" msgstr "Varumärke" -#: engine/core/graphene/object_types.py:534 engine/core/models.py:103 +#: engine/core/graphene/object_types.py:538 +msgid "video url" +msgstr "Video-URL" + +#: engine/core/graphene/object_types.py:540 engine/core/models.py:122 msgid "attribute groups" msgstr "Attributgrupper" -#: engine/core/graphene/object_types.py:536 +#: engine/core/graphene/object_types.py:542 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1425,7 +1465,7 @@ msgstr "Attributgrupper" msgid "price" msgstr "Pris" -#: engine/core/graphene/object_types.py:537 +#: engine/core/graphene/object_types.py:543 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1433,39 +1473,39 @@ msgstr "Pris" msgid "quantity" msgstr "Kvantitet" -#: engine/core/graphene/object_types.py:538 +#: engine/core/graphene/object_types.py:544 msgid "number of feedbacks" msgstr "Antal återkopplingar" -#: engine/core/graphene/object_types.py:539 +#: engine/core/graphene/object_types.py:545 msgid "only available for personal orders" msgstr "Produkter endast tillgängliga för personliga beställningar" -#: engine/core/graphene/object_types.py:544 +#: engine/core/graphene/object_types.py:550 msgid "discount price" msgstr "Rabatterat pris" -#: engine/core/graphene/object_types.py:568 engine/core/models.py:682 +#: engine/core/graphene/object_types.py:575 engine/core/models.py:755 msgid "products" msgstr "Produkter" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:691 msgid "promocodes" msgstr "Promokoder" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:706 msgid "products on sale" msgstr "Produkter på rea" -#: engine/core/graphene/object_types.py:701 engine/core/models.py:935 +#: engine/core/graphene/object_types.py:720 engine/core/models.py:1028 msgid "promotions" msgstr "Kampanjer" -#: engine/core/graphene/object_types.py:705 engine/core/models.py:182 +#: engine/core/graphene/object_types.py:727 engine/core/models.py:201 msgid "vendor" msgstr "Leverantör" -#: engine/core/graphene/object_types.py:706 engine/core/models.py:681 +#: engine/core/graphene/object_types.py:728 engine/core/models.py:754 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1473,102 +1513,102 @@ msgstr "Leverantör" msgid "product" msgstr "Produkt" -#: engine/core/graphene/object_types.py:718 engine/core/models.py:958 +#: engine/core/graphene/object_types.py:740 engine/core/models.py:1051 msgid "wishlisted products" msgstr "Önskelistade produkter" -#: engine/core/graphene/object_types.py:725 engine/core/models.py:975 +#: engine/core/graphene/object_types.py:747 engine/core/models.py:1068 msgid "wishlists" msgstr "Önskelistor" -#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:752 msgid "tagged products" msgstr "Taggade produkter" -#: engine/core/graphene/object_types.py:738 engine/core/models.py:219 -#: engine/core/models.py:611 +#: engine/core/graphene/object_types.py:760 engine/core/models.py:238 +#: engine/core/models.py:676 msgid "product tags" msgstr "Produkttaggar" -#: engine/core/graphene/object_types.py:743 +#: engine/core/graphene/object_types.py:765 msgid "tagged categories" msgstr "Taggade kategorier" -#: engine/core/graphene/object_types.py:751 +#: engine/core/graphene/object_types.py:773 msgid "categories tags" msgstr "Kategoriernas taggar" -#: engine/core/graphene/object_types.py:755 +#: engine/core/graphene/object_types.py:777 msgid "project name" msgstr "Projektets namn" -#: engine/core/graphene/object_types.py:756 +#: engine/core/graphene/object_types.py:778 msgid "company name" msgstr "Företagets namn" -#: engine/core/graphene/object_types.py:757 +#: engine/core/graphene/object_types.py:779 msgid "company address" msgstr "Företagets adress" -#: engine/core/graphene/object_types.py:758 +#: engine/core/graphene/object_types.py:780 msgid "company phone number" msgstr "Företagets telefonnummer" -#: engine/core/graphene/object_types.py:761 +#: engine/core/graphene/object_types.py:783 msgid "email from, sometimes it must be used instead of host user value" msgstr "\"email from\", ibland måste det användas istället för host user-värdet" -#: engine/core/graphene/object_types.py:764 +#: engine/core/graphene/object_types.py:786 msgid "email host user" msgstr "E-post värd användare" -#: engine/core/graphene/object_types.py:765 +#: engine/core/graphene/object_types.py:787 msgid "maximum amount for payment" msgstr "Högsta belopp för betalning" -#: engine/core/graphene/object_types.py:766 +#: engine/core/graphene/object_types.py:788 msgid "minimum amount for payment" msgstr "Lägsta belopp för betalning" -#: engine/core/graphene/object_types.py:767 +#: engine/core/graphene/object_types.py:789 msgid "analytics data" msgstr "Analysdata" -#: engine/core/graphene/object_types.py:768 +#: engine/core/graphene/object_types.py:790 msgid "advertisement data" msgstr "Annonsdata" -#: engine/core/graphene/object_types.py:771 +#: engine/core/graphene/object_types.py:793 msgid "company configuration" msgstr "Konfiguration" -#: engine/core/graphene/object_types.py:775 +#: engine/core/graphene/object_types.py:797 msgid "language code" msgstr "Språkkod" -#: engine/core/graphene/object_types.py:776 +#: engine/core/graphene/object_types.py:798 msgid "language name" msgstr "Språkets namn" -#: engine/core/graphene/object_types.py:777 +#: engine/core/graphene/object_types.py:799 msgid "language flag, if exists :)" msgstr "Språkflagga, om sådan finns :)" -#: engine/core/graphene/object_types.py:780 +#: engine/core/graphene/object_types.py:802 msgid "supported languages" msgstr "Hämta en lista över språk som stöds" -#: engine/core/graphene/object_types.py:812 -#: engine/core/graphene/object_types.py:815 -#: engine/core/graphene/object_types.py:818 +#: engine/core/graphene/object_types.py:834 +#: engine/core/graphene/object_types.py:837 +#: engine/core/graphene/object_types.py:840 msgid "products search results" msgstr "Sökresultat för produkter" -#: engine/core/graphene/object_types.py:820 +#: engine/core/graphene/object_types.py:842 msgid "posts search results" msgstr "Sökresultat för produkter" -#: engine/core/models.py:75 +#: engine/core/models.py:91 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 " @@ -1581,23 +1621,23 @@ msgstr "" "användbart för att kategorisera och hantera attribut på ett mer effektivt " "sätt i ett komplext system." -#: engine/core/models.py:88 +#: engine/core/models.py:107 msgid "parent of this group" msgstr "Förälder till denna grupp" -#: engine/core/models.py:89 +#: engine/core/models.py:108 msgid "parent attribute group" msgstr "Överordnad attributgrupp" -#: engine/core/models.py:93 engine/core/models.py:94 +#: engine/core/models.py:112 engine/core/models.py:113 msgid "attribute group's name" msgstr "Attributgruppens namn" -#: engine/core/models.py:102 engine/core/models.py:763 +#: engine/core/models.py:121 engine/core/models.py:849 msgid "attribute group" msgstr "Attributgrupp" -#: engine/core/models.py:108 +#: engine/core/models.py:127 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1616,50 +1656,50 @@ msgstr "" "metadata och begränsningar, vilket gör den lämplig att använda i system som " "interagerar med tredjepartsleverantörer." -#: engine/core/models.py:122 +#: engine/core/models.py:141 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Lagrar autentiseringsuppgifter och ändpunkter som krävs för leverantörens " "API-kommunikation" -#: engine/core/models.py:124 +#: engine/core/models.py:143 msgid "authentication info" msgstr "Autentiseringsinformation" -#: engine/core/models.py:129 +#: engine/core/models.py:148 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" -#: engine/core/models.py:130 +#: engine/core/models.py:149 msgid "vendor markup percentage" msgstr "Leverantörens påslag i procent" -#: engine/core/models.py:134 +#: engine/core/models.py:153 msgid "name of this vendor" msgstr "Namn på denna säljare" -#: engine/core/models.py:135 +#: engine/core/models.py:154 msgid "vendor name" msgstr "Leverantörens namn" -#: engine/core/models.py:150 +#: engine/core/models.py:169 msgid "response file" msgstr "svarsfil" -#: engine/core/models.py:151 +#: engine/core/models.py:170 msgid "vendor's last processing response" msgstr "säljarens senaste bearbetningssvar" -#: engine/core/models.py:157 +#: engine/core/models.py:176 msgid "vendor's integration file path" msgstr "Sökväg till leverantörens integrationsfil" -#: engine/core/models.py:158 +#: engine/core/models.py:177 msgid "integration path" msgstr "Integrationsväg" -#: engine/core/models.py:192 +#: engine/core/models.py:211 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1674,27 +1714,27 @@ msgstr "" "operationer som exporteras via mixins och tillhandahåller metadataanpassning" " för administrativa ändamål." -#: engine/core/models.py:204 engine/core/models.py:235 +#: engine/core/models.py:223 engine/core/models.py:254 msgid "internal tag identifier for the product tag" msgstr "Intern taggidentifierare för produkttaggen" -#: engine/core/models.py:205 engine/core/models.py:236 +#: engine/core/models.py:224 engine/core/models.py:255 msgid "tag name" msgstr "Tagg namn" -#: engine/core/models.py:209 engine/core/models.py:240 +#: engine/core/models.py:228 engine/core/models.py:259 msgid "user-friendly name for the product tag" msgstr "Användarvänligt namn för produkttaggen" -#: engine/core/models.py:210 engine/core/models.py:241 +#: engine/core/models.py:229 engine/core/models.py:260 msgid "tag display name" msgstr "Taggens visningsnamn" -#: engine/core/models.py:218 +#: engine/core/models.py:237 msgid "product tag" msgstr "Produktmärkning" -#: engine/core/models.py:224 +#: engine/core/models.py:243 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 " @@ -1705,15 +1745,15 @@ msgstr "" "klassificera produkter. Den innehåller attribut för en intern " "taggidentifierare och ett användarvänligt visningsnamn." -#: engine/core/models.py:249 +#: engine/core/models.py:268 msgid "category tag" msgstr "kategori tagg" -#: engine/core/models.py:250 engine/core/models.py:322 +#: engine/core/models.py:269 engine/core/models.py:345 msgid "category tags" msgstr "Kategoritaggar" -#: engine/core/models.py:255 +#: engine/core/models.py:274 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1735,51 +1775,51 @@ msgstr "" " ange namn, beskrivning och hierarki för kategorier samt tilldela attribut " "som bilder, taggar eller prioritet." -#: engine/core/models.py:269 +#: engine/core/models.py:292 msgid "upload an image representing this category" msgstr "Ladda upp en bild som representerar denna kategori" -#: engine/core/models.py:272 +#: engine/core/models.py:295 msgid "category image" msgstr "Kategori bild" -#: engine/core/models.py:277 +#: engine/core/models.py:300 msgid "define a markup percentage for products in this category" msgstr "Definiera en påslagsprocent för produkter i den här kategorin" -#: engine/core/models.py:286 +#: engine/core/models.py:309 msgid "parent of this category to form a hierarchical structure" msgstr "Förälder till denna kategori för att bilda en hierarkisk struktur" -#: engine/core/models.py:287 +#: engine/core/models.py:310 msgid "parent category" msgstr "Föräldrakategori" -#: engine/core/models.py:292 +#: engine/core/models.py:315 msgid "category name" msgstr "Namn på kategori" -#: engine/core/models.py:293 +#: engine/core/models.py:316 msgid "provide a name for this category" msgstr "Ange ett namn för denna kategori" -#: engine/core/models.py:300 +#: engine/core/models.py:323 msgid "add a detailed description for this category" msgstr "Lägg till en detaljerad beskrivning för denna kategori" -#: engine/core/models.py:301 +#: engine/core/models.py:324 msgid "category description" msgstr "Beskrivning av kategori" -#: engine/core/models.py:321 +#: engine/core/models.py:344 msgid "tags that help describe or group this category" msgstr "taggar som hjälper till att beskriva eller gruppera denna kategori" -#: engine/core/models.py:328 engine/core/models.py:503 +#: engine/core/models.py:351 engine/core/models.py:552 msgid "priority" msgstr "Prioritet" -#: engine/core/models.py:446 +#: engine/core/models.py:495 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1793,47 +1833,43 @@ msgstr "" "prioritetsordning. Den gör det möjligt att organisera och representera " "varumärkesrelaterade data i applikationen." -#: engine/core/models.py:456 +#: engine/core/models.py:505 msgid "name of this brand" msgstr "Namn på detta varumärke" -#: engine/core/models.py:457 +#: engine/core/models.py:506 msgid "brand name" msgstr "Varumärke" -#: engine/core/models.py:464 +#: engine/core/models.py:513 msgid "upload a logo representing this brand" msgstr "Ladda upp en logotyp som representerar detta varumärke" -#: engine/core/models.py:466 +#: engine/core/models.py:515 msgid "brand small image" msgstr "Varumärke liten image" -#: engine/core/models.py:472 +#: engine/core/models.py:521 msgid "upload a big logo representing this brand" msgstr "Ladda upp en stor logotyp som representerar detta varumärke" -#: engine/core/models.py:474 +#: engine/core/models.py:523 msgid "brand big image" msgstr "Varumärke med stor image" -#: engine/core/models.py:479 +#: engine/core/models.py:528 msgid "add a detailed description of the brand" msgstr "Lägg till en detaljerad beskrivning av varumärket" -#: engine/core/models.py:480 +#: engine/core/models.py:529 msgid "brand description" msgstr "Varumärkesbeskrivning" -#: engine/core/models.py:485 -msgid "optional categories that this brand is associated with" -msgstr "Valfria kategorier som detta varumärke är förknippat med" +#: engine/core/models.py:534 engine/core/models.py:535 +msgid "DEPRECATED" +msgstr "UTGÅTT" -#: engine/core/models.py:486 -msgid "associated categories" -msgstr "Kategorier" - -#: engine/core/models.py:516 +#: engine/core/models.py:569 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1849,72 +1885,72 @@ msgstr "" "lagerhanteringssystemet för att möjliggöra spårning och utvärdering av " "produkter som finns tillgängliga från olika leverantörer." -#: engine/core/models.py:528 +#: engine/core/models.py:581 msgid "the vendor supplying this product stock" msgstr "Leverantören som levererar denna produkt lager" -#: engine/core/models.py:529 +#: engine/core/models.py:582 msgid "associated vendor" msgstr "Associerad leverantör" -#: engine/core/models.py:533 +#: engine/core/models.py:588 msgid "final price to the customer after markups" msgstr "Slutligt pris till kunden efter påslag" -#: engine/core/models.py:534 +#: engine/core/models.py:589 msgid "selling price" msgstr "Försäljningspris" -#: engine/core/models.py:539 +#: engine/core/models.py:594 msgid "the product associated with this stock entry" msgstr "Produkten som är associerad med denna lagerpost" -#: engine/core/models.py:540 engine/core/models.py:828 -#: engine/core/models.py:874 engine/core/models.py:1912 +#: engine/core/models.py:595 engine/core/models.py:914 +#: engine/core/models.py:962 engine/core/models.py:2020 msgid "associated product" msgstr "Tillhörande produkt" -#: engine/core/models.py:547 +#: engine/core/models.py:604 msgid "the price paid to the vendor for this product" msgstr "Det pris som betalats till säljaren för denna produkt" -#: engine/core/models.py:548 +#: engine/core/models.py:605 msgid "vendor purchase price" msgstr "Leverantörens inköpspris" -#: engine/core/models.py:552 +#: engine/core/models.py:609 msgid "available quantity of the product in stock" msgstr "Tillgänglig kvantitet av produkten i lager" -#: engine/core/models.py:553 +#: engine/core/models.py:610 msgid "quantity in stock" msgstr "Antal i lager" -#: engine/core/models.py:557 +#: engine/core/models.py:614 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU som tilldelats av leverantören för identifiering av produkten" -#: engine/core/models.py:558 +#: engine/core/models.py:615 msgid "vendor sku" msgstr "Leverantörens SKU" -#: engine/core/models.py:564 +#: engine/core/models.py:621 msgid "digital file associated with this stock if applicable" msgstr "Digital fil associerad med detta lager om tillämpligt" -#: engine/core/models.py:565 +#: engine/core/models.py:622 msgid "digital file" msgstr "Digital fil" -#: engine/core/models.py:569 +#: engine/core/models.py:626 msgid "system attributes" msgstr "Systemattribut" -#: engine/core/models.py:577 +#: engine/core/models.py:636 msgid "stock entries" msgstr "Lagerposter" -#: engine/core/models.py:582 +#: engine/core/models.py:641 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1935,71 +1971,79 @@ msgstr "" "för att definiera och manipulera produktdata och tillhörande information i " "en applikation." -#: engine/core/models.py:595 +#: engine/core/models.py:660 msgid "category this product belongs to" msgstr "Kategori som denna produkt tillhör" -#: engine/core/models.py:604 +#: engine/core/models.py:669 msgid "optionally associate this product with a brand" msgstr "Möjlighet att associera produkten med ett varumärke" -#: engine/core/models.py:610 +#: engine/core/models.py:675 msgid "tags that help describe or group this product" msgstr "Taggar som hjälper till att beskriva eller gruppera denna produkt" -#: engine/core/models.py:615 +#: engine/core/models.py:680 msgid "indicates whether this product is digitally delivered" msgstr "Anger om denna produkt levereras digitalt" -#: engine/core/models.py:616 +#: engine/core/models.py:681 msgid "is product digital" msgstr "Är produkten digital" -#: engine/core/models.py:623 +#: engine/core/models.py:688 msgid "indicates whether this product should be updated from periodic task" msgstr "anger om denna produkt ska uppdateras från periodisk uppgift" -#: engine/core/models.py:625 +#: engine/core/models.py:690 msgid "is product updatable" msgstr "är produkten uppdateringsbar" -#: engine/core/models.py:631 +#: engine/core/models.py:696 msgid "provide a clear identifying name for the product" msgstr "Tillhandahålla ett tydligt identifierande namn för produkten" -#: engine/core/models.py:632 +#: engine/core/models.py:697 msgid "product name" msgstr "Produktens namn" -#: engine/core/models.py:638 engine/core/models.py:923 +#: engine/core/models.py:703 engine/core/models.py:1012 msgid "add a detailed description of the product" msgstr "Lägg till en detaljerad beskrivning av produkten" -#: engine/core/models.py:639 +#: engine/core/models.py:704 msgid "product description" msgstr "Produktbeskrivning" -#: engine/core/models.py:646 +#: engine/core/models.py:710 +msgid "optional video file for this product" +msgstr "Valfri videofil för denna produkt" + +#: engine/core/models.py:711 +msgid "product video" +msgstr "Produktvideo" + +#: engine/core/models.py:719 msgid "part number for this product" msgstr "Artikelnummer för denna produkt" -#: engine/core/models.py:647 +#: engine/core/models.py:720 msgid "part number" msgstr "Artikelnummer" -#: engine/core/models.py:666 +#: engine/core/models.py:739 msgid "stock keeping unit for this product" msgstr "Lagerhållningsenhet för denna produkt" -#: engine/core/models.py:673 +#: engine/core/models.py:746 msgid "whether to export this product to marketplaces" msgstr "Om denna produkt ska exporteras till marknadsplatser" -#: engine/core/models.py:674 +#: engine/core/models.py:747 msgid "Export to Marketplaces" msgstr "Exportera till marknadsplatser" -#: engine/core/models.py:749 +#: engine/core/models.py:835 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 " @@ -2015,65 +2059,65 @@ msgstr "" "sträng, heltal, flottör, boolean, array och objekt. Detta ger möjlighet till" " dynamisk och flexibel datastrukturering." -#: engine/core/models.py:762 +#: engine/core/models.py:848 msgid "group of this attribute" msgstr "Grupp av detta attribut" -#: engine/core/models.py:768 +#: engine/core/models.py:854 msgid "string" msgstr "Sträng" -#: engine/core/models.py:769 +#: engine/core/models.py:855 msgid "integer" msgstr "Heltal" -#: engine/core/models.py:770 +#: engine/core/models.py:856 msgid "float" msgstr "Flottör" -#: engine/core/models.py:771 +#: engine/core/models.py:857 msgid "boolean" msgstr "Boolean" -#: engine/core/models.py:772 +#: engine/core/models.py:858 msgid "array" msgstr "Array" -#: engine/core/models.py:773 +#: engine/core/models.py:859 msgid "object" msgstr "Objekt" -#: engine/core/models.py:775 +#: engine/core/models.py:861 msgid "type of the attribute's value" msgstr "Typ av attributets värde" -#: engine/core/models.py:776 +#: engine/core/models.py:862 msgid "value type" msgstr "Typ av värde" -#: engine/core/models.py:781 +#: engine/core/models.py:867 msgid "name of this attribute" msgstr "Namn på detta attribut" -#: engine/core/models.py:782 +#: engine/core/models.py:868 msgid "attribute's name" msgstr "Attributets namn" -#: engine/core/models.py:787 +#: engine/core/models.py:873 msgid "is filterable" msgstr "är filtrerbar" -#: engine/core/models.py:789 +#: engine/core/models.py:875 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." -#: engine/core/models.py:802 engine/core/models.py:820 +#: engine/core/models.py:888 engine/core/models.py:906 #: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Attribut" -#: engine/core/models.py:808 +#: engine/core/models.py:894 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" @@ -2084,19 +2128,19 @@ msgstr "" "möjliggör bättre organisation och dynamisk representation av " "produktegenskaper." -#: engine/core/models.py:819 +#: engine/core/models.py:905 msgid "attribute of this value" msgstr "Attribut för detta värde" -#: engine/core/models.py:827 +#: engine/core/models.py:913 msgid "the specific product associated with this attribute's value" msgstr "Den specifika produkt som är associerad med detta attributs värde" -#: engine/core/models.py:833 +#: engine/core/models.py:919 msgid "the specific value for this attribute" msgstr "Det specifika värdet för detta attribut" -#: engine/core/models.py:846 +#: engine/core/models.py:934 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -2110,39 +2154,39 @@ msgstr "" "produkter och bestämma deras visningsordning. Den innehåller också en " "tillgänglighetsfunktion med alternativ text för bilderna." -#: engine/core/models.py:857 +#: engine/core/models.py:945 msgid "provide alternative text for the image for accessibility" msgstr "Tillhandahåll alternativ text för bilden för tillgänglighet" -#: engine/core/models.py:858 +#: engine/core/models.py:946 msgid "image alt text" msgstr "Alt-text för bild" -#: engine/core/models.py:861 +#: engine/core/models.py:949 msgid "upload the image file for this product" msgstr "Ladda upp bildfilen för den här produkten" -#: engine/core/models.py:862 engine/core/models.py:893 +#: engine/core/models.py:950 engine/core/models.py:982 msgid "product image" msgstr "Produktbild" -#: engine/core/models.py:867 +#: engine/core/models.py:955 msgid "determines the order in which images are displayed" msgstr "Bestämmer i vilken ordning bilderna ska visas" -#: engine/core/models.py:868 +#: engine/core/models.py:956 msgid "display priority" msgstr "Prioritet för visning" -#: engine/core/models.py:873 +#: engine/core/models.py:961 msgid "the product that this image represents" msgstr "Den produkt som denna bild representerar" -#: engine/core/models.py:894 +#: engine/core/models.py:983 msgid "product images" msgstr "Produktbilder" -#: engine/core/models.py:899 +#: engine/core/models.py:988 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -2158,39 +2202,39 @@ msgstr "" "tillämpliga produkterna. Den integreras med produktkatalogen för att " "fastställa vilka artiklar som påverkas av kampanjen." -#: engine/core/models.py:911 +#: engine/core/models.py:1000 msgid "percentage discount for the selected products" msgstr "Procentuell rabatt för de valda produkterna" -#: engine/core/models.py:912 +#: engine/core/models.py:1001 msgid "discount percentage" msgstr "Rabattprocent" -#: engine/core/models.py:917 +#: engine/core/models.py:1006 msgid "provide a unique name for this promotion" msgstr "Ange ett unikt namn för denna kampanj" -#: engine/core/models.py:918 +#: engine/core/models.py:1007 msgid "promotion name" msgstr "Kampanjens namn" -#: engine/core/models.py:924 +#: engine/core/models.py:1013 msgid "promotion description" msgstr "Beskrivning av kampanjen" -#: engine/core/models.py:929 +#: engine/core/models.py:1018 msgid "select which products are included in this promotion" msgstr "Välj vilka produkter som ingår i denna kampanj" -#: engine/core/models.py:930 +#: engine/core/models.py:1019 msgid "included products" msgstr "Inkluderade produkter" -#: engine/core/models.py:934 +#: engine/core/models.py:1027 msgid "promotion" msgstr "Marknadsföring" -#: engine/core/models.py:945 +#: engine/core/models.py:1038 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2203,23 +2247,23 @@ msgstr "" "produkter, samt stöd för operationer för att lägga till och ta bort flera " "produkter samtidigt." -#: engine/core/models.py:957 +#: engine/core/models.py:1050 msgid "products that the user has marked as wanted" msgstr "Produkter som användaren har markerat som önskade" -#: engine/core/models.py:965 +#: engine/core/models.py:1058 msgid "user who owns this wishlist" msgstr "Användare som äger denna önskelista" -#: engine/core/models.py:966 +#: engine/core/models.py:1059 msgid "wishlist owner" msgstr "Wishlist's ägare" -#: engine/core/models.py:974 +#: engine/core/models.py:1067 msgid "wishlist" msgstr "Önskelista" -#: engine/core/models.py:1016 +#: engine/core/models.py:1109 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2235,19 +2279,19 @@ msgstr "" "för dokumentärfilerna. Den utökar funktionaliteten från specifika mixins och" " tillhandahåller ytterligare anpassade funktioner." -#: engine/core/models.py:1031 +#: engine/core/models.py:1124 msgid "documentary" msgstr "Dokumentärfilm" -#: engine/core/models.py:1032 +#: engine/core/models.py:1125 msgid "documentaries" msgstr "Dokumentärer" -#: engine/core/models.py:1042 +#: engine/core/models.py:1135 msgid "unresolved" msgstr "Olöst" -#: engine/core/models.py:1047 +#: engine/core/models.py:1140 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2268,59 +2312,59 @@ msgstr "" "inspektion. Klassen gör det också möjligt att associera en adress med en " "användare, vilket underlättar personlig datahantering." -#: engine/core/models.py:1062 +#: engine/core/models.py:1155 msgid "address line for the customer" msgstr "Adressrad till kunden" -#: engine/core/models.py:1063 +#: engine/core/models.py:1156 msgid "address line" msgstr "Adresslinje" -#: engine/core/models.py:1065 +#: engine/core/models.py:1158 msgid "street" msgstr "Gata" -#: engine/core/models.py:1066 +#: engine/core/models.py:1159 msgid "district" msgstr "Distrikt" -#: engine/core/models.py:1067 +#: engine/core/models.py:1160 msgid "city" msgstr "Stad" -#: engine/core/models.py:1068 +#: engine/core/models.py:1161 msgid "region" msgstr "Region" -#: engine/core/models.py:1069 +#: engine/core/models.py:1162 msgid "postal code" msgstr "Postnummer" -#: engine/core/models.py:1070 +#: engine/core/models.py:1163 msgid "country" msgstr "Land" -#: engine/core/models.py:1077 +#: engine/core/models.py:1170 msgid "geolocation point: (longitude, latitude)" msgstr "Geolokaliseringspunkt (longitud, latitud)" -#: engine/core/models.py:1083 +#: engine/core/models.py:1176 msgid "full JSON response from geocoder for this address" msgstr "Fullständigt JSON-svar från geokodaren för denna adress" -#: engine/core/models.py:1089 +#: engine/core/models.py:1182 msgid "stored JSON response from the geocoding service" msgstr "Lagrad JSON-svar från geokodningstjänsten" -#: engine/core/models.py:1099 +#: engine/core/models.py:1192 msgid "address" msgstr "Adress" -#: engine/core/models.py:1100 +#: engine/core/models.py:1193 msgid "addresses" msgstr "Adresser" -#: engine/core/models.py:1112 +#: engine/core/models.py:1205 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2337,72 +2381,72 @@ msgstr "" "funktioner för att validera och tillämpa kampanjkoden på en order och " "samtidigt säkerställa att begränsningarna uppfylls." -#: engine/core/models.py:1126 +#: engine/core/models.py:1219 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" -#: engine/core/models.py:1127 +#: engine/core/models.py:1220 msgid "promo code identifier" msgstr "Identifierare för kampanjkod" -#: engine/core/models.py:1134 +#: engine/core/models.py:1227 msgid "fixed discount amount applied if percent is not used" msgstr "Fast rabattbelopp tillämpas om procent inte används" -#: engine/core/models.py:1135 +#: engine/core/models.py:1228 msgid "fixed discount amount" msgstr "Fast diskonteringsbelopp" -#: engine/core/models.py:1141 +#: engine/core/models.py:1234 msgid "percentage discount applied if fixed amount is not used" msgstr "Procentuell rabatt som tillämpas om fast belopp inte används" -#: engine/core/models.py:1142 +#: engine/core/models.py:1235 msgid "percentage discount" msgstr "Procentuell rabatt" -#: engine/core/models.py:1147 +#: engine/core/models.py:1240 msgid "timestamp when the promocode expires" msgstr "Tidsstämpel när kampanjkoden upphör att gälla" -#: engine/core/models.py:1148 +#: engine/core/models.py:1241 msgid "end validity time" msgstr "Slutgiltig giltighetstid" -#: engine/core/models.py:1153 +#: engine/core/models.py:1246 msgid "timestamp from which this promocode is valid" msgstr "Tidsstämpel från vilken denna promokod är giltig" -#: engine/core/models.py:1154 +#: engine/core/models.py:1247 msgid "start validity time" msgstr "Start giltighetstid" -#: engine/core/models.py:1159 +#: engine/core/models.py:1252 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" -#: engine/core/models.py:1160 +#: engine/core/models.py:1253 msgid "usage timestamp" msgstr "Tidsstämpel för användning" -#: engine/core/models.py:1165 +#: engine/core/models.py:1258 msgid "user assigned to this promocode if applicable" msgstr "Användare som tilldelats denna promokod om tillämpligt" -#: engine/core/models.py:1166 +#: engine/core/models.py:1259 msgid "assigned user" msgstr "Tilldelad användare" -#: engine/core/models.py:1173 +#: engine/core/models.py:1266 msgid "promo code" msgstr "Kampanjkod" -#: engine/core/models.py:1174 +#: engine/core/models.py:1267 msgid "promo codes" msgstr "Kampanjkoder" -#: engine/core/models.py:1190 +#: engine/core/models.py:1283 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2410,16 +2454,16 @@ msgstr "" "Endast en typ av rabatt ska definieras (belopp eller procent), men inte båda" " eller ingendera." -#: engine/core/models.py:1212 +#: engine/core/models.py:1305 msgid "promocode already used" msgstr "Promokoden har redan använts" -#: engine/core/models.py:1234 +#: engine/core/models.py:1327 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Ogiltig rabattyp för promokod {self.uuid}!" -#: engine/core/models.py:1243 +#: engine/core/models.py:1336 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 " @@ -2436,137 +2480,137 @@ msgstr "" "faktureringsuppgifter kan uppdateras. På samma sätt stöder funktionaliteten " "hanteringen av produkterna i orderns livscykel." -#: engine/core/models.py:1260 +#: engine/core/models.py:1357 msgid "the billing address used for this order" msgstr "Den faktureringsadress som används för denna order" -#: engine/core/models.py:1268 +#: engine/core/models.py:1365 msgid "optional promo code applied to this order" msgstr "Valfri kampanjkod tillämpas på denna beställning" -#: engine/core/models.py:1269 +#: engine/core/models.py:1366 msgid "applied promo code" msgstr "Tillämpad kampanjkod" -#: engine/core/models.py:1277 +#: engine/core/models.py:1374 msgid "the shipping address used for this order" msgstr "Den leveransadress som används för denna order" -#: engine/core/models.py:1278 +#: engine/core/models.py:1375 msgid "shipping address" msgstr "Leveransadress" -#: engine/core/models.py:1284 +#: engine/core/models.py:1381 msgid "current status of the order in its lifecycle" msgstr "Aktuell status för ordern i dess livscykel" -#: engine/core/models.py:1285 +#: engine/core/models.py:1382 msgid "order status" msgstr "Orderstatus" -#: engine/core/models.py:1290 engine/core/models.py:1889 +#: engine/core/models.py:1387 engine/core/models.py:1997 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" -#: engine/core/models.py:1296 +#: engine/core/models.py:1393 msgid "json representation of order attributes for this order" msgstr "JSON-representation av orderattribut för denna order" -#: engine/core/models.py:1302 +#: engine/core/models.py:1399 msgid "the user who placed the order" msgstr "Användaren som gjorde beställningen" -#: engine/core/models.py:1303 +#: engine/core/models.py:1400 msgid "user" msgstr "Användare" -#: engine/core/models.py:1309 +#: engine/core/models.py:1406 msgid "the timestamp when the order was finalized" msgstr "Tidsstämpel när ordern slutfördes" -#: engine/core/models.py:1310 +#: engine/core/models.py:1407 msgid "buy time" msgstr "Köp tid" -#: engine/core/models.py:1317 +#: engine/core/models.py:1414 msgid "a human-readable identifier for the order" msgstr "En mänskligt läsbar identifierare för ordern" -#: engine/core/models.py:1318 +#: engine/core/models.py:1415 msgid "human readable id" msgstr "mänskligt läsbart ID" -#: engine/core/models.py:1324 +#: engine/core/models.py:1421 msgid "order" msgstr "Beställning" -#: engine/core/models.py:1371 +#: engine/core/models.py:1468 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!" -#: engine/core/models.py:1404 +#: engine/core/models.py:1504 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" -#: engine/core/models.py:1410 +#: engine/core/models.py:1510 msgid "you cannot add inactive products to order" msgstr "Du kan inte lägga till inaktiva produkter i ordern" -#: engine/core/models.py:1432 +#: engine/core/models.py:1533 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" -#: engine/core/models.py:1456 engine/core/models.py:1485 -#: engine/core/models.py:1495 +#: engine/core/models.py:1557 engine/core/models.py:1586 +#: engine/core/models.py:1596 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" -#: engine/core/models.py:1480 +#: engine/core/models.py:1581 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} finns inte med frågan <{query}>!" -#: engine/core/models.py:1519 +#: engine/core/models.py:1620 msgid "promocode does not exist" msgstr "Promokoden finns inte" -#: engine/core/models.py:1534 +#: engine/core/models.py:1635 msgid "you can only buy physical products with shipping address specified" msgstr "Du kan bara köpa fysiska produkter med angiven leveransadress!" -#: engine/core/models.py:1555 +#: engine/core/models.py:1656 msgid "address does not exist" msgstr "Adressen finns inte" -#: engine/core/models.py:1577 engine/core/models.py:1656 +#: engine/core/models.py:1678 engine/core/models.py:1757 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." -#: engine/core/models.py:1583 engine/core/models.py:1649 +#: engine/core/models.py:1684 engine/core/models.py:1750 msgid "invalid force value" msgstr "Ogiltigt kraftvärde" -#: engine/core/models.py:1589 engine/core/models.py:1660 +#: engine/core/models.py:1690 engine/core/models.py:1761 msgid "you cannot purchase an empty order!" msgstr "Du kan inte köpa en tom order!" -#: engine/core/models.py:1610 +#: engine/core/models.py:1711 msgid "you cannot buy an order without a user" msgstr "Du kan inte köpa en order utan en användare!" -#: engine/core/models.py:1624 +#: engine/core/models.py:1725 msgid "a user without a balance cannot buy with balance" msgstr "En användare utan balans kan inte köpa med balans!" -#: engine/core/models.py:1630 +#: engine/core/models.py:1731 msgid "insufficient funds to complete the order" msgstr "Otillräckliga medel för att slutföra ordern" -#: engine/core/models.py:1671 +#: engine/core/models.py:1772 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2574,14 +2618,14 @@ msgstr "" "du kan inte köpa utan registrering, vänligen ange följande information: " "kundens namn, kundens e-post, kundens telefonnummer" -#: engine/core/models.py:1682 +#: engine/core/models.py:1783 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "Ogiltig betalningsmetod: {payment_method} från {available_payment_methods}!" -#: engine/core/models.py:1813 +#: engine/core/models.py:1916 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2596,34 +2640,34 @@ msgstr "" " betyg. Klassen använder databasfält för att effektivt modellera och hantera" " feedbackdata." -#: engine/core/models.py:1825 +#: engine/core/models.py:1928 msgid "user-provided comments about their experience with the product" msgstr "Kommentarer från användare om deras erfarenhet av produkten" -#: engine/core/models.py:1826 +#: engine/core/models.py:1929 msgid "feedback comments" msgstr "Återkoppling av kommentarer" -#: engine/core/models.py:1834 +#: engine/core/models.py:1937 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" -#: engine/core/models.py:1836 +#: engine/core/models.py:1939 msgid "related order product" msgstr "Relaterad order produkt" -#: engine/core/models.py:1841 +#: engine/core/models.py:1944 msgid "user-assigned rating for the product" msgstr "Användartilldelat betyg för produkten" -#: engine/core/models.py:1842 +#: engine/core/models.py:1945 msgid "product rating" msgstr "Produktbetyg" -#: engine/core/models.py:1862 +#: engine/core/models.py:1965 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2645,108 +2689,108 @@ msgstr "" " digitala produkter. Modellen integreras med Order- och Product-modellerna " "och lagrar en referens till dem." -#: engine/core/models.py:1877 +#: engine/core/models.py:1985 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" -#: engine/core/models.py:1878 +#: engine/core/models.py:1986 msgid "purchase price at order time" msgstr "Inköpspris vid ordertillfället" -#: engine/core/models.py:1883 +#: engine/core/models.py:1991 msgid "internal comments for admins about this ordered product" msgstr "Interna kommentarer för administratörer om denna beställda produkt" -#: engine/core/models.py:1884 +#: engine/core/models.py:1992 msgid "internal comments" msgstr "Interna kommentarer" -#: engine/core/models.py:1890 +#: engine/core/models.py:1998 msgid "user notifications" msgstr "Meddelanden till användare" -#: engine/core/models.py:1895 +#: engine/core/models.py:2003 msgid "json representation of this item's attributes" msgstr "JSON-representation av detta objekts attribut" -#: engine/core/models.py:1896 +#: engine/core/models.py:2004 msgid "ordered product attributes" msgstr "Sorterade produktattribut" -#: engine/core/models.py:1901 +#: engine/core/models.py:2009 msgid "reference to the parent order that contains this product" msgstr "Referens till den överordnade order som innehåller denna produkt" -#: engine/core/models.py:1902 +#: engine/core/models.py:2010 msgid "parent order" msgstr "Föräldraorder" -#: engine/core/models.py:1911 +#: engine/core/models.py:2019 msgid "the specific product associated with this order line" msgstr "Den specifika produkt som är kopplad till denna orderrad" -#: engine/core/models.py:1918 +#: engine/core/models.py:2026 msgid "quantity of this specific product in the order" msgstr "Antal av denna specifika produkt i ordern" -#: engine/core/models.py:1919 +#: engine/core/models.py:2027 msgid "product quantity" msgstr "Produktens kvantitet" -#: engine/core/models.py:1926 +#: engine/core/models.py:2034 msgid "current status of this product in the order" msgstr "Aktuell status för denna produkt i ordern" -#: engine/core/models.py:1927 +#: engine/core/models.py:2035 msgid "product line status" msgstr "Status för produktlinje" -#: engine/core/models.py:1998 +#: engine/core/models.py:2106 msgid "order product must have an order" msgstr "Orderprodukt måste ha en tillhörande order!" -#: engine/core/models.py:2000 +#: engine/core/models.py:2108 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Fel åtgärd angiven för återkoppling: {action}!" -#: engine/core/models.py:2017 +#: engine/core/models.py:2125 msgid "you cannot feedback an order which is not received" msgstr "du kan inte återkoppla en order som inte mottagits" -#: engine/core/models.py:2026 +#: engine/core/models.py:2132 engine/core/models.py:2227 msgid "name" msgstr "Namn" -#: engine/core/models.py:2028 +#: engine/core/models.py:2134 msgid "URL of the integration" msgstr "URL för integrationen" -#: engine/core/models.py:2031 +#: engine/core/models.py:2137 msgid "authentication credentials" msgstr "Autentiseringsuppgifter" -#: engine/core/models.py:2054 +#: engine/core/models.py:2160 msgid "you can only have one default CRM provider" msgstr "Du kan bara ha en CRM-leverantör som standard" -#: engine/core/models.py:2064 +#: engine/core/models.py:2170 msgid "CRM" msgstr "CRM" -#: engine/core/models.py:2065 +#: engine/core/models.py:2171 msgid "CRMs" msgstr "CRM-system" -#: engine/core/models.py:2081 +#: engine/core/models.py:2187 msgid "order CRM link" msgstr "Beställningens CRM-länk" -#: engine/core/models.py:2082 +#: engine/core/models.py:2188 msgid "orders CRM links" msgstr "Beställningarnas CRM-länkar" -#: engine/core/models.py:2087 +#: engine/core/models.py:2193 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2763,14 +2807,38 @@ msgstr "" "metod för att generera en URL för nedladdning av tillgången när den " "associerade ordern har statusen slutförd." -#: engine/core/models.py:2103 +#: engine/core/models.py:2209 msgid "download" msgstr "Nedladdningar" -#: engine/core/models.py:2104 +#: engine/core/models.py:2210 msgid "downloads" msgstr "Nedladdningar" +#: engine/core/models.py:2228 +msgid "descriptive name for the image" +msgstr "Beskrivande namn för bilden" + +#: engine/core/models.py:2233 +msgid "image file pasted in the markdown editor" +msgstr "Bildfil infogad i markdown-redigeraren" + +#: engine/core/models.py:2239 +msgid "alt text" +msgstr "Övrig text" + +#: engine/core/models.py:2240 +msgid "alternative text for accessibility" +msgstr "Alternativ text för tillgänglighet" + +#: engine/core/models.py:2244 +msgid "pasted image" +msgstr "Klistrad bild" + +#: engine/core/models.py:2245 +msgid "pasted images" +msgstr "Klistrade bilder" + #: engine/core/serializers/utility.py:91 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." @@ -2779,6 +2847,16 @@ msgstr "" " feedback." #: engine/core/sitemaps.py:25 +#: engine/core/templates/admin_doc/bookmarklets.html:8 +#: engine/core/templates/admin_doc/index.html:8 +#: engine/core/templates/admin_doc/missing_docutils.html:8 +#: engine/core/templates/admin_doc/model_detail.html:8 +#: engine/core/templates/admin_doc/model_index.html:8 +#: engine/core/templates/admin_doc/template_detail.html:8 +#: engine/core/templates/admin_doc/template_filter_index.html:8 +#: engine/core/templates/admin_doc/template_tag_index.html:8 +#: engine/core/templates/admin_doc/view_detail.html:8 +#: engine/core/templates/admin_doc/view_index.html:8 msgid "Home" msgstr "Hem" @@ -2831,45 +2909,34 @@ msgstr "Brutto" msgid "Dashboard" msgstr "Instrumentpanel" -#: engine/core/templates/admin/dashboard/_income_overview.html:7 +#: engine/core/templates/admin/dashboard/_income_overview.html:6 msgid "Income overview" msgstr "Översikt över intäkter" -#: engine/core/templates/admin/dashboard/_income_overview.html:31 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Net" +#: engine/core/templates/admin/dashboard/_income_overview.html:16 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" msgstr "Nettoomsättning" -#: engine/core/templates/admin/dashboard/_income_overview.html:37 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Taxes" -msgstr "Skatter" - -#: engine/core/templates/admin/dashboard/_income_overview.html:43 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 +#: engine/core/templates/admin/dashboard/_income_overview.html:21 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 msgid "Returns" msgstr "Avkastning" -#: engine/core/templates/admin/dashboard/_income_overview.html:48 -msgid "Gross (pie total)" -msgstr "Bruttointäkter" - -#: engine/core/templates/admin/dashboard/_income_overview.html:72 -msgid "No data" -msgstr "Inget datum" - +#: engine/core/templates/admin/dashboard/_income_overview.html:26 #: engine/core/templates/admin/dashboard/_kpis.html:6 msgid "GMV" msgstr "GMV" +#: engine/core/templates/admin/dashboard/_income_overview.html:50 +msgid "No data" +msgstr "Inget datum" + #: engine/core/templates/admin/dashboard/_kpis.html:34 msgid "AOV" msgstr "AOV" -#: engine/core/templates/admin/dashboard/_kpis.html:48 -msgid "Net revenue" -msgstr "Nettoomsättning" - #: engine/core/templates/admin/dashboard/_kpis.html:62 msgid "Refund rate" msgstr "Återbetalningsgrad" @@ -2882,7 +2949,7 @@ msgstr "Återlämnad" msgid "Low stock" msgstr "Låg lagerhållning" -#: engine/core/templates/admin/dashboard/_low_stock.html:29 +#: engine/core/templates/admin/dashboard/_low_stock.html:33 msgid "No low stock items." msgstr "Inga låglagervaror." @@ -2939,6 +3006,300 @@ msgstr "Ingen kategoriförsäljning under de senaste 30 dagarna." msgid "Django site admin" msgstr "Django webbplatsadministratör" +#: engine/core/templates/admin_doc/bookmarklets.html:4 +#: engine/core/templates/admin_doc/bookmarklets.html:17 +msgid "Documentation bookmarklets" +msgstr "Dokumentationsbokmärken" + +#: engine/core/templates/admin_doc/bookmarklets.html:10 +#: engine/core/templates/admin_doc/index.html:4 +#: engine/core/templates/admin_doc/index.html:10 +#: engine/core/templates/admin_doc/index.html:15 +#: engine/core/templates/admin_doc/missing_docutils.html:10 +#: engine/core/templates/admin_doc/missing_docutils.html:19 +#: engine/core/templates/admin_doc/model_detail.html:10 +#: engine/core/templates/admin_doc/model_index.html:10 +#: engine/core/templates/admin_doc/template_detail.html:10 +#: engine/core/templates/admin_doc/template_filter_index.html:10 +#: engine/core/templates/admin_doc/template_tag_index.html:10 +#: engine/core/templates/admin_doc/view_detail.html:10 +#: engine/core/templates/admin_doc/view_index.html:10 +msgid "Documentation" +msgstr "Dokumentation" + +#: engine/core/templates/admin_doc/bookmarklets.html:12 +#: engine/core/templates/admin_doc/index.html:53 +msgid "Bookmarklets" +msgstr "Bokmärken" + +#: engine/core/templates/admin_doc/bookmarklets.html:19 +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"För att installera bokmärken drar du länken till din bokmärkesfält eller " +"högerklickar på länken och lägger till den i dina bokmärken. Nu kan du välja" +" bokmärket från vilken sida som helst på webbplatsen." + +#: engine/core/templates/admin_doc/bookmarklets.html:29 +msgid "Documentation for this page" +msgstr "Dokumentation för denna sida" + +#: engine/core/templates/admin_doc/bookmarklets.html:31 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Tar dig från vilken sida som helst till dokumentationen för den vy som " +"genererar den sidan." + +#: engine/core/templates/admin_doc/index.html:21 +#: engine/core/templates/admin_doc/model_detail.html:12 +#: engine/core/templates/admin_doc/model_index.html:4 +#: engine/core/templates/admin_doc/model_index.html:12 +msgid "Models" +msgstr "Modeller" + +#: engine/core/templates/admin_doc/index.html:23 +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Modeller är beskrivningar av alla objekt i systemet och deras tillhörande " +"fält. Varje modell har en lista över fält som kan nås som mallvariabler." + +#: engine/core/templates/admin_doc/index.html:29 +#: engine/core/templates/admin_doc/view_detail.html:12 +#: engine/core/templates/admin_doc/view_index.html:4 +#: engine/core/templates/admin_doc/view_index.html:12 +msgid "Views" +msgstr "Vyer" + +#: engine/core/templates/admin_doc/index.html:31 +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Varje sida på den offentliga webbplatsen genereras av en vy. Vyn definierar " +"vilken mall som används för att generera sidan och vilka objekt som är " +"tillgängliga för den mallen." + +#: engine/core/templates/admin_doc/index.html:39 +msgid "List of all the template tags and their functions." +msgstr "Lista över alla malltaggar och deras funktioner." + +#: engine/core/templates/admin_doc/index.html:45 +#: engine/core/templates/admin_doc/template_filter_index.html:12 +msgid "Filters" +msgstr "Filter" + +#: engine/core/templates/admin_doc/index.html:47 +msgid "" +"Filters are actions which can be applied to variables in a template to alter" +" the output." +msgstr "" +"Filter är åtgärder som kan tillämpas på variabler i en mall för att ändra " +"utdata." + +#: engine/core/templates/admin_doc/index.html:55 +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Verktyg för din webbläsare för snabb åtkomst till administratörsfunktioner." + +#: engine/core/templates/admin_doc/missing_docutils.html:4 +msgid "Please install docutils" +msgstr "Installera docutils" + +#: engine/core/templates/admin_doc/missing_docutils.html:20 +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"Administrationsdokumentationssystemet kräver Pythons docutils-bibliotek." + +#: engine/core/templates/admin_doc/missing_docutils.html:21 +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Be dina administratörer att installera docutils." + +#: engine/core/templates/admin_doc/model_detail.html:4 +#, python-format +msgid "Model: %(name)s" +msgstr "Modell: %(name)s" + +#: engine/core/templates/admin_doc/model_detail.html:29 +msgid "Fields" +msgstr "Fält" + +#: engine/core/templates/admin_doc/model_detail.html:36 +msgid "Field" +msgstr "Fält" + +#: engine/core/templates/admin_doc/model_detail.html:37 +msgid "Type" +msgstr "Typ" + +#: engine/core/templates/admin_doc/model_detail.html:38 +#: engine/core/templates/admin_doc/model_detail.html:70 +msgid "Description" +msgstr "Beskrivning" + +#: engine/core/templates/admin_doc/model_detail.html:61 +msgid "Methods with arguments" +msgstr "Metoder med argument" + +#: engine/core/templates/admin_doc/model_detail.html:68 +msgid "Method" +msgstr "Metod" + +#: engine/core/templates/admin_doc/model_detail.html:69 +msgid "Arguments" +msgstr "Argument" + +#: engine/core/templates/admin_doc/model_detail.html:89 +msgid "Back to Model documentation" +msgstr "Tillbaka till modelldokumentationen" + +#: engine/core/templates/admin_doc/model_index.html:17 +msgid "Model documentation" +msgstr "Modell dokumentation" + +#: engine/core/templates/admin_doc/model_index.html:44 +msgid "Model groups" +msgstr "Modellgrupper" + +#: engine/core/templates/admin_doc/template_detail.html:4 +#, python-format +msgid "Template: %(name)s" +msgstr "Mall: %(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:12 +msgid "Templates" +msgstr "Mallar" + +#: engine/core/templates/admin_doc/template_detail.html:17 +#, python-format +msgid "" +"Template: %(name)s" +msgstr "" +"Mall: %(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:21 +#, python-format +msgid "Search path for template %(name)s:" +msgstr "Sökväg för mall %(name)s:" + +#: engine/core/templates/admin_doc/template_detail.html:29 +msgid "(does not exist)" +msgstr "(finns inte)" + +#: engine/core/templates/admin_doc/template_detail.html:40 +msgid "Back to Documentation" +msgstr "Tillbaka till dokumentation" + +#: engine/core/templates/admin_doc/template_filter_index.html:4 +msgid "Template filters" +msgstr "Mallfilter" + +#: engine/core/templates/admin_doc/template_filter_index.html:17 +msgid "Template filter documentation" +msgstr "Dokumentation för mallfilter" + +#: engine/core/templates/admin_doc/template_filter_index.html:26 +#: engine/core/templates/admin_doc/template_filter_index.html:52 +msgid "Built-in filters" +msgstr "Inbyggda filter" + +#: engine/core/templates/admin_doc/template_filter_index.html:29 +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before using" +" the filter." +msgstr "" +"För att använda dessa filter, lägg till %(code)s i din mall innan du " +"använder filtret." + +#: engine/core/templates/admin_doc/template_tag_index.html:4 +msgid "Template tags" +msgstr "Malltaggar" + +#: engine/core/templates/admin_doc/template_tag_index.html:17 +msgid "Template tag documentation" +msgstr "Dokumentation för malltaggar" + +#: engine/core/templates/admin_doc/template_tag_index.html:26 +#: engine/core/templates/admin_doc/template_tag_index.html:52 +msgid "Built-in tags" +msgstr "Inbyggda taggar" + +#: engine/core/templates/admin_doc/template_tag_index.html:29 +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using the tag." +msgstr "" +"För att använda dessa taggar, lägg in %(code)s i din mall innan du " +"använder taggen." + +#: engine/core/templates/admin_doc/view_detail.html:4 +#, python-format +msgid "View: %(name)s" +msgstr "Visa: %(name)s" + +#: engine/core/templates/admin_doc/view_detail.html:28 +msgid "Context:" +msgstr "Kontext:" + +#: engine/core/templates/admin_doc/view_detail.html:33 +msgid "Templates:" +msgstr "Mallar:" + +#: engine/core/templates/admin_doc/view_detail.html:41 +msgid "Back to View documentation" +msgstr "Tillbaka till Visa dokumentation" + +#: engine/core/templates/admin_doc/view_index.html:17 +msgid "View documentation" +msgstr "Visa dokumentation" + +#: engine/core/templates/admin_doc/view_index.html:28 +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Vyer efter namnområde %(name)s" + +#: engine/core/templates/admin_doc/view_index.html:30 +msgid "Views by empty namespace" +msgstr "Vyer efter tomt namnområde" + +#: engine/core/templates/admin_doc/view_index.html:40 +#, python-format +msgid "" +"View function: %(full_name)s. Name: %(url_name)s." +msgstr "" +"Visa funktion: %(full_name)s. Namn: %(url_name)s." + +#: engine/core/templates/admin_doc/view_index.html:54 +msgid "Jump to namespace" +msgstr "Gå till namnområde" + +#: engine/core/templates/admin_doc/view_index.html:59 +msgid "Empty namespace" +msgstr "Tomt namnområde" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -3039,7 +3400,7 @@ msgstr "" " information" #: engine/core/templates/digital_order_delivered_email.html:137 -#: engine/core/templates/json_table_widget.html:6 +#: engine/core/templates/json_table_widget.html:26 msgid "value" msgstr "Värde" @@ -3059,11 +3420,23 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "Bästa hälsningar,
teamet %(project_name)s" -#: engine/core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:7 +msgid "Key" +msgstr "Nyckel" + +#: engine/core/templates/json_table_widget.html:8 +msgid "Value" +msgstr "Värde" + +#: engine/core/templates/json_table_widget.html:19 msgid "key" msgstr "Nyckel" -#: engine/core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:32 +msgid "Delete row" +msgstr "Ta bort rad" + +#: engine/core/templates/json_table_widget.html:44 msgid "Add Row" msgstr "Lägg till rad" @@ -3150,12 +3523,21 @@ msgstr "Du har inte behörighet att utföra den här åtgärden." msgid "NOMINATIM_URL must be configured." msgstr "Parametern NOMINATIM_URL måste konfigureras!" -#: engine/core/validators.py:23 +#: engine/core/validators.py:18 +msgid "could not determine file type" +msgstr "Det gick inte att fastställa filtypen." + +#: engine/core/validators.py:24 +#, python-brace-format +msgid "unsupported video format. supported formats: {supported}" +msgstr "Videoformat som inte stöds. Format som stöds: {supported}" + +#: engine/core/validators.py:45 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "Bildmåtten får inte överstiga w{max_width} x h{max_height} pixlar!" -#: engine/core/views.py:104 +#: engine/core/views.py:108 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3163,7 +3545,7 @@ msgstr "" "Hanterar begäran om index för webbplatskartan och returnerar ett XML-svar. " "Den ser till att svaret innehåller rätt innehållstypshuvud för XML." -#: engine/core/views.py:119 +#: engine/core/views.py:123 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3173,16 +3555,16 @@ msgstr "" "bearbetar begäran, hämtar det lämpliga detaljerade svaret för " "webbplatskartan och ställer in Content-Type-huvudet för XML." -#: engine/core/views.py:155 +#: engine/core/views.py:174 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "Returnerar en lista över språk som stöds och motsvarande information." -#: engine/core/views.py:182 +#: engine/core/views.py:201 msgid "Returns the parameters of the website as a JSON object." msgstr "Returnerar webbplatsens parametrar som ett JSON-objekt." -#: engine/core/views.py:198 +#: engine/core/views.py:217 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3190,11 +3572,11 @@ msgstr "" "Hanterar cacheoperationer som att läsa och ställa in cachedata med en " "angiven nyckel och timeout." -#: engine/core/views.py:220 +#: engine/core/views.py:239 msgid "Handles `contact us` form submissions." msgstr "Hanterar formulärinlämningar för `kontakta oss`." -#: engine/core/views.py:236 +#: engine/core/views.py:255 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3202,15 +3584,15 @@ msgstr "" "Hanterar förfrågningar om bearbetning och validering av URL:er från " "inkommande POST-förfrågningar." -#: engine/core/views.py:273 +#: engine/core/views.py:292 msgid "Handles global search queries." msgstr "Hanterar globala sökfrågor." -#: engine/core/views.py:289 +#: engine/core/views.py:308 msgid "Handles the logic of buying as a business without registration." msgstr "Hanterar logiken i att köpa som ett företag utan registrering." -#: engine/core/views.py:337 +#: engine/core/views.py:356 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3218,31 +3600,31 @@ msgstr "" "Hanterar nedladdning av en digital tillgång som är kopplad till en order.\n" "Denna funktion försöker servera den digitala tillgångsfilen som finns i lagringskatalogen för projektet. Om filen inte hittas visas ett HTTP 404-fel som indikerar att resursen inte är tillgänglig." -#: engine/core/views.py:348 +#: engine/core/views.py:367 msgid "order_product_uuid is required" msgstr "order_product_uuid är obligatoriskt" -#: engine/core/views.py:355 +#: engine/core/views.py:374 msgid "order product does not exist" msgstr "Beställ produkten finns inte" -#: engine/core/views.py:358 +#: engine/core/views.py:377 msgid "you can only download the digital asset once" msgstr "Du kan bara ladda ner den digitala tillgången en gång" -#: engine/core/views.py:362 +#: engine/core/views.py:381 msgid "the order must be paid before downloading the digital asset" msgstr "beställningen måste betalas innan den digitala tillgången laddas ner" -#: engine/core/views.py:369 +#: engine/core/views.py:388 msgid "the order product does not have a product" msgstr "Beställningens produkt har ingen produkt" -#: engine/core/views.py:412 +#: engine/core/views.py:431 msgid "favicon not found" msgstr "favicon hittades inte" -#: engine/core/views.py:418 +#: engine/core/views.py:437 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3250,7 +3632,7 @@ msgstr "" "Hanterar förfrågningar om favicon på en webbplats.\n" "Denna funktion försöker servera favicon-filen som finns i den statiska katalogen i projektet. Om favicon-filen inte hittas visas ett HTTP 404-fel som anger att resursen inte är tillgänglig." -#: engine/core/views.py:432 +#: engine/core/views.py:451 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3261,16 +3643,20 @@ msgstr "" "admin-gränssnitt. Den använder Djangos `redirect`-funktion för att hantera " "HTTP-omdirigeringen." -#: engine/core/views.py:445 +#: engine/core/views.py:464 msgid "Returns current version of the Schon. " msgstr "Returnerar aktuell version av Schon." -#: engine/core/views.py:674 engine/core/views.py:689 +#: engine/core/views.py:475 +msgid "no image file provided" +msgstr "Ingen bildfil tillhandahållen" + +#: engine/core/views.py:710 engine/core/views.py:725 #, python-format msgid "Revenue & Orders (last %(days)d)" msgstr "Intäkter och order (senast %(days)d)" -#: engine/core/views.py:870 +#: engine/core/views.py:911 msgid "Returns custom variables for Dashboard. " msgstr "Returnerar anpassade variabler för Dashboard." @@ -3358,7 +3744,7 @@ msgstr "" "Brand-objekt. Den använder Djangos ViewSet-ramverk för att förenkla " "implementeringen av API-slutpunkter för varumärkesobjekt." -#: engine/core/viewsets.py:458 +#: engine/core/viewsets.py:460 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3376,7 +3762,15 @@ msgstr "" "att hämta produktinformation, tillämpa behörigheter och få tillgång till " "relaterad feedback för en produkt." -#: engine/core/viewsets.py:605 +#: engine/core/viewsets.py:541 +msgid "identificator_type and identificators are required" +msgstr "identificator_type och identificators är obligatoriska" + +#: engine/core/viewsets.py:554 +msgid "identificator_type must be one of: uuid, slug, sku" +msgstr "identificator_type måste vara något av följande: uuid, slug, sku" + +#: engine/core/viewsets.py:635 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3390,7 +3784,7 @@ msgstr "" "olika åtgärder. Syftet med denna klass är att ge strömlinjeformad åtkomst " "till Vendor-relaterade resurser genom Django REST-ramverket." -#: engine/core/viewsets.py:625 +#: engine/core/viewsets.py:655 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3407,7 +3801,7 @@ msgstr "" "basen `SchonViewSet` och använder Djangos filtreringssystem för att fråga " "data." -#: engine/core/viewsets.py:652 +#: engine/core/viewsets.py:682 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3426,7 +3820,7 @@ msgstr "" "åtgärd som utförs och verkställer behörigheter i enlighet med detta vid " "interaktion med orderdata." -#: engine/core/viewsets.py:914 +#: engine/core/viewsets.py:944 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3441,11 +3835,11 @@ msgstr "" "åtgärden. Dessutom innehåller den en detaljerad åtgärd för att hantera " "feedback på OrderProduct-instanser" -#: engine/core/viewsets.py:974 +#: engine/core/viewsets.py:1004 msgid "Manages operations related to Product images in the application. " msgstr "Hanterar åtgärder relaterade till produktbilder i applikationen." -#: engine/core/viewsets.py:988 +#: engine/core/viewsets.py:1018 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3453,15 +3847,15 @@ msgstr "" "Hanterar hämtning och hantering av PromoCode-instanser genom olika API-" "åtgärder." -#: engine/core/viewsets.py:1019 +#: engine/core/viewsets.py:1049 msgid "Represents a view set for managing promotions. " msgstr "Representerar en vyuppsättning för hantering av kampanjer." -#: engine/core/viewsets.py:1032 +#: engine/core/viewsets.py:1062 msgid "Handles operations related to Stock data in the system." msgstr "Hanterar åtgärder relaterade till lagerdata i systemet." -#: engine/core/viewsets.py:1046 +#: engine/core/viewsets.py:1076 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3479,7 +3873,7 @@ msgstr "" "integrerade för att säkerställa att användare endast kan hantera sina egna " "önskelistor om inte uttryckliga behörigheter beviljas." -#: engine/core/viewsets.py:1183 +#: engine/core/viewsets.py:1213 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3493,12 +3887,12 @@ msgstr "" "innehåller specialiserade beteenden för olika HTTP-metoder, serializer-" "överskrivningar och behörighetshantering baserat på förfrågningskontexten." -#: engine/core/viewsets.py:1254 +#: engine/core/viewsets.py:1275 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Fel i geokodningen: {e}" -#: engine/core/viewsets.py:1262 +#: engine/core/viewsets.py:1283 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/th_TH/LC_MESSAGES/django.mo b/engine/core/locale/th_TH/LC_MESSAGES/django.mo index 5b480144..e2f62cba 100644 Binary files a/engine/core/locale/th_TH/LC_MESSAGES/django.mo and b/engine/core/locale/th_TH/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/th_TH/LC_MESSAGES/django.po b/engine/core/locale/th_TH/LC_MESSAGES/django.po index 839fbc3b..b59d2a6e 100644 --- a/engine/core/locale/th_TH/LC_MESSAGES/django.po +++ b/engine/core/locale/th_TH/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -49,113 +49,133 @@ msgstr "แก้ไขแล้ว" msgid "when the object was last modified" msgstr "เมื่อครั้งล่าสุดที่มีการแก้ไขวัตถุ" -#: engine/core/admin.py:94 +#: engine/core/admin.py:98 msgid "translations" msgstr "การแปล" -#: engine/core/admin.py:102 +#: engine/core/admin.py:106 msgid "general" msgstr "ทั่วไป" -#: engine/core/admin.py:106 +#: engine/core/admin.py:110 msgid "relations" msgstr "ความสัมพันธ์" -#: engine/core/admin.py:111 +#: engine/core/admin.py:115 msgid "additional info" msgstr "ข้อมูลเพิ่มเติม" -#: engine/core/admin.py:133 +#: engine/core/admin.py:137 msgid "metadata" msgstr "เมตาดาตา" -#: engine/core/admin.py:141 +#: engine/core/admin.py:145 msgid "timestamps" msgstr "เวลาที่บันทึก" -#: engine/core/admin.py:158 +#: engine/core/admin.py:162 #, python-format msgid "Activate selected %(verbose_name_plural)s" msgstr "เปิดใช้งานที่เลือกไว้ %(verbose_name_plural)s" -#: engine/core/admin.py:166 +#: engine/core/admin.py:170 msgid "selected items have been activated." msgstr "รายการที่เลือกไว้ได้รับการเปิดใช้งานแล้ว!" -#: engine/core/admin.py:174 +#: engine/core/admin.py:178 #, python-format msgid "Deactivate selected %(verbose_name_plural)s" msgstr "ยกเลิกการใช้งานที่เลือกไว้ %(verbose_name_plural)s" -#: engine/core/admin.py:184 +#: engine/core/admin.py:188 msgid "selected items have been deactivated." msgstr "รายการที่เลือกถูกยกเลิกการใช้งานแล้ว!" -#: engine/core/admin.py:196 engine/core/graphene/object_types.py:653 -#: engine/core/graphene/object_types.py:660 engine/core/models.py:832 -#: engine/core/models.py:840 +#: engine/core/admin.py:200 engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:673 engine/core/models.py:918 +#: engine/core/models.py:928 msgid "attribute value" msgstr "ค่าคุณสมบัติ" -#: engine/core/admin.py:197 engine/core/graphene/object_types.py:77 -#: engine/core/models.py:841 +#: engine/core/admin.py:201 engine/core/graphene/object_types.py:81 +#: engine/core/models.py:929 msgid "attribute values" msgstr "ค่าของแอตทริบิวต์" -#: engine/core/admin.py:208 +#: engine/core/admin.py:212 engine/core/models.py:2232 msgid "image" msgstr "ภาพ" -#: engine/core/admin.py:209 engine/core/graphene/object_types.py:530 +#: engine/core/admin.py:213 engine/core/graphene/object_types.py:535 msgid "images" msgstr "รูปภาพ" -#: engine/core/admin.py:220 engine/core/models.py:576 +#: engine/core/admin.py:224 engine/core/models.py:635 msgid "stock" msgstr "สต็อก" -#: engine/core/admin.py:221 engine/core/graphene/object_types.py:713 +#: engine/core/admin.py:225 engine/core/graphene/object_types.py:735 msgid "stocks" msgstr "หุ้น" -#: engine/core/admin.py:232 engine/core/models.py:1938 +#: engine/core/admin.py:236 engine/core/models.py:2046 msgid "order product" msgstr "สั่งซื้อสินค้า" -#: engine/core/admin.py:233 engine/core/graphene/object_types.py:441 -#: engine/core/models.py:1939 +#: engine/core/admin.py:237 engine/core/graphene/object_types.py:446 +#: engine/core/models.py:2047 msgid "order products" msgstr "สั่งซื้อสินค้า" -#: engine/core/admin.py:251 engine/core/admin.py:252 +#: engine/core/admin.py:255 engine/core/admin.py:256 msgid "children" msgstr "เด็ก" -#: engine/core/admin.py:528 +#: engine/core/admin.py:545 +msgid "video preview" +msgstr "วิดีโอตัวอย่าง" + +#: engine/core/admin.py:551 msgid "has images" msgstr "มีรูปภาพ" -#: engine/core/admin.py:531 +#: engine/core/admin.py:554 #, python-format msgid "Export selected %(verbose_name_plural)s to marketplaces' feeds" msgstr "ส่งออก %(verbose_name_plural)s ที่เลือกไปยังฟีดของตลาด" -#: engine/core/admin.py:542 +#: engine/core/admin.py:565 #, python-format msgid "selected %(verbose_name_plural)s have been marked for export." msgstr "%(verbose_name_plural)s ที่เลือกไว้ได้รับการทำเครื่องหมายเพื่อส่งออก" -#: engine/core/admin.py:553 +#: engine/core/admin.py:576 #, python-format msgid "Ban selected %(verbose_name_plural)s from marketplaces' feeds" msgstr "Ban ได้เลือก %(verbose_name_plural)s จากฟีดของตลาด" -#: engine/core/admin.py:564 +#: engine/core/admin.py:587 #, python-format msgid "selected %(verbose_name_plural)s have been banned from export." msgstr "%(verbose_name_plural)s ที่เลือกไว้ถูกห้ามส่งออก" -#: engine/core/admin.py:1116 +#: engine/core/admin.py:1030 +msgid "Preview" +msgstr "ตัวอย่าง" + +#: engine/core/admin.py:1031 +msgid "Metadata" +msgstr "เมตาดาตา" + +#: engine/core/admin.py:1034 +msgid "preview" +msgstr "ตัวอย่าง" + +#: engine/core/admin.py:1043 +msgid "image preview" +msgstr "ภาพตัวอย่าง" + +#: engine/core/admin.py:1166 msgid "Config" msgstr "การกำหนดค่า" @@ -221,7 +241,7 @@ msgstr "" "OpenApi3 schema สำหรับ API นี้. รูปแบบสามารถเลือกได้ผ่านการเจรจาเนื้อหา. " "ภาษาสามารถเลือกได้ทั้งผ่าน Accept-Language และพารามิเตอร์ค้นหา." -#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:36 +#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "แคช I/O" @@ -245,7 +265,7 @@ msgstr "รับพารามิเตอร์ที่สามารถเ msgid "send a message to the support team" msgstr "ส่งข้อความถึงทีมสนับสนุน" -#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:59 msgid "request a CORSed URL" msgstr "ขอ URL ที่รองรับ CORS เท่านั้น อนุญาตเฉพาะ https" @@ -384,11 +404,11 @@ msgstr "" "เขียนฟิลด์บางส่วนของหมวดหมู่ที่มีอยู่แล้วใหม่ " "โดยบันทึกเฉพาะข้อมูลที่ไม่สามารถแก้ไขได้" -#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757 -#: engine/core/docs/drf/viewsets.py:1046 -#: engine/core/graphene/object_types.py:119 -#: engine/core/graphene/object_types.py:239 -#: engine/core/graphene/object_types.py:540 +#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:781 +#: engine/core/docs/drf/viewsets.py:1070 +#: engine/core/graphene/object_types.py:123 +#: engine/core/graphene/object_types.py:247 +#: engine/core/graphene/object_types.py:546 msgid "SEO Meta snapshot" msgstr "SEO Meta snapshot" @@ -676,7 +696,7 @@ msgstr "ดึงข้อมูลสินค้าเพียงรายก #: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683 #: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725 -#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763 +#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:787 msgid "Product UUID or slug" msgstr "รหัส UUID ของผลิตภัณฑ์ หรือชื่อเรียก" @@ -702,284 +722,297 @@ msgstr "ลบผลิตภัณฑ์" msgid "lists all permitted feedbacks for a product" msgstr "แสดงรายการข้อเสนอแนะที่ได้รับอนุญาตทั้งหมดสำหรับผลิตภัณฑ์" -#: engine/core/docs/drf/viewsets.py:758 +#: engine/core/docs/drf/viewsets.py:757 +msgid "retrieve exact products by identifier" +msgstr "ดึงข้อมูลผลิตภัณฑ์ที่ตรงตามรหัส" + +#: engine/core/docs/drf/viewsets.py:759 +msgid "" +"retrieve a list of products by identifier type (uuid, slug, or sku). Send a " +"POST request with `identificator_type` and `identificators` (list of " +"values)." +msgstr "" +"ดึงรายการสินค้าตามประเภทของตัวระบุ (uuid, slug หรือ sku) ส่งคำขอ POST พร้อม " +"`identificator_type` และ `identificators` (รายการค่า)" + +#: engine/core/docs/drf/viewsets.py:782 msgid "returns a snapshot of the product's SEO meta data" msgstr "ส่งคืนภาพรวมของข้อมูลเมตา SEO ของผลิตภัณฑ์" -#: engine/core/docs/drf/viewsets.py:779 +#: engine/core/docs/drf/viewsets.py:803 msgid "list all addresses" msgstr "รายการที่อยู่ทั้งหมด" -#: engine/core/docs/drf/viewsets.py:789 +#: engine/core/docs/drf/viewsets.py:813 msgid "retrieve a single address" msgstr "ดึงที่อยู่เดียว" -#: engine/core/docs/drf/viewsets.py:799 +#: engine/core/docs/drf/viewsets.py:823 msgid "create a new address" msgstr "สร้างที่อยู่ใหม่" -#: engine/core/docs/drf/viewsets.py:810 +#: engine/core/docs/drf/viewsets.py:834 msgid "delete an address" msgstr "ลบที่อยู่" -#: engine/core/docs/drf/viewsets.py:820 +#: engine/core/docs/drf/viewsets.py:844 msgid "update an entire address" msgstr "อัปเดตที่อยู่ทั้งหมด" -#: engine/core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:855 msgid "partially update an address" msgstr "อัปเดตที่อยู่บางส่วน" -#: engine/core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:866 msgid "autocomplete address suggestions" msgstr "การเติมที่อยู่โดยอัตโนมัติ" -#: engine/core/docs/drf/viewsets.py:848 +#: engine/core/docs/drf/viewsets.py:872 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "ข้อมูลดิบสำหรับคำค้นหา กรุณาเพิ่มข้อมูลจากจุดสิ้นสุด geo-IP" -#: engine/core/docs/drf/viewsets.py:855 +#: engine/core/docs/drf/viewsets.py:879 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "จำกัดจำนวนผลลัพธ์, 1 < limit < 10, ค่าเริ่มต้น: 5" -#: engine/core/docs/drf/viewsets.py:871 +#: engine/core/docs/drf/viewsets.py:895 msgid "list all feedbacks (simple view)" msgstr "แสดงความคิดเห็นทั้งหมด (มุมมองแบบง่าย)" -#: engine/core/docs/drf/viewsets.py:881 +#: engine/core/docs/drf/viewsets.py:905 msgid "retrieve a single feedback (detailed view)" msgstr "ดึงข้อมูลความคิดเห็นหนึ่งรายการ (มุมมองแบบละเอียด)" -#: engine/core/docs/drf/viewsets.py:888 +#: engine/core/docs/drf/viewsets.py:912 msgid "create a feedback" msgstr "สร้างข้อเสนอแนะ" -#: engine/core/docs/drf/viewsets.py:895 +#: engine/core/docs/drf/viewsets.py:919 msgid "delete a feedback" msgstr "ลบความคิดเห็น" -#: engine/core/docs/drf/viewsets.py:902 +#: engine/core/docs/drf/viewsets.py:926 msgid "rewrite an existing feedback saving non-editables" msgstr "เขียนใหม่ข้อเสนอแนะที่มีอยู่โดยไม่แก้ไขส่วนที่ไม่สามารถแก้ไขได้" -#: engine/core/docs/drf/viewsets.py:909 +#: engine/core/docs/drf/viewsets.py:933 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" "เขียนข้อมูลบางส่วนของฟิลด์ในข้อเสนอแนะที่มีอยู่ใหม่ " "โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้" -#: engine/core/docs/drf/viewsets.py:919 +#: engine/core/docs/drf/viewsets.py:943 msgid "list all order–product relations (simple view)" msgstr "แสดงความสัมพันธ์ระหว่างคำสั่งซื้อและผลิตภัณฑ์ทั้งหมด (มุมมองแบบง่าย)" -#: engine/core/docs/drf/viewsets.py:929 +#: engine/core/docs/drf/viewsets.py:953 msgid "retrieve a single order–product relation (detailed view)" msgstr "" "ดึงความสัมพันธ์ระหว่างคำสั่งซื้อและผลิตภัณฑ์เพียงรายการเดียว " "(มุมมองรายละเอียด)" -#: engine/core/docs/drf/viewsets.py:939 +#: engine/core/docs/drf/viewsets.py:963 msgid "create a new order–product relation" msgstr "สร้างความสัมพันธ์ระหว่างคำสั่งซื้อและผลิตภัณฑ์ใหม่" -#: engine/core/docs/drf/viewsets.py:949 +#: engine/core/docs/drf/viewsets.py:973 msgid "replace an existing order–product relation" msgstr "แทนที่ความสัมพันธ์ระหว่างคำสั่งซื้อและผลิตภัณฑ์ที่มีอยู่" -#: engine/core/docs/drf/viewsets.py:959 +#: engine/core/docs/drf/viewsets.py:983 msgid "partially update an existing order–product relation" msgstr "อัปเดตบางส่วนของความสัมพันธ์ระหว่างคำสั่งซื้อและผลิตภัณฑ์ที่มีอยู่" -#: engine/core/docs/drf/viewsets.py:969 +#: engine/core/docs/drf/viewsets.py:993 msgid "delete an order–product relation" msgstr "ลบความสัมพันธ์ระหว่างคำสั่งซื้อและสินค้า" -#: engine/core/docs/drf/viewsets.py:979 +#: engine/core/docs/drf/viewsets.py:1003 msgid "add or remove feedback on an order–product relation" msgstr "" "เพิ่มหรือลบความคิดเห็นเกี่ยวกับความสัมพันธ์ระหว่างคำสั่งซื้อและผลิตภัณฑ์" -#: engine/core/docs/drf/viewsets.py:996 +#: engine/core/docs/drf/viewsets.py:1020 msgid "list all brands (simple view)" msgstr "แสดงรายการทั้งหมดของแบรนด์ (มุมมองแบบง่าย)" -#: engine/core/docs/drf/viewsets.py:1003 +#: engine/core/docs/drf/viewsets.py:1027 msgid "retrieve a single brand (detailed view)" msgstr "ดึงข้อมูลแบรนด์เดียว (มุมมองรายละเอียด)" -#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051 +#: engine/core/docs/drf/viewsets.py:1032 engine/core/docs/drf/viewsets.py:1075 msgid "Brand UUID or slug" msgstr "แบรนด์ UUID หรือ slug" -#: engine/core/docs/drf/viewsets.py:1018 +#: engine/core/docs/drf/viewsets.py:1042 msgid "create a brand" msgstr "สร้างแบรนด์" -#: engine/core/docs/drf/viewsets.py:1025 +#: engine/core/docs/drf/viewsets.py:1049 msgid "delete a brand" msgstr "ลบแบรนด์" -#: engine/core/docs/drf/viewsets.py:1032 +#: engine/core/docs/drf/viewsets.py:1056 msgid "rewrite an existing brand saving non-editables" msgstr "เขียนใหม่แบรนด์ที่มีอยู่โดยไม่แก้ไขส่วนที่ไม่สามารถแก้ไขได้" -#: engine/core/docs/drf/viewsets.py:1039 +#: engine/core/docs/drf/viewsets.py:1063 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "" "เขียนข้อมูลในบางช่องของแบรนด์ที่มีอยู่ใหม่ " "โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้" -#: engine/core/docs/drf/viewsets.py:1064 +#: engine/core/docs/drf/viewsets.py:1088 msgid "list all vendors (simple view)" msgstr "แสดงรายชื่อผู้จำหน่ายทั้งหมด (มุมมองแบบง่าย)" -#: engine/core/docs/drf/viewsets.py:1074 +#: engine/core/docs/drf/viewsets.py:1098 msgid "retrieve a single vendor (detailed view)" msgstr "ดึงข้อมูลผู้ขายรายเดียว (มุมมองรายละเอียด)" -#: engine/core/docs/drf/viewsets.py:1081 +#: engine/core/docs/drf/viewsets.py:1105 msgid "create a vendor" msgstr "สร้างผู้ขาย" -#: engine/core/docs/drf/viewsets.py:1088 +#: engine/core/docs/drf/viewsets.py:1112 msgid "delete a vendor" msgstr "ลบผู้ขาย" -#: engine/core/docs/drf/viewsets.py:1095 +#: engine/core/docs/drf/viewsets.py:1119 msgid "rewrite an existing vendor saving non-editables" msgstr "เขียนใหม่ผู้ขายที่มีอยู่โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้" -#: engine/core/docs/drf/viewsets.py:1102 +#: engine/core/docs/drf/viewsets.py:1126 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "" "เขียนข้อมูลในบางช่องของซัพพลายเออร์ที่มีอยู่แล้วใหม่ " "โดยเก็บค่าที่ไม่สามารถแก้ไขได้ไว้" -#: engine/core/docs/drf/viewsets.py:1112 +#: engine/core/docs/drf/viewsets.py:1136 msgid "list all product images (simple view)" msgstr "แสดงภาพสินค้าทั้งหมด (มุมมองแบบง่าย)" -#: engine/core/docs/drf/viewsets.py:1122 +#: engine/core/docs/drf/viewsets.py:1146 msgid "retrieve a single product image (detailed view)" msgstr "ดึงภาพสินค้าเพียงหนึ่งรายการ (มุมมองรายละเอียด)" -#: engine/core/docs/drf/viewsets.py:1129 +#: engine/core/docs/drf/viewsets.py:1153 msgid "create a product image" msgstr "สร้างภาพสินค้า" -#: engine/core/docs/drf/viewsets.py:1139 +#: engine/core/docs/drf/viewsets.py:1163 msgid "delete a product image" msgstr "ลบรูปภาพสินค้า" -#: engine/core/docs/drf/viewsets.py:1146 +#: engine/core/docs/drf/viewsets.py:1170 msgid "rewrite an existing product image saving non-editables" msgstr "เขียนภาพสินค้าที่มีอยู่ใหม่โดยเก็บส่วนที่ไม่สามารถแก้ไขได้" -#: engine/core/docs/drf/viewsets.py:1154 +#: engine/core/docs/drf/viewsets.py:1178 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "" "เขียนข้อมูลบางส่วนของภาพสินค้าที่มีอยู่ใหม่ " "โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้" -#: engine/core/docs/drf/viewsets.py:1165 +#: engine/core/docs/drf/viewsets.py:1189 msgid "list all promo codes (simple view)" msgstr "แสดงรายการรหัสโปรโมชั่นทั้งหมด (มุมมองแบบง่าย)" -#: engine/core/docs/drf/viewsets.py:1175 +#: engine/core/docs/drf/viewsets.py:1199 msgid "retrieve a single promo code (detailed view)" msgstr "ดึงรหัสโปรโมชั่นเพียงหนึ่งรายการ (มุมมองแบบละเอียด)" -#: engine/core/docs/drf/viewsets.py:1182 +#: engine/core/docs/drf/viewsets.py:1206 msgid "create a promo code" msgstr "สร้างรหัสโปรโมชั่น" -#: engine/core/docs/drf/viewsets.py:1189 +#: engine/core/docs/drf/viewsets.py:1213 msgid "delete a promo code" msgstr "ลบโค้ดโปรโมชั่น" -#: engine/core/docs/drf/viewsets.py:1196 +#: engine/core/docs/drf/viewsets.py:1220 msgid "rewrite an existing promo code saving non-editables" msgstr "เขียนโค้ดโปรโมชั่นใหม่โดยคงส่วนที่ไม่สามารถแก้ไขได้ไว้" -#: engine/core/docs/drf/viewsets.py:1203 +#: engine/core/docs/drf/viewsets.py:1227 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "" "เขียนฟิลด์บางส่วนของรหัสโปรโมชั่นที่มีอยู่ใหม่ " "โดยคงค่าที่ไม่สามารถแก้ไขได้ไว้" -#: engine/core/docs/drf/viewsets.py:1213 +#: engine/core/docs/drf/viewsets.py:1237 msgid "list all promotions (simple view)" msgstr "รายการโปรโมชั่นทั้งหมด (มุมมองแบบง่าย)" -#: engine/core/docs/drf/viewsets.py:1223 +#: engine/core/docs/drf/viewsets.py:1247 msgid "retrieve a single promotion (detailed view)" msgstr "ดึงข้อมูลโปรโมชั่นเดียว (มุมมองรายละเอียด)" -#: engine/core/docs/drf/viewsets.py:1230 +#: engine/core/docs/drf/viewsets.py:1254 msgid "create a promotion" msgstr "สร้างโปรโมชั่น" -#: engine/core/docs/drf/viewsets.py:1237 +#: engine/core/docs/drf/viewsets.py:1261 msgid "delete a promotion" msgstr "ลบโปรโมชั่น" -#: engine/core/docs/drf/viewsets.py:1244 +#: engine/core/docs/drf/viewsets.py:1268 msgid "rewrite an existing promotion saving non-editables" msgstr "เขียนโปรโมชั่นใหม่โดยคงส่วนที่ไม่สามารถแก้ไขได้ไว้" -#: engine/core/docs/drf/viewsets.py:1251 +#: engine/core/docs/drf/viewsets.py:1275 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "" "เขียนข้อมูลบางส่วนของโปรโมชั่นที่มีอยู่ใหม่ " "โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้" -#: engine/core/docs/drf/viewsets.py:1261 +#: engine/core/docs/drf/viewsets.py:1285 msgid "list all stocks (simple view)" msgstr "แสดงรายการหุ้นทั้งหมด (มุมมองแบบง่าย)" -#: engine/core/docs/drf/viewsets.py:1268 +#: engine/core/docs/drf/viewsets.py:1292 msgid "retrieve a single stock (detailed view)" msgstr "ดึงข้อมูลสินค้าคงคลังหนึ่งรายการ (มุมมองรายละเอียด)" -#: engine/core/docs/drf/viewsets.py:1275 +#: engine/core/docs/drf/viewsets.py:1299 msgid "create a stock record" msgstr "สร้างบันทึกสินค้าคงคลัง" -#: engine/core/docs/drf/viewsets.py:1282 +#: engine/core/docs/drf/viewsets.py:1306 msgid "delete a stock record" msgstr "ลบข้อมูลสินค้าคงคลัง" -#: engine/core/docs/drf/viewsets.py:1289 +#: engine/core/docs/drf/viewsets.py:1313 msgid "rewrite an existing stock record saving non-editables" msgstr "เขียนบันทึกสต็อกที่มีอยู่ใหม่โดยบันทึกข้อมูลที่ไม่สามารถแก้ไขได้" -#: engine/core/docs/drf/viewsets.py:1297 +#: engine/core/docs/drf/viewsets.py:1321 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "" "เขียนฟิลด์บางส่วนของบันทึกสต็อกที่มีอยู่ใหม่ " "โดยบันทึกข้อมูลที่ไม่สามารถแก้ไขได้" -#: engine/core/docs/drf/viewsets.py:1308 +#: engine/core/docs/drf/viewsets.py:1332 msgid "list all product tags (simple view)" msgstr "แสดงแท็กสินค้าทั้งหมด (มุมมองแบบง่าย)" -#: engine/core/docs/drf/viewsets.py:1318 +#: engine/core/docs/drf/viewsets.py:1342 msgid "retrieve a single product tag (detailed view)" msgstr "ดึงแท็กสินค้าหนึ่งรายการ (มุมมองรายละเอียด)" -#: engine/core/docs/drf/viewsets.py:1325 +#: engine/core/docs/drf/viewsets.py:1349 msgid "create a product tag" msgstr "สร้างแท็กสินค้า" -#: engine/core/docs/drf/viewsets.py:1335 +#: engine/core/docs/drf/viewsets.py:1359 msgid "delete a product tag" msgstr "ลบแท็กสินค้า" -#: engine/core/docs/drf/viewsets.py:1342 +#: engine/core/docs/drf/viewsets.py:1366 msgid "rewrite an existing product tag saving non-editables" msgstr "เขียนแท็กสินค้าที่มีอยู่ใหม่โดยเก็บส่วนที่ไม่สามารถแก้ไขได้" -#: engine/core/docs/drf/viewsets.py:1350 +#: engine/core/docs/drf/viewsets.py:1374 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "" "เขียนข้อมูลบางส่วนของแท็กสินค้าที่มีอยู่แล้วใหม่ " @@ -990,370 +1023,372 @@ msgstr "" msgid "no search term provided." msgstr "ไม่พบคำค้นหา" -#: engine/core/filters.py:78 engine/core/filters.py:484 -#: engine/core/filters.py:625 +#: engine/core/filters.py:79 engine/core/filters.py:485 +#: engine/core/filters.py:626 msgid "Search" msgstr "ค้นหา" -#: engine/core/filters.py:79 engine/core/filters.py:663 -#: engine/core/filters.py:692 +#: engine/core/filters.py:80 engine/core/filters.py:664 +#: engine/core/filters.py:693 msgid "UUID" msgstr "ยูไอไอดี" -#: engine/core/filters.py:80 engine/core/filters.py:487 -#: engine/core/filters.py:627 +#: engine/core/filters.py:81 engine/core/filters.py:488 +#: engine/core/filters.py:628 msgid "Name" msgstr "ชื่อ" -#: engine/core/filters.py:82 engine/core/filters.py:630 +#: engine/core/filters.py:83 engine/core/filters.py:631 msgid "Categories" msgstr "หมวดหมู่" -#: engine/core/filters.py:86 +#: engine/core/filters.py:87 msgid "Categories Slugs" msgstr "หมวดหมู่ slug" -#: engine/core/filters.py:88 engine/core/filters.py:495 +#: engine/core/filters.py:89 engine/core/filters.py:496 +#: engine/core/templates/admin_doc/index.html:37 +#: engine/core/templates/admin_doc/template_tag_index.html:12 msgid "Tags" msgstr "แท็ก" -#: engine/core/filters.py:90 +#: engine/core/filters.py:91 msgid "Min Price" msgstr "ราคาต่ำสุด" -#: engine/core/filters.py:93 +#: engine/core/filters.py:94 msgid "Max Price" msgstr "ราคาสูงสุด" -#: engine/core/filters.py:95 +#: engine/core/filters.py:96 msgid "Is Active" msgstr "กำลังใช้งานอยู่" -#: engine/core/filters.py:96 +#: engine/core/filters.py:97 msgid "Brand" msgstr "แบรนด์" -#: engine/core/filters.py:97 +#: engine/core/filters.py:98 msgid "Attributes" msgstr "คุณลักษณะ" -#: engine/core/filters.py:99 +#: engine/core/filters.py:100 msgid "Quantity" msgstr "ปริมาณ" -#: engine/core/filters.py:101 engine/core/filters.py:489 -#: engine/core/filters.py:628 engine/core/models.py:316 -#: engine/core/models.py:497 engine/core/models.py:663 +#: engine/core/filters.py:102 engine/core/filters.py:490 +#: engine/core/filters.py:629 engine/core/models.py:339 +#: engine/core/models.py:546 engine/core/models.py:736 msgid "Slug" msgstr "ทาก" -#: engine/core/filters.py:102 +#: engine/core/filters.py:103 msgid "Is Digital" msgstr "คือ ดิจิทัล" -#: engine/core/filters.py:104 +#: engine/core/filters.py:105 msgid "Include sub-categories" msgstr "รวมหมวดหมู่ย่อย" -#: engine/core/filters.py:108 +#: engine/core/filters.py:109 msgid "Include personal ordered" msgstr "รวมสินค้าสั่งทำส่วนตัว" -#: engine/core/filters.py:110 engine/core/models.py:667 +#: engine/core/filters.py:111 engine/core/models.py:740 msgid "SKU" msgstr "SKU" -#: engine/core/filters.py:212 +#: engine/core/filters.py:213 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "ต้องมี category_uuid เพื่อใช้แฟล็ก include_subcategories" -#: engine/core/filters.py:398 +#: engine/core/filters.py:399 msgid "Search (ID, product name or part number)" msgstr "ค้นหา (รหัส, ชื่อผลิตภัณฑ์ หรือหมายเลขชิ้นส่วน)" -#: engine/core/filters.py:402 +#: engine/core/filters.py:403 msgid "Bought after (inclusive)" msgstr "ซื้อหลังจาก (รวมแล้ว)" -#: engine/core/filters.py:405 +#: engine/core/filters.py:406 msgid "Bought before (inclusive)" msgstr "ซื้อมาก่อน (รวมแล้ว)" -#: engine/core/filters.py:410 engine/core/filters.py:461 -#: engine/core/filters.py:697 +#: engine/core/filters.py:411 engine/core/filters.py:462 +#: engine/core/filters.py:698 msgid "User email" msgstr "อีเมลผู้ใช้" -#: engine/core/filters.py:413 engine/core/filters.py:464 -#: engine/core/filters.py:672 engine/core/filters.py:694 +#: engine/core/filters.py:414 engine/core/filters.py:465 +#: engine/core/filters.py:673 engine/core/filters.py:695 msgid "User UUID" msgstr "รหัสผู้ใช้ UUID" -#: engine/core/filters.py:415 +#: engine/core/filters.py:416 msgid "Status" msgstr "สถานะ" -#: engine/core/filters.py:419 +#: engine/core/filters.py:420 msgid "Human Readable ID" msgstr "รหัสที่มนุษย์อ่านได้" -#: engine/core/filters.py:488 +#: engine/core/filters.py:489 msgid "Parent" msgstr "ผู้ปกครอง" -#: engine/core/filters.py:492 +#: engine/core/filters.py:493 msgid "Whole category(has at least 1 product or not)" msgstr "หมวดหมู่ทั้งหมด (มีอย่างน้อย 1 ผลิตภัณฑ์หรือไม่)" -#: engine/core/filters.py:496 +#: engine/core/filters.py:497 msgid "Level" msgstr "ระดับ" -#: engine/core/filters.py:667 +#: engine/core/filters.py:668 msgid "Product UUID" msgstr "รหัส UUID ของผลิตภัณฑ์" -#: engine/core/graphene/mutations.py:40 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "กุญแจที่ต้องค้นหาหรือติดตั้งไว้ในแคช" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:43 msgid "data to store in cache" msgstr "ข้อมูลที่จะเก็บไว้ในแคช" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:46 msgid "timeout in seconds to set the data for into the cache" msgstr "เวลาหมดในวินาทีเพื่อตั้งค่าข้อมูลสำหรับเก็บในแคช" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:49 msgid "cached data" msgstr "ข้อมูลที่เก็บไว้ในแคช" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:64 msgid "camelized JSON data from the requested URL" msgstr "ข้อมูล JSON ที่ผ่านการคาราเมลไลซ์จาก URL ที่ร้องขอ" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:248 +#: engine/core/graphene/mutations.py:69 engine/core/views.py:267 msgid "only URLs starting with http(s):// are allowed" msgstr "อนุญาตเฉพาะ URL ที่ขึ้นต้นด้วย http(s):// เท่านั้น" -#: engine/core/graphene/mutations.py:86 +#: engine/core/graphene/mutations.py:87 msgid "add a product to the order" msgstr "เพิ่มสินค้าในคำสั่งซื้อ" -#: engine/core/graphene/mutations.py:109 engine/core/graphene/mutations.py:138 -#: engine/core/graphene/mutations.py:254 engine/core/graphene/mutations.py:306 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139 +#: engine/core/graphene/mutations.py:256 engine/core/graphene/mutations.py:308 #, python-brace-format msgid "order {order_uuid} not found" msgstr "ไม่พบคำสั่งซื้อ {order_uuid}!" -#: engine/core/graphene/mutations.py:115 engine/core/graphene/mutations.py:166 +#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167 msgid "remove a product from the order" msgstr "ลบสินค้าออกจากคำสั่งซื้อ" -#: engine/core/graphene/mutations.py:144 +#: engine/core/graphene/mutations.py:145 msgid "remove all products from the order" msgstr "นำสินค้าทั้งหมดออกจากคำสั่งซื้อ" -#: engine/core/graphene/mutations.py:189 +#: engine/core/graphene/mutations.py:190 msgid "buy an order" msgstr "ซื้อคำสั่ง" -#: engine/core/graphene/mutations.py:220 engine/core/graphene/mutations.py:282 +#: engine/core/graphene/mutations.py:222 engine/core/graphene/mutations.py:284 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" "กรุณาให้ order_uuid หรือ order_hr_id - ต้องเลือกอย่างใดอย่างหนึ่งเท่านั้น!" -#: engine/core/graphene/mutations.py:249 engine/core/graphene/mutations.py:524 -#: engine/core/graphene/mutations.py:573 engine/core/viewsets.py:753 +#: engine/core/graphene/mutations.py:251 engine/core/graphene/mutations.py:526 +#: engine/core/graphene/mutations.py:576 engine/core/viewsets.py:783 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "ประเภทไม่ถูกต้องมาจากเมธอด order.buy(): {type(instance)!s}" -#: engine/core/graphene/mutations.py:260 +#: engine/core/graphene/mutations.py:262 msgid "perform an action on a list of products in the order" msgstr "ดำเนินการกับรายการสินค้าในลำดับ" -#: engine/core/graphene/mutations.py:265 +#: engine/core/graphene/mutations.py:267 msgid "remove/add" msgstr "ลบ/เพิ่ม" -#: engine/core/graphene/mutations.py:301 engine/core/graphene/mutations.py:342 +#: engine/core/graphene/mutations.py:303 engine/core/graphene/mutations.py:342 msgid "action must be either add or remove" msgstr "การกระทำต้องเป็น \"เพิ่ม\" หรือ \"ลบ\"!" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:314 msgid "perform an action on a list of products in the wishlist" msgstr "ดำเนินการกับรายการสินค้าในรายการสินค้าที่ต้องการ" -#: engine/core/graphene/mutations.py:330 -msgid "please provide wishlist_uuid value" -msgstr "กรุณาให้ค่า `wishlist_uuid`" - -#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:423 -#: engine/core/graphene/mutations.py:451 engine/core/graphene/mutations.py:479 -#: engine/core/graphene/mutations.py:529 +#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:424 +#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480 +#: engine/core/graphene/mutations.py:531 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "รายการที่อยากได้ {wishlist_uuid} ไม่พบ!" -#: engine/core/graphene/mutations.py:401 +#: engine/core/graphene/mutations.py:402 msgid "add a product to the wishlist" msgstr "เพิ่มสินค้าในคำสั่งซื้อ" -#: engine/core/graphene/mutations.py:429 +#: engine/core/graphene/mutations.py:430 msgid "remove a product from the wishlist" msgstr "ลบสินค้าออกจากคำสั่งซื้อ" -#: engine/core/graphene/mutations.py:457 +#: engine/core/graphene/mutations.py:458 msgid "remove all products from the wishlist" msgstr "ลบสินค้าออกจากคำสั่งซื้อ" -#: engine/core/graphene/mutations.py:485 +#: engine/core/graphene/mutations.py:486 msgid "buy all products from the wishlist" msgstr "ลบสินค้าออกจากคำสั่งซื้อ" -#: engine/core/graphene/mutations.py:535 +#: engine/core/graphene/mutations.py:537 msgid "buy a product" msgstr "ซื้อคำสั่ง" -#: engine/core/graphene/mutations.py:542 +#: engine/core/graphene/mutations.py:544 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" msgstr "" "กรุณาส่งแอตทริบิวต์ในรูปแบบสตริงที่จัดรูปแบบดังนี้ attr1=value1,attr2=value2" -#: engine/core/graphene/mutations.py:580 +#: engine/core/graphene/mutations.py:583 msgid "add or delete a feedback for orderproduct" msgstr "เพิ่มหรือลบความคิดเห็นสำหรับสินค้าที่สั่งซื้อ" -#: engine/core/graphene/mutations.py:606 +#: engine/core/graphene/mutations.py:610 msgid "action must be either `add` or `remove`" msgstr "การกระทำต้องเป็น `add` หรือ `remove` เท่านั้น!" -#: engine/core/graphene/mutations.py:609 +#: engine/core/graphene/mutations.py:613 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "ไม่พบคำสั่งซื้อสินค้า {order_product_uuid}!" -#: engine/core/graphene/mutations.py:616 +#: engine/core/graphene/mutations.py:620 msgid "original address string provided by the user" msgstr "สตริงที่อยู่ต้นฉบับที่ผู้ใช้ให้มา" -#: engine/core/graphene/mutations.py:653 engine/core/models.py:986 -#: engine/core/models.py:999 engine/core/models.py:1443 -#: engine/core/models.py:1474 engine/core/models.py:1505 -#: engine/core/viewsets.py:760 +#: engine/core/graphene/mutations.py:662 engine/core/models.py:1079 +#: engine/core/models.py:1092 engine/core/models.py:1544 +#: engine/core/models.py:1575 engine/core/models.py:1606 +#: engine/core/viewsets.py:790 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} ไม่พบ: {uuid}!" -#: engine/core/graphene/mutations.py:667 +#: engine/core/graphene/mutations.py:676 msgid "limit must be between 1 and 10" msgstr "ต้องอยู่ระหว่าง 1 ถึง 10" -#: engine/core/graphene/mutations.py:716 +#: engine/core/graphene/mutations.py:726 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - ทำงานได้อย่างยอดเยี่ยม" -#: engine/core/graphene/object_types.py:84 -#: engine/core/graphene/object_types.py:420 -#: engine/core/graphene/object_types.py:471 engine/core/models.py:803 -#: engine/core/models.py:1297 engine/core/models.py:2033 +#: engine/core/graphene/object_types.py:88 +#: engine/core/graphene/object_types.py:425 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:889 +#: engine/core/models.py:1394 engine/core/models.py:2139 msgid "attributes" msgstr "คุณลักษณะ" -#: engine/core/graphene/object_types.py:97 +#: engine/core/graphene/object_types.py:101 msgid "grouped attributes" msgstr "กลุ่มคุณสมบัติ" -#: engine/core/graphene/object_types.py:104 +#: engine/core/graphene/object_types.py:108 msgid "groups of attributes" msgstr "กลุ่มของลักษณะ" -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:217 -#: engine/core/graphene/object_types.py:255 engine/core/models.py:440 +#: engine/core/graphene/object_types.py:122 +#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:264 engine/core/models.py:489 msgid "categories" msgstr "หมวดหมู่" -#: engine/core/graphene/object_types.py:134 engine/core/models.py:511 +#: engine/core/graphene/object_types.py:138 engine/core/models.py:564 msgid "brands" msgstr "แบรนด์" -#: engine/core/graphene/object_types.py:219 +#: engine/core/graphene/object_types.py:226 msgid "category image url" msgstr "หมวดหมู่" -#: engine/core/graphene/object_types.py:220 -#: engine/core/graphene/object_types.py:365 engine/core/models.py:278 +#: engine/core/graphene/object_types.py:227 +#: engine/core/graphene/object_types.py:369 engine/core/models.py:301 msgid "markup percentage" msgstr "เปอร์เซ็นต์มาร์กอัป" -#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:231 msgid "which attributes and values can be used for filtering this category." msgstr "คุณลักษณะและคุณค่าใดที่สามารถใช้สำหรับกรองหมวดหมู่นี้ได้" -#: engine/core/graphene/object_types.py:230 +#: engine/core/graphene/object_types.py:237 msgid "" "minimum and maximum prices for products in this category, if available." msgstr "ราคาต่ำสุดและราคาสูงสุดสำหรับสินค้าในหมวดนี้ (หากมี)" -#: engine/core/graphene/object_types.py:234 +#: engine/core/graphene/object_types.py:240 +msgid "brands in this category" +msgstr "แบรนด์ในหมวดหมู่นี้" + +#: engine/core/graphene/object_types.py:242 msgid "tags for this category" msgstr "แท็กสำหรับหมวดหมู่นี้" -#: engine/core/graphene/object_types.py:237 +#: engine/core/graphene/object_types.py:245 msgid "products in this category" msgstr "สินค้าในหมวดหมู่" -#: engine/core/graphene/object_types.py:372 engine/core/models.py:183 +#: engine/core/graphene/object_types.py:376 engine/core/models.py:202 msgid "vendors" msgstr "ผู้ขาย" -#: engine/core/graphene/object_types.py:376 +#: engine/core/graphene/object_types.py:380 msgid "Latitude (Y coordinate)" msgstr "ละติจูด (พิกัด Y)" -#: engine/core/graphene/object_types.py:377 +#: engine/core/graphene/object_types.py:381 msgid "Longitude (X coordinate)" msgstr "ลองจิจูด (พิกัด X)" -#: engine/core/graphene/object_types.py:406 +#: engine/core/graphene/object_types.py:411 msgid "comment" msgstr "อย่างไร" -#: engine/core/graphene/object_types.py:408 -#: engine/core/graphene/object_types.py:542 +#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:548 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "ให้คะแนนตั้งแต่ 1 ถึง 10 รวมทั้งสองค่า หรือ 0 หากไม่ได้กำหนด" -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:421 msgid "represents feedback from a user." msgstr "แสดงความคิดเห็นจากผู้ใช้" -#: engine/core/graphene/object_types.py:421 -#: engine/core/graphene/object_types.py:472 engine/core/models.py:1291 +#: engine/core/graphene/object_types.py:426 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:1388 msgid "notifications" msgstr "การแจ้งเตือน" -#: engine/core/graphene/object_types.py:423 +#: engine/core/graphene/object_types.py:428 msgid "download url for this order product if applicable" msgstr "ดาวน์โหลด url สำหรับคำสั่งซื้อสินค้านี้ หากมี" -#: engine/core/graphene/object_types.py:425 engine/core/models.py:1856 +#: engine/core/graphene/object_types.py:430 engine/core/models.py:1959 msgid "feedback" msgstr "ข้อเสนอแนะ" -#: engine/core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:464 msgid "a list of order products in this order" msgstr "รายการสินค้าที่สั่งซื้อในคำสั่งซื้อนี้" -#: engine/core/graphene/object_types.py:461 engine/core/models.py:1261 +#: engine/core/graphene/object_types.py:466 engine/core/models.py:1358 msgid "billing address" msgstr "ที่อยู่สำหรับออกใบแจ้งหนี้" -#: engine/core/graphene/object_types.py:465 +#: engine/core/graphene/object_types.py:470 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1361,53 +1396,57 @@ msgstr "" "ที่อยู่สำหรับจัดส่งสำหรับคำสั่งซื้อนี้, " "ปล่อยว่างไว้หากเป็นที่อยู่เดียวกับที่อยู่สำหรับเรียกเก็บเงินหรือหากไม่เกี่ยวข้อง" -#: engine/core/graphene/object_types.py:468 +#: engine/core/graphene/object_types.py:473 msgid "total price of this order" msgstr "ราคาทั้งหมดของคำสั่งซื้อนี้" -#: engine/core/graphene/object_types.py:469 +#: engine/core/graphene/object_types.py:474 msgid "total quantity of products in order" msgstr "จำนวนรวมของผลิตภัณฑ์ในคำสั่งซื้อ" -#: engine/core/graphene/object_types.py:470 +#: engine/core/graphene/object_types.py:475 msgid "are all products in the order digital" msgstr "สินค้าทั้งหมดในคำสั่งซื้อนี้เป็นสินค้าดิจิทัลหรือไม่" -#: engine/core/graphene/object_types.py:474 +#: engine/core/graphene/object_types.py:479 msgid "transactions for this order" msgstr "รายการธุรกรรมสำหรับคำสั่งนี้" -#: engine/core/graphene/object_types.py:494 engine/core/models.py:1325 +#: engine/core/graphene/object_types.py:499 engine/core/models.py:1422 msgid "orders" msgstr "คำสั่ง" -#: engine/core/graphene/object_types.py:515 +#: engine/core/graphene/object_types.py:520 msgid "image url" msgstr "URL ของรูปภาพ" -#: engine/core/graphene/object_types.py:522 +#: engine/core/graphene/object_types.py:527 msgid "product's images" msgstr "รูปภาพของสินค้า" -#: engine/core/graphene/object_types.py:529 engine/core/models.py:439 -#: engine/core/models.py:596 +#: engine/core/graphene/object_types.py:534 engine/core/models.py:488 +#: engine/core/models.py:661 msgid "category" msgstr "หมวดหมู่" -#: engine/core/graphene/object_types.py:531 engine/core/models.py:1857 +#: engine/core/graphene/object_types.py:536 engine/core/models.py:1960 msgid "feedbacks" msgstr "ข้อเสนอแนะ" -#: engine/core/graphene/object_types.py:532 engine/core/models.py:510 -#: engine/core/models.py:605 +#: engine/core/graphene/object_types.py:537 engine/core/models.py:563 +#: engine/core/models.py:670 msgid "brand" msgstr "แบรนด์" -#: engine/core/graphene/object_types.py:534 engine/core/models.py:103 +#: engine/core/graphene/object_types.py:538 +msgid "video url" +msgstr "URL วิดีโอ" + +#: engine/core/graphene/object_types.py:540 engine/core/models.py:122 msgid "attribute groups" msgstr "กลุ่มคุณลักษณะ" -#: engine/core/graphene/object_types.py:536 +#: engine/core/graphene/object_types.py:542 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1415,7 +1454,7 @@ msgstr "กลุ่มคุณลักษณะ" msgid "price" msgstr "ราคา" -#: engine/core/graphene/object_types.py:537 +#: engine/core/graphene/object_types.py:543 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1423,39 +1462,39 @@ msgstr "ราคา" msgid "quantity" msgstr "ปริมาณ" -#: engine/core/graphene/object_types.py:538 +#: engine/core/graphene/object_types.py:544 msgid "number of feedbacks" msgstr "จำนวนความคิดเห็น" -#: engine/core/graphene/object_types.py:539 +#: engine/core/graphene/object_types.py:545 msgid "only available for personal orders" msgstr "สินค้าที่มีจำหน่ายเฉพาะการสั่งซื้อส่วนบุคคลเท่านั้น" -#: engine/core/graphene/object_types.py:544 +#: engine/core/graphene/object_types.py:550 msgid "discount price" msgstr "ราคาลดพิเศษ" -#: engine/core/graphene/object_types.py:568 engine/core/models.py:682 +#: engine/core/graphene/object_types.py:575 engine/core/models.py:755 msgid "products" msgstr "ผลิตภัณฑ์" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:691 msgid "promocodes" msgstr "รหัสส่งเสริมการขาย" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:706 msgid "products on sale" msgstr "สินค้าลดราคา" -#: engine/core/graphene/object_types.py:701 engine/core/models.py:935 +#: engine/core/graphene/object_types.py:720 engine/core/models.py:1028 msgid "promotions" msgstr "โปรโมชั่น" -#: engine/core/graphene/object_types.py:705 engine/core/models.py:182 +#: engine/core/graphene/object_types.py:727 engine/core/models.py:201 msgid "vendor" msgstr "ผู้ขาย" -#: engine/core/graphene/object_types.py:706 engine/core/models.py:681 +#: engine/core/graphene/object_types.py:728 engine/core/models.py:754 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1463,102 +1502,102 @@ msgstr "ผู้ขาย" msgid "product" msgstr "สินค้า" -#: engine/core/graphene/object_types.py:718 engine/core/models.py:958 +#: engine/core/graphene/object_types.py:740 engine/core/models.py:1051 msgid "wishlisted products" msgstr "สินค้าที่อยู่ในรายการต้องการ" -#: engine/core/graphene/object_types.py:725 engine/core/models.py:975 +#: engine/core/graphene/object_types.py:747 engine/core/models.py:1068 msgid "wishlists" msgstr "รายการสิ่งที่ต้องการ" -#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:752 msgid "tagged products" msgstr "สินค้าที่ติดแท็ก" -#: engine/core/graphene/object_types.py:738 engine/core/models.py:219 -#: engine/core/models.py:611 +#: engine/core/graphene/object_types.py:760 engine/core/models.py:238 +#: engine/core/models.py:676 msgid "product tags" msgstr "แท็กสินค้า" -#: engine/core/graphene/object_types.py:743 +#: engine/core/graphene/object_types.py:765 msgid "tagged categories" msgstr "หมวดหมู่ที่ถูกติดแท็ก" -#: engine/core/graphene/object_types.py:751 +#: engine/core/graphene/object_types.py:773 msgid "categories tags" msgstr "หมวดหมู่' แท็ก" -#: engine/core/graphene/object_types.py:755 +#: engine/core/graphene/object_types.py:777 msgid "project name" msgstr "ชื่อโครงการ" -#: engine/core/graphene/object_types.py:756 +#: engine/core/graphene/object_types.py:778 msgid "company name" msgstr "ชื่อบริษัท" -#: engine/core/graphene/object_types.py:757 +#: engine/core/graphene/object_types.py:779 msgid "company address" msgstr "ที่อยู่บริษัท" -#: engine/core/graphene/object_types.py:758 +#: engine/core/graphene/object_types.py:780 msgid "company phone number" msgstr "หมายเลขโทรศัพท์บริษัท" -#: engine/core/graphene/object_types.py:761 +#: engine/core/graphene/object_types.py:783 msgid "email from, sometimes it must be used instead of host user value" msgstr "'อีเมลจาก', บางครั้งจำเป็นต้องใช้แทนค่าผู้ใช้โฮสต์" -#: engine/core/graphene/object_types.py:764 +#: engine/core/graphene/object_types.py:786 msgid "email host user" msgstr "ผู้ใช้โฮสต์อีเมล" -#: engine/core/graphene/object_types.py:765 +#: engine/core/graphene/object_types.py:787 msgid "maximum amount for payment" msgstr "จำนวนเงินสูงสุดสำหรับการชำระเงิน" -#: engine/core/graphene/object_types.py:766 +#: engine/core/graphene/object_types.py:788 msgid "minimum amount for payment" msgstr "จำนวนเงินขั้นต่ำสำหรับการชำระเงิน" -#: engine/core/graphene/object_types.py:767 +#: engine/core/graphene/object_types.py:789 msgid "analytics data" msgstr "ข้อมูลการวิเคราะห์" -#: engine/core/graphene/object_types.py:768 +#: engine/core/graphene/object_types.py:790 msgid "advertisement data" msgstr "ข้อมูลโฆษณา" -#: engine/core/graphene/object_types.py:771 +#: engine/core/graphene/object_types.py:793 msgid "company configuration" msgstr "การกำหนดค่า" -#: engine/core/graphene/object_types.py:775 +#: engine/core/graphene/object_types.py:797 msgid "language code" msgstr "รหัสภาษา" -#: engine/core/graphene/object_types.py:776 +#: engine/core/graphene/object_types.py:798 msgid "language name" msgstr "ชื่อภาษา" -#: engine/core/graphene/object_types.py:777 +#: engine/core/graphene/object_types.py:799 msgid "language flag, if exists :)" msgstr "ธงภาษา, หากมีอยู่ :)" -#: engine/core/graphene/object_types.py:780 +#: engine/core/graphene/object_types.py:802 msgid "supported languages" msgstr "รับรายการภาษาที่รองรับ" -#: engine/core/graphene/object_types.py:812 -#: engine/core/graphene/object_types.py:815 -#: engine/core/graphene/object_types.py:818 +#: engine/core/graphene/object_types.py:834 +#: engine/core/graphene/object_types.py:837 +#: engine/core/graphene/object_types.py:840 msgid "products search results" msgstr "ผลการค้นหาสินค้า" -#: engine/core/graphene/object_types.py:820 +#: engine/core/graphene/object_types.py:842 msgid "posts search results" msgstr "ผลการค้นหาสินค้า" -#: engine/core/models.py:75 +#: engine/core/models.py:91 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 " @@ -1570,23 +1609,23 @@ msgstr "" "กลุ่มแอตทริบิวต์สามารถมีกลุ่มแม่ได้ ทำให้เกิดโครงสร้างลำดับชั้น " "ซึ่งสามารถมีประโยชน์ในการจัดหมวดหมู่และจัดการแอตทริบิวต์ได้อย่างมีประสิทธิภาพมากขึ้นในระบบที่ซับซ้อน" -#: engine/core/models.py:88 +#: engine/core/models.py:107 msgid "parent of this group" msgstr "ผู้ปกครองของกลุ่มนี้" -#: engine/core/models.py:89 +#: engine/core/models.py:108 msgid "parent attribute group" msgstr "กลุ่มแอตทริบิวต์ของพ่อแม่" -#: engine/core/models.py:93 engine/core/models.py:94 +#: engine/core/models.py:112 engine/core/models.py:113 msgid "attribute group's name" msgstr "ชื่อกลุ่มคุณสมบัติ" -#: engine/core/models.py:102 engine/core/models.py:763 +#: engine/core/models.py:121 engine/core/models.py:849 msgid "attribute group" msgstr "กลุ่มคุณลักษณะ" -#: engine/core/models.py:108 +#: engine/core/models.py:127 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1603,48 +1642,48 @@ msgstr "" "โมเดลนี้ยังรักษาข้อมูลเมตาเพิ่มเติมและข้อจำกัด " "ทำให้เหมาะสำหรับการใช้งานในระบบที่มีการโต้ตอบกับผู้ขายภายนอก" -#: engine/core/models.py:122 +#: engine/core/models.py:141 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "เก็บรักษาข้อมูลประจำตัวและจุดสิ้นสุดที่จำเป็นสำหรับการสื่อสาร API ของผู้ขาย" -#: engine/core/models.py:124 +#: engine/core/models.py:143 msgid "authentication info" msgstr "ข้อมูลการยืนยันตัวตน" -#: engine/core/models.py:129 +#: engine/core/models.py:148 msgid "define the markup for products retrieved from this vendor" msgstr "กำหนดมาร์กอัปสำหรับสินค้าที่ดึงมาจากผู้ขายรายนี้" -#: engine/core/models.py:130 +#: engine/core/models.py:149 msgid "vendor markup percentage" msgstr "เปอร์เซ็นต์การบวกกำไรของผู้ขาย" -#: engine/core/models.py:134 +#: engine/core/models.py:153 msgid "name of this vendor" msgstr "ชื่อของผู้ขายนี้" -#: engine/core/models.py:135 +#: engine/core/models.py:154 msgid "vendor name" msgstr "ชื่อผู้ขาย" -#: engine/core/models.py:150 +#: engine/core/models.py:169 msgid "response file" msgstr "ไฟล์การตอบสนอง" -#: engine/core/models.py:151 +#: engine/core/models.py:170 msgid "vendor's last processing response" msgstr "การตอบกลับการประมวลผลครั้งสุดท้ายของผู้ขาย" -#: engine/core/models.py:157 +#: engine/core/models.py:176 msgid "vendor's integration file path" msgstr "เส้นทางไฟล์การรวมของผู้ขาย" -#: engine/core/models.py:158 +#: engine/core/models.py:177 msgid "integration path" msgstr "เส้นทางการบูรณาการ" -#: engine/core/models.py:192 +#: engine/core/models.py:211 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1657,27 +1696,27 @@ msgstr "" " รองรับการดำเนินการที่ส่งออกผ่าน mixins " "และให้การปรับแต่งเมตาดาต้าสำหรับวัตถุประสงค์ในการบริหารจัดการ" -#: engine/core/models.py:204 engine/core/models.py:235 +#: engine/core/models.py:223 engine/core/models.py:254 msgid "internal tag identifier for the product tag" msgstr "ตัวระบุแท็กภายในสำหรับแท็กสินค้า" -#: engine/core/models.py:205 engine/core/models.py:236 +#: engine/core/models.py:224 engine/core/models.py:255 msgid "tag name" msgstr "ชื่อวัน" -#: engine/core/models.py:209 engine/core/models.py:240 +#: engine/core/models.py:228 engine/core/models.py:259 msgid "user-friendly name for the product tag" msgstr "ชื่อที่เป็นมิตรกับผู้ใช้สำหรับแท็กสินค้า" -#: engine/core/models.py:210 engine/core/models.py:241 +#: engine/core/models.py:229 engine/core/models.py:260 msgid "tag display name" msgstr "แสดงชื่อแท็ก" -#: engine/core/models.py:218 +#: engine/core/models.py:237 msgid "product tag" msgstr "แท็กสินค้า" -#: engine/core/models.py:224 +#: engine/core/models.py:243 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 " @@ -1687,15 +1726,15 @@ msgstr "" "คลาสนี้จำลองแท็กหมวดหมู่ที่สามารถใช้เพื่อเชื่อมโยงและจัดประเภทผลิตภัณฑ์ได้ " "รวมถึงแอตทริบิวต์สำหรับตัวระบุแท็กภายในและชื่อแสดงผลที่เป็นมิตรกับผู้ใช้" -#: engine/core/models.py:249 +#: engine/core/models.py:268 msgid "category tag" msgstr "แท็กหมวดหมู่" -#: engine/core/models.py:250 engine/core/models.py:322 +#: engine/core/models.py:269 engine/core/models.py:345 msgid "category tags" msgstr "แท็กหมวดหมู่" -#: engine/core/models.py:255 +#: engine/core/models.py:274 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1715,51 +1754,51 @@ msgstr "" " ช่วยให้ผู้ใช้หรือผู้ดูแลระบบสามารถระบุชื่อ คำอธิบาย และลำดับชั้นของหมวดหมู่" " รวมถึงกำหนดคุณลักษณะต่างๆ เช่น รูปภาพ แท็ก หรือความสำคัญ" -#: engine/core/models.py:269 +#: engine/core/models.py:292 msgid "upload an image representing this category" msgstr "อัปโหลดรูปภาพที่แสดงถึงหมวดหมู่นี้" -#: engine/core/models.py:272 +#: engine/core/models.py:295 msgid "category image" msgstr "ภาพหมวดหมู่" -#: engine/core/models.py:277 +#: engine/core/models.py:300 msgid "define a markup percentage for products in this category" msgstr "กำหนดเปอร์เซ็นต์มาร์กอัปสำหรับสินค้าในหมวดหมู่นี้" -#: engine/core/models.py:286 +#: engine/core/models.py:309 msgid "parent of this category to form a hierarchical structure" msgstr "ผู้ปกครองของหมวดหมู่นี้เพื่อสร้างโครงสร้างลำดับชั้น" -#: engine/core/models.py:287 +#: engine/core/models.py:310 msgid "parent category" msgstr "หมวดหมู่หลัก" -#: engine/core/models.py:292 +#: engine/core/models.py:315 msgid "category name" msgstr "ชื่อหมวดหมู่" -#: engine/core/models.py:293 +#: engine/core/models.py:316 msgid "provide a name for this category" msgstr "กรุณาตั้งชื่อสำหรับหมวดหมู่นี้" -#: engine/core/models.py:300 +#: engine/core/models.py:323 msgid "add a detailed description for this category" msgstr "เพิ่มคำอธิบายโดยละเอียดสำหรับหมวดหมู่นี้" -#: engine/core/models.py:301 +#: engine/core/models.py:324 msgid "category description" msgstr "หมวดหมู่คำอธิบาย" -#: engine/core/models.py:321 +#: engine/core/models.py:344 msgid "tags that help describe or group this category" msgstr "แท็กที่ช่วยอธิบายหรือจัดกลุ่มหมวดหมู่นี้" -#: engine/core/models.py:328 engine/core/models.py:503 +#: engine/core/models.py:351 engine/core/models.py:552 msgid "priority" msgstr "ลำดับความสำคัญ" -#: engine/core/models.py:446 +#: engine/core/models.py:495 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1771,47 +1810,43 @@ msgstr "" "รวมถึงชื่อ โลโก้ คำอธิบาย หมวดหมู่ที่เกี่ยวข้อง สลักเฉพาะ และลำดับความสำคัญ " "ช่วยให้สามารถจัดระเบียบและแสดงข้อมูลที่เกี่ยวข้องกับแบรนด์ภายในแอปพลิเคชันได้" -#: engine/core/models.py:456 +#: engine/core/models.py:505 msgid "name of this brand" msgstr "ชื่อของแบรนด์นี้" -#: engine/core/models.py:457 +#: engine/core/models.py:506 msgid "brand name" msgstr "ชื่อแบรนด์" -#: engine/core/models.py:464 +#: engine/core/models.py:513 msgid "upload a logo representing this brand" msgstr "อัปโหลดโลโก้ที่เป็นตัวแทนของแบรนด์นี้" -#: engine/core/models.py:466 +#: engine/core/models.py:515 msgid "brand small image" msgstr "แบรนด์รูปภาพขนาดเล็ก" -#: engine/core/models.py:472 +#: engine/core/models.py:521 msgid "upload a big logo representing this brand" msgstr "อัปโหลดโลโก้ขนาดใหญ่ที่เป็นตัวแทนของแบรนด์นี้" -#: engine/core/models.py:474 +#: engine/core/models.py:523 msgid "brand big image" msgstr "แบรนด์ภาพใหญ่" -#: engine/core/models.py:479 +#: engine/core/models.py:528 msgid "add a detailed description of the brand" msgstr "เพิ่มคำอธิบายรายละเอียดของแบรนด์" -#: engine/core/models.py:480 +#: engine/core/models.py:529 msgid "brand description" msgstr "คำอธิบายแบรนด์" -#: engine/core/models.py:485 -msgid "optional categories that this brand is associated with" -msgstr "หมวดหมู่เพิ่มเติมที่แบรนด์นี้เกี่ยวข้อง" +#: engine/core/models.py:534 engine/core/models.py:535 +msgid "DEPRECATED" +msgstr "เลิกใช้แล้ว" -#: engine/core/models.py:486 -msgid "associated categories" -msgstr "หมวดหมู่" - -#: engine/core/models.py:516 +#: engine/core/models.py:569 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1827,72 +1862,72 @@ msgstr "" "เป็นส่วนหนึ่งของระบบการจัดการสินค้าคงคลังเพื่อให้สามารถติดตามและประเมินสินค้าที่มีจากผู้จำหน่ายต่างๆ" " ได้" -#: engine/core/models.py:528 +#: engine/core/models.py:581 msgid "the vendor supplying this product stock" msgstr "ผู้จัดจำหน่ายที่จัดหาสินค้าคงคลังนี้" -#: engine/core/models.py:529 +#: engine/core/models.py:582 msgid "associated vendor" msgstr "ผู้ขายที่เกี่ยวข้อง" -#: engine/core/models.py:533 +#: engine/core/models.py:588 msgid "final price to the customer after markups" msgstr "ราคาสุดท้ายที่ลูกค้าต้องชำระหลังจากการบวกกำไร" -#: engine/core/models.py:534 +#: engine/core/models.py:589 msgid "selling price" msgstr "ราคาขาย" -#: engine/core/models.py:539 +#: engine/core/models.py:594 msgid "the product associated with this stock entry" msgstr "สินค้าที่เกี่ยวข้องกับรายการสินค้าคงคลังนี้" -#: engine/core/models.py:540 engine/core/models.py:828 -#: engine/core/models.py:874 engine/core/models.py:1912 +#: engine/core/models.py:595 engine/core/models.py:914 +#: engine/core/models.py:962 engine/core/models.py:2020 msgid "associated product" msgstr "ผลิตภัณฑ์ที่เกี่ยวข้อง" -#: engine/core/models.py:547 +#: engine/core/models.py:604 msgid "the price paid to the vendor for this product" msgstr "ราคาที่จ่ายให้กับผู้ขายสำหรับสินค้านี้" -#: engine/core/models.py:548 +#: engine/core/models.py:605 msgid "vendor purchase price" msgstr "ราคาซื้อจากผู้ขาย" -#: engine/core/models.py:552 +#: engine/core/models.py:609 msgid "available quantity of the product in stock" msgstr "จำนวนสินค้าที่มีในสต็อก" -#: engine/core/models.py:553 +#: engine/core/models.py:610 msgid "quantity in stock" msgstr "จำนวนในสต็อก" -#: engine/core/models.py:557 +#: engine/core/models.py:614 msgid "vendor-assigned SKU for identifying the product" msgstr "รหัสสินค้าที่ผู้ขายกำหนดเพื่อระบุตัวผลิตภัณฑ์" -#: engine/core/models.py:558 +#: engine/core/models.py:615 msgid "vendor sku" msgstr "รหัสสินค้าของผู้ขาย" -#: engine/core/models.py:564 +#: engine/core/models.py:621 msgid "digital file associated with this stock if applicable" msgstr "ไฟล์ดิจิทัลที่เกี่ยวข้องกับสต็อกนี้ หากมี" -#: engine/core/models.py:565 +#: engine/core/models.py:622 msgid "digital file" msgstr "ไฟล์ดิจิทัล" -#: engine/core/models.py:569 +#: engine/core/models.py:626 msgid "system attributes" msgstr "คุณลักษณะของระบบ" -#: engine/core/models.py:577 +#: engine/core/models.py:636 msgid "stock entries" msgstr "รายการสินค้าคงคลัง" -#: engine/core/models.py:582 +#: engine/core/models.py:641 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1912,71 +1947,79 @@ msgstr "" " " "และจัดการการแคชสำหรับคุณสมบัติที่เข้าถึงบ่อยเพื่อปรับปรุงประสิทธิภาพใช้เพื่อกำหนดและจัดการข้อมูลผลิตภัณฑ์และข้อมูลที่เกี่ยวข้องภายในแอปพลิเคชัน" -#: engine/core/models.py:595 +#: engine/core/models.py:660 msgid "category this product belongs to" msgstr "หมวดหมู่ที่สินค้านี้จัดอยู่ใน" -#: engine/core/models.py:604 +#: engine/core/models.py:669 msgid "optionally associate this product with a brand" msgstr "เลือกเชื่อมโยงผลิตภัณฑ์นี้กับแบรนด์" -#: engine/core/models.py:610 +#: engine/core/models.py:675 msgid "tags that help describe or group this product" msgstr "แท็กที่ช่วยอธิบายหรือจัดกลุ่มผลิตภัณฑ์นี้" -#: engine/core/models.py:615 +#: engine/core/models.py:680 msgid "indicates whether this product is digitally delivered" msgstr "บ่งชี้ว่าสินค้านี้จัดส่งในรูปแบบดิจิทัลหรือไม่" -#: engine/core/models.py:616 +#: engine/core/models.py:681 msgid "is product digital" msgstr "สินค้าเป็นดิจิทัล" -#: engine/core/models.py:623 +#: engine/core/models.py:688 msgid "indicates whether this product should be updated from periodic task" msgstr "บ่งชี้ว่าผลิตภัณฑ์นี้ควรได้รับการอัปเดตจากงานประจำหรือไม่" -#: engine/core/models.py:625 +#: engine/core/models.py:690 msgid "is product updatable" msgstr "สามารถอัปเดตผลิตภัณฑ์ได้" -#: engine/core/models.py:631 +#: engine/core/models.py:696 msgid "provide a clear identifying name for the product" msgstr "ระบุชื่อที่ชัดเจนสำหรับผลิตภัณฑ์" -#: engine/core/models.py:632 +#: engine/core/models.py:697 msgid "product name" msgstr "ชื่อสินค้า" -#: engine/core/models.py:638 engine/core/models.py:923 +#: engine/core/models.py:703 engine/core/models.py:1012 msgid "add a detailed description of the product" msgstr "เพิ่มคำอธิบายรายละเอียดของสินค้า" -#: engine/core/models.py:639 +#: engine/core/models.py:704 msgid "product description" msgstr "รายละเอียดสินค้า" -#: engine/core/models.py:646 +#: engine/core/models.py:710 +msgid "optional video file for this product" +msgstr "ไฟล์วิดีโอเสริมสำหรับสินค้านี้" + +#: engine/core/models.py:711 +msgid "product video" +msgstr "วิดีโอสินค้า" + +#: engine/core/models.py:719 msgid "part number for this product" msgstr "หมายเลขชิ้นส่วนสำหรับสินค้านี้" -#: engine/core/models.py:647 +#: engine/core/models.py:720 msgid "part number" msgstr "หมายเลขชิ้นส่วน" -#: engine/core/models.py:666 +#: engine/core/models.py:739 msgid "stock keeping unit for this product" msgstr "หน่วยเก็บสินค้าสำหรับสินค้านี้" -#: engine/core/models.py:673 +#: engine/core/models.py:746 msgid "whether to export this product to marketplaces" msgstr "ว่าจะส่งออกสินค้านี้ไปยังตลาดหรือไม่" -#: engine/core/models.py:674 +#: engine/core/models.py:747 msgid "Export to Marketplaces" msgstr "ส่งออกสู่ตลาดออนไลน์" -#: engine/core/models.py:749 +#: engine/core/models.py:835 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 " @@ -1992,64 +2035,64 @@ msgstr "" "อาร์เรย์, และออบเจ็กต์. " "ซึ่งช่วยให้สามารถจัดโครงสร้างข้อมูลได้ไดนามิกและยืดหยุ่น." -#: engine/core/models.py:762 +#: engine/core/models.py:848 msgid "group of this attribute" msgstr "กลุ่มของแอตทริบิวต์นี้" -#: engine/core/models.py:768 +#: engine/core/models.py:854 msgid "string" msgstr "สตริง" -#: engine/core/models.py:769 +#: engine/core/models.py:855 msgid "integer" msgstr "ความซื่อสัตย์" -#: engine/core/models.py:770 +#: engine/core/models.py:856 msgid "float" msgstr "ลอย" -#: engine/core/models.py:771 +#: engine/core/models.py:857 msgid "boolean" msgstr "บูลีน" -#: engine/core/models.py:772 +#: engine/core/models.py:858 msgid "array" msgstr "อาร์เรย์" -#: engine/core/models.py:773 +#: engine/core/models.py:859 msgid "object" msgstr "วัตถุ" -#: engine/core/models.py:775 +#: engine/core/models.py:861 msgid "type of the attribute's value" msgstr "ประเภทของค่าของแอตทริบิวต์" -#: engine/core/models.py:776 +#: engine/core/models.py:862 msgid "value type" msgstr "ประเภทของค่า" -#: engine/core/models.py:781 +#: engine/core/models.py:867 msgid "name of this attribute" msgstr "ชื่อของแอตทริบิวต์นี้" -#: engine/core/models.py:782 +#: engine/core/models.py:868 msgid "attribute's name" msgstr "ชื่อของแอตทริบิวต์" -#: engine/core/models.py:787 +#: engine/core/models.py:873 msgid "is filterable" msgstr "สามารถกรองได้" -#: engine/core/models.py:789 +#: engine/core/models.py:875 msgid "designates whether this attribute can be used for filtering or not" msgstr "กำหนดว่าแอตทริบิวต์นี้สามารถใช้สำหรับการกรองหรือไม่" -#: engine/core/models.py:802 engine/core/models.py:820 +#: engine/core/models.py:888 engine/core/models.py:906 #: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "คุณสมบัติ" -#: engine/core/models.py:808 +#: engine/core/models.py:894 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" @@ -2059,19 +2102,19 @@ msgstr "" "กับ 'ค่า' ที่ไม่ซ้ำกัน " "ทำให้การจัดระเบียบและการแสดงลักษณะของผลิตภัณฑ์เป็นไปอย่างมีประสิทธิภาพและยืดหยุ่นมากขึ้น" -#: engine/core/models.py:819 +#: engine/core/models.py:905 msgid "attribute of this value" msgstr "คุณลักษณะของค่านี้" -#: engine/core/models.py:827 +#: engine/core/models.py:913 msgid "the specific product associated with this attribute's value" msgstr "ผลิตภัณฑ์เฉพาะที่เกี่ยวข้องกับค่าของแอตทริบิวต์นี้" -#: engine/core/models.py:833 +#: engine/core/models.py:919 msgid "the specific value for this attribute" msgstr "ค่าเฉพาะสำหรับคุณสมบัตินี้" -#: engine/core/models.py:846 +#: engine/core/models.py:934 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -2086,39 +2129,39 @@ msgstr "" "นอกจากนี้ยังมีคุณสมบัติการเข้าถึงสำหรับผู้ใช้ที่มีความต้องการพิเศษ " "โดยให้ข้อความทางเลือกสำหรับภาพ." -#: engine/core/models.py:857 +#: engine/core/models.py:945 msgid "provide alternative text for the image for accessibility" msgstr "ให้ข้อความทางเลือกสำหรับภาพเพื่อการเข้าถึง" -#: engine/core/models.py:858 +#: engine/core/models.py:946 msgid "image alt text" msgstr "ข้อความแสดงแทนภาพ" -#: engine/core/models.py:861 +#: engine/core/models.py:949 msgid "upload the image file for this product" msgstr "อัปโหลดไฟล์รูปภาพสำหรับสินค้านี้" -#: engine/core/models.py:862 engine/core/models.py:893 +#: engine/core/models.py:950 engine/core/models.py:982 msgid "product image" msgstr "รูปภาพสินค้า" -#: engine/core/models.py:867 +#: engine/core/models.py:955 msgid "determines the order in which images are displayed" msgstr "กำหนดลำดับการแสดงผลของภาพ" -#: engine/core/models.py:868 +#: engine/core/models.py:956 msgid "display priority" msgstr "ลำดับความสำคัญในการแสดงผล" -#: engine/core/models.py:873 +#: engine/core/models.py:961 msgid "the product that this image represents" msgstr "สินค้าที่ภาพนี้แทน" -#: engine/core/models.py:894 +#: engine/core/models.py:983 msgid "product images" msgstr "รูปภาพสินค้า" -#: engine/core/models.py:899 +#: engine/core/models.py:988 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -2133,39 +2176,39 @@ msgstr "" "ให้รายละเอียดเกี่ยวกับโปรโมชั่น, และเชื่อมโยงกับสินค้าที่เกี่ยวข้อง. " "คลาสนี้ผสานการทำงานกับแคตตาล็อกสินค้าเพื่อกำหนดสินค้าที่ได้รับผลกระทบในแคมเปญ." -#: engine/core/models.py:911 +#: engine/core/models.py:1000 msgid "percentage discount for the selected products" msgstr "เปอร์เซ็นต์ส่วนลดสำหรับสินค้าที่เลือก" -#: engine/core/models.py:912 +#: engine/core/models.py:1001 msgid "discount percentage" msgstr "เปอร์เซ็นต์ส่วนลด" -#: engine/core/models.py:917 +#: engine/core/models.py:1006 msgid "provide a unique name for this promotion" msgstr "กรุณาตั้งชื่อที่ไม่ซ้ำกันสำหรับการส่งเสริมการขายนี้" -#: engine/core/models.py:918 +#: engine/core/models.py:1007 msgid "promotion name" msgstr "ชื่อโปรโมชั่น" -#: engine/core/models.py:924 +#: engine/core/models.py:1013 msgid "promotion description" msgstr "รายละเอียดโปรโมชั่น" -#: engine/core/models.py:929 +#: engine/core/models.py:1018 msgid "select which products are included in this promotion" msgstr "เลือกผลิตภัณฑ์ที่รวมอยู่ในโปรโมชั่นนี้" -#: engine/core/models.py:930 +#: engine/core/models.py:1019 msgid "included products" msgstr "สินค้าที่รวมอยู่" -#: engine/core/models.py:934 +#: engine/core/models.py:1027 msgid "promotion" msgstr "โปรโมชั่น" -#: engine/core/models.py:945 +#: engine/core/models.py:1038 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2177,23 +2220,23 @@ msgstr "" "ซึ่งรวมถึงการเพิ่มและลบสินค้าออกจากคอลเลกชัน " "ตลอดจนการเพิ่มและลบสินค้าหลายรายการพร้อมกัน" -#: engine/core/models.py:957 +#: engine/core/models.py:1050 msgid "products that the user has marked as wanted" msgstr "สินค้าที่ผู้ใช้ได้ทำเครื่องหมายว่าต้องการ" -#: engine/core/models.py:965 +#: engine/core/models.py:1058 msgid "user who owns this wishlist" msgstr "ผู้ใช้ที่เป็นเจ้าของรายการความปรารถนา" -#: engine/core/models.py:966 +#: engine/core/models.py:1059 msgid "wishlist owner" msgstr "เจ้าของรายการที่อยากได้" -#: engine/core/models.py:974 +#: engine/core/models.py:1067 msgid "wishlist" msgstr "รายการสิ่งที่ต้องการ" -#: engine/core/models.py:1016 +#: engine/core/models.py:1109 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2209,19 +2252,19 @@ msgstr "" " คลาสนี้ขยายฟังก์ชันการทำงานจากมิกซ์อินเฉพาะ " "และให้คุณสมบัติเพิ่มเติมตามความต้องการ." -#: engine/core/models.py:1031 +#: engine/core/models.py:1124 msgid "documentary" msgstr "สารคดี" -#: engine/core/models.py:1032 +#: engine/core/models.py:1125 msgid "documentaries" msgstr "สารคดี" -#: engine/core/models.py:1042 +#: engine/core/models.py:1135 msgid "unresolved" msgstr "ยังไม่ได้รับการแก้ไข" -#: engine/core/models.py:1047 +#: engine/core/models.py:1140 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2242,59 +2285,59 @@ msgstr "" "ดิบเพื่อการประมวลผลหรือตรวจสอบเพิ่มเติมได้คลาสนี้ยังอนุญาตให้เชื่อมโยงที่อยู่กับผู้ใช้ได้" " ซึ่งช่วยให้การจัดการข้อมูลส่วนบุคคลเป็นไปอย่างสะดวก" -#: engine/core/models.py:1062 +#: engine/core/models.py:1155 msgid "address line for the customer" msgstr "ที่อยู่สำหรับลูกค้า" -#: engine/core/models.py:1063 +#: engine/core/models.py:1156 msgid "address line" msgstr "บรรทัดที่อยู่" -#: engine/core/models.py:1065 +#: engine/core/models.py:1158 msgid "street" msgstr "ถนน" -#: engine/core/models.py:1066 +#: engine/core/models.py:1159 msgid "district" msgstr "เขต" -#: engine/core/models.py:1067 +#: engine/core/models.py:1160 msgid "city" msgstr "เมือง" -#: engine/core/models.py:1068 +#: engine/core/models.py:1161 msgid "region" msgstr "ภูมิภาค" -#: engine/core/models.py:1069 +#: engine/core/models.py:1162 msgid "postal code" msgstr "รหัสไปรษณีย์" -#: engine/core/models.py:1070 +#: engine/core/models.py:1163 msgid "country" msgstr "ประเทศ" -#: engine/core/models.py:1077 +#: engine/core/models.py:1170 msgid "geolocation point: (longitude, latitude)" msgstr "จุดพิกัดภูมิศาสตร์ (ลองจิจูด, ละติจูด)" -#: engine/core/models.py:1083 +#: engine/core/models.py:1176 msgid "full JSON response from geocoder for this address" msgstr "การตอบกลับ JSON แบบเต็มจากตัวแปลงที่อยู่ทางภูมิศาสตร์สำหรับที่อยู่นี้" -#: engine/core/models.py:1089 +#: engine/core/models.py:1182 msgid "stored JSON response from the geocoding service" msgstr "เก็บคำตอบ JSON จากบริการการแปลงที่อยู่ทางภูมิศาสตร์" -#: engine/core/models.py:1099 +#: engine/core/models.py:1192 msgid "address" msgstr "ที่อยู่" -#: engine/core/models.py:1100 +#: engine/core/models.py:1193 msgid "addresses" msgstr "ที่อยู่" -#: engine/core/models.py:1112 +#: engine/core/models.py:1205 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2311,71 +2354,71 @@ msgstr "" "รวมถึงฟังก์ชันการทำงานเพื่อตรวจสอบและใช้รหัสโปรโมชั่นกับคำสั่งซื้อในขณะที่ตรวจสอบให้แน่ใจว่าข้อจำกัดต่างๆ" " ได้รับการปฏิบัติตาม" -#: engine/core/models.py:1126 +#: engine/core/models.py:1219 msgid "unique code used by a user to redeem a discount" msgstr "รหัสเฉพาะที่ผู้ใช้ใช้เพื่อแลกรับส่วนลด" -#: engine/core/models.py:1127 +#: engine/core/models.py:1220 msgid "promo code identifier" msgstr "รหัสโปรโมชั่น" -#: engine/core/models.py:1134 +#: engine/core/models.py:1227 msgid "fixed discount amount applied if percent is not used" msgstr "จำนวนส่วนลดคงที่ที่ใช้หากไม่ได้ใช้เปอร์เซ็นต์" -#: engine/core/models.py:1135 +#: engine/core/models.py:1228 msgid "fixed discount amount" msgstr "จำนวนส่วนลดคงที่" -#: engine/core/models.py:1141 +#: engine/core/models.py:1234 msgid "percentage discount applied if fixed amount is not used" msgstr "ส่วนลดเป็นเปอร์เซ็นต์ที่ใช้เมื่อไม่ได้ใช้จำนวนเงินคงที่" -#: engine/core/models.py:1142 +#: engine/core/models.py:1235 msgid "percentage discount" msgstr "เปอร์เซ็นต์ส่วนลด" -#: engine/core/models.py:1147 +#: engine/core/models.py:1240 msgid "timestamp when the promocode expires" msgstr "เวลาที่โค้ดโปรโมชั่นหมดอายุ" -#: engine/core/models.py:1148 +#: engine/core/models.py:1241 msgid "end validity time" msgstr "เวลาสิ้นสุดความถูกต้อง" -#: engine/core/models.py:1153 +#: engine/core/models.py:1246 msgid "timestamp from which this promocode is valid" msgstr "เวลาที่ตราไว้ซึ่งรหัสโปรโมชั่นนี้ใช้ได้" -#: engine/core/models.py:1154 +#: engine/core/models.py:1247 msgid "start validity time" msgstr "เวลาเริ่มต้นความถูกต้อง" -#: engine/core/models.py:1159 +#: engine/core/models.py:1252 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "เวลาที่ตราประทับเมื่อใช้รหัสโปรโมชั่น, ว่างเปล่าหากยังไม่ได้ใช้" -#: engine/core/models.py:1160 +#: engine/core/models.py:1253 msgid "usage timestamp" msgstr "เวลาการใช้งาน" -#: engine/core/models.py:1165 +#: engine/core/models.py:1258 msgid "user assigned to this promocode if applicable" msgstr "ผู้ใช้ที่ได้รับมอบหมายให้ใช้รหัสโปรโมชั่นนี้ หากมี" -#: engine/core/models.py:1166 +#: engine/core/models.py:1259 msgid "assigned user" msgstr "ผู้ใช้ที่ได้รับมอบหมาย" -#: engine/core/models.py:1173 +#: engine/core/models.py:1266 msgid "promo code" msgstr "รหัสโปรโมชั่น" -#: engine/core/models.py:1174 +#: engine/core/models.py:1267 msgid "promo codes" msgstr "รหัสส่งเสริมการขาย" -#: engine/core/models.py:1190 +#: engine/core/models.py:1283 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2383,16 +2426,16 @@ msgstr "" "ควรกำหนดประเภทส่วนลดเพียงประเภทเดียว (จำนวนเงินหรือเปอร์เซ็นต์) เท่านั้น " "ไม่ควรกำหนดทั้งสองประเภทหรือไม่ได้กำหนดเลย" -#: engine/core/models.py:1212 +#: engine/core/models.py:1305 msgid "promocode already used" msgstr "รหัสโปรโมชั่นถูกใช้ไปแล้ว" -#: engine/core/models.py:1234 +#: engine/core/models.py:1327 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "ประเภทส่วนลดไม่ถูกต้องสำหรับรหัสโปรโมชั่น {self.uuid}!" -#: engine/core/models.py:1243 +#: engine/core/models.py:1336 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 " @@ -2410,139 +2453,139 @@ msgstr "" "และรายละเอียดการจัดส่งหรือการเรียกเก็บเงินสามารถอัปเดตได้เช่นกัน นอกจากนี้ " "ฟังก์ชันการทำงานยังรองรับการจัดการสินค้าในวงจรชีวิตของคำสั่งซื้อ" -#: engine/core/models.py:1260 +#: engine/core/models.py:1357 msgid "the billing address used for this order" msgstr "ที่อยู่สำหรับเรียกเก็บเงินที่ใช้สำหรับคำสั่งซื้อนี้" -#: engine/core/models.py:1268 +#: engine/core/models.py:1365 msgid "optional promo code applied to this order" msgstr "รหัสโปรโมชั่นเสริมใช้กับคำสั่งซื้อนี้แล้ว" -#: engine/core/models.py:1269 +#: engine/core/models.py:1366 msgid "applied promo code" msgstr "ใช้รหัสโปรโมชั่น" -#: engine/core/models.py:1277 +#: engine/core/models.py:1374 msgid "the shipping address used for this order" msgstr "ที่อยู่สำหรับจัดส่งที่ใช้สำหรับคำสั่งซื้อนี้" -#: engine/core/models.py:1278 +#: engine/core/models.py:1375 msgid "shipping address" msgstr "ที่อยู่สำหรับจัดส่ง" -#: engine/core/models.py:1284 +#: engine/core/models.py:1381 msgid "current status of the order in its lifecycle" msgstr "สถานะปัจจุบันของคำสั่งซื้อในวงจรชีวิต" -#: engine/core/models.py:1285 +#: engine/core/models.py:1382 msgid "order status" msgstr "สถานะการสั่งซื้อ" -#: engine/core/models.py:1290 engine/core/models.py:1889 +#: engine/core/models.py:1387 engine/core/models.py:1997 msgid "json structure of notifications to display to users" msgstr "" "โครงสร้าง JSON ของการแจ้งเตือนที่จะแสดงให้ผู้ใช้เห็น ใน UI " "ของผู้ดูแลระบบจะใช้การแสดงผลแบบตาราง" -#: engine/core/models.py:1296 +#: engine/core/models.py:1393 msgid "json representation of order attributes for this order" msgstr "การแสดงผล JSON ของคุณลักษณะคำสั่งซื้อสำหรับคำสั่งซื้อนี้" -#: engine/core/models.py:1302 +#: engine/core/models.py:1399 msgid "the user who placed the order" msgstr "ผู้ใช้ที่ทำการสั่งซื้อ" -#: engine/core/models.py:1303 +#: engine/core/models.py:1400 msgid "user" msgstr "ผู้ใช้" -#: engine/core/models.py:1309 +#: engine/core/models.py:1406 msgid "the timestamp when the order was finalized" msgstr "เวลาที่คำสั่งซื้อได้รับการยืนยัน" -#: engine/core/models.py:1310 +#: engine/core/models.py:1407 msgid "buy time" msgstr "ซื้อเวลา" -#: engine/core/models.py:1317 +#: engine/core/models.py:1414 msgid "a human-readable identifier for the order" msgstr "ตัวระบุที่มนุษย์อ่านได้สำหรับคำสั่ง" -#: engine/core/models.py:1318 +#: engine/core/models.py:1415 msgid "human readable id" msgstr "รหัสที่สามารถอ่านได้โดยมนุษย์" -#: engine/core/models.py:1324 +#: engine/core/models.py:1421 msgid "order" msgstr "คำสั่ง" -#: engine/core/models.py:1371 +#: engine/core/models.py:1468 msgid "a user must have only one pending order at a time" msgstr "" "ผู้ใช้ต้องมีคำสั่งซื้อที่รอดำเนินการเพียงหนึ่งรายการเท่านั้นในแต่ละครั้ง!" -#: engine/core/models.py:1404 +#: engine/core/models.py:1504 msgid "you cannot add products to an order that is not a pending one" msgstr "" "คุณไม่สามารถเพิ่มสินค้าในคำสั่งซื้อที่ไม่ใช่คำสั่งซื้อที่รอดำเนินการได้" -#: engine/core/models.py:1410 +#: engine/core/models.py:1510 msgid "you cannot add inactive products to order" msgstr "คุณไม่สามารถเพิ่มสินค้าที่ไม่ใช้งานในคำสั่งซื้อได้" -#: engine/core/models.py:1432 +#: engine/core/models.py:1533 msgid "you cannot add more products than available in stock" msgstr "คุณไม่สามารถเพิ่มสินค้าได้มากกว่าที่มีในสต็อก" -#: engine/core/models.py:1456 engine/core/models.py:1485 -#: engine/core/models.py:1495 +#: engine/core/models.py:1557 engine/core/models.py:1586 +#: engine/core/models.py:1596 msgid "you cannot remove products from an order that is not a pending one" msgstr "" "คุณไม่สามารถลบสินค้าออกจากคำสั่งซื้อที่ไม่ใช่คำสั่งซื้อที่อยู่ในสถานะรอดำเนินการได้" -#: engine/core/models.py:1480 +#: engine/core/models.py:1581 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} ไม่มีอยู่จริงกับคำค้นหา <{query}>!" -#: engine/core/models.py:1519 +#: engine/core/models.py:1620 msgid "promocode does not exist" msgstr "รหัสโปรโมชั่นไม่มีอยู่" -#: engine/core/models.py:1534 +#: engine/core/models.py:1635 msgid "you can only buy physical products with shipping address specified" msgstr "" "คุณสามารถซื้อได้เฉพาะสินค้าทางกายภาพที่มีที่อยู่สำหรับจัดส่งระบุไว้เท่านั้น!" -#: engine/core/models.py:1555 +#: engine/core/models.py:1656 msgid "address does not exist" msgstr "ไม่มีที่อยู่" -#: engine/core/models.py:1577 engine/core/models.py:1656 +#: engine/core/models.py:1678 engine/core/models.py:1757 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "ขณะนี้คุณไม่สามารถซื้อได้ กรุณาลองใหม่อีกครั้งในอีกไม่กี่นาที" -#: engine/core/models.py:1583 engine/core/models.py:1649 +#: engine/core/models.py:1684 engine/core/models.py:1750 msgid "invalid force value" msgstr "ค่าแรงบังคับไม่ถูกต้อง" -#: engine/core/models.py:1589 engine/core/models.py:1660 +#: engine/core/models.py:1690 engine/core/models.py:1761 msgid "you cannot purchase an empty order!" msgstr "คุณไม่สามารถซื้อคำสั่งซื้อที่ว่างเปล่าได้!" -#: engine/core/models.py:1610 +#: engine/core/models.py:1711 msgid "you cannot buy an order without a user" msgstr "คุณไม่สามารถซื้อคำสั่งซื้อได้หากไม่มีผู้ใช้!" -#: engine/core/models.py:1624 +#: engine/core/models.py:1725 msgid "a user without a balance cannot buy with balance" msgstr "ผู้ใช้ที่ไม่มียอดคงเหลือไม่สามารถซื้อด้วยยอดคงเหลือได้!" -#: engine/core/models.py:1630 +#: engine/core/models.py:1731 msgid "insufficient funds to complete the order" msgstr "เงินไม่เพียงพอในการทำรายการให้เสร็จสมบูรณ์" -#: engine/core/models.py:1671 +#: engine/core/models.py:1772 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2550,14 +2593,14 @@ msgstr "" "คุณไม่สามารถซื้อได้หากไม่มีการลงทะเบียน กรุณาให้ข้อมูลต่อไปนี้: ชื่อลูกค้า, " "อีเมลลูกค้า, หมายเลขโทรศัพท์ลูกค้า" -#: engine/core/models.py:1682 +#: engine/core/models.py:1783 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "วิธีการชำระเงินไม่ถูกต้อง: {payment_method} จาก {available_payment_methods}!" -#: engine/core/models.py:1813 +#: engine/core/models.py:1916 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2571,32 +2614,32 @@ msgstr "" "การอ้างอิงถึงผลิตภัณฑ์ที่เกี่ยวข้องในคำสั่งซื้อ และคะแนนที่ผู้ใช้กำหนด " "คลาสนี้ใช้ฟิลด์ในฐานข้อมูลเพื่อสร้างแบบจำลองและจัดการข้อมูลข้อเสนอแนะอย่างมีประสิทธิภาพ" -#: engine/core/models.py:1825 +#: engine/core/models.py:1928 msgid "user-provided comments about their experience with the product" msgstr "ความคิดเห็นที่ผู้ใช้ให้ไว้เกี่ยวกับประสบการณ์ของพวกเขาต่อผลิตภัณฑ์" -#: engine/core/models.py:1826 +#: engine/core/models.py:1929 msgid "feedback comments" msgstr "ความคิดเห็นจากผู้ตอบแบบสอบถาม" -#: engine/core/models.py:1834 +#: engine/core/models.py:1937 msgid "" "references the specific product in an order that this feedback is about" msgstr "อ้างอิงถึงผลิตภัณฑ์เฉพาะในคำสั่งซื้อที่ความคิดเห็นนี้เกี่ยวข้อง" -#: engine/core/models.py:1836 +#: engine/core/models.py:1939 msgid "related order product" msgstr "สินค้าที่เกี่ยวข้อง" -#: engine/core/models.py:1841 +#: engine/core/models.py:1944 msgid "user-assigned rating for the product" msgstr "คะแนนที่ผู้ใช้กำหนดให้กับผลิตภัณฑ์" -#: engine/core/models.py:1842 +#: engine/core/models.py:1945 msgid "product rating" msgstr "การให้คะแนนสินค้า" -#: engine/core/models.py:1862 +#: engine/core/models.py:1965 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2618,108 +2661,108 @@ msgstr "" "โมเดลนี้ผสานรวมกับโมเดล Order และ Product " "และเก็บการอ้างอิงถึงโมเดลเหล่านี้ไว้" -#: engine/core/models.py:1877 +#: engine/core/models.py:1985 msgid "the price paid by the customer for this product at purchase time" msgstr "ราคาที่ลูกค้าชำระสำหรับสินค้านี้ ณ เวลาที่ซื้อ" -#: engine/core/models.py:1878 +#: engine/core/models.py:1986 msgid "purchase price at order time" msgstr "ราคาซื้อ ณ เวลาที่สั่งซื้อ" -#: engine/core/models.py:1883 +#: engine/core/models.py:1991 msgid "internal comments for admins about this ordered product" msgstr "ความคิดเห็นภายในสำหรับผู้ดูแลระบบเกี่ยวกับสินค้าที่สั่งซื้อ" -#: engine/core/models.py:1884 +#: engine/core/models.py:1992 msgid "internal comments" msgstr "ความคิดเห็นภายใน" -#: engine/core/models.py:1890 +#: engine/core/models.py:1998 msgid "user notifications" msgstr "การแจ้งเตือนผู้ใช้" -#: engine/core/models.py:1895 +#: engine/core/models.py:2003 msgid "json representation of this item's attributes" msgstr "การแสดงผล JSON ของคุณลักษณะของรายการนี้" -#: engine/core/models.py:1896 +#: engine/core/models.py:2004 msgid "ordered product attributes" msgstr "จัดเรียงคุณลักษณะของสินค้า" -#: engine/core/models.py:1901 +#: engine/core/models.py:2009 msgid "reference to the parent order that contains this product" msgstr "การอ้างอิงถึงคำสั่งซื้อหลักที่มีสินค้านี้อยู่" -#: engine/core/models.py:1902 +#: engine/core/models.py:2010 msgid "parent order" msgstr "ลำดับของผู้ปกครอง" -#: engine/core/models.py:1911 +#: engine/core/models.py:2019 msgid "the specific product associated with this order line" msgstr "สินค้าเฉพาะที่เกี่ยวข้องกับรายการคำสั่งซื้อนี้" -#: engine/core/models.py:1918 +#: engine/core/models.py:2026 msgid "quantity of this specific product in the order" msgstr "ปริมาณของสินค้าชนิดนี้ในคำสั่งซื้อ" -#: engine/core/models.py:1919 +#: engine/core/models.py:2027 msgid "product quantity" msgstr "จำนวนสินค้า" -#: engine/core/models.py:1926 +#: engine/core/models.py:2034 msgid "current status of this product in the order" msgstr "สถานะปัจจุบันของสินค้านี้ในคำสั่งซื้อ" -#: engine/core/models.py:1927 +#: engine/core/models.py:2035 msgid "product line status" msgstr "สถานะสายผลิตภัณฑ์" -#: engine/core/models.py:1998 +#: engine/core/models.py:2106 msgid "order product must have an order" msgstr "Orderproduct ต้องมีการสั่งซื้อที่เกี่ยวข้อง!" -#: engine/core/models.py:2000 +#: engine/core/models.py:2108 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "ระบุการกระทำที่ไม่ถูกต้องสำหรับข้อเสนอแนะ: {action}!" -#: engine/core/models.py:2017 +#: engine/core/models.py:2125 msgid "you cannot feedback an order which is not received" msgstr "คุณไม่สามารถให้ข้อเสนอแนะเกี่ยวกับคำสั่งซื้อที่ไม่ได้รับ" -#: engine/core/models.py:2026 +#: engine/core/models.py:2132 engine/core/models.py:2227 msgid "name" msgstr "ชื่อ" -#: engine/core/models.py:2028 +#: engine/core/models.py:2134 msgid "URL of the integration" msgstr "URL ของการผสานรวม" -#: engine/core/models.py:2031 +#: engine/core/models.py:2137 msgid "authentication credentials" msgstr "ข้อมูลประจำตัวสำหรับการยืนยันตัวตน" -#: engine/core/models.py:2054 +#: engine/core/models.py:2160 msgid "you can only have one default CRM provider" msgstr "คุณสามารถมีผู้ให้บริการ CRM เริ่มต้นได้เพียงรายเดียวเท่านั้น" -#: engine/core/models.py:2064 +#: engine/core/models.py:2170 msgid "CRM" msgstr "ระบบบริหารความสัมพันธ์ลูกค้า" -#: engine/core/models.py:2065 +#: engine/core/models.py:2171 msgid "CRMs" msgstr "ระบบบริหารความสัมพันธ์ลูกค้า" -#: engine/core/models.py:2081 +#: engine/core/models.py:2187 msgid "order CRM link" msgstr "ลิงก์ CRM ของคำสั่ง" -#: engine/core/models.py:2082 +#: engine/core/models.py:2188 msgid "orders CRM links" msgstr "ลิงก์ CRM ของคำสั่งซื้อ" -#: engine/core/models.py:2087 +#: engine/core/models.py:2193 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2735,14 +2778,38 @@ msgstr "" "และว่าสินทรัพย์นั้นสามารถมองเห็นได้สาธารณะหรือไม่ รวมถึงวิธีการสร้าง URL " "สำหรับการดาวน์โหลดสินทรัพย์เมื่อคำสั่งซื้อที่เกี่ยวข้องอยู่ในสถานะเสร็จสมบูรณ์" -#: engine/core/models.py:2103 +#: engine/core/models.py:2209 msgid "download" msgstr "ดาวน์โหลด" -#: engine/core/models.py:2104 +#: engine/core/models.py:2210 msgid "downloads" msgstr "ดาวน์โหลด" +#: engine/core/models.py:2228 +msgid "descriptive name for the image" +msgstr "ชื่ออธิบายสำหรับรูปภาพ" + +#: engine/core/models.py:2233 +msgid "image file pasted in the markdown editor" +msgstr "ไฟล์ภาพที่วางในตัวแก้ไขมาร์กดาวน์" + +#: engine/core/models.py:2239 +msgid "alt text" +msgstr "ข้อความอื่น" + +#: engine/core/models.py:2240 +msgid "alternative text for accessibility" +msgstr "ข้อความทางเลือกสำหรับการเข้าถึง" + +#: engine/core/models.py:2244 +msgid "pasted image" +msgstr "ภาพที่วาง" + +#: engine/core/models.py:2245 +msgid "pasted images" +msgstr "ภาพที่วางไว้" + #: engine/core/serializers/utility.py:91 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." @@ -2750,6 +2817,16 @@ msgstr "" "คุณต้องแสดงความคิดเห็น, ให้คะแนน, และระบุ uuid ของสินค้าเพื่อเพิ่มคำแนะนำ" #: engine/core/sitemaps.py:25 +#: engine/core/templates/admin_doc/bookmarklets.html:8 +#: engine/core/templates/admin_doc/index.html:8 +#: engine/core/templates/admin_doc/missing_docutils.html:8 +#: engine/core/templates/admin_doc/model_detail.html:8 +#: engine/core/templates/admin_doc/model_index.html:8 +#: engine/core/templates/admin_doc/template_detail.html:8 +#: engine/core/templates/admin_doc/template_filter_index.html:8 +#: engine/core/templates/admin_doc/template_tag_index.html:8 +#: engine/core/templates/admin_doc/view_detail.html:8 +#: engine/core/templates/admin_doc/view_index.html:8 msgid "Home" msgstr "หน้าแรก" @@ -2802,45 +2879,34 @@ msgstr "กรอส" msgid "Dashboard" msgstr "แดชบอร์ด" -#: engine/core/templates/admin/dashboard/_income_overview.html:7 +#: engine/core/templates/admin/dashboard/_income_overview.html:6 msgid "Income overview" msgstr "ภาพรวมรายได้" -#: engine/core/templates/admin/dashboard/_income_overview.html:31 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Net" +#: engine/core/templates/admin/dashboard/_income_overview.html:16 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" msgstr "รายได้สุทธิ" -#: engine/core/templates/admin/dashboard/_income_overview.html:37 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Taxes" -msgstr "ภาษี" - -#: engine/core/templates/admin/dashboard/_income_overview.html:43 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 +#: engine/core/templates/admin/dashboard/_income_overview.html:21 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 msgid "Returns" msgstr "การคืนสินค้า" -#: engine/core/templates/admin/dashboard/_income_overview.html:48 -msgid "Gross (pie total)" -msgstr "รายได้รวม" - -#: engine/core/templates/admin/dashboard/_income_overview.html:72 -msgid "No data" -msgstr "ไม่มีวันที่" - +#: engine/core/templates/admin/dashboard/_income_overview.html:26 #: engine/core/templates/admin/dashboard/_kpis.html:6 msgid "GMV" msgstr "GMV" +#: engine/core/templates/admin/dashboard/_income_overview.html:50 +msgid "No data" +msgstr "ไม่มีวันที่" + #: engine/core/templates/admin/dashboard/_kpis.html:34 msgid "AOV" msgstr "AOV" -#: engine/core/templates/admin/dashboard/_kpis.html:48 -msgid "Net revenue" -msgstr "รายได้สุทธิ" - #: engine/core/templates/admin/dashboard/_kpis.html:62 msgid "Refund rate" msgstr "อัตราการคืนเงิน" @@ -2853,7 +2919,7 @@ msgstr "ส่งคืน" msgid "Low stock" msgstr "สินค้าใกล้หมด" -#: engine/core/templates/admin/dashboard/_low_stock.html:29 +#: engine/core/templates/admin/dashboard/_low_stock.html:33 msgid "No low stock items." msgstr "ไม่มีสินค้าคงคลังต่ำ" @@ -2910,6 +2976,295 @@ msgstr "ไม่มีการขายในหมวดหมู่ใดใ msgid "Django site admin" msgstr "ผู้ดูแลระบบเว็บไซต์ Django" +#: engine/core/templates/admin_doc/bookmarklets.html:4 +#: engine/core/templates/admin_doc/bookmarklets.html:17 +msgid "Documentation bookmarklets" +msgstr "บุ๊กมาร์กเล็ตสำหรับเอกสาร" + +#: engine/core/templates/admin_doc/bookmarklets.html:10 +#: engine/core/templates/admin_doc/index.html:4 +#: engine/core/templates/admin_doc/index.html:10 +#: engine/core/templates/admin_doc/index.html:15 +#: engine/core/templates/admin_doc/missing_docutils.html:10 +#: engine/core/templates/admin_doc/missing_docutils.html:19 +#: engine/core/templates/admin_doc/model_detail.html:10 +#: engine/core/templates/admin_doc/model_index.html:10 +#: engine/core/templates/admin_doc/template_detail.html:10 +#: engine/core/templates/admin_doc/template_filter_index.html:10 +#: engine/core/templates/admin_doc/template_tag_index.html:10 +#: engine/core/templates/admin_doc/view_detail.html:10 +#: engine/core/templates/admin_doc/view_index.html:10 +msgid "Documentation" +msgstr "เอกสาร" + +#: engine/core/templates/admin_doc/bookmarklets.html:12 +#: engine/core/templates/admin_doc/index.html:53 +msgid "Bookmarklets" +msgstr "บุ๊กมาร์กเล็ต" + +#: engine/core/templates/admin_doc/bookmarklets.html:19 +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"ในการติดตั้งบุ๊กมาร์กเล็ต ให้ลากลิงก์ไปยังแถบเครื่องมือบุ๊กมาร์กของคุณ " +"หรือคลิกขวาที่ลิงก์แล้วเพิ่มลงในบุ๊กมาร์กของคุณ " +"ตอนนี้คุณสามารถเลือกบุ๊กมาร์กเล็ตจากหน้าใดก็ได้ในเว็บไซต์" + +#: engine/core/templates/admin_doc/bookmarklets.html:29 +msgid "Documentation for this page" +msgstr "เอกสารสำหรับหน้าเว็บนี้" + +#: engine/core/templates/admin_doc/bookmarklets.html:31 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "กระโดดจากหน้าใด ๆ ไปยังเอกสารสำหรับมุมมองที่สร้างหน้านั้น" + +#: engine/core/templates/admin_doc/index.html:21 +#: engine/core/templates/admin_doc/model_detail.html:12 +#: engine/core/templates/admin_doc/model_index.html:4 +#: engine/core/templates/admin_doc/model_index.html:12 +msgid "Models" +msgstr "แบบจำลอง" + +#: engine/core/templates/admin_doc/index.html:23 +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"โมเดลคือคำอธิบายของวัตถุทั้งหมดในระบบและฟิลด์ที่เกี่ยวข้อง " +"โมเดลแต่ละตัวมีรายการฟิลด์ที่สามารถเข้าถึงได้เป็นตัวแปรแม่แบบ" + +#: engine/core/templates/admin_doc/index.html:29 +#: engine/core/templates/admin_doc/view_detail.html:12 +#: engine/core/templates/admin_doc/view_index.html:4 +#: engine/core/templates/admin_doc/view_index.html:12 +msgid "Views" +msgstr "มุมมอง" + +#: engine/core/templates/admin_doc/index.html:31 +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"แต่ละหน้าบนเว็บไซต์สาธารณะถูกสร้างขึ้นโดยวิว " +"วิวจะกำหนดว่าเทมเพลตใดจะถูกใช้เพื่อสร้างหน้าและวัตถุใดบ้างที่สามารถใช้ได้กับเทมเพลตนั้น" + +#: engine/core/templates/admin_doc/index.html:39 +msgid "List of all the template tags and their functions." +msgstr "รายการของแท็กแม่แบบทั้งหมดและฟังก์ชันของพวกมัน" + +#: engine/core/templates/admin_doc/index.html:45 +#: engine/core/templates/admin_doc/template_filter_index.html:12 +msgid "Filters" +msgstr "ตัวกรอง" + +#: engine/core/templates/admin_doc/index.html:47 +msgid "" +"Filters are actions which can be applied to variables in a template to alter" +" the output." +msgstr "" +"ตัวกรองคือการกระทำที่สามารถนำไปใช้กับตัวแปรในเทมเพลตเพื่อเปลี่ยนแปลงผลลัพธ์" + +#: engine/core/templates/admin_doc/index.html:55 +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"เครื่องมือสำหรับเบราว์เซอร์ของคุณเพื่อเข้าถึงฟังก์ชันการจัดการอย่างรวดเร็ว" + +#: engine/core/templates/admin_doc/missing_docutils.html:4 +msgid "Please install docutils" +msgstr "กรุณาติดตั้ง docutils" + +#: engine/core/templates/admin_doc/missing_docutils.html:20 +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"ระบบเอกสารผู้ดูแลระบบต้องการไลบรารี docutils ของ Python" + +#: engine/core/templates/admin_doc/missing_docutils.html:21 +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"กรุณาขอให้ผู้ดูแลระบบของคุณติดตั้ง docutils" + +#: engine/core/templates/admin_doc/model_detail.html:4 +#, python-format +msgid "Model: %(name)s" +msgstr "รุ่น: %(name)s" + +#: engine/core/templates/admin_doc/model_detail.html:29 +msgid "Fields" +msgstr "ฟิลด์" + +#: engine/core/templates/admin_doc/model_detail.html:36 +msgid "Field" +msgstr "ฟิลด์" + +#: engine/core/templates/admin_doc/model_detail.html:37 +msgid "Type" +msgstr "ประเภท" + +#: engine/core/templates/admin_doc/model_detail.html:38 +#: engine/core/templates/admin_doc/model_detail.html:70 +msgid "Description" +msgstr "คำอธิบาย" + +#: engine/core/templates/admin_doc/model_detail.html:61 +msgid "Methods with arguments" +msgstr "วิธีการที่มีอาร์กิวเมนต์" + +#: engine/core/templates/admin_doc/model_detail.html:68 +msgid "Method" +msgstr "วิธีการ" + +#: engine/core/templates/admin_doc/model_detail.html:69 +msgid "Arguments" +msgstr "อาร์กิวเมนต์" + +#: engine/core/templates/admin_doc/model_detail.html:89 +msgid "Back to Model documentation" +msgstr "กลับไปยังเอกสารของโมเดล" + +#: engine/core/templates/admin_doc/model_index.html:17 +msgid "Model documentation" +msgstr "เอกสารแบบจำลอง" + +#: engine/core/templates/admin_doc/model_index.html:44 +msgid "Model groups" +msgstr "กลุ่มแบบจำลอง" + +#: engine/core/templates/admin_doc/template_detail.html:4 +#, python-format +msgid "Template: %(name)s" +msgstr "แม่แบบ: %(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:12 +msgid "Templates" +msgstr "เทมเพลต" + +#: engine/core/templates/admin_doc/template_detail.html:17 +#, python-format +msgid "" +"Template: %(name)s" +msgstr "" +"Template: %(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:21 +#, python-format +msgid "Search path for template %(name)s:" +msgstr "เส้นทางค้นหาสำหรับเทมเพลต %(name)s:" + +#: engine/core/templates/admin_doc/template_detail.html:29 +msgid "(does not exist)" +msgstr "(ไม่มีอยู่)" + +#: engine/core/templates/admin_doc/template_detail.html:40 +msgid "Back to Documentation" +msgstr "กลับไปยังเอกสาร" + +#: engine/core/templates/admin_doc/template_filter_index.html:4 +msgid "Template filters" +msgstr "เทมเพลตฟิลเตอร์" + +#: engine/core/templates/admin_doc/template_filter_index.html:17 +msgid "Template filter documentation" +msgstr "เอกสารคู่มือตัวกรองแม่แบบ" + +#: engine/core/templates/admin_doc/template_filter_index.html:26 +#: engine/core/templates/admin_doc/template_filter_index.html:52 +msgid "Built-in filters" +msgstr "ตัวกรองในตัว" + +#: engine/core/templates/admin_doc/template_filter_index.html:29 +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before using" +" the filter." +msgstr "" +"ในการใช้ฟิลเตอร์เหล่านี้ ให้ใส่ %(code)s " +"ในเทมเพลตของคุณก่อนใช้ฟิลเตอร์" + +#: engine/core/templates/admin_doc/template_tag_index.html:4 +msgid "Template tags" +msgstr "แท็กแม่แบบ" + +#: engine/core/templates/admin_doc/template_tag_index.html:17 +msgid "Template tag documentation" +msgstr "เอกสารประกอบแท็กแม่แบบ" + +#: engine/core/templates/admin_doc/template_tag_index.html:26 +#: engine/core/templates/admin_doc/template_tag_index.html:52 +msgid "Built-in tags" +msgstr "แท็กในตัว" + +#: engine/core/templates/admin_doc/template_tag_index.html:29 +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using the tag." +msgstr "" +"ในการใช้แท็กเหล่านี้ ให้ใส่ %(code)s ในเทมเพลตของคุณก่อนใช้แท็ก" + +#: engine/core/templates/admin_doc/view_detail.html:4 +#, python-format +msgid "View: %(name)s" +msgstr "มุมมอง: %(name)s" + +#: engine/core/templates/admin_doc/view_detail.html:28 +msgid "Context:" +msgstr "บริบท:" + +#: engine/core/templates/admin_doc/view_detail.html:33 +msgid "Templates:" +msgstr "เทมเพลต:" + +#: engine/core/templates/admin_doc/view_detail.html:41 +msgid "Back to View documentation" +msgstr "กลับไปที่ดูเอกสาร" + +#: engine/core/templates/admin_doc/view_index.html:17 +msgid "View documentation" +msgstr "ดูเอกสาร" + +#: engine/core/templates/admin_doc/view_index.html:28 +#, python-format +msgid "Views by namespace %(name)s" +msgstr "มุมมองตามเนมสเปซ %(name)s" + +#: engine/core/templates/admin_doc/view_index.html:30 +msgid "Views by empty namespace" +msgstr "มุมมองโดยเนมสเปซว่าง" + +#: engine/core/templates/admin_doc/view_index.html:40 +#, python-format +msgid "" +"View function: %(full_name)s. Name: %(url_name)s." +msgstr "" +"ดูฟังก์ชัน: %(full_name)s. ชื่อ: %(url_name)s." + +#: engine/core/templates/admin_doc/view_index.html:54 +msgid "Jump to namespace" +msgstr "กระโดดไปยังเนมสเปซ" + +#: engine/core/templates/admin_doc/view_index.html:59 +msgid "Empty namespace" +msgstr "พื้นที่ชื่อว่างเปล่า" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -3008,7 +3363,7 @@ msgid "" msgstr "ข้อมูลเพิ่มเติม" #: engine/core/templates/digital_order_delivered_email.html:137 -#: engine/core/templates/json_table_widget.html:6 +#: engine/core/templates/json_table_widget.html:26 msgid "value" msgstr "มูลค่า" @@ -3026,11 +3381,23 @@ msgstr "หากคุณมีคำถามใด ๆ โปรดติด msgid "best regards,
the %(project_name)s team" msgstr "ขอแสดงความนับถือ
ทีมงาน %(project_name)s" -#: engine/core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:7 +msgid "Key" +msgstr "คีย์" + +#: engine/core/templates/json_table_widget.html:8 +msgid "Value" +msgstr "มูลค่า" + +#: engine/core/templates/json_table_widget.html:19 msgid "key" msgstr "คีย์" -#: engine/core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:32 +msgid "Delete row" +msgstr "ลบแถว" + +#: engine/core/templates/json_table_widget.html:44 msgid "Add Row" msgstr "เพิ่มแถว" @@ -3113,12 +3480,21 @@ msgstr "คุณไม่มีสิทธิ์ดำเนินการน msgid "NOMINATIM_URL must be configured." msgstr "ต้องกำหนดค่าพารามิเตอร์ NOMINATIM_URL!" -#: engine/core/validators.py:23 +#: engine/core/validators.py:18 +msgid "could not determine file type" +msgstr "ไม่สามารถระบุประเภทไฟล์ได้" + +#: engine/core/validators.py:24 +#, python-brace-format +msgid "unsupported video format. supported formats: {supported}" +msgstr "รูปแบบวิดีโอไม่รองรับ. รูปแบบที่รองรับ: {supported}" + +#: engine/core/validators.py:45 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "ขนาดของภาพไม่ควรเกิน w{max_width} x h{max_height} พิกเซล!" -#: engine/core/views.py:104 +#: engine/core/views.py:108 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3126,7 +3502,7 @@ msgstr "" "จัดการคำขอสำหรับดัชนีแผนผังเว็บไซต์และส่งคืนการตอบสนองในรูปแบบ XML " "โดยตรวจสอบให้แน่ใจว่าการตอบสนองมีหัวข้อประเภทเนื้อหาที่เหมาะสมสำหรับ XML" -#: engine/core/views.py:119 +#: engine/core/views.py:123 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3136,16 +3512,16 @@ msgstr "" " ดึงการตอบสนองรายละเอียดแผนผังเว็บไซต์ที่เหมาะสม และตั้งค่าส่วนหัว Content-" "Type สำหรับ XML" -#: engine/core/views.py:155 +#: engine/core/views.py:174 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "ส่งคืนรายการของภาษาที่รองรับและข้อมูลที่เกี่ยวข้อง" -#: engine/core/views.py:182 +#: engine/core/views.py:201 msgid "Returns the parameters of the website as a JSON object." msgstr "ส่งคืนพารามิเตอร์ของเว็บไซต์ในรูปแบบอ็อบเจ็กต์ JSON" -#: engine/core/views.py:198 +#: engine/core/views.py:217 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3153,11 +3529,11 @@ msgstr "" "จัดการการดำเนินการแคช เช่น " "การอ่านและการตั้งค่าข้อมูลแคชด้วยคีย์ที่กำหนดและเวลาหมดอายุ" -#: engine/core/views.py:220 +#: engine/core/views.py:239 msgid "Handles `contact us` form submissions." msgstr "จัดการการส่งแบบฟอร์ม 'ติดต่อเรา'" -#: engine/core/views.py:236 +#: engine/core/views.py:255 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3165,15 +3541,15 @@ msgstr "" "จัดการคำขอสำหรับการประมวลผลและตรวจสอบความถูกต้องของ URL จากคำขอ POST " "ที่เข้ามา" -#: engine/core/views.py:273 +#: engine/core/views.py:292 msgid "Handles global search queries." msgstr "จัดการคำค้นหาทั่วโลก" -#: engine/core/views.py:289 +#: engine/core/views.py:308 msgid "Handles the logic of buying as a business without registration." msgstr "จัดการตรรกะของการซื้อในฐานะธุรกิจโดยไม่ต้องจดทะเบียน" -#: engine/core/views.py:337 +#: engine/core/views.py:356 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3182,31 +3558,31 @@ msgstr "" "ฟังก์ชันนี้พยายามให้บริการไฟล์สินทรัพย์ดิจิทัลที่อยู่ในไดเรกทอรีจัดเก็บของโครงการ" " หากไม่พบไฟล์ จะเกิดข้อผิดพลาด HTTP 404 เพื่อระบุว่าทรัพยากรไม่พร้อมใช้งาน" -#: engine/core/views.py:348 +#: engine/core/views.py:367 msgid "order_product_uuid is required" msgstr "order_product_uuid เป็นข้อมูลที่จำเป็น" -#: engine/core/views.py:355 +#: engine/core/views.py:374 msgid "order product does not exist" msgstr "คำสั่งซื้อสินค้าไม่มีอยู่" -#: engine/core/views.py:358 +#: engine/core/views.py:377 msgid "you can only download the digital asset once" msgstr "คุณสามารถดาวน์โหลดสินทรัพย์ดิจิทัลได้เพียงครั้งเดียวเท่านั้น" -#: engine/core/views.py:362 +#: engine/core/views.py:381 msgid "the order must be paid before downloading the digital asset" msgstr "คำสั่งซื้อจะต้องชำระเงินก่อนดาวน์โหลดสินทรัพย์ดิจิทัล" -#: engine/core/views.py:369 +#: engine/core/views.py:388 msgid "the order product does not have a product" msgstr "สินค้าตามคำสั่งซื้อไม่มีสินค้า" -#: engine/core/views.py:412 +#: engine/core/views.py:431 msgid "favicon not found" msgstr "ไม่พบไอคอนเว็บไซต์" -#: engine/core/views.py:418 +#: engine/core/views.py:437 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3215,7 +3591,7 @@ msgstr "" "favicon ที่อยู่ในไดเรกทอรีแบบคงที่ของโปรเจกต์ หากไม่พบไฟล์ favicon " "จะเกิดข้อผิดพลาด HTTP 404 เพื่อแสดงว่าทรัพยากรไม่พร้อมใช้งาน" -#: engine/core/views.py:432 +#: engine/core/views.py:451 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3225,16 +3601,20 @@ msgstr "" "ที่เข้ามาและเปลี่ยนเส้นทางไปยังหน้าดัชนีของอินเทอร์เฟซผู้ดูแลระบบ Django " "โดยใช้ฟังก์ชัน `redirect` ของ Django สำหรับการเปลี่ยนเส้นทาง HTTP" -#: engine/core/views.py:445 +#: engine/core/views.py:464 msgid "Returns current version of the Schon. " msgstr "ส่งคืนเวอร์ชันปัจจุบันของ Schon" -#: engine/core/views.py:674 engine/core/views.py:689 +#: engine/core/views.py:475 +msgid "no image file provided" +msgstr "ไม่มีไฟล์รูปภาพให้" + +#: engine/core/views.py:710 engine/core/views.py:725 #, python-format msgid "Revenue & Orders (last %(days)d)" msgstr "รายได้และคำสั่งซื้อ (ล่าสุด %(days)d)" -#: engine/core/views.py:870 +#: engine/core/views.py:911 msgid "Returns custom variables for Dashboard. " msgstr "ส่งคืนตัวแปรที่กำหนดเองสำหรับแดชบอร์ด" @@ -3323,7 +3703,7 @@ msgstr "" "ของ Django เพื่อทำให้การพัฒนาระบบจุดสิ้นสุด API " "สำหรับออบเจ็กต์แบรนด์เป็นเรื่องง่ายขึ้น" -#: engine/core/viewsets.py:458 +#: engine/core/viewsets.py:460 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3340,7 +3720,15 @@ msgstr "" " API แบบ RESTful รวมถึงวิธีการสำหรับการดึงรายละเอียดผลิตภัณฑ์ การใช้สิทธิ์ " "และการเข้าถึงข้อเสนอแนะที่เกี่ยวข้องของผลิตภัณฑ์" -#: engine/core/viewsets.py:605 +#: engine/core/viewsets.py:541 +msgid "identificator_type and identificators are required" +msgstr "ประเภท_ตัวระบุ และ ตัวระบุ_หลายค่า เป็นข้อมูลที่จำเป็น" + +#: engine/core/viewsets.py:554 +msgid "identificator_type must be one of: uuid, slug, sku" +msgstr "identificator_type ต้องเป็นหนึ่งใน: uuid, slug, sku" + +#: engine/core/viewsets.py:635 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3354,7 +3742,7 @@ msgstr "" "วัตถุประสงค์ของคลาสนี้คือการให้การเข้าถึงทรัพยากรที่เกี่ยวข้องกับ Vendor " "อย่างมีประสิทธิภาพผ่านกรอบงาน Django REST" -#: engine/core/viewsets.py:625 +#: engine/core/viewsets.py:655 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3370,7 +3758,7 @@ msgstr "" " และจัดการวัตถุข้อเสนอแนะที่เข้าถึงได้บนพื้นฐานของสิทธิ์ มันขยายคลาสพื้นฐาน " "`schonViewSet` และใช้ระบบกรองของ Django สำหรับการสืบค้นข้อมูล" -#: engine/core/viewsets.py:652 +#: engine/core/viewsets.py:682 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3388,7 +3776,7 @@ msgstr "" "และการดึงคำสั่งซื้อที่รอดำเนินการของผู้ใช้ที่เข้าสู่ระบบปัจจุบัน ViewSet " "ใช้ตัวแปลงข้อมูลหลายแบบตามการกระทำที่เฉพาะเจาะจงและบังคับใช้สิทธิ์การเข้าถึงอย่างเหมาะสมขณะโต้ตอบกับข้อมูลคำสั่งซื้อ" -#: engine/core/viewsets.py:914 +#: engine/core/viewsets.py:944 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3403,26 +3791,26 @@ msgstr "" "นอกจากนี้ยังมีรายละเอียดการดำเนินการสำหรับการจัดการข้อเสนอแนะเกี่ยวกับอินสแตนซ์ของ" " OrderProduct" -#: engine/core/viewsets.py:974 +#: engine/core/viewsets.py:1004 msgid "Manages operations related to Product images in the application. " msgstr "จัดการการดำเนินงานที่เกี่ยวข้องกับภาพผลิตภัณฑ์ในแอปพลิเคชัน" -#: engine/core/viewsets.py:988 +#: engine/core/viewsets.py:1018 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "" "จัดการการดึงและการจัดการของตัวอย่าง PromoCode ผ่านการกระทำของ API ต่าง ๆ" -#: engine/core/viewsets.py:1019 +#: engine/core/viewsets.py:1049 msgid "Represents a view set for managing promotions. " msgstr "แสดงมุมมองที่ตั้งค่าไว้สำหรับการจัดการโปรโมชั่น" -#: engine/core/viewsets.py:1032 +#: engine/core/viewsets.py:1062 msgid "Handles operations related to Stock data in the system." msgstr "จัดการการดำเนินงานที่เกี่ยวข้องกับข้อมูลสต็อกในระบบ" -#: engine/core/viewsets.py:1046 +#: engine/core/viewsets.py:1076 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3440,7 +3828,7 @@ msgstr "" "มีการตรวจสอบสิทธิ์เพื่อรับรองว่าผู้ใช้สามารถจัดการรายการที่ต้องการของตนเองเท่านั้น" " เว้นแต่จะได้รับสิทธิ์อนุญาตอย่างชัดเจน" -#: engine/core/viewsets.py:1183 +#: engine/core/viewsets.py:1213 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3454,12 +3842,12 @@ msgstr "" "รวมถึงพฤติกรรมเฉพาะสำหรับวิธีการ HTTP ที่แตกต่างกัน การแทนที่ตัวแปลงข้อมูล " "และการจัดการสิทธิ์ตามบริบทของคำขอ" -#: engine/core/viewsets.py:1254 +#: engine/core/viewsets.py:1275 #, python-brace-format msgid "Geocoding error: {e}" msgstr "ข้อผิดพลาดในการแปลงพิกัดภูมิศาสตร์: {e}" -#: engine/core/viewsets.py:1262 +#: engine/core/viewsets.py:1283 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/tr_TR/LC_MESSAGES/django.mo b/engine/core/locale/tr_TR/LC_MESSAGES/django.mo index 0922b7dd..10d66d7b 100644 Binary files a/engine/core/locale/tr_TR/LC_MESSAGES/django.mo and b/engine/core/locale/tr_TR/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/tr_TR/LC_MESSAGES/django.po b/engine/core/locale/tr_TR/LC_MESSAGES/django.po index 1a095177..6faaa94a 100644 --- a/engine/core/locale/tr_TR/LC_MESSAGES/django.po +++ b/engine/core/locale/tr_TR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -51,115 +51,135 @@ msgstr "Değiştirilmiş" msgid "when the object was last modified" msgstr "Nesne en son ne zaman düzenlendi" -#: engine/core/admin.py:94 +#: engine/core/admin.py:98 msgid "translations" msgstr "Çeviriler" -#: engine/core/admin.py:102 +#: engine/core/admin.py:106 msgid "general" msgstr "Genel" -#: engine/core/admin.py:106 +#: engine/core/admin.py:110 msgid "relations" msgstr "İlişkiler" -#: engine/core/admin.py:111 +#: engine/core/admin.py:115 msgid "additional info" msgstr "EK BİLGİ" -#: engine/core/admin.py:133 +#: engine/core/admin.py:137 msgid "metadata" msgstr "Metadata" -#: engine/core/admin.py:141 +#: engine/core/admin.py:145 msgid "timestamps" msgstr "Zaman Damgaları" -#: engine/core/admin.py:158 +#: engine/core/admin.py:162 #, python-format msgid "Activate selected %(verbose_name_plural)s" msgstr "Seçilen %(verbose_name_plural)s'ı etkinleştir" -#: engine/core/admin.py:166 +#: engine/core/admin.py:170 msgid "selected items have been activated." msgstr "Seçilen öğeler etkinleştirildi!" -#: engine/core/admin.py:174 +#: engine/core/admin.py:178 #, python-format msgid "Deactivate selected %(verbose_name_plural)s" msgstr "Seçilen %(verbose_name_plural)s'ı devre dışı bırak" -#: engine/core/admin.py:184 +#: engine/core/admin.py:188 msgid "selected items have been deactivated." msgstr "Seçilen öğeler devre dışı bırakıldı!" -#: engine/core/admin.py:196 engine/core/graphene/object_types.py:653 -#: engine/core/graphene/object_types.py:660 engine/core/models.py:832 -#: engine/core/models.py:840 +#: engine/core/admin.py:200 engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:673 engine/core/models.py:918 +#: engine/core/models.py:928 msgid "attribute value" msgstr "Öznitelik Değeri" -#: engine/core/admin.py:197 engine/core/graphene/object_types.py:77 -#: engine/core/models.py:841 +#: engine/core/admin.py:201 engine/core/graphene/object_types.py:81 +#: engine/core/models.py:929 msgid "attribute values" msgstr "Öznitelik Değerleri" -#: engine/core/admin.py:208 +#: engine/core/admin.py:212 engine/core/models.py:2232 msgid "image" msgstr "Resim" -#: engine/core/admin.py:209 engine/core/graphene/object_types.py:530 +#: engine/core/admin.py:213 engine/core/graphene/object_types.py:535 msgid "images" msgstr "Görüntüler" -#: engine/core/admin.py:220 engine/core/models.py:576 +#: engine/core/admin.py:224 engine/core/models.py:635 msgid "stock" msgstr "Stok" -#: engine/core/admin.py:221 engine/core/graphene/object_types.py:713 +#: engine/core/admin.py:225 engine/core/graphene/object_types.py:735 msgid "stocks" msgstr "Stoklar" -#: engine/core/admin.py:232 engine/core/models.py:1938 +#: engine/core/admin.py:236 engine/core/models.py:2046 msgid "order product" msgstr "Ürün Siparişi" -#: engine/core/admin.py:233 engine/core/graphene/object_types.py:441 -#: engine/core/models.py:1939 +#: engine/core/admin.py:237 engine/core/graphene/object_types.py:446 +#: engine/core/models.py:2047 msgid "order products" msgstr "Sipariş Ürünleri" -#: engine/core/admin.py:251 engine/core/admin.py:252 +#: engine/core/admin.py:255 engine/core/admin.py:256 msgid "children" msgstr "Çocuklar" -#: engine/core/admin.py:528 +#: engine/core/admin.py:545 +msgid "video preview" +msgstr "Video önizlemesi" + +#: engine/core/admin.py:551 msgid "has images" msgstr "Görüntüler var" -#: engine/core/admin.py:531 +#: engine/core/admin.py:554 #, python-format msgid "Export selected %(verbose_name_plural)s to marketplaces' feeds" msgstr "" "Seçilen %(verbose_name_plural)s'ı pazar yerlerinin beslemelerine aktarın" -#: engine/core/admin.py:542 +#: engine/core/admin.py:565 #, python-format msgid "selected %(verbose_name_plural)s have been marked for export." msgstr "Seçilen %(verbose_name_plural)s dışa aktarım için işaretlendi." -#: engine/core/admin.py:553 +#: engine/core/admin.py:576 #, python-format msgid "Ban selected %(verbose_name_plural)s from marketplaces' feeds" msgstr "" "Pazar yerlerinin beslemelerinden %(verbose_name_plural)s seçeneğini yasakla" -#: engine/core/admin.py:564 +#: engine/core/admin.py:587 #, python-format msgid "selected %(verbose_name_plural)s have been banned from export." msgstr "Seçilen %(verbose_name_plural)s ihracatı yasaklanmıştır." -#: engine/core/admin.py:1116 +#: engine/core/admin.py:1030 +msgid "Preview" +msgstr "Önizleme" + +#: engine/core/admin.py:1031 +msgid "Metadata" +msgstr "Meta veriler" + +#: engine/core/admin.py:1034 +msgid "preview" +msgstr "Önizleme" + +#: engine/core/admin.py:1043 +msgid "image preview" +msgstr "Görüntü önizlemesi" + +#: engine/core/admin.py:1166 msgid "Config" msgstr "Konfigürasyon" @@ -225,7 +245,7 @@ msgstr "" "Bu API için OpenApi3 şeması. Format, içerik anlaşması yoluyla seçilebilir. " "Dil, hem Accept-Language hem de sorgu parametresi ile seçilebilir." -#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:36 +#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "Önbellek I/O" @@ -249,7 +269,7 @@ msgstr "Uygulamanın açığa çıkarılabilir parametrelerini alın" msgid "send a message to the support team" msgstr "Destek ekibine bir mesaj gönderin" -#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:59 msgid "request a CORSed URL" msgstr "CORS'lu bir URL isteyin. Yalnızca https'ye izin verilir." @@ -390,11 +410,11 @@ msgstr "" "Mevcut bir kategorinin bazı alanlarını düzenlenemez olarak kaydederek " "yeniden yazın" -#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757 -#: engine/core/docs/drf/viewsets.py:1046 -#: engine/core/graphene/object_types.py:119 -#: engine/core/graphene/object_types.py:239 -#: engine/core/graphene/object_types.py:540 +#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:781 +#: engine/core/docs/drf/viewsets.py:1070 +#: engine/core/graphene/object_types.py:123 +#: engine/core/graphene/object_types.py:247 +#: engine/core/graphene/object_types.py:546 msgid "SEO Meta snapshot" msgstr "SEO Meta anlık görüntüsü" @@ -699,7 +719,7 @@ msgstr "Tek bir ürünü alma (ayrıntılı görünüm)" #: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683 #: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725 -#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763 +#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:787 msgid "Product UUID or slug" msgstr "Ürün UUID'si veya Slug" @@ -726,283 +746,297 @@ msgstr "Ürün silme" msgid "lists all permitted feedbacks for a product" msgstr "bir ürün için izin verilen tüm geri bildirimleri listeler" -#: engine/core/docs/drf/viewsets.py:758 +#: engine/core/docs/drf/viewsets.py:757 +msgid "retrieve exact products by identifier" +msgstr "Tanımlayıcıya göre tam ürünleri getir" + +#: engine/core/docs/drf/viewsets.py:759 +msgid "" +"retrieve a list of products by identifier type (uuid, slug, or sku). Send a " +"POST request with `identificator_type` and `identificators` (list of " +"values)." +msgstr "" +"tanımlayıcı türüne göre (uuid, slug veya sku) ürünlerin listesini alır. " +"`identificator_type` ve `identificators` (değerlerin listesi) ile bir POST " +"isteği gönderin." + +#: engine/core/docs/drf/viewsets.py:782 msgid "returns a snapshot of the product's SEO meta data" msgstr "Ürünün SEO meta verilerinin anlık görüntüsünü döndürür" -#: engine/core/docs/drf/viewsets.py:779 +#: engine/core/docs/drf/viewsets.py:803 msgid "list all addresses" msgstr "Tüm adresleri listeleyin" -#: engine/core/docs/drf/viewsets.py:789 +#: engine/core/docs/drf/viewsets.py:813 msgid "retrieve a single address" msgstr "Tek bir adres alma" -#: engine/core/docs/drf/viewsets.py:799 +#: engine/core/docs/drf/viewsets.py:823 msgid "create a new address" msgstr "Yeni bir adres oluşturun" -#: engine/core/docs/drf/viewsets.py:810 +#: engine/core/docs/drf/viewsets.py:834 msgid "delete an address" msgstr "Adres silme" -#: engine/core/docs/drf/viewsets.py:820 +#: engine/core/docs/drf/viewsets.py:844 msgid "update an entire address" msgstr "Adresin tamamını güncelleme" -#: engine/core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:855 msgid "partially update an address" msgstr "Bir adresi kısmen güncelleme" -#: engine/core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:866 msgid "autocomplete address suggestions" msgstr "Otomatik tamamlanan adres girişi" -#: engine/core/docs/drf/viewsets.py:848 +#: engine/core/docs/drf/viewsets.py:872 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" "Ham veri sorgu dizesi, lütfen geo-IP uç noktasından gelen verilerle ekleyin" -#: engine/core/docs/drf/viewsets.py:855 +#: engine/core/docs/drf/viewsets.py:879 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "sonuç miktarını sınırlar, 1 < limit < 10, varsayılan: 5" -#: engine/core/docs/drf/viewsets.py:871 +#: engine/core/docs/drf/viewsets.py:895 msgid "list all feedbacks (simple view)" msgstr "tüm geri bildirimleri listele (basit görünüm)" -#: engine/core/docs/drf/viewsets.py:881 +#: engine/core/docs/drf/viewsets.py:905 msgid "retrieve a single feedback (detailed view)" msgstr "tek bir geri bildirim alma (ayrıntılı görünüm)" -#: engine/core/docs/drf/viewsets.py:888 +#: engine/core/docs/drf/viewsets.py:912 msgid "create a feedback" msgstr "bir geri bildirim oluşturun" -#: engine/core/docs/drf/viewsets.py:895 +#: engine/core/docs/drf/viewsets.py:919 msgid "delete a feedback" msgstr "bir geri bildirimi silme" -#: engine/core/docs/drf/viewsets.py:902 +#: engine/core/docs/drf/viewsets.py:926 msgid "rewrite an existing feedback saving non-editables" msgstr "düzenlenemeyenleri kaydederek mevcut bir geri bildirimi yeniden yazın" -#: engine/core/docs/drf/viewsets.py:909 +#: engine/core/docs/drf/viewsets.py:933 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" "mevcut bir geri bildirimin bazı alanlarını yeniden yazarak düzenlenemezleri " "kaydetme" -#: engine/core/docs/drf/viewsets.py:919 +#: engine/core/docs/drf/viewsets.py:943 msgid "list all order–product relations (simple view)" msgstr "tüm sipariş-ürün ilişkilerini listeler (basit görünüm)" -#: engine/core/docs/drf/viewsets.py:929 +#: engine/core/docs/drf/viewsets.py:953 msgid "retrieve a single order–product relation (detailed view)" msgstr "tek bir sipariş-ürün ilişkisi alma (ayrıntılı görünüm)" -#: engine/core/docs/drf/viewsets.py:939 +#: engine/core/docs/drf/viewsets.py:963 msgid "create a new order–product relation" msgstr "yeni bir sipariş-ürün ilişkisi oluşturun" -#: engine/core/docs/drf/viewsets.py:949 +#: engine/core/docs/drf/viewsets.py:973 msgid "replace an existing order–product relation" msgstr "mevcut bir sipariş-ürün ilişkisini değiştirir" -#: engine/core/docs/drf/viewsets.py:959 +#: engine/core/docs/drf/viewsets.py:983 msgid "partially update an existing order–product relation" msgstr "mevcut bir sipariş-ürün ilişkisini kısmen güncelleme" -#: engine/core/docs/drf/viewsets.py:969 +#: engine/core/docs/drf/viewsets.py:993 msgid "delete an order–product relation" msgstr "sipariş-ürün ilişkisini silme" -#: engine/core/docs/drf/viewsets.py:979 +#: engine/core/docs/drf/viewsets.py:1003 msgid "add or remove feedback on an order–product relation" msgstr "sipariş-ürün ilişkisine geri bildirim ekleme veya kaldırma" -#: engine/core/docs/drf/viewsets.py:996 +#: engine/core/docs/drf/viewsets.py:1020 msgid "list all brands (simple view)" msgstr "Tüm markaları listele (basit görünüm)" -#: engine/core/docs/drf/viewsets.py:1003 +#: engine/core/docs/drf/viewsets.py:1027 msgid "retrieve a single brand (detailed view)" msgstr "Tek bir markayı alma (ayrıntılı görünüm)" -#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051 +#: engine/core/docs/drf/viewsets.py:1032 engine/core/docs/drf/viewsets.py:1075 msgid "Brand UUID or slug" msgstr "Marka UUID'si veya sümüklü böcek" -#: engine/core/docs/drf/viewsets.py:1018 +#: engine/core/docs/drf/viewsets.py:1042 msgid "create a brand" msgstr "Bir marka yaratın" -#: engine/core/docs/drf/viewsets.py:1025 +#: engine/core/docs/drf/viewsets.py:1049 msgid "delete a brand" msgstr "Bir markayı silme" -#: engine/core/docs/drf/viewsets.py:1032 +#: engine/core/docs/drf/viewsets.py:1056 msgid "rewrite an existing brand saving non-editables" msgstr "Mevcut bir markayı yeniden yazarak düzenlenemeyenleri kaydedin" -#: engine/core/docs/drf/viewsets.py:1039 +#: engine/core/docs/drf/viewsets.py:1063 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "" "Mevcut bir kategorinin bazı alanlarını düzenlenemez olarak kaydederek " "yeniden yazın" -#: engine/core/docs/drf/viewsets.py:1064 +#: engine/core/docs/drf/viewsets.py:1088 msgid "list all vendors (simple view)" msgstr "Tüm satıcıları listeleyin (basit görünüm)" -#: engine/core/docs/drf/viewsets.py:1074 +#: engine/core/docs/drf/viewsets.py:1098 msgid "retrieve a single vendor (detailed view)" msgstr "Tek bir satıcıyı alma (ayrıntılı görünüm)" -#: engine/core/docs/drf/viewsets.py:1081 +#: engine/core/docs/drf/viewsets.py:1105 msgid "create a vendor" msgstr "Bir satıcı oluşturun" -#: engine/core/docs/drf/viewsets.py:1088 +#: engine/core/docs/drf/viewsets.py:1112 msgid "delete a vendor" msgstr "Satıcı silme" -#: engine/core/docs/drf/viewsets.py:1095 +#: engine/core/docs/drf/viewsets.py:1119 msgid "rewrite an existing vendor saving non-editables" msgstr "Düzenlenemeyenleri kaydederek mevcut bir satıcıyı yeniden yazın" -#: engine/core/docs/drf/viewsets.py:1102 +#: engine/core/docs/drf/viewsets.py:1126 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "" "Mevcut bir kategorinin bazı alanlarını düzenlenemez olarak kaydederek " "yeniden yazın" -#: engine/core/docs/drf/viewsets.py:1112 +#: engine/core/docs/drf/viewsets.py:1136 msgid "list all product images (simple view)" msgstr "Tüm ürün görsellerini listeleme (basit görünüm)" -#: engine/core/docs/drf/viewsets.py:1122 +#: engine/core/docs/drf/viewsets.py:1146 msgid "retrieve a single product image (detailed view)" msgstr "Tek bir ürün resmini alma (ayrıntılı görünüm)" -#: engine/core/docs/drf/viewsets.py:1129 +#: engine/core/docs/drf/viewsets.py:1153 msgid "create a product image" msgstr "Bir ürün görseli oluşturun" -#: engine/core/docs/drf/viewsets.py:1139 +#: engine/core/docs/drf/viewsets.py:1163 msgid "delete a product image" msgstr "Ürün görselini silme" -#: engine/core/docs/drf/viewsets.py:1146 +#: engine/core/docs/drf/viewsets.py:1170 msgid "rewrite an existing product image saving non-editables" msgstr "Düzenlenemeyenleri kaydederek mevcut bir ürün resmini yeniden yazın" -#: engine/core/docs/drf/viewsets.py:1154 +#: engine/core/docs/drf/viewsets.py:1178 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "" "Mevcut bir kategorinin bazı alanlarını düzenlenemez olarak kaydederek " "yeniden yazın" -#: engine/core/docs/drf/viewsets.py:1165 +#: engine/core/docs/drf/viewsets.py:1189 msgid "list all promo codes (simple view)" msgstr "Tüm promosyon kodlarını listele (basit görünüm)" -#: engine/core/docs/drf/viewsets.py:1175 +#: engine/core/docs/drf/viewsets.py:1199 msgid "retrieve a single promo code (detailed view)" msgstr "Tek bir promosyon kodunu alma (ayrıntılı görünüm)" -#: engine/core/docs/drf/viewsets.py:1182 +#: engine/core/docs/drf/viewsets.py:1206 msgid "create a promo code" msgstr "Promosyon kodu oluşturun" -#: engine/core/docs/drf/viewsets.py:1189 +#: engine/core/docs/drf/viewsets.py:1213 msgid "delete a promo code" msgstr "Promosyon kodunu silme" -#: engine/core/docs/drf/viewsets.py:1196 +#: engine/core/docs/drf/viewsets.py:1220 msgid "rewrite an existing promo code saving non-editables" msgstr "" "Düzenlenemeyenleri kaydederek mevcut bir promosyon kodunu yeniden yazın" -#: engine/core/docs/drf/viewsets.py:1203 +#: engine/core/docs/drf/viewsets.py:1227 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "" "Mevcut bir kategorinin bazı alanlarını düzenlenemez olarak kaydederek " "yeniden yazın" -#: engine/core/docs/drf/viewsets.py:1213 +#: engine/core/docs/drf/viewsets.py:1237 msgid "list all promotions (simple view)" msgstr "Tüm promosyonları listele (basit görünüm)" -#: engine/core/docs/drf/viewsets.py:1223 +#: engine/core/docs/drf/viewsets.py:1247 msgid "retrieve a single promotion (detailed view)" msgstr "Tek bir promosyonu alma (ayrıntılı görünüm)" -#: engine/core/docs/drf/viewsets.py:1230 +#: engine/core/docs/drf/viewsets.py:1254 msgid "create a promotion" msgstr "Bir promosyon oluşturun" -#: engine/core/docs/drf/viewsets.py:1237 +#: engine/core/docs/drf/viewsets.py:1261 msgid "delete a promotion" msgstr "Bir promosyonu silme" -#: engine/core/docs/drf/viewsets.py:1244 +#: engine/core/docs/drf/viewsets.py:1268 msgid "rewrite an existing promotion saving non-editables" msgstr "Düzenlenemeyenleri kaydederek mevcut bir promosyonu yeniden yazma" -#: engine/core/docs/drf/viewsets.py:1251 +#: engine/core/docs/drf/viewsets.py:1275 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "" "Mevcut bir kategorinin bazı alanlarını düzenlenemez olarak kaydederek " "yeniden yazın" -#: engine/core/docs/drf/viewsets.py:1261 +#: engine/core/docs/drf/viewsets.py:1285 msgid "list all stocks (simple view)" msgstr "Tüm hisse senetlerini listele (basit görünüm)" -#: engine/core/docs/drf/viewsets.py:1268 +#: engine/core/docs/drf/viewsets.py:1292 msgid "retrieve a single stock (detailed view)" msgstr "Tek bir stoku alma (ayrıntılı görünüm)" -#: engine/core/docs/drf/viewsets.py:1275 +#: engine/core/docs/drf/viewsets.py:1299 msgid "create a stock record" msgstr "Stok kaydı oluşturma" -#: engine/core/docs/drf/viewsets.py:1282 +#: engine/core/docs/drf/viewsets.py:1306 msgid "delete a stock record" msgstr "Stok kaydını silme" -#: engine/core/docs/drf/viewsets.py:1289 +#: engine/core/docs/drf/viewsets.py:1313 msgid "rewrite an existing stock record saving non-editables" msgstr "Düzenlenemeyenleri kaydederek mevcut bir stok kaydını yeniden yazma" -#: engine/core/docs/drf/viewsets.py:1297 +#: engine/core/docs/drf/viewsets.py:1321 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "" "Mevcut bir kategorinin bazı alanlarını düzenlenemez olarak kaydederek " "yeniden yazın" -#: engine/core/docs/drf/viewsets.py:1308 +#: engine/core/docs/drf/viewsets.py:1332 msgid "list all product tags (simple view)" msgstr "Tüm ürün etiketlerini listeleme (basit görünüm)" -#: engine/core/docs/drf/viewsets.py:1318 +#: engine/core/docs/drf/viewsets.py:1342 msgid "retrieve a single product tag (detailed view)" msgstr "Tek bir ürün etiketini alma (ayrıntılı görünüm)" -#: engine/core/docs/drf/viewsets.py:1325 +#: engine/core/docs/drf/viewsets.py:1349 msgid "create a product tag" msgstr "Ürün etiketi oluşturma" -#: engine/core/docs/drf/viewsets.py:1335 +#: engine/core/docs/drf/viewsets.py:1359 msgid "delete a product tag" msgstr "Ürün etiketini silme" -#: engine/core/docs/drf/viewsets.py:1342 +#: engine/core/docs/drf/viewsets.py:1366 msgid "rewrite an existing product tag saving non-editables" msgstr "Düzenlenemeyenleri kaydederek mevcut bir ürün etiketini yeniden yazma" -#: engine/core/docs/drf/viewsets.py:1350 +#: engine/core/docs/drf/viewsets.py:1374 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "" "Mevcut bir kategorinin bazı alanlarını düzenlenemez olarak kaydederek " @@ -1013,235 +1047,233 @@ msgstr "" msgid "no search term provided." msgstr "Arama terimi belirtilmemiştir." -#: engine/core/filters.py:78 engine/core/filters.py:484 -#: engine/core/filters.py:625 +#: engine/core/filters.py:79 engine/core/filters.py:485 +#: engine/core/filters.py:626 msgid "Search" msgstr "Arama" -#: engine/core/filters.py:79 engine/core/filters.py:663 -#: engine/core/filters.py:692 +#: engine/core/filters.py:80 engine/core/filters.py:664 +#: engine/core/filters.py:693 msgid "UUID" msgstr "UUID" -#: engine/core/filters.py:80 engine/core/filters.py:487 -#: engine/core/filters.py:627 +#: engine/core/filters.py:81 engine/core/filters.py:488 +#: engine/core/filters.py:628 msgid "Name" msgstr "İsim" -#: engine/core/filters.py:82 engine/core/filters.py:630 +#: engine/core/filters.py:83 engine/core/filters.py:631 msgid "Categories" msgstr "Kategoriler" -#: engine/core/filters.py:86 +#: engine/core/filters.py:87 msgid "Categories Slugs" msgstr "Kategoriler Sümüklüböcekler" -#: engine/core/filters.py:88 engine/core/filters.py:495 +#: engine/core/filters.py:89 engine/core/filters.py:496 +#: engine/core/templates/admin_doc/index.html:37 +#: engine/core/templates/admin_doc/template_tag_index.html:12 msgid "Tags" msgstr "Etiketler" -#: engine/core/filters.py:90 +#: engine/core/filters.py:91 msgid "Min Price" msgstr "Min Fiyat" -#: engine/core/filters.py:93 +#: engine/core/filters.py:94 msgid "Max Price" msgstr "Maksimum Fiyat" -#: engine/core/filters.py:95 +#: engine/core/filters.py:96 msgid "Is Active" msgstr "Aktif mi" -#: engine/core/filters.py:96 +#: engine/core/filters.py:97 msgid "Brand" msgstr "Marka" -#: engine/core/filters.py:97 +#: engine/core/filters.py:98 msgid "Attributes" msgstr "Nitelikler" -#: engine/core/filters.py:99 +#: engine/core/filters.py:100 msgid "Quantity" msgstr "Miktar" -#: engine/core/filters.py:101 engine/core/filters.py:489 -#: engine/core/filters.py:628 engine/core/models.py:316 -#: engine/core/models.py:497 engine/core/models.py:663 +#: engine/core/filters.py:102 engine/core/filters.py:490 +#: engine/core/filters.py:629 engine/core/models.py:339 +#: engine/core/models.py:546 engine/core/models.py:736 msgid "Slug" msgstr "Sümüklüböcek" -#: engine/core/filters.py:102 +#: engine/core/filters.py:103 msgid "Is Digital" msgstr "Dijital mi" -#: engine/core/filters.py:104 +#: engine/core/filters.py:105 msgid "Include sub-categories" msgstr "Alt kategorileri dahil edin" -#: engine/core/filters.py:108 +#: engine/core/filters.py:109 msgid "Include personal ordered" msgstr "Kişisel sipariş edilen ürünleri dahil edin" -#: engine/core/filters.py:110 engine/core/models.py:667 +#: engine/core/filters.py:111 engine/core/models.py:740 msgid "SKU" msgstr "SKU" -#: engine/core/filters.py:212 +#: engine/core/filters.py:213 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" -#: engine/core/filters.py:398 +#: engine/core/filters.py:399 msgid "Search (ID, product name or part number)" msgstr "Arama (ID, ürün adı veya parça numarası)" -#: engine/core/filters.py:402 +#: engine/core/filters.py:403 msgid "Bought after (inclusive)" msgstr "Sonra satın alındı (dahil)" -#: engine/core/filters.py:405 +#: engine/core/filters.py:406 msgid "Bought before (inclusive)" msgstr "Daha önce satın alındı (dahil)" -#: engine/core/filters.py:410 engine/core/filters.py:461 -#: engine/core/filters.py:697 +#: engine/core/filters.py:411 engine/core/filters.py:462 +#: engine/core/filters.py:698 msgid "User email" msgstr "Kullanıcı e-postası" -#: engine/core/filters.py:413 engine/core/filters.py:464 -#: engine/core/filters.py:672 engine/core/filters.py:694 +#: engine/core/filters.py:414 engine/core/filters.py:465 +#: engine/core/filters.py:673 engine/core/filters.py:695 msgid "User UUID" msgstr "Kullanıcı UUID'si" -#: engine/core/filters.py:415 +#: engine/core/filters.py:416 msgid "Status" msgstr "Durum" -#: engine/core/filters.py:419 +#: engine/core/filters.py:420 msgid "Human Readable ID" msgstr "İnsan Tarafından Okunabilir Kimlik" -#: engine/core/filters.py:488 +#: engine/core/filters.py:489 msgid "Parent" msgstr "Ebeveyn" -#: engine/core/filters.py:492 +#: engine/core/filters.py:493 msgid "Whole category(has at least 1 product or not)" msgstr "Tüm kategori (en az 1 ürün var veya yok)" -#: engine/core/filters.py:496 +#: engine/core/filters.py:497 msgid "Level" msgstr "Seviye" -#: engine/core/filters.py:667 +#: engine/core/filters.py:668 msgid "Product UUID" msgstr "Ürün UUID'si" -#: engine/core/graphene/mutations.py:40 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Önbellekte aranacak veya önbelleğe yerleştirilecek anahtar" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:43 msgid "data to store in cache" msgstr "Önbellekte depolanacak veriler" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:46 msgid "timeout in seconds to set the data for into the cache" msgstr "Verileri önbelleğe almak için saniye cinsinden zaman aşımı" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:49 msgid "cached data" msgstr "Önbelleğe alınmış veriler" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:64 msgid "camelized JSON data from the requested URL" msgstr "İstenen URL'den kameleştirilmiş JSON verileri" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:248 +#: engine/core/graphene/mutations.py:69 engine/core/views.py:267 msgid "only URLs starting with http(s):// are allowed" msgstr "Yalnızca http(s):// ile başlayan URL'lere izin verilir" -#: engine/core/graphene/mutations.py:86 +#: engine/core/graphene/mutations.py:87 msgid "add a product to the order" msgstr "Siparişe ürün ekleme" -#: engine/core/graphene/mutations.py:109 engine/core/graphene/mutations.py:138 -#: engine/core/graphene/mutations.py:254 engine/core/graphene/mutations.py:306 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139 +#: engine/core/graphene/mutations.py:256 engine/core/graphene/mutations.py:308 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Sipariş {order_uuid} bulunamadı!" -#: engine/core/graphene/mutations.py:115 engine/core/graphene/mutations.py:166 +#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167 msgid "remove a product from the order" msgstr "Siparişten bir ürünü kaldırma" -#: engine/core/graphene/mutations.py:144 +#: engine/core/graphene/mutations.py:145 msgid "remove all products from the order" msgstr "Siparişten tüm ürünleri kaldırın" -#: engine/core/graphene/mutations.py:189 +#: engine/core/graphene/mutations.py:190 msgid "buy an order" msgstr "Bir sipariş satın alın" -#: engine/core/graphene/mutations.py:220 engine/core/graphene/mutations.py:282 +#: engine/core/graphene/mutations.py:222 engine/core/graphene/mutations.py:284 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" "Lütfen order_uuid veya order_hr_id bilgilerinden birini sağlayın - birbirini" " dışlayan bilgiler!" -#: engine/core/graphene/mutations.py:249 engine/core/graphene/mutations.py:524 -#: engine/core/graphene/mutations.py:573 engine/core/viewsets.py:753 +#: engine/core/graphene/mutations.py:251 engine/core/graphene/mutations.py:526 +#: engine/core/graphene/mutations.py:576 engine/core/viewsets.py:783 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "order.buy() metodundan yanlış tip geldi: {type(instance)!s}" -#: engine/core/graphene/mutations.py:260 +#: engine/core/graphene/mutations.py:262 msgid "perform an action on a list of products in the order" msgstr "Siparişteki ürünlerin listesi üzerinde bir eylem gerçekleştirin" -#: engine/core/graphene/mutations.py:265 +#: engine/core/graphene/mutations.py:267 msgid "remove/add" msgstr "Kaldır/Ekle" -#: engine/core/graphene/mutations.py:301 engine/core/graphene/mutations.py:342 +#: engine/core/graphene/mutations.py:303 engine/core/graphene/mutations.py:342 msgid "action must be either add or remove" msgstr "Eylem ya \"ekle\" ya da \"kaldır\" olmalıdır!" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:314 msgid "perform an action on a list of products in the wishlist" msgstr "İstek listesindeki bir ürün listesi üzerinde eylem gerçekleştirme" -#: engine/core/graphene/mutations.py:330 -msgid "please provide wishlist_uuid value" -msgstr "Lütfen `wishlist_uuid` değerini girin." - -#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:423 -#: engine/core/graphene/mutations.py:451 engine/core/graphene/mutations.py:479 -#: engine/core/graphene/mutations.py:529 +#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:424 +#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480 +#: engine/core/graphene/mutations.py:531 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "İstek listesi {wishlist_uuid} bulunamadı!" -#: engine/core/graphene/mutations.py:401 +#: engine/core/graphene/mutations.py:402 msgid "add a product to the wishlist" msgstr "Siparişe ürün ekleme" -#: engine/core/graphene/mutations.py:429 +#: engine/core/graphene/mutations.py:430 msgid "remove a product from the wishlist" msgstr "Siparişten bir ürünü kaldırma" -#: engine/core/graphene/mutations.py:457 +#: engine/core/graphene/mutations.py:458 msgid "remove all products from the wishlist" msgstr "Siparişten bir ürünü kaldırma" -#: engine/core/graphene/mutations.py:485 +#: engine/core/graphene/mutations.py:486 msgid "buy all products from the wishlist" msgstr "Siparişten bir ürünü kaldırma" -#: engine/core/graphene/mutations.py:535 +#: engine/core/graphene/mutations.py:537 msgid "buy a product" msgstr "Bir sipariş satın alın" -#: engine/core/graphene/mutations.py:542 +#: engine/core/graphene/mutations.py:544 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" @@ -1249,138 +1281,142 @@ msgstr "" "Lütfen öznitelikleri attr1=value1,attr2=value2 şeklinde biçimlendirilmiş " "dize olarak gönderin" -#: engine/core/graphene/mutations.py:580 +#: engine/core/graphene/mutations.py:583 msgid "add or delete a feedback for orderproduct" msgstr "Orderproduct için bir geri bildirim ekleme veya silme" -#: engine/core/graphene/mutations.py:606 +#: engine/core/graphene/mutations.py:610 msgid "action must be either `add` or `remove`" msgstr "Eylem ya `ekle` ya da `kaldır` olmalıdır!" -#: engine/core/graphene/mutations.py:609 +#: engine/core/graphene/mutations.py:613 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderproduct {order_product_uuid} bulunamadı!" -#: engine/core/graphene/mutations.py:616 +#: engine/core/graphene/mutations.py:620 msgid "original address string provided by the user" msgstr "Kullanıcı tarafından sağlanan orijinal adres dizesi" -#: engine/core/graphene/mutations.py:653 engine/core/models.py:986 -#: engine/core/models.py:999 engine/core/models.py:1443 -#: engine/core/models.py:1474 engine/core/models.py:1505 -#: engine/core/viewsets.py:760 +#: engine/core/graphene/mutations.py:662 engine/core/models.py:1079 +#: engine/core/models.py:1092 engine/core/models.py:1544 +#: engine/core/models.py:1575 engine/core/models.py:1606 +#: engine/core/viewsets.py:790 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} mevcut değil: {uuid}!" -#: engine/core/graphene/mutations.py:667 +#: engine/core/graphene/mutations.py:676 msgid "limit must be between 1 and 10" msgstr "Limit 1 ile 10 arasında olmalıdır" -#: engine/core/graphene/mutations.py:716 +#: engine/core/graphene/mutations.py:726 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - bir cazibe gibi çalışır" -#: engine/core/graphene/object_types.py:84 -#: engine/core/graphene/object_types.py:420 -#: engine/core/graphene/object_types.py:471 engine/core/models.py:803 -#: engine/core/models.py:1297 engine/core/models.py:2033 +#: engine/core/graphene/object_types.py:88 +#: engine/core/graphene/object_types.py:425 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:889 +#: engine/core/models.py:1394 engine/core/models.py:2139 msgid "attributes" msgstr "Nitelikler" -#: engine/core/graphene/object_types.py:97 +#: engine/core/graphene/object_types.py:101 msgid "grouped attributes" msgstr "Gruplandırılmış nitelikler" -#: engine/core/graphene/object_types.py:104 +#: engine/core/graphene/object_types.py:108 msgid "groups of attributes" msgstr "Nitelik grupları" -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:217 -#: engine/core/graphene/object_types.py:255 engine/core/models.py:440 +#: engine/core/graphene/object_types.py:122 +#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:264 engine/core/models.py:489 msgid "categories" msgstr "Kategoriler" -#: engine/core/graphene/object_types.py:134 engine/core/models.py:511 +#: engine/core/graphene/object_types.py:138 engine/core/models.py:564 msgid "brands" msgstr "Markalar" -#: engine/core/graphene/object_types.py:219 +#: engine/core/graphene/object_types.py:226 msgid "category image url" msgstr "Kategoriler" -#: engine/core/graphene/object_types.py:220 -#: engine/core/graphene/object_types.py:365 engine/core/models.py:278 +#: engine/core/graphene/object_types.py:227 +#: engine/core/graphene/object_types.py:369 engine/core/models.py:301 msgid "markup percentage" msgstr "İşaretleme Yüzdesi" -#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:231 msgid "which attributes and values can be used for filtering this category." msgstr "" "Bu kategoriyi filtrelemek için hangi nitelikler ve değerler kullanılabilir." -#: engine/core/graphene/object_types.py:230 +#: engine/core/graphene/object_types.py:237 msgid "" "minimum and maximum prices for products in this category, if available." msgstr "Varsa, bu kategorideki ürünler için minimum ve maksimum fiyatlar." -#: engine/core/graphene/object_types.py:234 +#: engine/core/graphene/object_types.py:240 +msgid "brands in this category" +msgstr "Bu kategorideki markalar" + +#: engine/core/graphene/object_types.py:242 msgid "tags for this category" msgstr "Bu kategori için etiketler" -#: engine/core/graphene/object_types.py:237 +#: engine/core/graphene/object_types.py:245 msgid "products in this category" msgstr "Bu kategorideki ürünler" -#: engine/core/graphene/object_types.py:372 engine/core/models.py:183 +#: engine/core/graphene/object_types.py:376 engine/core/models.py:202 msgid "vendors" msgstr "Satıcılar" -#: engine/core/graphene/object_types.py:376 +#: engine/core/graphene/object_types.py:380 msgid "Latitude (Y coordinate)" msgstr "Enlem (Y koordinatı)" -#: engine/core/graphene/object_types.py:377 +#: engine/core/graphene/object_types.py:381 msgid "Longitude (X coordinate)" msgstr "Boylam (X koordinatı)" -#: engine/core/graphene/object_types.py:406 +#: engine/core/graphene/object_types.py:411 msgid "comment" msgstr "Nasıl yapılır" -#: engine/core/graphene/object_types.py:408 -#: engine/core/graphene/object_types.py:542 +#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:548 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "1'den 10'a kadar (dahil) derecelendirme değeri veya ayarlanmamışsa 0." -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:421 msgid "represents feedback from a user." msgstr "Bir kullanıcıdan gelen geri bildirimi temsil eder." -#: engine/core/graphene/object_types.py:421 -#: engine/core/graphene/object_types.py:472 engine/core/models.py:1291 +#: engine/core/graphene/object_types.py:426 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:1388 msgid "notifications" msgstr "Bildirimler" -#: engine/core/graphene/object_types.py:423 +#: engine/core/graphene/object_types.py:428 msgid "download url for this order product if applicable" msgstr "Varsa, bu sipariş ürünü için URL'yi indirin" -#: engine/core/graphene/object_types.py:425 engine/core/models.py:1856 +#: engine/core/graphene/object_types.py:430 engine/core/models.py:1959 msgid "feedback" msgstr "Geri bildirim" -#: engine/core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:464 msgid "a list of order products in this order" msgstr "Bu siparişteki sipariş ürünlerinin bir listesi" -#: engine/core/graphene/object_types.py:461 engine/core/models.py:1261 +#: engine/core/graphene/object_types.py:466 engine/core/models.py:1358 msgid "billing address" msgstr "Fatura adresi" -#: engine/core/graphene/object_types.py:465 +#: engine/core/graphene/object_types.py:470 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1388,53 +1424,57 @@ msgstr "" "Bu sipariş için sevkiyat adresi, fatura adresi ile aynıysa veya geçerli " "değilse boş bırakın" -#: engine/core/graphene/object_types.py:468 +#: engine/core/graphene/object_types.py:473 msgid "total price of this order" msgstr "Bu siparişin toplam fiyatı" -#: engine/core/graphene/object_types.py:469 +#: engine/core/graphene/object_types.py:474 msgid "total quantity of products in order" msgstr "Siparişteki toplam ürün miktarı" -#: engine/core/graphene/object_types.py:470 +#: engine/core/graphene/object_types.py:475 msgid "are all products in the order digital" msgstr "Siparişteki tüm ürünler dijital mi" -#: engine/core/graphene/object_types.py:474 +#: engine/core/graphene/object_types.py:479 msgid "transactions for this order" msgstr "Bu sipariş için işlemler" -#: engine/core/graphene/object_types.py:494 engine/core/models.py:1325 +#: engine/core/graphene/object_types.py:499 engine/core/models.py:1422 msgid "orders" msgstr "Siparişler" -#: engine/core/graphene/object_types.py:515 +#: engine/core/graphene/object_types.py:520 msgid "image url" msgstr "Resim URL'si" -#: engine/core/graphene/object_types.py:522 +#: engine/core/graphene/object_types.py:527 msgid "product's images" msgstr "Ürün görselleri" -#: engine/core/graphene/object_types.py:529 engine/core/models.py:439 -#: engine/core/models.py:596 +#: engine/core/graphene/object_types.py:534 engine/core/models.py:488 +#: engine/core/models.py:661 msgid "category" msgstr "Kategori" -#: engine/core/graphene/object_types.py:531 engine/core/models.py:1857 +#: engine/core/graphene/object_types.py:536 engine/core/models.py:1960 msgid "feedbacks" msgstr "Geri Bildirimler" -#: engine/core/graphene/object_types.py:532 engine/core/models.py:510 -#: engine/core/models.py:605 +#: engine/core/graphene/object_types.py:537 engine/core/models.py:563 +#: engine/core/models.py:670 msgid "brand" msgstr "Marka" -#: engine/core/graphene/object_types.py:534 engine/core/models.py:103 +#: engine/core/graphene/object_types.py:538 +msgid "video url" +msgstr "Video URL" + +#: engine/core/graphene/object_types.py:540 engine/core/models.py:122 msgid "attribute groups" msgstr "Öznitelik grupları" -#: engine/core/graphene/object_types.py:536 +#: engine/core/graphene/object_types.py:542 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1442,7 +1482,7 @@ msgstr "Öznitelik grupları" msgid "price" msgstr "Fiyat" -#: engine/core/graphene/object_types.py:537 +#: engine/core/graphene/object_types.py:543 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1450,39 +1490,39 @@ msgstr "Fiyat" msgid "quantity" msgstr "Miktar" -#: engine/core/graphene/object_types.py:538 +#: engine/core/graphene/object_types.py:544 msgid "number of feedbacks" msgstr "Geri bildirim sayısı" -#: engine/core/graphene/object_types.py:539 +#: engine/core/graphene/object_types.py:545 msgid "only available for personal orders" msgstr "Ürünler sadece kişisel siparişler için mevcuttur" -#: engine/core/graphene/object_types.py:544 +#: engine/core/graphene/object_types.py:550 msgid "discount price" msgstr "İndirimli fiyat" -#: engine/core/graphene/object_types.py:568 engine/core/models.py:682 +#: engine/core/graphene/object_types.py:575 engine/core/models.py:755 msgid "products" msgstr "Ürünler" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:691 msgid "promocodes" msgstr "Promosyon Kodları" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:706 msgid "products on sale" msgstr "Satıştaki ürünler" -#: engine/core/graphene/object_types.py:701 engine/core/models.py:935 +#: engine/core/graphene/object_types.py:720 engine/core/models.py:1028 msgid "promotions" msgstr "Promosyonlar" -#: engine/core/graphene/object_types.py:705 engine/core/models.py:182 +#: engine/core/graphene/object_types.py:727 engine/core/models.py:201 msgid "vendor" msgstr "Satıcı" -#: engine/core/graphene/object_types.py:706 engine/core/models.py:681 +#: engine/core/graphene/object_types.py:728 engine/core/models.py:754 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1490,102 +1530,102 @@ msgstr "Satıcı" msgid "product" msgstr "Ürün" -#: engine/core/graphene/object_types.py:718 engine/core/models.py:958 +#: engine/core/graphene/object_types.py:740 engine/core/models.py:1051 msgid "wishlisted products" msgstr "İstek listesindeki ürünler" -#: engine/core/graphene/object_types.py:725 engine/core/models.py:975 +#: engine/core/graphene/object_types.py:747 engine/core/models.py:1068 msgid "wishlists" msgstr "Dilek Listeleri" -#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:752 msgid "tagged products" msgstr "Etiketlenmiş ürünler" -#: engine/core/graphene/object_types.py:738 engine/core/models.py:219 -#: engine/core/models.py:611 +#: engine/core/graphene/object_types.py:760 engine/core/models.py:238 +#: engine/core/models.py:676 msgid "product tags" msgstr "Ürün etiketleri" -#: engine/core/graphene/object_types.py:743 +#: engine/core/graphene/object_types.py:765 msgid "tagged categories" msgstr "Etiketlenmiş kategoriler" -#: engine/core/graphene/object_types.py:751 +#: engine/core/graphene/object_types.py:773 msgid "categories tags" msgstr "Kategoriler' etiketleri" -#: engine/core/graphene/object_types.py:755 +#: engine/core/graphene/object_types.py:777 msgid "project name" msgstr "Proje adı" -#: engine/core/graphene/object_types.py:756 +#: engine/core/graphene/object_types.py:778 msgid "company name" msgstr "Şirket Adı" -#: engine/core/graphene/object_types.py:757 +#: engine/core/graphene/object_types.py:779 msgid "company address" msgstr "Şirket Adresi" -#: engine/core/graphene/object_types.py:758 +#: engine/core/graphene/object_types.py:780 msgid "company phone number" msgstr "Şirket Telefon Numarası" -#: engine/core/graphene/object_types.py:761 +#: engine/core/graphene/object_types.py:783 msgid "email from, sometimes it must be used instead of host user value" msgstr "'email from', bazen ana kullanıcı değeri yerine kullanılmalıdır" -#: engine/core/graphene/object_types.py:764 +#: engine/core/graphene/object_types.py:786 msgid "email host user" msgstr "E-posta ana kullanıcısı" -#: engine/core/graphene/object_types.py:765 +#: engine/core/graphene/object_types.py:787 msgid "maximum amount for payment" msgstr "Ödeme için maksimum tutar" -#: engine/core/graphene/object_types.py:766 +#: engine/core/graphene/object_types.py:788 msgid "minimum amount for payment" msgstr "Ödeme için minimum tutar" -#: engine/core/graphene/object_types.py:767 +#: engine/core/graphene/object_types.py:789 msgid "analytics data" msgstr "Analitik veriler" -#: engine/core/graphene/object_types.py:768 +#: engine/core/graphene/object_types.py:790 msgid "advertisement data" msgstr "Reklam verileri" -#: engine/core/graphene/object_types.py:771 +#: engine/core/graphene/object_types.py:793 msgid "company configuration" msgstr "Konfigürasyon" -#: engine/core/graphene/object_types.py:775 +#: engine/core/graphene/object_types.py:797 msgid "language code" msgstr "Dil kodu" -#: engine/core/graphene/object_types.py:776 +#: engine/core/graphene/object_types.py:798 msgid "language name" msgstr "Dil adı" -#: engine/core/graphene/object_types.py:777 +#: engine/core/graphene/object_types.py:799 msgid "language flag, if exists :)" msgstr "Dil bayrağı, eğer varsa :)" -#: engine/core/graphene/object_types.py:780 +#: engine/core/graphene/object_types.py:802 msgid "supported languages" msgstr "Desteklenen dillerin bir listesini alın" -#: engine/core/graphene/object_types.py:812 -#: engine/core/graphene/object_types.py:815 -#: engine/core/graphene/object_types.py:818 +#: engine/core/graphene/object_types.py:834 +#: engine/core/graphene/object_types.py:837 +#: engine/core/graphene/object_types.py:840 msgid "products search results" msgstr "Ürünler arama sonuçları" -#: engine/core/graphene/object_types.py:820 +#: engine/core/graphene/object_types.py:842 msgid "posts search results" msgstr "Ürünler arama sonuçları" -#: engine/core/models.py:75 +#: engine/core/models.py:91 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 " @@ -1598,23 +1638,23 @@ msgstr "" " sistemde öznitelikleri daha etkili bir şekilde kategorize etmek ve yönetmek" " için yararlı olabilir." -#: engine/core/models.py:88 +#: engine/core/models.py:107 msgid "parent of this group" msgstr "Bu grubun ebeveyni" -#: engine/core/models.py:89 +#: engine/core/models.py:108 msgid "parent attribute group" msgstr "Üst öznitelik grubu" -#: engine/core/models.py:93 engine/core/models.py:94 +#: engine/core/models.py:112 engine/core/models.py:113 msgid "attribute group's name" msgstr "Öznitelik grubunun adı" -#: engine/core/models.py:102 engine/core/models.py:763 +#: engine/core/models.py:121 engine/core/models.py:849 msgid "attribute group" msgstr "Öznitelik grubu" -#: engine/core/models.py:108 +#: engine/core/models.py:127 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1632,49 +1672,49 @@ msgstr "" "meta verileri ve kısıtlamaları da muhafaza ederek üçüncü taraf satıcılarla " "etkileşime giren sistemlerde kullanıma uygun hale getirir." -#: engine/core/models.py:122 +#: engine/core/models.py:141 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" -#: engine/core/models.py:124 +#: engine/core/models.py:143 msgid "authentication info" msgstr "Kimlik doğrulama bilgisi" -#: engine/core/models.py:129 +#: engine/core/models.py:148 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" -#: engine/core/models.py:130 +#: engine/core/models.py:149 msgid "vendor markup percentage" msgstr "Satıcı kar payı yüzdesi" -#: engine/core/models.py:134 +#: engine/core/models.py:153 msgid "name of this vendor" msgstr "Bu satıcının adı" -#: engine/core/models.py:135 +#: engine/core/models.py:154 msgid "vendor name" msgstr "Satıcı adı" -#: engine/core/models.py:150 +#: engine/core/models.py:169 msgid "response file" msgstr "yanıt dosyası" -#: engine/core/models.py:151 +#: engine/core/models.py:170 msgid "vendor's last processing response" msgstr "satıcının son işlem yanıtı" -#: engine/core/models.py:157 +#: engine/core/models.py:176 msgid "vendor's integration file path" msgstr "Satıcının entegrasyon dosya yolu" -#: engine/core/models.py:158 +#: engine/core/models.py:177 msgid "integration path" msgstr "Entegrasyon yolu" -#: engine/core/models.py:192 +#: engine/core/models.py:211 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1689,27 +1729,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." -#: engine/core/models.py:204 engine/core/models.py:235 +#: engine/core/models.py:223 engine/core/models.py:254 msgid "internal tag identifier for the product tag" msgstr "Ürün etiketi için dahili etiket tanımlayıcısı" -#: engine/core/models.py:205 engine/core/models.py:236 +#: engine/core/models.py:224 engine/core/models.py:255 msgid "tag name" msgstr "Etiket adı" -#: engine/core/models.py:209 engine/core/models.py:240 +#: engine/core/models.py:228 engine/core/models.py:259 msgid "user-friendly name for the product tag" msgstr "Ürün etiketi için kullanıcı dostu ad" -#: engine/core/models.py:210 engine/core/models.py:241 +#: engine/core/models.py:229 engine/core/models.py:260 msgid "tag display name" msgstr "Etiket görünen adı" -#: engine/core/models.py:218 +#: engine/core/models.py:237 msgid "product tag" msgstr "Ürün etiketi" -#: engine/core/models.py:224 +#: engine/core/models.py:243 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 " @@ -1720,15 +1760,15 @@ msgstr "" "kategori etiketini modeller. Dahili bir etiket tanımlayıcısı ve kullanıcı " "dostu bir ekran adı için öznitelikler içerir." -#: engine/core/models.py:249 +#: engine/core/models.py:268 msgid "category tag" msgstr "kategori etiketi" -#: engine/core/models.py:250 engine/core/models.py:322 +#: engine/core/models.py:269 engine/core/models.py:345 msgid "category tags" msgstr "kategori etiketleri" -#: engine/core/models.py:255 +#: engine/core/models.py:274 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1750,51 +1790,51 @@ msgstr "" "açıklamasını ve hiyerarşisini belirlemesinin yanı sıra resimler, etiketler " "veya öncelik gibi öznitelikler atamasına olanak tanır." -#: engine/core/models.py:269 +#: engine/core/models.py:292 msgid "upload an image representing this category" msgstr "Bu kategoriyi temsil eden bir resim yükleyin" -#: engine/core/models.py:272 +#: engine/core/models.py:295 msgid "category image" msgstr "Kategori görüntüsü" -#: engine/core/models.py:277 +#: engine/core/models.py:300 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" -#: engine/core/models.py:286 +#: engine/core/models.py:309 msgid "parent of this category to form a hierarchical structure" msgstr "Hiyerarşik bir yapı oluşturmak için bu kategorinin üst öğesi" -#: engine/core/models.py:287 +#: engine/core/models.py:310 msgid "parent category" msgstr "Ana kategori" -#: engine/core/models.py:292 +#: engine/core/models.py:315 msgid "category name" msgstr "Kategori adı" -#: engine/core/models.py:293 +#: engine/core/models.py:316 msgid "provide a name for this category" msgstr "Bu kategori için bir ad girin" -#: engine/core/models.py:300 +#: engine/core/models.py:323 msgid "add a detailed description for this category" msgstr "Bu kategori için ayrıntılı bir açıklama ekleyin" -#: engine/core/models.py:301 +#: engine/core/models.py:324 msgid "category description" msgstr "Kategori açıklaması" -#: engine/core/models.py:321 +#: engine/core/models.py:344 msgid "tags that help describe or group this category" msgstr "bu kategoriyi tanımlamaya veya gruplandırmaya yardımcı olan etiketler" -#: engine/core/models.py:328 engine/core/models.py:503 +#: engine/core/models.py:351 engine/core/models.py:552 msgid "priority" msgstr "Öncelik" -#: engine/core/models.py:446 +#: engine/core/models.py:495 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1808,47 +1848,43 @@ msgstr "" "Uygulama içinde markayla ilgili verilerin düzenlenmesini ve temsil " "edilmesini sağlar." -#: engine/core/models.py:456 +#: engine/core/models.py:505 msgid "name of this brand" msgstr "Bu markanın adı" -#: engine/core/models.py:457 +#: engine/core/models.py:506 msgid "brand name" msgstr "Marka adı" -#: engine/core/models.py:464 +#: engine/core/models.py:513 msgid "upload a logo representing this brand" msgstr "Bu markayı temsil eden bir logo yükleyin" -#: engine/core/models.py:466 +#: engine/core/models.py:515 msgid "brand small image" msgstr "Marka küçük imajı" -#: engine/core/models.py:472 +#: engine/core/models.py:521 msgid "upload a big logo representing this brand" msgstr "Bu markayı temsil eden büyük bir logo yükleyin" -#: engine/core/models.py:474 +#: engine/core/models.py:523 msgid "brand big image" msgstr "Marka büyük imaj" -#: engine/core/models.py:479 +#: engine/core/models.py:528 msgid "add a detailed description of the brand" msgstr "Markanın ayrıntılı bir açıklamasını ekleyin" -#: engine/core/models.py:480 +#: engine/core/models.py:529 msgid "brand description" msgstr "Marka açıklaması" -#: engine/core/models.py:485 -msgid "optional categories that this brand is associated with" -msgstr "Bu markanın ilişkili olduğu isteğe bağlı kategoriler" +#: engine/core/models.py:534 engine/core/models.py:535 +msgid "DEPRECATED" +msgstr "KULLANIMDAN KALDIRILMIŞ" -#: engine/core/models.py:486 -msgid "associated categories" -msgstr "Kategoriler" - -#: engine/core/models.py:516 +#: engine/core/models.py:569 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1864,72 +1900,72 @@ msgstr "" " ürünlerin izlenmesine ve değerlendirilmesine olanak sağlamak için envanter " "yönetim sisteminin bir parçasıdır." -#: engine/core/models.py:528 +#: engine/core/models.py:581 msgid "the vendor supplying this product stock" msgstr "Bu ürün stokunu tedarik eden satıcı" -#: engine/core/models.py:529 +#: engine/core/models.py:582 msgid "associated vendor" msgstr "İlişkili satıcı" -#: engine/core/models.py:533 +#: engine/core/models.py:588 msgid "final price to the customer after markups" msgstr "Fiyat artışlarından sonra müşteriye verilen nihai fiyat" -#: engine/core/models.py:534 +#: engine/core/models.py:589 msgid "selling price" msgstr "Satış fiyatı" -#: engine/core/models.py:539 +#: engine/core/models.py:594 msgid "the product associated with this stock entry" msgstr "Bu stok girişi ile ilişkili ürün" -#: engine/core/models.py:540 engine/core/models.py:828 -#: engine/core/models.py:874 engine/core/models.py:1912 +#: engine/core/models.py:595 engine/core/models.py:914 +#: engine/core/models.py:962 engine/core/models.py:2020 msgid "associated product" msgstr "İlişkili ürün" -#: engine/core/models.py:547 +#: engine/core/models.py:604 msgid "the price paid to the vendor for this product" msgstr "Bu ürün için satıcıya ödenen fiyat" -#: engine/core/models.py:548 +#: engine/core/models.py:605 msgid "vendor purchase price" msgstr "Satıcı satın alma fiyatı" -#: engine/core/models.py:552 +#: engine/core/models.py:609 msgid "available quantity of the product in stock" msgstr "Stoktaki mevcut ürün miktarı" -#: engine/core/models.py:553 +#: engine/core/models.py:610 msgid "quantity in stock" msgstr "Stoktaki miktar" -#: engine/core/models.py:557 +#: engine/core/models.py:614 msgid "vendor-assigned SKU for identifying the product" msgstr "Ürünü tanımlamak için satıcı tarafından atanan SKU" -#: engine/core/models.py:558 +#: engine/core/models.py:615 msgid "vendor sku" msgstr "Satıcının SKU'su" -#: engine/core/models.py:564 +#: engine/core/models.py:621 msgid "digital file associated with this stock if applicable" msgstr "Varsa bu stokla ilişkili dijital dosya" -#: engine/core/models.py:565 +#: engine/core/models.py:622 msgid "digital file" msgstr "Dijital dosya" -#: engine/core/models.py:569 +#: engine/core/models.py:626 msgid "system attributes" msgstr "Sistem nitelikleri" -#: engine/core/models.py:577 +#: engine/core/models.py:636 msgid "stock entries" msgstr "Stok girişleri" -#: engine/core/models.py:582 +#: engine/core/models.py:641 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1950,72 +1986,80 @@ msgstr "" "yönetir. Bir uygulama içinde ürün verilerini ve ilişkili bilgileri " "tanımlamak ve işlemek için kullanılır." -#: engine/core/models.py:595 +#: engine/core/models.py:660 msgid "category this product belongs to" msgstr "Bu ürünün ait olduğu kategori" -#: engine/core/models.py:604 +#: engine/core/models.py:669 msgid "optionally associate this product with a brand" msgstr "İsteğe bağlı olarak bu ürünü bir marka ile ilişkilendirin" -#: engine/core/models.py:610 +#: engine/core/models.py:675 msgid "tags that help describe or group this product" msgstr "Bu ürünü tanımlamaya veya gruplandırmaya yardımcı olan etiketler" -#: engine/core/models.py:615 +#: engine/core/models.py:680 msgid "indicates whether this product is digitally delivered" msgstr "Bu ürünün dijital olarak teslim edilip edilmediğini belirtir" -#: engine/core/models.py:616 +#: engine/core/models.py:681 msgid "is product digital" msgstr "Ürün dijital mi" -#: engine/core/models.py:623 +#: engine/core/models.py:688 msgid "indicates whether this product should be updated from periodic task" msgstr "" "bu ürünün periyodik görevden güncellenmesi gerekip gerekmediğini belirtir" -#: engine/core/models.py:625 +#: engine/core/models.py:690 msgid "is product updatable" msgstr "ürün güncellenebilir mi" -#: engine/core/models.py:631 +#: engine/core/models.py:696 msgid "provide a clear identifying name for the product" msgstr "Ürün için net bir tanımlayıcı isim sağlayın" -#: engine/core/models.py:632 +#: engine/core/models.py:697 msgid "product name" msgstr "Ürün adı" -#: engine/core/models.py:638 engine/core/models.py:923 +#: engine/core/models.py:703 engine/core/models.py:1012 msgid "add a detailed description of the product" msgstr "Ürünün ayrıntılı bir açıklamasını ekleyin" -#: engine/core/models.py:639 +#: engine/core/models.py:704 msgid "product description" msgstr "Ürün Açıklaması" -#: engine/core/models.py:646 +#: engine/core/models.py:710 +msgid "optional video file for this product" +msgstr "Bu ürün için isteğe bağlı video dosyası" + +#: engine/core/models.py:711 +msgid "product video" +msgstr "Ürün videosu" + +#: engine/core/models.py:719 msgid "part number for this product" msgstr "Bu ürün için parça numarası" -#: engine/core/models.py:647 +#: engine/core/models.py:720 msgid "part number" msgstr "Parça numarası" -#: engine/core/models.py:666 +#: engine/core/models.py:739 msgid "stock keeping unit for this product" msgstr "Bu ürün için Stok Tutma Birimi" -#: engine/core/models.py:673 +#: engine/core/models.py:746 msgid "whether to export this product to marketplaces" msgstr "Bu ürünü pazarlara ihraç edip etmeme" -#: engine/core/models.py:674 +#: engine/core/models.py:747 msgid "Export to Marketplaces" msgstr "Pazar Yerlerine İhracat" -#: engine/core/models.py:749 +#: engine/core/models.py:835 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 " @@ -2031,65 +2075,65 @@ msgstr "" "tamsayı, float, boolean, dizi ve nesne dahil olmak üzere birden fazla değer " "türünü destekler. Bu, dinamik ve esnek veri yapılandırmasına olanak tanır." -#: engine/core/models.py:762 +#: engine/core/models.py:848 msgid "group of this attribute" msgstr "Bu niteliğin grubu" -#: engine/core/models.py:768 +#: engine/core/models.py:854 msgid "string" msgstr "String" -#: engine/core/models.py:769 +#: engine/core/models.py:855 msgid "integer" msgstr "Tamsayı" -#: engine/core/models.py:770 +#: engine/core/models.py:856 msgid "float" msgstr "Yüzer" -#: engine/core/models.py:771 +#: engine/core/models.py:857 msgid "boolean" msgstr "Boolean" -#: engine/core/models.py:772 +#: engine/core/models.py:858 msgid "array" msgstr "Dizi" -#: engine/core/models.py:773 +#: engine/core/models.py:859 msgid "object" msgstr "Nesne" -#: engine/core/models.py:775 +#: engine/core/models.py:861 msgid "type of the attribute's value" msgstr "Özniteliğin değerinin türü" -#: engine/core/models.py:776 +#: engine/core/models.py:862 msgid "value type" msgstr "Değer türü" -#: engine/core/models.py:781 +#: engine/core/models.py:867 msgid "name of this attribute" msgstr "Bu niteliğin adı" -#: engine/core/models.py:782 +#: engine/core/models.py:868 msgid "attribute's name" msgstr "Özniteliğin adı" -#: engine/core/models.py:787 +#: engine/core/models.py:873 msgid "is filterable" msgstr "filtrelenebilir" -#: engine/core/models.py:789 +#: engine/core/models.py:875 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." -#: engine/core/models.py:802 engine/core/models.py:820 +#: engine/core/models.py:888 engine/core/models.py:906 #: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Öznitelik" -#: engine/core/models.py:808 +#: engine/core/models.py:894 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" @@ -2099,19 +2143,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." -#: engine/core/models.py:819 +#: engine/core/models.py:905 msgid "attribute of this value" msgstr "Bu değerin niteliği" -#: engine/core/models.py:827 +#: engine/core/models.py:913 msgid "the specific product associated with this attribute's value" msgstr "Bu özniteliğin değeriyle ilişkili belirli ürün" -#: engine/core/models.py:833 +#: engine/core/models.py:919 msgid "the specific value for this attribute" msgstr "Bu öznitelik için özel değer" -#: engine/core/models.py:846 +#: engine/core/models.py:934 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -2125,39 +2169,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." -#: engine/core/models.py:857 +#: engine/core/models.py:945 msgid "provide alternative text for the image for accessibility" msgstr "Erişilebilirlik için görüntü için alternatif metin sağlayın" -#: engine/core/models.py:858 +#: engine/core/models.py:946 msgid "image alt text" msgstr "Resim alt metni" -#: engine/core/models.py:861 +#: engine/core/models.py:949 msgid "upload the image file for this product" msgstr "Bu ürün için resim dosyasını yükleyin" -#: engine/core/models.py:862 engine/core/models.py:893 +#: engine/core/models.py:950 engine/core/models.py:982 msgid "product image" msgstr "Ürün görseli" -#: engine/core/models.py:867 +#: engine/core/models.py:955 msgid "determines the order in which images are displayed" msgstr "Görüntülerin görüntülenme sırasını belirler" -#: engine/core/models.py:868 +#: engine/core/models.py:956 msgid "display priority" msgstr "Ekran önceliği" -#: engine/core/models.py:873 +#: engine/core/models.py:961 msgid "the product that this image represents" msgstr "Bu görselin temsil ettiği ürün" -#: engine/core/models.py:894 +#: engine/core/models.py:983 msgid "product images" msgstr "Ürün görselleri" -#: engine/core/models.py:899 +#: engine/core/models.py:988 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -2173,39 +2217,39 @@ msgstr "" "öznitelikler içerir. Kampanyadaki etkilenen ürünleri belirlemek için ürün " "kataloğu ile entegre olur." -#: engine/core/models.py:911 +#: engine/core/models.py:1000 msgid "percentage discount for the selected products" msgstr "Seçilen ürünler için yüzde indirim" -#: engine/core/models.py:912 +#: engine/core/models.py:1001 msgid "discount percentage" msgstr "İndirim yüzdesi" -#: engine/core/models.py:917 +#: engine/core/models.py:1006 msgid "provide a unique name for this promotion" msgstr "Bu promosyon için benzersiz bir ad girin" -#: engine/core/models.py:918 +#: engine/core/models.py:1007 msgid "promotion name" msgstr "Promosyon adı" -#: engine/core/models.py:924 +#: engine/core/models.py:1013 msgid "promotion description" msgstr "Promosyon açıklaması" -#: engine/core/models.py:929 +#: engine/core/models.py:1018 msgid "select which products are included in this promotion" msgstr "Bu promosyona hangi ürünlerin dahil olduğunu seçin" -#: engine/core/models.py:930 +#: engine/core/models.py:1019 msgid "included products" msgstr "Dahil olan ürünler" -#: engine/core/models.py:934 +#: engine/core/models.py:1027 msgid "promotion" msgstr "Promosyon" -#: engine/core/models.py:945 +#: engine/core/models.py:1038 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2217,23 +2261,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." -#: engine/core/models.py:957 +#: engine/core/models.py:1050 msgid "products that the user has marked as wanted" msgstr "Kullanıcının aranıyor olarak işaretlediği ürünler" -#: engine/core/models.py:965 +#: engine/core/models.py:1058 msgid "user who owns this wishlist" msgstr "Bu istek listesine sahip olan kullanıcı" -#: engine/core/models.py:966 +#: engine/core/models.py:1059 msgid "wishlist owner" msgstr "Dilek Listesi Sahibi" -#: engine/core/models.py:974 +#: engine/core/models.py:1067 msgid "wishlist" msgstr "İstek Listesi" -#: engine/core/models.py:1016 +#: engine/core/models.py:1109 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2248,19 +2292,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." -#: engine/core/models.py:1031 +#: engine/core/models.py:1124 msgid "documentary" msgstr "Belgesel" -#: engine/core/models.py:1032 +#: engine/core/models.py:1125 msgid "documentaries" msgstr "Belgeseller" -#: engine/core/models.py:1042 +#: engine/core/models.py:1135 msgid "unresolved" msgstr "Çözümlenmemiş" -#: engine/core/models.py:1047 +#: engine/core/models.py:1140 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2281,59 +2325,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." -#: engine/core/models.py:1062 +#: engine/core/models.py:1155 msgid "address line for the customer" msgstr "Müşteri için adres satırı" -#: engine/core/models.py:1063 +#: engine/core/models.py:1156 msgid "address line" msgstr "Adres hattı" -#: engine/core/models.py:1065 +#: engine/core/models.py:1158 msgid "street" msgstr "Sokak" -#: engine/core/models.py:1066 +#: engine/core/models.py:1159 msgid "district" msgstr "Bölge" -#: engine/core/models.py:1067 +#: engine/core/models.py:1160 msgid "city" msgstr "Şehir" -#: engine/core/models.py:1068 +#: engine/core/models.py:1161 msgid "region" msgstr "Bölge" -#: engine/core/models.py:1069 +#: engine/core/models.py:1162 msgid "postal code" msgstr "Posta kodu" -#: engine/core/models.py:1070 +#: engine/core/models.py:1163 msgid "country" msgstr "Ülke" -#: engine/core/models.py:1077 +#: engine/core/models.py:1170 msgid "geolocation point: (longitude, latitude)" msgstr "Coğrafi Konum Noktası(Boylam, Enlem)" -#: engine/core/models.py:1083 +#: engine/core/models.py:1176 msgid "full JSON response from geocoder for this address" msgstr "Bu adres için geocoder'dan alınan tam JSON yanıtı" -#: engine/core/models.py:1089 +#: engine/core/models.py:1182 msgid "stored JSON response from the geocoding service" msgstr "Coğrafi kodlama hizmetinden depolanan JSON yanıtı" -#: engine/core/models.py:1099 +#: engine/core/models.py:1192 msgid "address" msgstr "Adres" -#: engine/core/models.py:1100 +#: engine/core/models.py:1193 msgid "addresses" msgstr "Adresler" -#: engine/core/models.py:1112 +#: engine/core/models.py:1205 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2350,74 +2394,74 @@ msgstr "" "karşılandığından emin olurken promosyon kodunu doğrulamak ve siparişe " "uygulamak için işlevsellik içerir." -#: engine/core/models.py:1126 +#: engine/core/models.py:1219 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" -#: engine/core/models.py:1127 +#: engine/core/models.py:1220 msgid "promo code identifier" msgstr "Promosyon kodu tanımlayıcı" -#: engine/core/models.py:1134 +#: engine/core/models.py:1227 msgid "fixed discount amount applied if percent is not used" msgstr "Yüzde kullanılmazsa uygulanan sabit indirim tutarı" -#: engine/core/models.py:1135 +#: engine/core/models.py:1228 msgid "fixed discount amount" msgstr "Sabit iskonto tutarı" -#: engine/core/models.py:1141 +#: engine/core/models.py:1234 msgid "percentage discount applied if fixed amount is not used" msgstr "Sabit tutar kullanılmazsa uygulanan yüzde indirimi" -#: engine/core/models.py:1142 +#: engine/core/models.py:1235 msgid "percentage discount" msgstr "Yüzde indirim" -#: engine/core/models.py:1147 +#: engine/core/models.py:1240 msgid "timestamp when the promocode expires" msgstr "Promosyon kodunun sona erdiği zaman damgası" -#: engine/core/models.py:1148 +#: engine/core/models.py:1241 msgid "end validity time" msgstr "Geçerlilik süresi sonu" -#: engine/core/models.py:1153 +#: engine/core/models.py:1246 msgid "timestamp from which this promocode is valid" msgstr "Bu promosyon kodunun geçerli olduğu zaman damgası" -#: engine/core/models.py:1154 +#: engine/core/models.py:1247 msgid "start validity time" msgstr "Geçerlilik süresini başlat" -#: engine/core/models.py:1159 +#: engine/core/models.py:1252 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ş" -#: engine/core/models.py:1160 +#: engine/core/models.py:1253 msgid "usage timestamp" msgstr "Kullanım zaman damgası" -#: engine/core/models.py:1165 +#: engine/core/models.py:1258 msgid "user assigned to this promocode if applicable" msgstr "Varsa bu promosyon koduna atanan kullanıcı" -#: engine/core/models.py:1166 +#: engine/core/models.py:1259 msgid "assigned user" msgstr "Atanmış kullanıcı" -#: engine/core/models.py:1173 +#: engine/core/models.py:1266 msgid "promo code" msgstr "Promosyon kodu" -#: engine/core/models.py:1174 +#: engine/core/models.py:1267 msgid "promo codes" msgstr "Promosyon kodları" -#: engine/core/models.py:1190 +#: engine/core/models.py:1283 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2425,16 +2469,16 @@ msgstr "" "Sadece bir indirim türü (tutar veya yüzde) tanımlanmalı, ikisi birden veya " "hiçbiri tanımlanmamalıdır." -#: engine/core/models.py:1212 +#: engine/core/models.py:1305 msgid "promocode already used" msgstr "Promosyon kodu zaten kullanılmış" -#: engine/core/models.py:1234 +#: engine/core/models.py:1327 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Promosyon kodu {self.uuid} için geçersiz indirim türü!" -#: engine/core/models.py:1243 +#: engine/core/models.py:1336 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 " @@ -2451,137 +2495,137 @@ msgstr "" "güncellenebilir. Aynı şekilde işlevsellik, sipariş yaşam döngüsündeki " "ürünlerin yönetilmesini de destekler." -#: engine/core/models.py:1260 +#: engine/core/models.py:1357 msgid "the billing address used for this order" msgstr "Bu sipariş için kullanılan fatura adresi" -#: engine/core/models.py:1268 +#: engine/core/models.py:1365 msgid "optional promo code applied to this order" msgstr "Bu siparişe isteğe bağlı promosyon kodu uygulanır" -#: engine/core/models.py:1269 +#: engine/core/models.py:1366 msgid "applied promo code" msgstr "Uygulanan promosyon kodu" -#: engine/core/models.py:1277 +#: engine/core/models.py:1374 msgid "the shipping address used for this order" msgstr "Bu sipariş için kullanılan gönderim adresi" -#: engine/core/models.py:1278 +#: engine/core/models.py:1375 msgid "shipping address" msgstr "Nakliye adresi" -#: engine/core/models.py:1284 +#: engine/core/models.py:1381 msgid "current status of the order in its lifecycle" msgstr "Siparişin yaşam döngüsündeki mevcut durumu" -#: engine/core/models.py:1285 +#: engine/core/models.py:1382 msgid "order status" msgstr "Sipariş durumu" -#: engine/core/models.py:1290 engine/core/models.py:1889 +#: engine/core/models.py:1387 engine/core/models.py:1997 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" -#: engine/core/models.py:1296 +#: engine/core/models.py:1393 msgid "json representation of order attributes for this order" msgstr "Bu sipariş için sipariş özniteliklerinin JSON gösterimi" -#: engine/core/models.py:1302 +#: engine/core/models.py:1399 msgid "the user who placed the order" msgstr "Siparişi veren kullanıcı" -#: engine/core/models.py:1303 +#: engine/core/models.py:1400 msgid "user" msgstr "Kullanıcı" -#: engine/core/models.py:1309 +#: engine/core/models.py:1406 msgid "the timestamp when the order was finalized" msgstr "Siparişin sonlandırıldığı zaman damgası" -#: engine/core/models.py:1310 +#: engine/core/models.py:1407 msgid "buy time" msgstr "Zaman satın alın" -#: engine/core/models.py:1317 +#: engine/core/models.py:1414 msgid "a human-readable identifier for the order" msgstr "Sipariş için insan tarafından okunabilir bir tanımlayıcı" -#: engine/core/models.py:1318 +#: engine/core/models.py:1415 msgid "human readable id" msgstr "insan tarafından okunabilir kimlik" -#: engine/core/models.py:1324 +#: engine/core/models.py:1421 msgid "order" msgstr "Sipariş" -#: engine/core/models.py:1371 +#: engine/core/models.py:1468 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!" -#: engine/core/models.py:1404 +#: engine/core/models.py:1504 msgid "you cannot add products to an order that is not a pending one" msgstr "Beklemede olmayan bir siparişe ürün ekleyemezsiniz" -#: engine/core/models.py:1410 +#: engine/core/models.py:1510 msgid "you cannot add inactive products to order" msgstr "Aktif olmayan ürünleri siparişe ekleyemezsiniz" -#: engine/core/models.py:1432 +#: engine/core/models.py:1533 msgid "you cannot add more products than available in stock" msgstr "Stokta mevcut olandan daha fazla ürün ekleyemezsiniz" -#: engine/core/models.py:1456 engine/core/models.py:1485 -#: engine/core/models.py:1495 +#: engine/core/models.py:1557 engine/core/models.py:1586 +#: engine/core/models.py:1596 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" -#: engine/core/models.py:1480 +#: engine/core/models.py:1581 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} <{query}> sorgusu ile mevcut değil!" -#: engine/core/models.py:1519 +#: engine/core/models.py:1620 msgid "promocode does not exist" msgstr "Promosyon kodu mevcut değil" -#: engine/core/models.py:1534 +#: engine/core/models.py:1635 msgid "you can only buy physical products with shipping address specified" msgstr "" "Fiziksel ürünleri yalnızca gönderim adresi belirtilerek satın alabilirsiniz!" -#: engine/core/models.py:1555 +#: engine/core/models.py:1656 msgid "address does not exist" msgstr "Adres mevcut değil" -#: engine/core/models.py:1577 engine/core/models.py:1656 +#: engine/core/models.py:1678 engine/core/models.py:1757 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." -#: engine/core/models.py:1583 engine/core/models.py:1649 +#: engine/core/models.py:1684 engine/core/models.py:1750 msgid "invalid force value" msgstr "Geçersiz kuvvet değeri" -#: engine/core/models.py:1589 engine/core/models.py:1660 +#: engine/core/models.py:1690 engine/core/models.py:1761 msgid "you cannot purchase an empty order!" msgstr "Boş bir sipariş satın alamazsınız!" -#: engine/core/models.py:1610 +#: engine/core/models.py:1711 msgid "you cannot buy an order without a user" msgstr "Kullanıcı olmadan sipariş alamazsınız!" -#: engine/core/models.py:1624 +#: engine/core/models.py:1725 msgid "a user without a balance cannot buy with balance" msgstr "Bakiyesi olmayan bir kullanıcı bakiye ile satın alamaz!" -#: engine/core/models.py:1630 +#: engine/core/models.py:1731 msgid "insufficient funds to complete the order" msgstr "Siparişi tamamlamak için yeterli fon yok" -#: engine/core/models.py:1671 +#: engine/core/models.py:1772 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2589,14 +2633,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ı" -#: engine/core/models.py:1682 +#: engine/core/models.py:1783 #, 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}!" -#: engine/core/models.py:1813 +#: engine/core/models.py:1916 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2611,35 +2655,35 @@ 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." -#: engine/core/models.py:1825 +#: engine/core/models.py:1928 msgid "user-provided comments about their experience with the product" msgstr "" "Ürünle ilgili deneyimleri hakkında kullanıcı tarafından sağlanan yorumlar" -#: engine/core/models.py:1826 +#: engine/core/models.py:1929 msgid "feedback comments" msgstr "Geri bildirim yorumları" -#: engine/core/models.py:1834 +#: engine/core/models.py:1937 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" -#: engine/core/models.py:1836 +#: engine/core/models.py:1939 msgid "related order product" msgstr "İlgili sipariş ürünü" -#: engine/core/models.py:1841 +#: engine/core/models.py:1944 msgid "user-assigned rating for the product" msgstr "Ürün için kullanıcı tarafından atanan derecelendirme" -#: engine/core/models.py:1842 +#: engine/core/models.py:1945 msgid "product rating" msgstr "Ürün değerlendirmesi" -#: engine/core/models.py:1862 +#: engine/core/models.py:1965 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2661,108 +2705,108 @@ msgstr "" "destekleyen yöntemler ve özellikler sağlar. Model, Sipariş ve Ürün " "modelleriyle entegre olur ve bunlara referans depolar." -#: engine/core/models.py:1877 +#: engine/core/models.py:1985 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" -#: engine/core/models.py:1878 +#: engine/core/models.py:1986 msgid "purchase price at order time" msgstr "Sipariş anındaki satın alma fiyatı" -#: engine/core/models.py:1883 +#: engine/core/models.py:1991 msgid "internal comments for admins about this ordered product" msgstr "Sipariş edilen bu ürün hakkında yöneticiler için dahili yorumlar" -#: engine/core/models.py:1884 +#: engine/core/models.py:1992 msgid "internal comments" msgstr "Dahili yorumlar" -#: engine/core/models.py:1890 +#: engine/core/models.py:1998 msgid "user notifications" msgstr "Kullanıcı bildirimleri" -#: engine/core/models.py:1895 +#: engine/core/models.py:2003 msgid "json representation of this item's attributes" msgstr "Bu öğenin özniteliklerinin JSON gösterimi" -#: engine/core/models.py:1896 +#: engine/core/models.py:2004 msgid "ordered product attributes" msgstr "Sıralı ürün özellikleri" -#: engine/core/models.py:1901 +#: engine/core/models.py:2009 msgid "reference to the parent order that contains this product" msgstr "Bu ürünü içeren ana siparişe referans" -#: engine/core/models.py:1902 +#: engine/core/models.py:2010 msgid "parent order" msgstr "Ana sipariş" -#: engine/core/models.py:1911 +#: engine/core/models.py:2019 msgid "the specific product associated with this order line" msgstr "Bu sipariş satırıyla ilişkili belirli ürün" -#: engine/core/models.py:1918 +#: engine/core/models.py:2026 msgid "quantity of this specific product in the order" msgstr "Siparişteki bu belirli ürünün miktarı" -#: engine/core/models.py:1919 +#: engine/core/models.py:2027 msgid "product quantity" msgstr "Ürün miktarı" -#: engine/core/models.py:1926 +#: engine/core/models.py:2034 msgid "current status of this product in the order" msgstr "Bu ürünün siparişteki mevcut durumu" -#: engine/core/models.py:1927 +#: engine/core/models.py:2035 msgid "product line status" msgstr "Ürün hattı durumu" -#: engine/core/models.py:1998 +#: engine/core/models.py:2106 msgid "order product must have an order" msgstr "Orderproduct ilişkili bir siparişe sahip olmalıdır!" -#: engine/core/models.py:2000 +#: engine/core/models.py:2108 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Geri bildirim için yanlış eylem belirtildi: {action}!" -#: engine/core/models.py:2017 +#: engine/core/models.py:2125 msgid "you cannot feedback an order which is not received" msgstr "alınmamış bir siparişe geri bildirim yapamazsınız" -#: engine/core/models.py:2026 +#: engine/core/models.py:2132 engine/core/models.py:2227 msgid "name" msgstr "İsim" -#: engine/core/models.py:2028 +#: engine/core/models.py:2134 msgid "URL of the integration" msgstr "Entegrasyonun URL'si" -#: engine/core/models.py:2031 +#: engine/core/models.py:2137 msgid "authentication credentials" msgstr "Kimlik doğrulama bilgileri" -#: engine/core/models.py:2054 +#: engine/core/models.py:2160 msgid "you can only have one default CRM provider" msgstr "Yalnızca bir varsayılan CRM sağlayıcınız olabilir" -#: engine/core/models.py:2064 +#: engine/core/models.py:2170 msgid "CRM" msgstr "CRM" -#: engine/core/models.py:2065 +#: engine/core/models.py:2171 msgid "CRMs" msgstr "CRM'ler" -#: engine/core/models.py:2081 +#: engine/core/models.py:2187 msgid "order CRM link" msgstr "Siparişin CRM bağlantısı" -#: engine/core/models.py:2082 +#: engine/core/models.py:2188 msgid "orders CRM links" msgstr "Siparişlerin CRM bağlantıları" -#: engine/core/models.py:2087 +#: engine/core/models.py:2193 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2778,14 +2822,38 @@ msgstr "" " sipariş tamamlandı durumundayken varlığın indirilmesi için bir URL " "oluşturmaya yönelik bir yöntem içerir." -#: engine/core/models.py:2103 +#: engine/core/models.py:2209 msgid "download" msgstr "İndir" -#: engine/core/models.py:2104 +#: engine/core/models.py:2210 msgid "downloads" msgstr "İndirmeler" +#: engine/core/models.py:2228 +msgid "descriptive name for the image" +msgstr "Görüntünün açıklayıcı adı" + +#: engine/core/models.py:2233 +msgid "image file pasted in the markdown editor" +msgstr "Markdown düzenleyicisine yapıştırılan görüntü dosyası" + +#: engine/core/models.py:2239 +msgid "alt text" +msgstr "Başka metin" + +#: engine/core/models.py:2240 +msgid "alternative text for accessibility" +msgstr "Erişilebilirlik için alternatif metin" + +#: engine/core/models.py:2244 +msgid "pasted image" +msgstr "Yapıştırılmış resim" + +#: engine/core/models.py:2245 +msgid "pasted images" +msgstr "Yapıştırılan resimler" + #: engine/core/serializers/utility.py:91 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." @@ -2794,6 +2862,16 @@ msgstr "" " sağlamalisiniz." #: engine/core/sitemaps.py:25 +#: engine/core/templates/admin_doc/bookmarklets.html:8 +#: engine/core/templates/admin_doc/index.html:8 +#: engine/core/templates/admin_doc/missing_docutils.html:8 +#: engine/core/templates/admin_doc/model_detail.html:8 +#: engine/core/templates/admin_doc/model_index.html:8 +#: engine/core/templates/admin_doc/template_detail.html:8 +#: engine/core/templates/admin_doc/template_filter_index.html:8 +#: engine/core/templates/admin_doc/template_tag_index.html:8 +#: engine/core/templates/admin_doc/view_detail.html:8 +#: engine/core/templates/admin_doc/view_index.html:8 msgid "Home" msgstr "Ev" @@ -2846,45 +2924,34 @@ msgstr "Brüt" msgid "Dashboard" msgstr "Gösterge Tablosu" -#: engine/core/templates/admin/dashboard/_income_overview.html:7 +#: engine/core/templates/admin/dashboard/_income_overview.html:6 msgid "Income overview" msgstr "Gelire genel bakış" -#: engine/core/templates/admin/dashboard/_income_overview.html:31 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Net" +#: engine/core/templates/admin/dashboard/_income_overview.html:16 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" msgstr "Net gelir" -#: engine/core/templates/admin/dashboard/_income_overview.html:37 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Taxes" -msgstr "Vergiler" - -#: engine/core/templates/admin/dashboard/_income_overview.html:43 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 +#: engine/core/templates/admin/dashboard/_income_overview.html:21 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 msgid "Returns" msgstr "Geri dönüşler" -#: engine/core/templates/admin/dashboard/_income_overview.html:48 -msgid "Gross (pie total)" -msgstr "Brüt gelir" - -#: engine/core/templates/admin/dashboard/_income_overview.html:72 -msgid "No data" -msgstr "Tarih yok" - +#: engine/core/templates/admin/dashboard/_income_overview.html:26 #: engine/core/templates/admin/dashboard/_kpis.html:6 msgid "GMV" msgstr "GMV" +#: engine/core/templates/admin/dashboard/_income_overview.html:50 +msgid "No data" +msgstr "Tarih yok" + #: engine/core/templates/admin/dashboard/_kpis.html:34 msgid "AOV" msgstr "AOV" -#: engine/core/templates/admin/dashboard/_kpis.html:48 -msgid "Net revenue" -msgstr "Net gelir" - #: engine/core/templates/admin/dashboard/_kpis.html:62 msgid "Refund rate" msgstr "Geri ödeme oranı" @@ -2897,7 +2964,7 @@ msgstr "İade edildi" msgid "Low stock" msgstr "Düşük stok" -#: engine/core/templates/admin/dashboard/_low_stock.html:29 +#: engine/core/templates/admin/dashboard/_low_stock.html:33 msgid "No low stock items." msgstr "Düşük stoklu ürün yok." @@ -2954,6 +3021,301 @@ msgstr "Son 30 gün içinde kategori satışı yok." msgid "Django site admin" msgstr "Django site yöneticisi" +#: engine/core/templates/admin_doc/bookmarklets.html:4 +#: engine/core/templates/admin_doc/bookmarklets.html:17 +msgid "Documentation bookmarklets" +msgstr "Dokümantasyon yer imleri" + +#: engine/core/templates/admin_doc/bookmarklets.html:10 +#: engine/core/templates/admin_doc/index.html:4 +#: engine/core/templates/admin_doc/index.html:10 +#: engine/core/templates/admin_doc/index.html:15 +#: engine/core/templates/admin_doc/missing_docutils.html:10 +#: engine/core/templates/admin_doc/missing_docutils.html:19 +#: engine/core/templates/admin_doc/model_detail.html:10 +#: engine/core/templates/admin_doc/model_index.html:10 +#: engine/core/templates/admin_doc/template_detail.html:10 +#: engine/core/templates/admin_doc/template_filter_index.html:10 +#: engine/core/templates/admin_doc/template_tag_index.html:10 +#: engine/core/templates/admin_doc/view_detail.html:10 +#: engine/core/templates/admin_doc/view_index.html:10 +msgid "Documentation" +msgstr "Belgeleme" + +#: engine/core/templates/admin_doc/bookmarklets.html:12 +#: engine/core/templates/admin_doc/index.html:53 +msgid "Bookmarklets" +msgstr "Yer imleri" + +#: engine/core/templates/admin_doc/bookmarklets.html:19 +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Yer imi eklentilerini yüklemek için, bağlantıyı yer imleri araç çubuğunuza " +"sürükleyin veya bağlantıya sağ tıklayın ve yer imlerinize ekleyin. Artık " +"sitenin herhangi bir sayfasından yer imi eklentisini seçebilirsiniz." + +#: engine/core/templates/admin_doc/bookmarklets.html:29 +msgid "Documentation for this page" +msgstr "Bu sayfa için belgeler" + +#: engine/core/templates/admin_doc/bookmarklets.html:31 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Herhangi bir sayfadan, o sayfayı oluşturan görünümün belgelerine atlar." + +#: engine/core/templates/admin_doc/index.html:21 +#: engine/core/templates/admin_doc/model_detail.html:12 +#: engine/core/templates/admin_doc/model_index.html:4 +#: engine/core/templates/admin_doc/model_index.html:12 +msgid "Models" +msgstr "Modeller" + +#: engine/core/templates/admin_doc/index.html:23 +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Modeller, sistemdeki tüm nesnelerin ve bunlarla ilişkili alanların " +"açıklamalarıdır. Her model, şablon değişkenleri olarak erişilebilen bir alan" +" listesine sahiptir." + +#: engine/core/templates/admin_doc/index.html:29 +#: engine/core/templates/admin_doc/view_detail.html:12 +#: engine/core/templates/admin_doc/view_index.html:4 +#: engine/core/templates/admin_doc/view_index.html:12 +msgid "Views" +msgstr "Görüşler" + +#: engine/core/templates/admin_doc/index.html:31 +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Genel sitedeki her sayfa bir görünüm tarafından oluşturulur. Görünüm, " +"sayfayı oluşturmak için hangi şablonun kullanılacağını ve bu şablonda hangi " +"nesnelerin kullanılabileceğini tanımlar." + +#: engine/core/templates/admin_doc/index.html:39 +msgid "List of all the template tags and their functions." +msgstr "Tüm şablon etiketlerinin ve işlevlerinin listesi." + +#: engine/core/templates/admin_doc/index.html:45 +#: engine/core/templates/admin_doc/template_filter_index.html:12 +msgid "Filters" +msgstr "Filtreler" + +#: engine/core/templates/admin_doc/index.html:47 +msgid "" +"Filters are actions which can be applied to variables in a template to alter" +" the output." +msgstr "" +"Filtreler, çıktıyı değiştirmek için şablondaki değişkenlere uygulanabilen " +"eylemlerdir." + +#: engine/core/templates/admin_doc/index.html:55 +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Tarayıcınızın yönetici işlevlerine hızlı bir şekilde erişmesi için araçlar." + +#: engine/core/templates/admin_doc/missing_docutils.html:4 +msgid "Please install docutils" +msgstr "Lütfen docutils'i yükleyin." + +#: engine/core/templates/admin_doc/missing_docutils.html:20 +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"Yönetici belgeleme sistemi, Python'un docutils kütüphanesini gerektirir." + +#: engine/core/templates/admin_doc/missing_docutils.html:21 +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Lütfen yöneticilerinizden docutils'i yüklemelerini isteyin." + +#: engine/core/templates/admin_doc/model_detail.html:4 +#, python-format +msgid "Model: %(name)s" +msgstr "Model: %(name)s" + +#: engine/core/templates/admin_doc/model_detail.html:29 +msgid "Fields" +msgstr "Alanlar" + +#: engine/core/templates/admin_doc/model_detail.html:36 +msgid "Field" +msgstr "Alan" + +#: engine/core/templates/admin_doc/model_detail.html:37 +msgid "Type" +msgstr "Tip" + +#: engine/core/templates/admin_doc/model_detail.html:38 +#: engine/core/templates/admin_doc/model_detail.html:70 +msgid "Description" +msgstr "Açıklama" + +#: engine/core/templates/admin_doc/model_detail.html:61 +msgid "Methods with arguments" +msgstr "Argümanlı yöntemler" + +#: engine/core/templates/admin_doc/model_detail.html:68 +msgid "Method" +msgstr "Yöntem" + +#: engine/core/templates/admin_doc/model_detail.html:69 +msgid "Arguments" +msgstr "Tartışmalar" + +#: engine/core/templates/admin_doc/model_detail.html:89 +msgid "Back to Model documentation" +msgstr "Model belgelerine geri dön" + +#: engine/core/templates/admin_doc/model_index.html:17 +msgid "Model documentation" +msgstr "Model belgeleri" + +#: engine/core/templates/admin_doc/model_index.html:44 +msgid "Model groups" +msgstr "Model grupları" + +#: engine/core/templates/admin_doc/template_detail.html:4 +#, python-format +msgid "Template: %(name)s" +msgstr "Şablon: %(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:12 +msgid "Templates" +msgstr "Şablonlar" + +#: engine/core/templates/admin_doc/template_detail.html:17 +#, python-format +msgid "" +"Template: %(name)s" +msgstr "" +"Şablon: %(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:21 +#, python-format +msgid "Search path for template %(name)s:" +msgstr "Şablon %(name)s için arama yolu:" + +#: engine/core/templates/admin_doc/template_detail.html:29 +msgid "(does not exist)" +msgstr "(yoktur)" + +#: engine/core/templates/admin_doc/template_detail.html:40 +msgid "Back to Documentation" +msgstr "Dokümantasyona geri dön" + +#: engine/core/templates/admin_doc/template_filter_index.html:4 +msgid "Template filters" +msgstr "Şablon filtreleri" + +#: engine/core/templates/admin_doc/template_filter_index.html:17 +msgid "Template filter documentation" +msgstr "Şablon filtresi belgeleri" + +#: engine/core/templates/admin_doc/template_filter_index.html:26 +#: engine/core/templates/admin_doc/template_filter_index.html:52 +msgid "Built-in filters" +msgstr "Yerleşik filtreler" + +#: engine/core/templates/admin_doc/template_filter_index.html:29 +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before using" +" the filter." +msgstr "" +"Bu filtreleri kullanmak için, filtreyi kullanmadan önce şablonunuza %(code)s ekleyin." + +#: engine/core/templates/admin_doc/template_tag_index.html:4 +msgid "Template tags" +msgstr "Şablon etiketleri" + +#: engine/core/templates/admin_doc/template_tag_index.html:17 +msgid "Template tag documentation" +msgstr "Şablon etiketi belgeleri" + +#: engine/core/templates/admin_doc/template_tag_index.html:26 +#: engine/core/templates/admin_doc/template_tag_index.html:52 +msgid "Built-in tags" +msgstr "Yerleşik etiketler" + +#: engine/core/templates/admin_doc/template_tag_index.html:29 +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using the tag." +msgstr "" +"Bu etiketleri kullanmak için, etiketi kullanmadan önce şablonunuza %(code)s ekleyin." + +#: engine/core/templates/admin_doc/view_detail.html:4 +#, python-format +msgid "View: %(name)s" +msgstr "Görünüm: %(name)s" + +#: engine/core/templates/admin_doc/view_detail.html:28 +msgid "Context:" +msgstr "Bağlam:" + +#: engine/core/templates/admin_doc/view_detail.html:33 +msgid "Templates:" +msgstr "Şablonlar:" + +#: engine/core/templates/admin_doc/view_detail.html:41 +msgid "Back to View documentation" +msgstr "Belgelere geri dön" + +#: engine/core/templates/admin_doc/view_index.html:17 +msgid "View documentation" +msgstr "Belgeleri görüntüle" + +#: engine/core/templates/admin_doc/view_index.html:28 +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Ad alanı %(name)s'a göre görünümler" + +#: engine/core/templates/admin_doc/view_index.html:30 +msgid "Views by empty namespace" +msgstr "Boş ad alanı tarafından görüntülenenler" + +#: engine/core/templates/admin_doc/view_index.html:40 +#, python-format +msgid "" +"View function: %(full_name)s. Name: %(url_name)s." +msgstr "" +"Görüntüleme işlevi: %(full_name)s. Ad: " +"%(url_name)s." + +#: engine/core/templates/admin_doc/view_index.html:54 +msgid "Jump to namespace" +msgstr "Ad alanına atla" + +#: engine/core/templates/admin_doc/view_index.html:59 +msgid "Empty namespace" +msgstr "Boş ad alanı" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -3054,7 +3416,7 @@ msgstr "" " BİLGİ" #: engine/core/templates/digital_order_delivered_email.html:137 -#: engine/core/templates/json_table_widget.html:6 +#: engine/core/templates/json_table_widget.html:26 msgid "value" msgstr "Değer" @@ -3074,11 +3436,23 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "Saygılarımla,
the %(project_name)s team" -#: engine/core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:7 +msgid "Key" +msgstr "Anahtar" + +#: engine/core/templates/json_table_widget.html:8 +msgid "Value" +msgstr "Değer" + +#: engine/core/templates/json_table_widget.html:19 msgid "key" msgstr "Anahtar" -#: engine/core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:32 +msgid "Delete row" +msgstr "Satırı sil" + +#: engine/core/templates/json_table_widget.html:44 msgid "Add Row" msgstr "Satır Ekle" @@ -3165,12 +3539,21 @@ msgstr "Bu eylemi gerçekleştirmek için izniniz yok." msgid "NOMINATIM_URL must be configured." msgstr "NOMINATIM_URL parametresi yapılandırılmalıdır!" -#: engine/core/validators.py:23 +#: engine/core/validators.py:18 +msgid "could not determine file type" +msgstr "Dosya türü belirlenemedi" + +#: engine/core/validators.py:24 +#, python-brace-format +msgid "unsupported video format. supported formats: {supported}" +msgstr "Desteklenmeyen video formatı. Desteklenen formatlar: {supported}" + +#: engine/core/validators.py:45 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "Resim boyutları w{max_width} x h{max_height} pikseli geçmemelidir!" -#: engine/core/views.py:104 +#: engine/core/views.py:108 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3178,7 +3561,7 @@ msgstr "" "Site haritası dizini için isteği işler ve bir XML yanıtı döndürür. Yanıtın " "XML için uygun içerik türü başlığını içermesini sağlar." -#: engine/core/views.py:119 +#: engine/core/views.py:123 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3188,18 +3571,18 @@ msgstr "" " işler, uygun site haritası ayrıntı yanıtını getirir ve XML için Content-" "Type başlığını ayarlar." -#: engine/core/views.py:155 +#: engine/core/views.py:174 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Desteklenen dillerin bir listesini ve bunlara karşılık gelen bilgileri " "döndürür." -#: engine/core/views.py:182 +#: engine/core/views.py:201 msgid "Returns the parameters of the website as a JSON object." msgstr "Web sitesinin parametrelerini bir JSON nesnesi olarak döndürür." -#: engine/core/views.py:198 +#: engine/core/views.py:217 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3207,11 +3590,11 @@ msgstr "" "Belirli bir anahtar ve zaman aşımı ile önbellek verilerini okuma ve ayarlama" " gibi önbellek işlemlerini gerçekleştirir." -#: engine/core/views.py:220 +#: engine/core/views.py:239 msgid "Handles `contact us` form submissions." msgstr "Bize ulaşın` form gönderimlerini işler." -#: engine/core/views.py:236 +#: engine/core/views.py:255 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3219,15 +3602,15 @@ msgstr "" "Gelen POST isteklerinden gelen URL'leri işleme ve doğrulama isteklerini " "işler." -#: engine/core/views.py:273 +#: engine/core/views.py:292 msgid "Handles global search queries." msgstr "Küresel arama sorgularını işler." -#: engine/core/views.py:289 +#: engine/core/views.py:308 msgid "Handles the logic of buying as a business without registration." msgstr "Kayıt olmadan bir işletme olarak satın alma mantığını ele alır." -#: engine/core/views.py:337 +#: engine/core/views.py:356 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3235,31 +3618,31 @@ msgstr "" "Bir siparişle ilişkili bir dijital varlığın indirilmesini yönetir.\n" "Bu fonksiyon, projenin depolama dizininde bulunan dijital varlık dosyasını sunmaya çalışır. Dosya bulunamazsa, kaynağın kullanılamadığını belirtmek için bir HTTP 404 hatası verilir." -#: engine/core/views.py:348 +#: engine/core/views.py:367 msgid "order_product_uuid is required" msgstr "order_product_uuid gereklidir" -#: engine/core/views.py:355 +#: engine/core/views.py:374 msgid "order product does not exist" msgstr "sipariş ürünü mevcut değil" -#: engine/core/views.py:358 +#: engine/core/views.py:377 msgid "you can only download the digital asset once" msgstr "Dijital varlığı yalnızca bir kez indirebilirsiniz" -#: engine/core/views.py:362 +#: engine/core/views.py:381 msgid "the order must be paid before downloading the digital asset" msgstr "dijital varlık indirilmeden önce siparişin ödenmesi gerekir" -#: engine/core/views.py:369 +#: engine/core/views.py:388 msgid "the order product does not have a product" msgstr "Sipariş ürününün bir ürünü yok" -#: engine/core/views.py:412 +#: engine/core/views.py:431 msgid "favicon not found" msgstr "favicon bulunamadı" -#: engine/core/views.py:418 +#: engine/core/views.py:437 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3267,7 +3650,7 @@ msgstr "" "Bir web sitesinin favicon'u için istekleri işler.\n" "Bu fonksiyon, projenin statik dizininde bulunan favicon dosyasını sunmaya çalışır. Favicon dosyası bulunamazsa, kaynağın kullanılamadığını belirtmek için bir HTTP 404 hatası verilir." -#: engine/core/views.py:432 +#: engine/core/views.py:451 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3278,16 +3661,20 @@ msgstr "" "yönlendirir. HTTP yönlendirmesini işlemek için Django'nun `redirect` " "fonksiyonunu kullanır." -#: engine/core/views.py:445 +#: engine/core/views.py:464 msgid "Returns current version of the Schon. " msgstr "Schon'in geçerli sürümünü döndürür." -#: engine/core/views.py:674 engine/core/views.py:689 +#: engine/core/views.py:475 +msgid "no image file provided" +msgstr "Görüntü dosyası sağlanmadı" + +#: engine/core/views.py:710 engine/core/views.py:725 #, python-format msgid "Revenue & Orders (last %(days)d)" msgstr "Gelir ve Siparişler (son %(days)d)" -#: engine/core/views.py:870 +#: engine/core/views.py:911 msgid "Returns custom variables for Dashboard. " msgstr "Gösterge Tablosu için özel değişkenleri döndürür." @@ -3377,7 +3764,7 @@ msgstr "" "sağlar. Brand nesneleri için API uç noktalarının uygulanmasını " "basitleştirmek için Django'nun ViewSet çerçevesini kullanır." -#: engine/core/viewsets.py:458 +#: engine/core/viewsets.py:460 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3395,7 +3782,15 @@ msgstr "" "uygulamak ve bir ürünün ilgili geri bildirimlerine erişmek için yöntemler " "içerir." -#: engine/core/viewsets.py:605 +#: engine/core/viewsets.py:541 +msgid "identificator_type and identificators are required" +msgstr "identificator_type ve identificators zorunludur" + +#: engine/core/viewsets.py:554 +msgid "identificator_type must be one of: uuid, slug, sku" +msgstr "identificator_type şunlardan biri olmalıdır: uuid, slug, sku" + +#: engine/core/viewsets.py:635 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3410,7 +3805,7 @@ msgstr "" "tanımlar. Bu sınıfın amacı, Django REST çerçevesi aracılığıyla Vendor ile " "ilgili kaynaklara kolaylaştırılmış erişim sağlamaktır." -#: engine/core/viewsets.py:625 +#: engine/core/viewsets.py:655 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3427,7 +3822,7 @@ msgstr "" "genişletir ve verileri sorgulamak için Django'nun filtreleme sistemini " "kullanır." -#: engine/core/viewsets.py:652 +#: engine/core/viewsets.py:682 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3446,7 +3841,7 @@ msgstr "" "birden fazla serileştirici kullanır ve sipariş verileriyle etkileşime " "girerken izinleri buna göre zorlar." -#: engine/core/viewsets.py:914 +#: engine/core/viewsets.py:944 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3460,11 +3855,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" -#: engine/core/viewsets.py:974 +#: engine/core/viewsets.py:1004 msgid "Manages operations related to Product images in the application. " msgstr "Uygulamadaki Ürün görselleri ile ilgili işlemleri yönetir." -#: engine/core/viewsets.py:988 +#: engine/core/viewsets.py:1018 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3472,15 +3867,15 @@ msgstr "" "Çeşitli API eylemleri aracılığıyla PromoCode örneklerinin alınmasını ve " "işlenmesini yönetir." -#: engine/core/viewsets.py:1019 +#: engine/core/viewsets.py:1049 msgid "Represents a view set for managing promotions. " msgstr "Promosyonları yönetmek için bir görünüm kümesini temsil eder." -#: engine/core/viewsets.py:1032 +#: engine/core/viewsets.py:1062 msgid "Handles operations related to Stock data in the system." msgstr "Sistemdeki Stok verileri ile ilgili işlemleri yürütür." -#: engine/core/viewsets.py:1046 +#: engine/core/viewsets.py:1076 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3498,7 +3893,7 @@ msgstr "" "verilmediği sürece kullanıcıların yalnızca kendi istek listelerini " "yönetebilmelerini sağlamak için entegre edilmiştir." -#: engine/core/viewsets.py:1183 +#: engine/core/viewsets.py:1213 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3512,12 +3907,12 @@ msgstr "" "serileştirici geçersiz kılmaları ve istek bağlamına dayalı izin işleme için " "özel davranışlar içerir." -#: engine/core/viewsets.py:1254 +#: engine/core/viewsets.py:1275 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Coğrafi kodlama hatası: {e}" -#: engine/core/viewsets.py:1262 +#: engine/core/viewsets.py:1283 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/vi_VN/LC_MESSAGES/django.mo b/engine/core/locale/vi_VN/LC_MESSAGES/django.mo index db31e026..4a52cd17 100644 Binary files a/engine/core/locale/vi_VN/LC_MESSAGES/django.mo and b/engine/core/locale/vi_VN/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/vi_VN/LC_MESSAGES/django.po b/engine/core/locale/vi_VN/LC_MESSAGES/django.po index 8429900c..44abf5c2 100644 --- a/engine/core/locale/vi_VN/LC_MESSAGES/django.po +++ b/engine/core/locale/vi_VN/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -51,118 +51,138 @@ 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" -#: engine/core/admin.py:94 +#: engine/core/admin.py:98 msgid "translations" msgstr "Dịch thuật" -#: engine/core/admin.py:102 +#: engine/core/admin.py:106 msgid "general" msgstr "Tổng quát" -#: engine/core/admin.py:106 +#: engine/core/admin.py:110 msgid "relations" msgstr "Quan hệ" -#: engine/core/admin.py:111 +#: engine/core/admin.py:115 msgid "additional info" msgstr "Thông tin bổ sung" -#: engine/core/admin.py:133 +#: engine/core/admin.py:137 msgid "metadata" msgstr "Siêu dữ liệu" -#: engine/core/admin.py:141 +#: engine/core/admin.py:145 msgid "timestamps" msgstr "Dấu thời gian" -#: engine/core/admin.py:158 +#: engine/core/admin.py:162 #, python-format msgid "Activate selected %(verbose_name_plural)s" msgstr "Kích hoạt %(verbose_name_plural)s đã chọn" -#: engine/core/admin.py:166 +#: engine/core/admin.py:170 msgid "selected items have been activated." msgstr "Các mục đã được chọn đã được kích hoạt!" -#: engine/core/admin.py:174 +#: engine/core/admin.py:178 #, 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" -#: engine/core/admin.py:184 +#: engine/core/admin.py:188 msgid "selected items have been deactivated." msgstr "Các mục đã chọn đã bị vô hiệu hóa!" -#: engine/core/admin.py:196 engine/core/graphene/object_types.py:653 -#: engine/core/graphene/object_types.py:660 engine/core/models.py:832 -#: engine/core/models.py:840 +#: engine/core/admin.py:200 engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:673 engine/core/models.py:918 +#: engine/core/models.py:928 msgid "attribute value" msgstr "Giá trị thuộc tính" -#: engine/core/admin.py:197 engine/core/graphene/object_types.py:77 -#: engine/core/models.py:841 +#: engine/core/admin.py:201 engine/core/graphene/object_types.py:81 +#: engine/core/models.py:929 msgid "attribute values" msgstr "Giá trị thuộc tính" -#: engine/core/admin.py:208 +#: engine/core/admin.py:212 engine/core/models.py:2232 msgid "image" msgstr "Hình ảnh" -#: engine/core/admin.py:209 engine/core/graphene/object_types.py:530 +#: engine/core/admin.py:213 engine/core/graphene/object_types.py:535 msgid "images" msgstr "Hình ảnh" -#: engine/core/admin.py:220 engine/core/models.py:576 +#: engine/core/admin.py:224 engine/core/models.py:635 msgid "stock" msgstr "Cổ phiếu" -#: engine/core/admin.py:221 engine/core/graphene/object_types.py:713 +#: engine/core/admin.py:225 engine/core/graphene/object_types.py:735 msgid "stocks" msgstr "Cổ phiếu" -#: engine/core/admin.py:232 engine/core/models.py:1938 +#: engine/core/admin.py:236 engine/core/models.py:2046 msgid "order product" msgstr "Đặt hàng sản phẩm" -#: engine/core/admin.py:233 engine/core/graphene/object_types.py:441 -#: engine/core/models.py:1939 +#: engine/core/admin.py:237 engine/core/graphene/object_types.py:446 +#: engine/core/models.py:2047 msgid "order products" msgstr "Đặt hàng sản phẩm" -#: engine/core/admin.py:251 engine/core/admin.py:252 +#: engine/core/admin.py:255 engine/core/admin.py:256 msgid "children" msgstr "Trẻ em" -#: engine/core/admin.py:528 +#: engine/core/admin.py:545 +msgid "video preview" +msgstr "Xem trước video" + +#: engine/core/admin.py:551 msgid "has images" msgstr "Có hình ảnh" -#: engine/core/admin.py:531 +#: engine/core/admin.py:554 #, python-format msgid "Export selected %(verbose_name_plural)s to marketplaces' feeds" msgstr "" "Xuất khẩu sản phẩm đã chọn %(verbose_name_plural)s sang các kênh phân phối " "của các sàn thương mại điện tử." -#: engine/core/admin.py:542 +#: engine/core/admin.py:565 #, python-format msgid "selected %(verbose_name_plural)s have been marked for export." msgstr "" "Các mục đã chọn %(verbose_name_plural)s đã được đánh dấu để xuất khẩu." -#: engine/core/admin.py:553 +#: engine/core/admin.py:576 #, python-format msgid "Ban selected %(verbose_name_plural)s from marketplaces' feeds" msgstr "" "Ban đã chọn %(verbose_name_plural)s từ các nguồn cấp dữ liệu của các sàn " "giao dịch." -#: engine/core/admin.py:564 +#: engine/core/admin.py:587 #, python-format msgid "selected %(verbose_name_plural)s have been banned from export." msgstr "Các sản phẩm %(verbose_name_plural)s đã bị cấm xuất khẩu." -#: engine/core/admin.py:1116 +#: engine/core/admin.py:1030 +msgid "Preview" +msgstr "Xem trước" + +#: engine/core/admin.py:1031 +msgid "Metadata" +msgstr "Siêu dữ liệu" + +#: engine/core/admin.py:1034 +msgid "preview" +msgstr "Xem trước" + +#: engine/core/admin.py:1043 +msgid "image preview" +msgstr "Xem trước hình ảnh" + +#: engine/core/admin.py:1166 msgid "Config" msgstr "Cấu hình" @@ -229,7 +249,7 @@ msgstr "" "nội dung. Ngôn ngữ có thể được chọn bằng cả tiêu đề Accept-Language và tham " "số truy vấn." -#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:36 +#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "Bộ nhớ đệm I/O" @@ -253,7 +273,7 @@ msgstr "Lấy các tham số có thể truy cập của ứng dụng" msgid "send a message to the support team" msgstr "Gửi tin nhắn cho đội ngũ hỗ trợ" -#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:59 msgid "request a CORSed URL" msgstr "Yêu cầu URL CORSed. Chỉ cho phép https." @@ -398,11 +418,11 @@ msgstr "" "Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không" " thể chỉnh sửa." -#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757 -#: engine/core/docs/drf/viewsets.py:1046 -#: engine/core/graphene/object_types.py:119 -#: engine/core/graphene/object_types.py:239 -#: engine/core/graphene/object_types.py:540 +#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:781 +#: engine/core/docs/drf/viewsets.py:1070 +#: engine/core/graphene/object_types.py:123 +#: engine/core/graphene/object_types.py:247 +#: engine/core/graphene/object_types.py:546 msgid "SEO Meta snapshot" msgstr "SEO Meta snapshot" @@ -705,7 +725,7 @@ msgstr "Lấy thông tin chi tiết của một sản phẩm (xem chi tiết)" #: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683 #: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725 -#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763 +#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:787 msgid "Product UUID or slug" msgstr "Mã định danh duy nhất (UUID) hoặc Slug của sản phẩm" @@ -733,301 +753,315 @@ msgstr "Xóa sản phẩm" msgid "lists all permitted feedbacks for a product" msgstr "Danh sách tất cả các phản hồi được phép cho một sản phẩm" -#: engine/core/docs/drf/viewsets.py:758 +#: engine/core/docs/drf/viewsets.py:757 +msgid "retrieve exact products by identifier" +msgstr "Tìm kiếm các sản phẩm chính xác bằng mã định danh." + +#: engine/core/docs/drf/viewsets.py:759 +msgid "" +"retrieve a list of products by identifier type (uuid, slug, or sku). Send a " +"POST request with `identificator_type` and `identificators` (list of " +"values)." +msgstr "" +"Lấy danh sách sản phẩm theo loại định danh (uuid, slug hoặc sku). Gửi yêu " +"cầu POST với `identificator_type` và `identificators` (danh sách các giá " +"trị)." + +#: engine/core/docs/drf/viewsets.py:782 msgid "returns a snapshot of the product's SEO meta data" msgstr "Trả về bản sao lưu dữ liệu meta SEO của sản phẩm." -#: engine/core/docs/drf/viewsets.py:779 +#: engine/core/docs/drf/viewsets.py:803 msgid "list all addresses" msgstr "Danh sách tất cả các địa chỉ" -#: engine/core/docs/drf/viewsets.py:789 +#: engine/core/docs/drf/viewsets.py:813 msgid "retrieve a single address" msgstr "Lấy một địa chỉ duy nhất" -#: engine/core/docs/drf/viewsets.py:799 +#: engine/core/docs/drf/viewsets.py:823 msgid "create a new address" msgstr "Tạo một địa chỉ mới" -#: engine/core/docs/drf/viewsets.py:810 +#: engine/core/docs/drf/viewsets.py:834 msgid "delete an address" msgstr "Xóa địa chỉ" -#: engine/core/docs/drf/viewsets.py:820 +#: engine/core/docs/drf/viewsets.py:844 msgid "update an entire address" msgstr "Cập nhật toàn bộ địa chỉ" -#: engine/core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:855 msgid "partially update an address" msgstr "Cập nhật một phần địa chỉ" -#: engine/core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:866 msgid "autocomplete address suggestions" msgstr "Tự động hoàn thành địa chỉ nhập liệu" -#: engine/core/docs/drf/viewsets.py:848 +#: engine/core/docs/drf/viewsets.py:872 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" "Dãy truy vấn dữ liệu thô, vui lòng bổ sung dữ liệu từ điểm cuối geo-IP." -#: engine/core/docs/drf/viewsets.py:855 +#: engine/core/docs/drf/viewsets.py:879 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "Giới hạn số lượng kết quả, 1 < giới hạn < 10, mặc định: 5" -#: engine/core/docs/drf/viewsets.py:871 +#: engine/core/docs/drf/viewsets.py:895 msgid "list all feedbacks (simple view)" msgstr "Danh sách tất cả phản hồi (chế độ xem đơn giản)" -#: engine/core/docs/drf/viewsets.py:881 +#: engine/core/docs/drf/viewsets.py:905 msgid "retrieve a single feedback (detailed view)" msgstr "Lấy một phản hồi duy nhất (chế độ xem chi tiết)" -#: engine/core/docs/drf/viewsets.py:888 +#: engine/core/docs/drf/viewsets.py:912 msgid "create a feedback" msgstr "Tạo phản hồi" -#: engine/core/docs/drf/viewsets.py:895 +#: engine/core/docs/drf/viewsets.py:919 msgid "delete a feedback" msgstr "Xóa phản hồi" -#: engine/core/docs/drf/viewsets.py:902 +#: engine/core/docs/drf/viewsets.py:926 msgid "rewrite an existing feedback saving non-editables" msgstr "Viết lại phản hồi hiện có để lưu các trường không thể chỉnh sửa." -#: engine/core/docs/drf/viewsets.py:909 +#: engine/core/docs/drf/viewsets.py:933 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" "Cập nhật một số trường của một phản hồi hiện có, giữ nguyên các trường không" " thể chỉnh sửa." -#: engine/core/docs/drf/viewsets.py:919 +#: engine/core/docs/drf/viewsets.py:943 msgid "list all order–product relations (simple view)" msgstr "" "Danh sách tất cả các mối quan hệ giữa đơn hàng và sản phẩm (cách xem đơn " "giản)" -#: engine/core/docs/drf/viewsets.py:929 +#: engine/core/docs/drf/viewsets.py:953 msgid "retrieve a single order–product relation (detailed view)" msgstr "" "Lấy thông tin về mối quan hệ giữa đơn hàng và sản phẩm (chế độ xem chi tiết)" -#: engine/core/docs/drf/viewsets.py:939 +#: engine/core/docs/drf/viewsets.py:963 msgid "create a new order–product relation" msgstr "Tạo mối quan hệ mới giữa đơn hàng và sản phẩm" -#: engine/core/docs/drf/viewsets.py:949 +#: engine/core/docs/drf/viewsets.py:973 msgid "replace an existing order–product relation" msgstr "Thay thế mối quan hệ giữa đơn hàng và sản phẩm hiện có" -#: engine/core/docs/drf/viewsets.py:959 +#: engine/core/docs/drf/viewsets.py:983 msgid "partially update an existing order–product relation" msgstr "Cập nhật một phần mối quan hệ giữa đơn hàng và sản phẩm hiện có" -#: engine/core/docs/drf/viewsets.py:969 +#: engine/core/docs/drf/viewsets.py:993 msgid "delete an order–product relation" msgstr "Xóa mối quan hệ giữa đơn hàng và sản phẩm" -#: engine/core/docs/drf/viewsets.py:979 +#: engine/core/docs/drf/viewsets.py:1003 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" -#: engine/core/docs/drf/viewsets.py:996 +#: engine/core/docs/drf/viewsets.py:1020 msgid "list all brands (simple view)" msgstr "Danh sách tất cả các thương hiệu (chế độ xem đơn giản)" -#: engine/core/docs/drf/viewsets.py:1003 +#: engine/core/docs/drf/viewsets.py:1027 msgid "retrieve a single brand (detailed view)" msgstr "" "Trích xuất thông tin chi tiết về một thương hiệu duy nhất (chế độ xem chi " "tiết)" -#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051 +#: engine/core/docs/drf/viewsets.py:1032 engine/core/docs/drf/viewsets.py:1075 msgid "Brand UUID or slug" msgstr "Mã định danh thương hiệu (UUID) hoặc tên gọi tắt" -#: engine/core/docs/drf/viewsets.py:1018 +#: engine/core/docs/drf/viewsets.py:1042 msgid "create a brand" msgstr "Xây dựng thương hiệu" -#: engine/core/docs/drf/viewsets.py:1025 +#: engine/core/docs/drf/viewsets.py:1049 msgid "delete a brand" msgstr "Xóa thương hiệu" -#: engine/core/docs/drf/viewsets.py:1032 +#: engine/core/docs/drf/viewsets.py:1056 msgid "rewrite an existing brand saving non-editables" msgstr "" "Viết lại một danh mục hiện có mà không thay đổi các trường không thể chỉnh " "sửa." -#: engine/core/docs/drf/viewsets.py:1039 +#: engine/core/docs/drf/viewsets.py:1063 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "" "Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không" " thể chỉnh sửa." -#: engine/core/docs/drf/viewsets.py:1064 +#: engine/core/docs/drf/viewsets.py:1088 msgid "list all vendors (simple view)" msgstr "Danh sách tất cả nhà cung cấp (chế độ xem đơn giản)" -#: engine/core/docs/drf/viewsets.py:1074 +#: engine/core/docs/drf/viewsets.py:1098 msgid "retrieve a single vendor (detailed view)" msgstr "Tra cứu thông tin chi tiết về một nhà cung cấp duy nhất" -#: engine/core/docs/drf/viewsets.py:1081 +#: engine/core/docs/drf/viewsets.py:1105 msgid "create a vendor" msgstr "Tạo nhà cung cấp" -#: engine/core/docs/drf/viewsets.py:1088 +#: engine/core/docs/drf/viewsets.py:1112 msgid "delete a vendor" msgstr "Xóa nhà cung cấp" -#: engine/core/docs/drf/viewsets.py:1095 +#: engine/core/docs/drf/viewsets.py:1119 msgid "rewrite an existing vendor saving non-editables" msgstr "" "Viết lại một danh mục hiện có mà không thay đổi các trường không thể chỉnh " "sửa." -#: engine/core/docs/drf/viewsets.py:1102 +#: engine/core/docs/drf/viewsets.py:1126 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "" "Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không" " thể chỉnh sửa." -#: engine/core/docs/drf/viewsets.py:1112 +#: engine/core/docs/drf/viewsets.py:1136 msgid "list all product images (simple view)" msgstr "Danh sách tất cả hình ảnh sản phẩm (chế độ xem đơn giản)" -#: engine/core/docs/drf/viewsets.py:1122 +#: engine/core/docs/drf/viewsets.py:1146 msgid "retrieve a single product image (detailed view)" msgstr "Lấy một hình ảnh sản phẩm (chế độ xem chi tiết)" -#: engine/core/docs/drf/viewsets.py:1129 +#: engine/core/docs/drf/viewsets.py:1153 msgid "create a product image" msgstr "Tạo hình ảnh sản phẩm" -#: engine/core/docs/drf/viewsets.py:1139 +#: engine/core/docs/drf/viewsets.py:1163 msgid "delete a product image" msgstr "Xóa hình ảnh sản phẩm" -#: engine/core/docs/drf/viewsets.py:1146 +#: engine/core/docs/drf/viewsets.py:1170 msgid "rewrite an existing product image saving non-editables" msgstr "" "Viết lại một danh mục hiện có mà không thay đổi các trường không thể chỉnh " "sửa." -#: engine/core/docs/drf/viewsets.py:1154 +#: engine/core/docs/drf/viewsets.py:1178 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "" "Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không" " thể chỉnh sửa." -#: engine/core/docs/drf/viewsets.py:1165 +#: engine/core/docs/drf/viewsets.py:1189 msgid "list all promo codes (simple view)" msgstr "Danh sách tất cả mã khuyến mãi (chế độ xem đơn giản)" -#: engine/core/docs/drf/viewsets.py:1175 +#: engine/core/docs/drf/viewsets.py:1199 msgid "retrieve a single promo code (detailed view)" msgstr "Lấy một mã khuyến mãi duy nhất (xem chi tiết)" -#: engine/core/docs/drf/viewsets.py:1182 +#: engine/core/docs/drf/viewsets.py:1206 msgid "create a promo code" msgstr "Tạo mã khuyến mãi" -#: engine/core/docs/drf/viewsets.py:1189 +#: engine/core/docs/drf/viewsets.py:1213 msgid "delete a promo code" msgstr "Xóa mã khuyến mãi" -#: engine/core/docs/drf/viewsets.py:1196 +#: engine/core/docs/drf/viewsets.py:1220 msgid "rewrite an existing promo code saving non-editables" msgstr "" "Viết lại một danh mục hiện có mà không thay đổi các trường không thể chỉnh " "sửa." -#: engine/core/docs/drf/viewsets.py:1203 +#: engine/core/docs/drf/viewsets.py:1227 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "" "Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không" " thể chỉnh sửa." -#: engine/core/docs/drf/viewsets.py:1213 +#: engine/core/docs/drf/viewsets.py:1237 msgid "list all promotions (simple view)" msgstr "Danh sách tất cả các chương trình khuyến mãi (chế độ xem đơn giản)" -#: engine/core/docs/drf/viewsets.py:1223 +#: engine/core/docs/drf/viewsets.py:1247 msgid "retrieve a single promotion (detailed view)" msgstr "Tra cứu một chương trình khuyến mãi (xem chi tiết)" -#: engine/core/docs/drf/viewsets.py:1230 +#: engine/core/docs/drf/viewsets.py:1254 msgid "create a promotion" msgstr "Tạo chương trình khuyến mãi" -#: engine/core/docs/drf/viewsets.py:1237 +#: engine/core/docs/drf/viewsets.py:1261 msgid "delete a promotion" msgstr "Xóa một chương trình khuyến mãi" -#: engine/core/docs/drf/viewsets.py:1244 +#: engine/core/docs/drf/viewsets.py:1268 msgid "rewrite an existing promotion saving non-editables" msgstr "" "Viết lại một danh mục hiện có mà không thay đổi các trường không thể chỉnh " "sửa." -#: engine/core/docs/drf/viewsets.py:1251 +#: engine/core/docs/drf/viewsets.py:1275 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "" "Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không" " thể chỉnh sửa." -#: engine/core/docs/drf/viewsets.py:1261 +#: engine/core/docs/drf/viewsets.py:1285 msgid "list all stocks (simple view)" msgstr "Danh sách tất cả các cổ phiếu (chế độ xem đơn giản)" -#: engine/core/docs/drf/viewsets.py:1268 +#: engine/core/docs/drf/viewsets.py:1292 msgid "retrieve a single stock (detailed view)" msgstr "Tra cứu một cổ phiếu (chế độ xem chi tiết)" -#: engine/core/docs/drf/viewsets.py:1275 +#: engine/core/docs/drf/viewsets.py:1299 msgid "create a stock record" msgstr "Tạo hồ sơ kho hàng" -#: engine/core/docs/drf/viewsets.py:1282 +#: engine/core/docs/drf/viewsets.py:1306 msgid "delete a stock record" msgstr "Xóa một bản ghi kho" -#: engine/core/docs/drf/viewsets.py:1289 +#: engine/core/docs/drf/viewsets.py:1313 msgid "rewrite an existing stock record saving non-editables" msgstr "" "Viết lại một danh mục hiện có mà không thay đổi các trường không thể chỉnh " "sửa." -#: engine/core/docs/drf/viewsets.py:1297 +#: engine/core/docs/drf/viewsets.py:1321 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "" "Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không" " thể chỉnh sửa." -#: engine/core/docs/drf/viewsets.py:1308 +#: engine/core/docs/drf/viewsets.py:1332 msgid "list all product tags (simple view)" msgstr "Danh sách tất cả thẻ sản phẩm (chế độ xem đơn giản)" -#: engine/core/docs/drf/viewsets.py:1318 +#: engine/core/docs/drf/viewsets.py:1342 msgid "retrieve a single product tag (detailed view)" msgstr "Lấy thông tin thẻ sản phẩm đơn lẻ (chế độ xem chi tiết)" -#: engine/core/docs/drf/viewsets.py:1325 +#: engine/core/docs/drf/viewsets.py:1349 msgid "create a product tag" msgstr "Tạo thẻ sản phẩm" -#: engine/core/docs/drf/viewsets.py:1335 +#: engine/core/docs/drf/viewsets.py:1359 msgid "delete a product tag" msgstr "Xóa thẻ sản phẩm" -#: engine/core/docs/drf/viewsets.py:1342 +#: engine/core/docs/drf/viewsets.py:1366 msgid "rewrite an existing product tag saving non-editables" msgstr "" "Viết lại một danh mục hiện có mà không thay đổi các trường không thể chỉnh " "sửa." -#: engine/core/docs/drf/viewsets.py:1350 +#: engine/core/docs/drf/viewsets.py:1374 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "" "Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không" @@ -1038,237 +1072,235 @@ msgstr "" msgid "no search term provided." msgstr "Không có từ khóa tìm kiếm được cung cấp." -#: engine/core/filters.py:78 engine/core/filters.py:484 -#: engine/core/filters.py:625 +#: engine/core/filters.py:79 engine/core/filters.py:485 +#: engine/core/filters.py:626 msgid "Search" msgstr "Tìm kiếm" -#: engine/core/filters.py:79 engine/core/filters.py:663 -#: engine/core/filters.py:692 +#: engine/core/filters.py:80 engine/core/filters.py:664 +#: engine/core/filters.py:693 msgid "UUID" msgstr "UUID" -#: engine/core/filters.py:80 engine/core/filters.py:487 -#: engine/core/filters.py:627 +#: engine/core/filters.py:81 engine/core/filters.py:488 +#: engine/core/filters.py:628 msgid "Name" msgstr "Tên" -#: engine/core/filters.py:82 engine/core/filters.py:630 +#: engine/core/filters.py:83 engine/core/filters.py:631 msgid "Categories" msgstr "Các danh mục" -#: engine/core/filters.py:86 +#: engine/core/filters.py:87 msgid "Categories Slugs" msgstr "Thể loại Tiêu đề" -#: engine/core/filters.py:88 engine/core/filters.py:495 +#: engine/core/filters.py:89 engine/core/filters.py:496 +#: engine/core/templates/admin_doc/index.html:37 +#: engine/core/templates/admin_doc/template_tag_index.html:12 msgid "Tags" msgstr "Thẻ" -#: engine/core/filters.py:90 +#: engine/core/filters.py:91 msgid "Min Price" msgstr "Giá tối thiểu" -#: engine/core/filters.py:93 +#: engine/core/filters.py:94 msgid "Max Price" msgstr "Giá tối đa" -#: engine/core/filters.py:95 +#: engine/core/filters.py:96 msgid "Is Active" msgstr "Đang hoạt động" -#: engine/core/filters.py:96 +#: engine/core/filters.py:97 msgid "Brand" msgstr "Thương hiệu" -#: engine/core/filters.py:97 +#: engine/core/filters.py:98 msgid "Attributes" msgstr "Thuộc tính" -#: engine/core/filters.py:99 +#: engine/core/filters.py:100 msgid "Quantity" msgstr "Số lượng" -#: engine/core/filters.py:101 engine/core/filters.py:489 -#: engine/core/filters.py:628 engine/core/models.py:316 -#: engine/core/models.py:497 engine/core/models.py:663 +#: engine/core/filters.py:102 engine/core/filters.py:490 +#: engine/core/filters.py:629 engine/core/models.py:339 +#: engine/core/models.py:546 engine/core/models.py:736 msgid "Slug" msgstr "Sên" -#: engine/core/filters.py:102 +#: engine/core/filters.py:103 msgid "Is Digital" msgstr "Is Digital" -#: engine/core/filters.py:104 +#: engine/core/filters.py:105 msgid "Include sub-categories" msgstr "Bao gồm các danh mục con" -#: engine/core/filters.py:108 +#: engine/core/filters.py:109 msgid "Include personal ordered" msgstr "Gồm các sản phẩm đặt hàng cá nhân" -#: engine/core/filters.py:110 engine/core/models.py:667 +#: engine/core/filters.py:111 engine/core/models.py:740 msgid "SKU" msgstr "Mã sản phẩm" -#: engine/core/filters.py:212 +#: engine/core/filters.py:213 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." -#: engine/core/filters.py:398 +#: engine/core/filters.py:399 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)" -#: engine/core/filters.py:402 +#: engine/core/filters.py:403 msgid "Bought after (inclusive)" msgstr "Được mua sau (bao gồm)" -#: engine/core/filters.py:405 +#: engine/core/filters.py:406 msgid "Bought before (inclusive)" msgstr "Đã mua trước đó (bao gồm)" -#: engine/core/filters.py:410 engine/core/filters.py:461 -#: engine/core/filters.py:697 +#: engine/core/filters.py:411 engine/core/filters.py:462 +#: engine/core/filters.py:698 msgid "User email" msgstr "Địa chỉ email của người dùng" -#: engine/core/filters.py:413 engine/core/filters.py:464 -#: engine/core/filters.py:672 engine/core/filters.py:694 +#: engine/core/filters.py:414 engine/core/filters.py:465 +#: engine/core/filters.py:673 engine/core/filters.py:695 msgid "User UUID" msgstr "UUID người dùng" -#: engine/core/filters.py:415 +#: engine/core/filters.py:416 msgid "Status" msgstr "Trạng thái" -#: engine/core/filters.py:419 +#: engine/core/filters.py:420 msgid "Human Readable ID" msgstr "Mã định danh dễ đọc cho con người" -#: engine/core/filters.py:488 +#: engine/core/filters.py:489 msgid "Parent" msgstr "Cha mẹ" -#: engine/core/filters.py:492 +#: engine/core/filters.py:493 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)" -#: engine/core/filters.py:496 +#: engine/core/filters.py:497 msgid "Level" msgstr "Cấp độ" -#: engine/core/filters.py:667 +#: engine/core/filters.py:668 msgid "Product UUID" msgstr "Mã định danh duy nhất của sản phẩm (UUID)" -#: engine/core/graphene/mutations.py:40 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Khóa để tìm kiếm trong hoặc đặt vào bộ nhớ đệm" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:43 msgid "data to store in cache" msgstr "Dữ liệu cần lưu trữ trong bộ nhớ cache" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:46 msgid "timeout in seconds to set the data for into the cache" msgstr "Thời gian chờ (timeout) tính bằng giây để lưu dữ liệu vào bộ nhớ đệm." -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:49 msgid "cached data" msgstr "Dữ liệu được lưu trữ trong bộ nhớ đệm" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:64 msgid "camelized JSON data from the requested URL" msgstr "" "Dữ liệu JSON đã được chuyển đổi sang định dạng JSON từ URL được yêu cầu." -#: engine/core/graphene/mutations.py:68 engine/core/views.py:248 +#: engine/core/graphene/mutations.py:69 engine/core/views.py:267 msgid "only URLs starting with http(s):// are allowed" msgstr "Chỉ các URL bắt đầu bằng http(s):// mới được phép." -#: engine/core/graphene/mutations.py:86 +#: engine/core/graphene/mutations.py:87 msgid "add a product to the order" msgstr "Thêm sản phẩm vào đơn hàng" -#: engine/core/graphene/mutations.py:109 engine/core/graphene/mutations.py:138 -#: engine/core/graphene/mutations.py:254 engine/core/graphene/mutations.py:306 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139 +#: engine/core/graphene/mutations.py:256 engine/core/graphene/mutations.py:308 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Lệnh {order_uuid} không tìm thấy!" -#: engine/core/graphene/mutations.py:115 engine/core/graphene/mutations.py:166 +#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167 msgid "remove a product from the order" msgstr "Xóa sản phẩm khỏi đơn hàng" -#: engine/core/graphene/mutations.py:144 +#: engine/core/graphene/mutations.py:145 msgid "remove all products from the order" msgstr "Xóa tất cả sản phẩm khỏi đơn hàng." -#: engine/core/graphene/mutations.py:189 +#: engine/core/graphene/mutations.py:190 msgid "buy an order" msgstr "Đặt hàng" -#: engine/core/graphene/mutations.py:220 engine/core/graphene/mutations.py:282 +#: engine/core/graphene/mutations.py:222 engine/core/graphene/mutations.py:284 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" "Vui lòng cung cấp một trong hai trường order_uuid hoặc order_hr_id - hai " "trường này là tương hỗ!" -#: engine/core/graphene/mutations.py:249 engine/core/graphene/mutations.py:524 -#: engine/core/graphene/mutations.py:573 engine/core/viewsets.py:753 +#: engine/core/graphene/mutations.py:251 engine/core/graphene/mutations.py:526 +#: engine/core/graphene/mutations.py:576 engine/core/viewsets.py:783 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}" -#: engine/core/graphene/mutations.py:260 +#: engine/core/graphene/mutations.py:262 msgid "perform an action on a list of products in the order" msgstr "Thực hiện một hành động trên danh sách sản phẩm theo thứ tự." -#: engine/core/graphene/mutations.py:265 +#: engine/core/graphene/mutations.py:267 msgid "remove/add" msgstr "Xóa/Thêm" -#: engine/core/graphene/mutations.py:301 engine/core/graphene/mutations.py:342 +#: engine/core/graphene/mutations.py:303 engine/core/graphene/mutations.py:342 msgid "action must be either add or remove" msgstr "Hành động phải là \"thêm\" hoặc \"xóa\"!" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:314 msgid "perform an action on a list of products in the wishlist" msgstr "" "Thực hiện một hành động trên danh sách sản phẩm trong danh sách mong muốn." -#: engine/core/graphene/mutations.py:330 -msgid "please provide wishlist_uuid value" -msgstr "Vui lòng cung cấp giá trị `wishlist_uuid`." - -#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:423 -#: engine/core/graphene/mutations.py:451 engine/core/graphene/mutations.py:479 -#: engine/core/graphene/mutations.py:529 +#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:424 +#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480 +#: engine/core/graphene/mutations.py:531 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Danh sách mong muốn {wishlist_uuid} không tìm thấy!" -#: engine/core/graphene/mutations.py:401 +#: engine/core/graphene/mutations.py:402 msgid "add a product to the wishlist" msgstr "Thêm sản phẩm vào đơn hàng" -#: engine/core/graphene/mutations.py:429 +#: engine/core/graphene/mutations.py:430 msgid "remove a product from the wishlist" msgstr "Xóa sản phẩm khỏi đơn hàng" -#: engine/core/graphene/mutations.py:457 +#: engine/core/graphene/mutations.py:458 msgid "remove all products from the wishlist" msgstr "Xóa sản phẩm khỏi đơn hàng" -#: engine/core/graphene/mutations.py:485 +#: engine/core/graphene/mutations.py:486 msgid "buy all products from the wishlist" msgstr "Xóa sản phẩm khỏi đơn hàng" -#: engine/core/graphene/mutations.py:535 +#: engine/core/graphene/mutations.py:537 msgid "buy a product" msgstr "Đặt hàng" -#: engine/core/graphene/mutations.py:542 +#: engine/core/graphene/mutations.py:544 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" @@ -1276,141 +1308,145 @@ msgstr "" "Vui lòng gửi các thuộc tính dưới dạng chuỗi được định dạng như sau: " "attr1=value1,attr2=value2" -#: engine/core/graphene/mutations.py:580 +#: engine/core/graphene/mutations.py:583 msgid "add or delete a feedback for orderproduct" msgstr "Thêm hoặc xóa phản hồi cho sản phẩm đặt hàng" -#: engine/core/graphene/mutations.py:606 +#: engine/core/graphene/mutations.py:610 msgid "action must be either `add` or `remove`" msgstr "Hành động phải là `thêm` hoặc `xóa`!" -#: engine/core/graphene/mutations.py:609 +#: engine/core/graphene/mutations.py:613 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Sản phẩm {order_product_uuid} không tìm thấy!" -#: engine/core/graphene/mutations.py:616 +#: engine/core/graphene/mutations.py:620 msgid "original address string provided by the user" msgstr "Dòng địa chỉ gốc do người dùng cung cấp" -#: engine/core/graphene/mutations.py:653 engine/core/models.py:986 -#: engine/core/models.py:999 engine/core/models.py:1443 -#: engine/core/models.py:1474 engine/core/models.py:1505 -#: engine/core/viewsets.py:760 +#: engine/core/graphene/mutations.py:662 engine/core/models.py:1079 +#: engine/core/models.py:1092 engine/core/models.py:1544 +#: engine/core/models.py:1575 engine/core/models.py:1606 +#: engine/core/viewsets.py:790 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} không tồn tại: {uuid}!" -#: engine/core/graphene/mutations.py:667 +#: engine/core/graphene/mutations.py:676 msgid "limit must be between 1 and 10" msgstr "Giới hạn phải nằm trong khoảng từ 1 đến 10." -#: engine/core/graphene/mutations.py:716 +#: engine/core/graphene/mutations.py:726 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - hoạt động rất tốt." -#: engine/core/graphene/object_types.py:84 -#: engine/core/graphene/object_types.py:420 -#: engine/core/graphene/object_types.py:471 engine/core/models.py:803 -#: engine/core/models.py:1297 engine/core/models.py:2033 +#: engine/core/graphene/object_types.py:88 +#: engine/core/graphene/object_types.py:425 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:889 +#: engine/core/models.py:1394 engine/core/models.py:2139 msgid "attributes" msgstr "Thuộc tính" -#: engine/core/graphene/object_types.py:97 +#: engine/core/graphene/object_types.py:101 msgid "grouped attributes" msgstr "Các thuộc tính được nhóm lại" -#: engine/core/graphene/object_types.py:104 +#: engine/core/graphene/object_types.py:108 msgid "groups of attributes" msgstr "Nhóm thuộc tính" -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:217 -#: engine/core/graphene/object_types.py:255 engine/core/models.py:440 +#: engine/core/graphene/object_types.py:122 +#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:264 engine/core/models.py:489 msgid "categories" msgstr "Các danh mục" -#: engine/core/graphene/object_types.py:134 engine/core/models.py:511 +#: engine/core/graphene/object_types.py:138 engine/core/models.py:564 msgid "brands" msgstr "Thương hiệu" -#: engine/core/graphene/object_types.py:219 +#: engine/core/graphene/object_types.py:226 msgid "category image url" msgstr "Các danh mục" -#: engine/core/graphene/object_types.py:220 -#: engine/core/graphene/object_types.py:365 engine/core/models.py:278 +#: engine/core/graphene/object_types.py:227 +#: engine/core/graphene/object_types.py:369 engine/core/models.py:301 msgid "markup percentage" msgstr "Tỷ lệ phần trăm đánh dấu" -#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:231 msgid "which attributes and values can be used for filtering this category." msgstr "" "Các thuộc tính và giá trị nào có thể được sử dụng để lọc danh mục này." -#: engine/core/graphene/object_types.py:230 +#: engine/core/graphene/object_types.py:237 msgid "" "minimum and maximum prices for products in this category, if available." msgstr "" "Giá tối thiểu và tối đa cho các sản phẩm trong danh mục này, nếu có sẵn." -#: engine/core/graphene/object_types.py:234 +#: engine/core/graphene/object_types.py:240 +msgid "brands in this category" +msgstr "Các thương hiệu trong danh mục này" + +#: engine/core/graphene/object_types.py:242 msgid "tags for this category" msgstr "Thẻ cho danh mục này" -#: engine/core/graphene/object_types.py:237 +#: engine/core/graphene/object_types.py:245 msgid "products in this category" msgstr "Sản phẩm trong danh mục này" -#: engine/core/graphene/object_types.py:372 engine/core/models.py:183 +#: engine/core/graphene/object_types.py:376 engine/core/models.py:202 msgid "vendors" msgstr "Nhà cung cấp" -#: engine/core/graphene/object_types.py:376 +#: engine/core/graphene/object_types.py:380 msgid "Latitude (Y coordinate)" msgstr "Vĩ độ (tọa độ Y)" -#: engine/core/graphene/object_types.py:377 +#: engine/core/graphene/object_types.py:381 msgid "Longitude (X coordinate)" msgstr "Kinh độ (tọa độ X)" -#: engine/core/graphene/object_types.py:406 +#: engine/core/graphene/object_types.py:411 msgid "comment" msgstr "Làm thế nào" -#: engine/core/graphene/object_types.py:408 -#: engine/core/graphene/object_types.py:542 +#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:548 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "" "Giá trị đánh giá từ 1 đến 10, bao gồm cả 1 và 10, hoặc 0 nếu không được " "thiết lập." -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:421 msgid "represents feedback from a user." msgstr "Đại diện cho phản hồi từ người dùng." -#: engine/core/graphene/object_types.py:421 -#: engine/core/graphene/object_types.py:472 engine/core/models.py:1291 +#: engine/core/graphene/object_types.py:426 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:1388 msgid "notifications" msgstr "Thông báo" -#: engine/core/graphene/object_types.py:423 +#: engine/core/graphene/object_types.py:428 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ó)." -#: engine/core/graphene/object_types.py:425 engine/core/models.py:1856 +#: engine/core/graphene/object_types.py:430 engine/core/models.py:1959 msgid "feedback" msgstr "Phản hồi" -#: engine/core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:464 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" -#: engine/core/graphene/object_types.py:461 engine/core/models.py:1261 +#: engine/core/graphene/object_types.py:466 engine/core/models.py:1358 msgid "billing address" msgstr "Địa chỉ thanh toán" -#: engine/core/graphene/object_types.py:465 +#: engine/core/graphene/object_types.py:470 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1418,54 +1454,58 @@ msgstr "" "Địa chỉ giao hàng cho đơn hàng này, để trống nếu trùng với địa chỉ thanh " "toán hoặc nếu không áp dụng." -#: engine/core/graphene/object_types.py:468 +#: engine/core/graphene/object_types.py:473 msgid "total price of this order" msgstr "Tổng giá trị của đơn hàng này" -#: engine/core/graphene/object_types.py:469 +#: engine/core/graphene/object_types.py:474 msgid "total quantity of products in order" msgstr "Tổng số lượng sản phẩm trong đơn hàng" -#: engine/core/graphene/object_types.py:470 +#: engine/core/graphene/object_types.py:475 msgid "are all products in the order digital" msgstr "" "Tất cả các sản phẩm trong đơn hàng có phải là sản phẩm kỹ thuật số không?" -#: engine/core/graphene/object_types.py:474 +#: engine/core/graphene/object_types.py:479 msgid "transactions for this order" msgstr "Giao dịch cho đơn hàng này" -#: engine/core/graphene/object_types.py:494 engine/core/models.py:1325 +#: engine/core/graphene/object_types.py:499 engine/core/models.py:1422 msgid "orders" msgstr "Đơn hàng" -#: engine/core/graphene/object_types.py:515 +#: engine/core/graphene/object_types.py:520 msgid "image url" msgstr "URL hình ảnh" -#: engine/core/graphene/object_types.py:522 +#: engine/core/graphene/object_types.py:527 msgid "product's images" msgstr "Hình ảnh sản phẩm" -#: engine/core/graphene/object_types.py:529 engine/core/models.py:439 -#: engine/core/models.py:596 +#: engine/core/graphene/object_types.py:534 engine/core/models.py:488 +#: engine/core/models.py:661 msgid "category" msgstr "Thể loại" -#: engine/core/graphene/object_types.py:531 engine/core/models.py:1857 +#: engine/core/graphene/object_types.py:536 engine/core/models.py:1960 msgid "feedbacks" msgstr "Phản hồi" -#: engine/core/graphene/object_types.py:532 engine/core/models.py:510 -#: engine/core/models.py:605 +#: engine/core/graphene/object_types.py:537 engine/core/models.py:563 +#: engine/core/models.py:670 msgid "brand" msgstr "Thương hiệu" -#: engine/core/graphene/object_types.py:534 engine/core/models.py:103 +#: engine/core/graphene/object_types.py:538 +msgid "video url" +msgstr "URL video" + +#: engine/core/graphene/object_types.py:540 engine/core/models.py:122 msgid "attribute groups" msgstr "Nhóm thuộc tính" -#: engine/core/graphene/object_types.py:536 +#: engine/core/graphene/object_types.py:542 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1473,7 +1513,7 @@ msgstr "Nhóm thuộc tính" msgid "price" msgstr "Giá" -#: engine/core/graphene/object_types.py:537 +#: engine/core/graphene/object_types.py:543 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1481,39 +1521,39 @@ msgstr "Giá" msgid "quantity" msgstr "Số lượng" -#: engine/core/graphene/object_types.py:538 +#: engine/core/graphene/object_types.py:544 msgid "number of feedbacks" msgstr "Số lượng phản hồi" -#: engine/core/graphene/object_types.py:539 +#: engine/core/graphene/object_types.py:545 msgid "only available for personal orders" msgstr "Sản phẩm chỉ dành cho đơn đặt hàng cá nhân." -#: engine/core/graphene/object_types.py:544 +#: engine/core/graphene/object_types.py:550 msgid "discount price" msgstr "Giá khuyến mãi" -#: engine/core/graphene/object_types.py:568 engine/core/models.py:682 +#: engine/core/graphene/object_types.py:575 engine/core/models.py:755 msgid "products" msgstr "Sản phẩm" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:691 msgid "promocodes" msgstr "Mã khuyến mãi" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:706 msgid "products on sale" msgstr "Sản phẩm đang khuyến mãi" -#: engine/core/graphene/object_types.py:701 engine/core/models.py:935 +#: engine/core/graphene/object_types.py:720 engine/core/models.py:1028 msgid "promotions" msgstr "Khuyến mãi" -#: engine/core/graphene/object_types.py:705 engine/core/models.py:182 +#: engine/core/graphene/object_types.py:727 engine/core/models.py:201 msgid "vendor" msgstr "Nhà cung cấp" -#: engine/core/graphene/object_types.py:706 engine/core/models.py:681 +#: engine/core/graphene/object_types.py:728 engine/core/models.py:754 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1521,103 +1561,103 @@ msgstr "Nhà cung cấp" msgid "product" msgstr "Sản phẩm" -#: engine/core/graphene/object_types.py:718 engine/core/models.py:958 +#: engine/core/graphene/object_types.py:740 engine/core/models.py:1051 msgid "wishlisted products" msgstr "Sản phẩm đã thêm vào danh sách mong muốn" -#: engine/core/graphene/object_types.py:725 engine/core/models.py:975 +#: engine/core/graphene/object_types.py:747 engine/core/models.py:1068 msgid "wishlists" msgstr "Danh sách mong muốn" -#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:752 msgid "tagged products" msgstr "Sản phẩm được gắn thẻ" -#: engine/core/graphene/object_types.py:738 engine/core/models.py:219 -#: engine/core/models.py:611 +#: engine/core/graphene/object_types.py:760 engine/core/models.py:238 +#: engine/core/models.py:676 msgid "product tags" msgstr "Thẻ sản phẩm" -#: engine/core/graphene/object_types.py:743 +#: engine/core/graphene/object_types.py:765 msgid "tagged categories" msgstr "Các danh mục được gắn thẻ" -#: engine/core/graphene/object_types.py:751 +#: engine/core/graphene/object_types.py:773 msgid "categories tags" msgstr "Thẻ của các danh mục" -#: engine/core/graphene/object_types.py:755 +#: engine/core/graphene/object_types.py:777 msgid "project name" msgstr "Tên dự án" -#: engine/core/graphene/object_types.py:756 +#: engine/core/graphene/object_types.py:778 msgid "company name" msgstr "Tên công ty" -#: engine/core/graphene/object_types.py:757 +#: engine/core/graphene/object_types.py:779 msgid "company address" msgstr "Địa chỉ công ty" -#: engine/core/graphene/object_types.py:758 +#: engine/core/graphene/object_types.py:780 msgid "company phone number" msgstr "Số điện thoại của công ty" -#: engine/core/graphene/object_types.py:761 +#: engine/core/graphene/object_types.py:783 msgid "email from, sometimes it must be used instead of host user value" msgstr "" "'email from', đôi khi phải sử dụng thay cho giá trị người dùng máy chủ." -#: engine/core/graphene/object_types.py:764 +#: engine/core/graphene/object_types.py:786 msgid "email host user" msgstr "Người dùng máy chủ email" -#: engine/core/graphene/object_types.py:765 +#: engine/core/graphene/object_types.py:787 msgid "maximum amount for payment" msgstr "Số tiền tối đa cho thanh toán" -#: engine/core/graphene/object_types.py:766 +#: engine/core/graphene/object_types.py:788 msgid "minimum amount for payment" msgstr "Số tiền tối thiểu để thanh toán" -#: engine/core/graphene/object_types.py:767 +#: engine/core/graphene/object_types.py:789 msgid "analytics data" msgstr "Dữ liệu phân tích" -#: engine/core/graphene/object_types.py:768 +#: engine/core/graphene/object_types.py:790 msgid "advertisement data" msgstr "Dữ liệu quảng cáo" -#: engine/core/graphene/object_types.py:771 +#: engine/core/graphene/object_types.py:793 msgid "company configuration" msgstr "Cấu hình" -#: engine/core/graphene/object_types.py:775 +#: engine/core/graphene/object_types.py:797 msgid "language code" msgstr "Mã ngôn ngữ" -#: engine/core/graphene/object_types.py:776 +#: engine/core/graphene/object_types.py:798 msgid "language name" msgstr "Tên ngôn ngữ" -#: engine/core/graphene/object_types.py:777 +#: engine/core/graphene/object_types.py:799 msgid "language flag, if exists :)" msgstr "Cờ ngôn ngữ, nếu có :)" -#: engine/core/graphene/object_types.py:780 +#: engine/core/graphene/object_types.py:802 msgid "supported languages" msgstr "Xem danh sách các ngôn ngữ được hỗ trợ" -#: engine/core/graphene/object_types.py:812 -#: engine/core/graphene/object_types.py:815 -#: engine/core/graphene/object_types.py:818 +#: engine/core/graphene/object_types.py:834 +#: engine/core/graphene/object_types.py:837 +#: engine/core/graphene/object_types.py:840 msgid "products search results" msgstr "Kết quả tìm kiếm sản phẩm" -#: engine/core/graphene/object_types.py:820 +#: engine/core/graphene/object_types.py:842 msgid "posts search results" msgstr "Kết quả tìm kiếm sản phẩm" -#: engine/core/models.py:75 +#: engine/core/models.py:91 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 " @@ -1630,23 +1670,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." -#: engine/core/models.py:88 +#: engine/core/models.py:107 msgid "parent of this group" msgstr "Cha mẹ của nhóm này" -#: engine/core/models.py:89 +#: engine/core/models.py:108 msgid "parent attribute group" msgstr "Nhóm thuộc tính cha" -#: engine/core/models.py:93 engine/core/models.py:94 +#: engine/core/models.py:112 engine/core/models.py:113 msgid "attribute group's name" msgstr "Tên nhóm thuộc tính" -#: engine/core/models.py:102 engine/core/models.py:763 +#: engine/core/models.py:121 engine/core/models.py:849 msgid "attribute group" msgstr "Nhóm thuộc tính" -#: engine/core/models.py:108 +#: engine/core/models.py:127 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1665,50 +1705,50 @@ msgstr "" " bổ sung, khiến nó phù hợp để sử dụng trong các hệ thống tương tác với các " "nhà cung cấp bên thứ ba." -#: engine/core/models.py:122 +#: engine/core/models.py:141 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." -#: engine/core/models.py:124 +#: engine/core/models.py:143 msgid "authentication info" msgstr "Thông tin xác thực" -#: engine/core/models.py:129 +#: engine/core/models.py:148 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." -#: engine/core/models.py:130 +#: engine/core/models.py:149 msgid "vendor markup percentage" msgstr "Tỷ lệ chiết khấu của nhà cung cấp" -#: engine/core/models.py:134 +#: engine/core/models.py:153 msgid "name of this vendor" msgstr "Tên của nhà cung cấp này" -#: engine/core/models.py:135 +#: engine/core/models.py:154 msgid "vendor name" msgstr "Tên nhà cung cấp" -#: engine/core/models.py:150 +#: engine/core/models.py:169 msgid "response file" msgstr "Tệp phản hồi" -#: engine/core/models.py:151 +#: engine/core/models.py:170 msgid "vendor's last processing response" msgstr "Phản hồi xử lý cuối cùng của nhà cung cấp" -#: engine/core/models.py:157 +#: engine/core/models.py:176 msgid "vendor's integration file path" msgstr "Đường dẫn tệp tích hợp của nhà cung cấp" -#: engine/core/models.py:158 +#: engine/core/models.py:177 msgid "integration path" msgstr "Đường dẫn tích hợp" -#: engine/core/models.py:192 +#: engine/core/models.py:211 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1722,27 +1762,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ị." -#: engine/core/models.py:204 engine/core/models.py:235 +#: engine/core/models.py:223 engine/core/models.py:254 msgid "internal tag identifier for the product tag" msgstr "Mã định danh thẻ nội bộ cho thẻ sản phẩm" -#: engine/core/models.py:205 engine/core/models.py:236 +#: engine/core/models.py:224 engine/core/models.py:255 msgid "tag name" msgstr "Tên ngày" -#: engine/core/models.py:209 engine/core/models.py:240 +#: engine/core/models.py:228 engine/core/models.py:259 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" -#: engine/core/models.py:210 engine/core/models.py:241 +#: engine/core/models.py:229 engine/core/models.py:260 msgid "tag display name" msgstr "Hiển thị tên thẻ" -#: engine/core/models.py:218 +#: engine/core/models.py:237 msgid "product tag" msgstr "Thẻ sản phẩm" -#: engine/core/models.py:224 +#: engine/core/models.py:243 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 " @@ -1753,15 +1793,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." -#: engine/core/models.py:249 +#: engine/core/models.py:268 msgid "category tag" msgstr "Thẻ danh mục" -#: engine/core/models.py:250 engine/core/models.py:322 +#: engine/core/models.py:269 engine/core/models.py:345 msgid "category tags" msgstr "Thẻ danh mục" -#: engine/core/models.py:255 +#: engine/core/models.py:274 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1782,52 +1822,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." -#: engine/core/models.py:269 +#: engine/core/models.py:292 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." -#: engine/core/models.py:272 +#: engine/core/models.py:295 msgid "category image" msgstr "Hình ảnh danh mục" -#: engine/core/models.py:277 +#: engine/core/models.py:300 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." -#: engine/core/models.py:286 +#: engine/core/models.py:309 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." -#: engine/core/models.py:287 +#: engine/core/models.py:310 msgid "parent category" msgstr "Danh mục cha" -#: engine/core/models.py:292 +#: engine/core/models.py:315 msgid "category name" msgstr "Tên danh mục" -#: engine/core/models.py:293 +#: engine/core/models.py:316 msgid "provide a name for this category" msgstr "Đặt tên cho danh mục này." -#: engine/core/models.py:300 +#: engine/core/models.py:323 msgid "add a detailed description for this category" msgstr "Thêm mô tả chi tiết cho danh mục này." -#: engine/core/models.py:301 +#: engine/core/models.py:324 msgid "category description" msgstr "Mô tả danh mục" -#: engine/core/models.py:321 +#: engine/core/models.py:344 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" -#: engine/core/models.py:328 engine/core/models.py:503 +#: engine/core/models.py:351 engine/core/models.py:552 msgid "priority" msgstr "Ưu tiên" -#: engine/core/models.py:446 +#: engine/core/models.py:495 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1840,47 +1880,43 @@ 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." -#: engine/core/models.py:456 +#: engine/core/models.py:505 msgid "name of this brand" msgstr "Tên của thương hiệu này" -#: engine/core/models.py:457 +#: engine/core/models.py:506 msgid "brand name" msgstr "Tên thương hiệu" -#: engine/core/models.py:464 +#: engine/core/models.py:513 msgid "upload a logo representing this brand" msgstr "Tải lên logo đại diện cho thương hiệu này." -#: engine/core/models.py:466 +#: engine/core/models.py:515 msgid "brand small image" msgstr "Hình ảnh nhỏ của thương hiệu" -#: engine/core/models.py:472 +#: engine/core/models.py:521 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." -#: engine/core/models.py:474 +#: engine/core/models.py:523 msgid "brand big image" msgstr "Hình ảnh thương hiệu lớn" -#: engine/core/models.py:479 +#: engine/core/models.py:528 msgid "add a detailed description of the brand" msgstr "Thêm mô tả chi tiết về thương hiệu" -#: engine/core/models.py:480 +#: engine/core/models.py:529 msgid "brand description" msgstr "Mô tả thương hiệu" -#: engine/core/models.py:485 -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" +#: engine/core/models.py:534 engine/core/models.py:535 +msgid "DEPRECATED" +msgstr "ĐÃ LỖI THỜI" -#: engine/core/models.py:486 -msgid "associated categories" -msgstr "Các danh mục" - -#: engine/core/models.py:516 +#: engine/core/models.py:569 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1896,72 +1932,72 @@ msgstr "" "phần của hệ thống quản lý hàng tồn kho để cho phép theo dõi và đánh giá các " "sản phẩm có sẵn từ các nhà cung cấp khác nhau." -#: engine/core/models.py:528 +#: engine/core/models.py:581 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." -#: engine/core/models.py:529 +#: engine/core/models.py:582 msgid "associated vendor" msgstr "Nhà cung cấp liên kết" -#: engine/core/models.py:533 +#: engine/core/models.py:588 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í." -#: engine/core/models.py:534 +#: engine/core/models.py:589 msgid "selling price" msgstr "Giá bán" -#: engine/core/models.py:539 +#: engine/core/models.py:594 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" -#: engine/core/models.py:540 engine/core/models.py:828 -#: engine/core/models.py:874 engine/core/models.py:1912 +#: engine/core/models.py:595 engine/core/models.py:914 +#: engine/core/models.py:962 engine/core/models.py:2020 msgid "associated product" msgstr "Sản phẩm liên quan" -#: engine/core/models.py:547 +#: engine/core/models.py:604 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" -#: engine/core/models.py:548 +#: engine/core/models.py:605 msgid "vendor purchase price" msgstr "Giá mua của nhà cung cấp" -#: engine/core/models.py:552 +#: engine/core/models.py:609 msgid "available quantity of the product in stock" msgstr "Số lượng sản phẩm hiện có trong kho" -#: engine/core/models.py:553 +#: engine/core/models.py:610 msgid "quantity in stock" msgstr "Số lượng hàng tồn kho" -#: engine/core/models.py:557 +#: engine/core/models.py:614 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" -#: engine/core/models.py:558 +#: engine/core/models.py:615 msgid "vendor sku" msgstr "Mã SKU của nhà cung cấp" -#: engine/core/models.py:564 +#: engine/core/models.py:621 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ó)" -#: engine/core/models.py:565 +#: engine/core/models.py:622 msgid "digital file" msgstr "Tệp tin kỹ thuật số" -#: engine/core/models.py:569 +#: engine/core/models.py:626 msgid "system attributes" msgstr "Thuộc tính hệ thống" -#: engine/core/models.py:577 +#: engine/core/models.py:636 msgid "stock entries" msgstr "Nhập kho" -#: engine/core/models.py:582 +#: engine/core/models.py:641 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1982,74 +2018,82 @@ 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." -#: engine/core/models.py:595 +#: engine/core/models.py:660 msgid "category this product belongs to" msgstr "Danh mục mà sản phẩm này thuộc về" -#: engine/core/models.py:604 +#: engine/core/models.py:669 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" -#: engine/core/models.py:610 +#: engine/core/models.py:675 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" -#: engine/core/models.py:615 +#: engine/core/models.py:680 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." -#: engine/core/models.py:616 +#: engine/core/models.py:681 msgid "is product digital" msgstr "Sản phẩm có phải là sản phẩm số không?" -#: engine/core/models.py:623 +#: engine/core/models.py:688 msgid "indicates whether this product should be updated from periodic task" 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." -#: engine/core/models.py:625 +#: engine/core/models.py:690 msgid "is product updatable" msgstr "Sản phẩm có thể được cập nhật không?" -#: engine/core/models.py:631 +#: engine/core/models.py:696 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." -#: engine/core/models.py:632 +#: engine/core/models.py:697 msgid "product name" msgstr "Tên sản phẩm" -#: engine/core/models.py:638 engine/core/models.py:923 +#: engine/core/models.py:703 engine/core/models.py:1012 msgid "add a detailed description of the product" msgstr "Thêm mô tả chi tiết về sản phẩm" -#: engine/core/models.py:639 +#: engine/core/models.py:704 msgid "product description" msgstr "Mô tả sản phẩm" -#: engine/core/models.py:646 +#: engine/core/models.py:710 +msgid "optional video file for this product" +msgstr "Tệp video tùy chọn cho sản phẩm này" + +#: engine/core/models.py:711 +msgid "product video" +msgstr "Video sản phẩm" + +#: engine/core/models.py:719 msgid "part number for this product" msgstr "Số hiệu sản phẩm cho sản phẩm này" -#: engine/core/models.py:647 +#: engine/core/models.py:720 msgid "part number" msgstr "Số hiệu linh kiện" -#: engine/core/models.py:666 +#: engine/core/models.py:739 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" -#: engine/core/models.py:673 +#: engine/core/models.py:746 msgid "whether to export this product to marketplaces" msgstr "" "Có nên xuất khẩu sản phẩm này sang các sàn thương mại điện tử hay không?" -#: engine/core/models.py:674 +#: engine/core/models.py:747 msgid "Export to Marketplaces" msgstr "Xuất khẩu sang các sàn thương mại điện tử" -#: engine/core/models.py:749 +#: engine/core/models.py:835 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 " @@ -2065,64 +2109,64 @@ msgstr "" "chuỗi, số nguyên, số thực, boolean, mảng và đối tượng. Điều này cho phép cấu" " trúc dữ liệu động và linh hoạt." -#: engine/core/models.py:762 +#: engine/core/models.py:848 msgid "group of this attribute" msgstr "Nhóm có thuộc tính này" -#: engine/core/models.py:768 +#: engine/core/models.py:854 msgid "string" msgstr "Dây" -#: engine/core/models.py:769 +#: engine/core/models.py:855 msgid "integer" msgstr "Chính trực" -#: engine/core/models.py:770 +#: engine/core/models.py:856 msgid "float" msgstr "Nổi" -#: engine/core/models.py:771 +#: engine/core/models.py:857 msgid "boolean" msgstr "Boolean" -#: engine/core/models.py:772 +#: engine/core/models.py:858 msgid "array" msgstr "Mảng" -#: engine/core/models.py:773 +#: engine/core/models.py:859 msgid "object" msgstr "Đối tượng" -#: engine/core/models.py:775 +#: engine/core/models.py:861 msgid "type of the attribute's value" msgstr "Loại giá trị của thuộc tính" -#: engine/core/models.py:776 +#: engine/core/models.py:862 msgid "value type" msgstr "Kiểu giá trị" -#: engine/core/models.py:781 +#: engine/core/models.py:867 msgid "name of this attribute" msgstr "Tên của thuộc tính này" -#: engine/core/models.py:782 +#: engine/core/models.py:868 msgid "attribute's name" msgstr "Tên thuộc tính" -#: engine/core/models.py:787 +#: engine/core/models.py:873 msgid "is filterable" msgstr "có thể lọc được" -#: engine/core/models.py:789 +#: engine/core/models.py:875 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." -#: engine/core/models.py:802 engine/core/models.py:820 +#: engine/core/models.py:888 engine/core/models.py:906 #: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Thuộc tính" -#: engine/core/models.py:808 +#: engine/core/models.py:894 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" @@ -2132,19 +2176,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." -#: engine/core/models.py:819 +#: engine/core/models.py:905 msgid "attribute of this value" msgstr "Thuộc tính của giá trị này" -#: engine/core/models.py:827 +#: engine/core/models.py:913 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" -#: engine/core/models.py:833 +#: engine/core/models.py:919 msgid "the specific value for this attribute" msgstr "Giá trị cụ thể cho thuộc tính này" -#: engine/core/models.py:846 +#: engine/core/models.py:934 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -2158,39 +2202,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." -#: engine/core/models.py:857 +#: engine/core/models.py:945 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." -#: engine/core/models.py:858 +#: engine/core/models.py:946 msgid "image alt text" msgstr "Nội dung thay thế cho hình ảnh" -#: engine/core/models.py:861 +#: engine/core/models.py:949 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." -#: engine/core/models.py:862 engine/core/models.py:893 +#: engine/core/models.py:950 engine/core/models.py:982 msgid "product image" msgstr "Hình ảnh sản phẩm" -#: engine/core/models.py:867 +#: engine/core/models.py:955 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." -#: engine/core/models.py:868 +#: engine/core/models.py:956 msgid "display priority" msgstr "Ưu tiên hiển thị" -#: engine/core/models.py:873 +#: engine/core/models.py:961 msgid "the product that this image represents" msgstr "Sản phẩm mà hình ảnh này đại diện" -#: engine/core/models.py:894 +#: engine/core/models.py:983 msgid "product images" msgstr "Hình ảnh sản phẩm" -#: engine/core/models.py:899 +#: engine/core/models.py:988 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -2206,39 +2250,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." -#: engine/core/models.py:911 +#: engine/core/models.py:1000 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" -#: engine/core/models.py:912 +#: engine/core/models.py:1001 msgid "discount percentage" msgstr "Tỷ lệ giảm giá" -#: engine/core/models.py:917 +#: engine/core/models.py:1006 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." -#: engine/core/models.py:918 +#: engine/core/models.py:1007 msgid "promotion name" msgstr "Tên chương trình khuyến mãi" -#: engine/core/models.py:924 +#: engine/core/models.py:1013 msgid "promotion description" msgstr "Mô tả chương trình khuyến mãi" -#: engine/core/models.py:929 +#: engine/core/models.py:1018 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." -#: engine/core/models.py:930 +#: engine/core/models.py:1019 msgid "included products" msgstr "Các sản phẩm được bao gồm" -#: engine/core/models.py:934 +#: engine/core/models.py:1027 msgid "promotion" msgstr "Khuyến mãi" -#: engine/core/models.py:945 +#: engine/core/models.py:1038 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2250,23 +2294,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." -#: engine/core/models.py:957 +#: engine/core/models.py:1050 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" -#: engine/core/models.py:965 +#: engine/core/models.py:1058 msgid "user who owns this wishlist" msgstr "Người dùng sở hữu danh sách mong muốn này" -#: engine/core/models.py:966 +#: engine/core/models.py:1059 msgid "wishlist owner" msgstr "Chủ sở hữu Danh sách mong muốn" -#: engine/core/models.py:974 +#: engine/core/models.py:1067 msgid "wishlist" msgstr "Danh sách mong muốn" -#: engine/core/models.py:1016 +#: engine/core/models.py:1109 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2282,19 +2326,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." -#: engine/core/models.py:1031 +#: engine/core/models.py:1124 msgid "documentary" msgstr "Phim tài liệu" -#: engine/core/models.py:1032 +#: engine/core/models.py:1125 msgid "documentaries" msgstr "Phim tài liệu" -#: engine/core/models.py:1042 +#: engine/core/models.py:1135 msgid "unresolved" msgstr "Chưa được giải quyết" -#: engine/core/models.py:1047 +#: engine/core/models.py:1140 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2314,59 +2358,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." -#: engine/core/models.py:1062 +#: engine/core/models.py:1155 msgid "address line for the customer" msgstr "Địa chỉ của khách hàng" -#: engine/core/models.py:1063 +#: engine/core/models.py:1156 msgid "address line" msgstr "Dòng địa chỉ" -#: engine/core/models.py:1065 +#: engine/core/models.py:1158 msgid "street" msgstr "Phố" -#: engine/core/models.py:1066 +#: engine/core/models.py:1159 msgid "district" msgstr "Quận" -#: engine/core/models.py:1067 +#: engine/core/models.py:1160 msgid "city" msgstr "Thành phố" -#: engine/core/models.py:1068 +#: engine/core/models.py:1161 msgid "region" msgstr "Khu vực" -#: engine/core/models.py:1069 +#: engine/core/models.py:1162 msgid "postal code" msgstr "Mã bưu chính" -#: engine/core/models.py:1070 +#: engine/core/models.py:1163 msgid "country" msgstr "Quốc gia" -#: engine/core/models.py:1077 +#: engine/core/models.py:1170 msgid "geolocation point: (longitude, latitude)" msgstr "Điểm định vị địa lý (Kinh độ, Vĩ độ)" -#: engine/core/models.py:1083 +#: engine/core/models.py:1176 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" -#: engine/core/models.py:1089 +#: engine/core/models.py:1182 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ý" -#: engine/core/models.py:1099 +#: engine/core/models.py:1192 msgid "address" msgstr "Địa chỉ" -#: engine/core/models.py:1100 +#: engine/core/models.py:1193 msgid "addresses" msgstr "Địa chỉ" -#: engine/core/models.py:1112 +#: engine/core/models.py:1205 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2382,72 +2426,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." -#: engine/core/models.py:1126 +#: engine/core/models.py:1219 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á." -#: engine/core/models.py:1127 +#: engine/core/models.py:1220 msgid "promo code identifier" msgstr "Mã khuyến mãi" -#: engine/core/models.py:1134 +#: engine/core/models.py:1227 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." -#: engine/core/models.py:1135 +#: engine/core/models.py:1228 msgid "fixed discount amount" msgstr "Số tiền giảm giá cố định" -#: engine/core/models.py:1141 +#: engine/core/models.py:1234 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." -#: engine/core/models.py:1142 +#: engine/core/models.py:1235 msgid "percentage discount" msgstr "Giảm giá theo phần trăm" -#: engine/core/models.py:1147 +#: engine/core/models.py:1240 msgid "timestamp when the promocode expires" msgstr "Thời gian hết hạn của mã khuyến mãi" -#: engine/core/models.py:1148 +#: engine/core/models.py:1241 msgid "end validity time" msgstr "Thời hạn hiệu lực kết thúc" -#: engine/core/models.py:1153 +#: engine/core/models.py:1246 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" -#: engine/core/models.py:1154 +#: engine/core/models.py:1247 msgid "start validity time" msgstr "Thời gian bắt đầu có hiệu lực" -#: engine/core/models.py:1159 +#: engine/core/models.py:1252 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." -#: engine/core/models.py:1160 +#: engine/core/models.py:1253 msgid "usage timestamp" msgstr "Dấu thời gian sử dụng" -#: engine/core/models.py:1165 +#: engine/core/models.py:1258 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ó)." -#: engine/core/models.py:1166 +#: engine/core/models.py:1259 msgid "assigned user" msgstr "Người dùng được chỉ định" -#: engine/core/models.py:1173 +#: engine/core/models.py:1266 msgid "promo code" msgstr "Mã khuyến mãi" -#: engine/core/models.py:1174 +#: engine/core/models.py:1267 msgid "promo codes" msgstr "Mã khuyến mãi" -#: engine/core/models.py:1190 +#: engine/core/models.py:1283 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2455,16 +2499,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." -#: engine/core/models.py:1212 +#: engine/core/models.py:1305 msgid "promocode already used" msgstr "Mã khuyến mãi đã được sử dụng." -#: engine/core/models.py:1234 +#: engine/core/models.py:1327 #, 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}!" -#: engine/core/models.py:1243 +#: engine/core/models.py:1336 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 " @@ -2481,141 +2525,141 @@ msgstr "" "toán. Đồng thời, chức năng hỗ trợ quản lý các sản phẩm trong chu kỳ đời của " "đơn hàng." -#: engine/core/models.py:1260 +#: engine/core/models.py:1357 msgid "the billing address used for this order" msgstr "Địa chỉ thanh toán được sử dụng cho đơn hàng này" -#: engine/core/models.py:1268 +#: engine/core/models.py:1365 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." -#: engine/core/models.py:1269 +#: engine/core/models.py:1366 msgid "applied promo code" msgstr "Đã áp dụng mã khuyến mãi" -#: engine/core/models.py:1277 +#: engine/core/models.py:1374 msgid "the shipping address used for this order" msgstr "Địa chỉ giao hàng được sử dụng cho đơn hàng này" -#: engine/core/models.py:1278 +#: engine/core/models.py:1375 msgid "shipping address" msgstr "Địa chỉ giao hàng" -#: engine/core/models.py:1284 +#: engine/core/models.py:1381 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ó" -#: engine/core/models.py:1285 +#: engine/core/models.py:1382 msgid "order status" msgstr "Tình trạng đơn hàng" -#: engine/core/models.py:1290 engine/core/models.py:1889 +#: engine/core/models.py:1387 engine/core/models.py:1997 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." -#: engine/core/models.py:1296 +#: engine/core/models.py:1393 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" -#: engine/core/models.py:1302 +#: engine/core/models.py:1399 msgid "the user who placed the order" msgstr "Người dùng đã đặt đơn hàng" -#: engine/core/models.py:1303 +#: engine/core/models.py:1400 msgid "user" msgstr "Người dùng" -#: engine/core/models.py:1309 +#: engine/core/models.py:1406 msgid "the timestamp when the order was finalized" msgstr "Thời gian ghi nhận khi đơn hàng được hoàn tất" -#: engine/core/models.py:1310 +#: engine/core/models.py:1407 msgid "buy time" msgstr "Mua thời gian" -#: engine/core/models.py:1317 +#: engine/core/models.py:1414 msgid "a human-readable identifier for the order" msgstr "Một định danh dễ đọc cho đơn hàng" -#: engine/core/models.py:1318 +#: engine/core/models.py:1415 msgid "human readable id" msgstr "ID dễ đọc cho con người" -#: engine/core/models.py:1324 +#: engine/core/models.py:1421 msgid "order" msgstr "Đặt hàng" -#: engine/core/models.py:1371 +#: engine/core/models.py:1468 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!" -#: engine/core/models.py:1404 +#: engine/core/models.py:1504 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ý." -#: engine/core/models.py:1410 +#: engine/core/models.py:1510 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." -#: engine/core/models.py:1432 +#: engine/core/models.py:1533 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." -#: engine/core/models.py:1456 engine/core/models.py:1485 -#: engine/core/models.py:1495 +#: engine/core/models.py:1557 engine/core/models.py:1586 +#: engine/core/models.py:1596 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ý." -#: engine/core/models.py:1480 +#: engine/core/models.py:1581 #, 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}>!" -#: engine/core/models.py:1519 +#: engine/core/models.py:1620 msgid "promocode does not exist" msgstr "Mã khuyến mãi không tồn tại" -#: engine/core/models.py:1534 +#: engine/core/models.py:1635 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!" -#: engine/core/models.py:1555 +#: engine/core/models.py:1656 msgid "address does not exist" msgstr "Địa chỉ không tồn tại" -#: engine/core/models.py:1577 engine/core/models.py:1656 +#: engine/core/models.py:1678 engine/core/models.py:1757 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." -#: engine/core/models.py:1583 engine/core/models.py:1649 +#: engine/core/models.py:1684 engine/core/models.py:1750 msgid "invalid force value" msgstr "Giá trị lực không hợp lệ" -#: engine/core/models.py:1589 engine/core/models.py:1660 +#: engine/core/models.py:1690 engine/core/models.py:1761 msgid "you cannot purchase an empty order!" msgstr "Bạn không thể đặt hàng trống!" -#: engine/core/models.py:1610 +#: engine/core/models.py:1711 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!" -#: engine/core/models.py:1624 +#: engine/core/models.py:1725 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ư!" -#: engine/core/models.py:1630 +#: engine/core/models.py:1731 msgid "insufficient funds to complete the order" msgstr "Không đủ số tiền để hoàn tất đơn hàng." -#: engine/core/models.py:1671 +#: engine/core/models.py:1772 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2624,7 +2668,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." -#: engine/core/models.py:1682 +#: engine/core/models.py:1783 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2632,7 +2676,7 @@ msgstr "" "Phương thức thanh toán không hợp lệ: {payment_method} từ " "{available_payment_methods}!" -#: engine/core/models.py:1813 +#: engine/core/models.py:1916 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2647,34 +2691,34 @@ 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ả." -#: engine/core/models.py:1825 +#: engine/core/models.py:1928 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" -#: engine/core/models.py:1826 +#: engine/core/models.py:1929 msgid "feedback comments" msgstr "Phản hồi" -#: engine/core/models.py:1834 +#: engine/core/models.py:1937 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." -#: engine/core/models.py:1836 +#: engine/core/models.py:1939 msgid "related order product" msgstr "Sản phẩm liên quan đến đơn hàng" -#: engine/core/models.py:1841 +#: engine/core/models.py:1944 msgid "user-assigned rating for the product" msgstr "Đánh giá do người dùng gán cho sản phẩm" -#: engine/core/models.py:1842 +#: engine/core/models.py:1945 msgid "product rating" msgstr "Đánh giá sản phẩm" -#: engine/core/models.py:1862 +#: engine/core/models.py:1965 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2696,108 +2740,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." -#: engine/core/models.py:1877 +#: engine/core/models.py:1985 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." -#: engine/core/models.py:1878 +#: engine/core/models.py:1986 msgid "purchase price at order time" msgstr "Giá mua tại thời điểm đặt hàng" -#: engine/core/models.py:1883 +#: engine/core/models.py:1991 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" -#: engine/core/models.py:1884 +#: engine/core/models.py:1992 msgid "internal comments" msgstr "Nhận xét nội bộ" -#: engine/core/models.py:1890 +#: engine/core/models.py:1998 msgid "user notifications" msgstr "Thông báo cho người dùng" -#: engine/core/models.py:1895 +#: engine/core/models.py:2003 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" -#: engine/core/models.py:1896 +#: engine/core/models.py:2004 msgid "ordered product attributes" msgstr "Thuộc tính sản phẩm đã đặt hàng" -#: engine/core/models.py:1901 +#: engine/core/models.py:2009 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." -#: engine/core/models.py:1902 +#: engine/core/models.py:2010 msgid "parent order" msgstr "Đơn đặt hàng của phụ huynh" -#: engine/core/models.py:1911 +#: engine/core/models.py:2019 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" -#: engine/core/models.py:1918 +#: engine/core/models.py:2026 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" -#: engine/core/models.py:1919 +#: engine/core/models.py:2027 msgid "product quantity" msgstr "Số lượng sản phẩm" -#: engine/core/models.py:1926 +#: engine/core/models.py:2034 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" -#: engine/core/models.py:1927 +#: engine/core/models.py:2035 msgid "product line status" msgstr "Tình trạng dòng sản phẩm" -#: engine/core/models.py:1998 +#: engine/core/models.py:2106 msgid "order product must have an order" msgstr "Sản phẩm đặt hàng phải có đơn hàng liên quan!" -#: engine/core/models.py:2000 +#: engine/core/models.py:2108 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Hành động sai được chỉ định cho phản hồi: {action}!" -#: engine/core/models.py:2017 +#: engine/core/models.py:2125 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." -#: engine/core/models.py:2026 +#: engine/core/models.py:2132 engine/core/models.py:2227 msgid "name" msgstr "Tên" -#: engine/core/models.py:2028 +#: engine/core/models.py:2134 msgid "URL of the integration" msgstr "Đường dẫn URL của tích hợp" -#: engine/core/models.py:2031 +#: engine/core/models.py:2137 msgid "authentication credentials" msgstr "Thông tin xác thực" -#: engine/core/models.py:2054 +#: engine/core/models.py:2160 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." -#: engine/core/models.py:2064 +#: engine/core/models.py:2170 msgid "CRM" msgstr "Hệ thống Quản lý Quan hệ Khách hàng" -#: engine/core/models.py:2065 +#: engine/core/models.py:2171 msgid "CRMs" msgstr "Hệ thống Quản lý Quan hệ Khách hàng (CR" -#: engine/core/models.py:2081 +#: engine/core/models.py:2187 msgid "order CRM link" msgstr "Liên kết CRM của đơn hàng" -#: engine/core/models.py:2082 +#: engine/core/models.py:2188 msgid "orders CRM links" msgstr "Liên kết CRM của đơn hàng" -#: engine/core/models.py:2087 +#: engine/core/models.py:2193 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2813,14 +2857,38 @@ 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." -#: engine/core/models.py:2103 +#: engine/core/models.py:2209 msgid "download" msgstr "Tải xuống" -#: engine/core/models.py:2104 +#: engine/core/models.py:2210 msgid "downloads" msgstr "Tải xuống" +#: engine/core/models.py:2228 +msgid "descriptive name for the image" +msgstr "Tên mô tả cho hình ảnh" + +#: engine/core/models.py:2233 +msgid "image file pasted in the markdown editor" +msgstr "Tệp hình ảnh được dán vào trình soạn thảo Markdown" + +#: engine/core/models.py:2239 +msgid "alt text" +msgstr "Văn bản khác" + +#: engine/core/models.py:2240 +msgid "alternative text for accessibility" +msgstr "Văn bản thay thế cho tính năng truy cập" + +#: engine/core/models.py:2244 +msgid "pasted image" +msgstr "Hình ảnh được dán" + +#: engine/core/models.py:2245 +msgid "pasted images" +msgstr "Hình ảnh được dán" + #: engine/core/serializers/utility.py:91 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." @@ -2829,6 +2897,16 @@ msgstr "" "hồi." #: engine/core/sitemaps.py:25 +#: engine/core/templates/admin_doc/bookmarklets.html:8 +#: engine/core/templates/admin_doc/index.html:8 +#: engine/core/templates/admin_doc/missing_docutils.html:8 +#: engine/core/templates/admin_doc/model_detail.html:8 +#: engine/core/templates/admin_doc/model_index.html:8 +#: engine/core/templates/admin_doc/template_detail.html:8 +#: engine/core/templates/admin_doc/template_filter_index.html:8 +#: engine/core/templates/admin_doc/template_tag_index.html:8 +#: engine/core/templates/admin_doc/view_detail.html:8 +#: engine/core/templates/admin_doc/view_index.html:8 msgid "Home" msgstr "Trang chủ" @@ -2881,45 +2959,34 @@ msgstr "Gross" msgid "Dashboard" msgstr "Bảng điều khiển" -#: engine/core/templates/admin/dashboard/_income_overview.html:7 +#: engine/core/templates/admin/dashboard/_income_overview.html:6 msgid "Income overview" msgstr "Tổng quan về thu nhập" -#: engine/core/templates/admin/dashboard/_income_overview.html:31 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Net" +#: engine/core/templates/admin/dashboard/_income_overview.html:16 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" msgstr "Doanh thu ròng" -#: engine/core/templates/admin/dashboard/_income_overview.html:37 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Taxes" -msgstr "Thuế" - -#: engine/core/templates/admin/dashboard/_income_overview.html:43 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 +#: engine/core/templates/admin/dashboard/_income_overview.html:21 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 msgid "Returns" msgstr "Trả hàng" -#: engine/core/templates/admin/dashboard/_income_overview.html:48 -msgid "Gross (pie total)" -msgstr "Doanh thu tổng" - -#: engine/core/templates/admin/dashboard/_income_overview.html:72 -msgid "No data" -msgstr "Không có dữ liệu" - +#: engine/core/templates/admin/dashboard/_income_overview.html:26 #: engine/core/templates/admin/dashboard/_kpis.html:6 msgid "GMV" msgstr "Tổng giá trị giao dịch" +#: engine/core/templates/admin/dashboard/_income_overview.html:50 +msgid "No data" +msgstr "Không có dữ liệu" + #: engine/core/templates/admin/dashboard/_kpis.html:34 msgid "AOV" msgstr "Giá trị đơn hàng trung bình" -#: engine/core/templates/admin/dashboard/_kpis.html:48 -msgid "Net revenue" -msgstr "Doanh thu ròng" - #: engine/core/templates/admin/dashboard/_kpis.html:62 msgid "Refund rate" msgstr "Tỷ lệ hoàn tiền" @@ -2932,7 +2999,7 @@ msgstr "Đã trả lại" msgid "Low stock" msgstr "Hàng tồn kho thấp" -#: engine/core/templates/admin/dashboard/_low_stock.html:29 +#: engine/core/templates/admin/dashboard/_low_stock.html:33 msgid "No low stock items." msgstr "Không có sản phẩm nào trong tình trạng tồn kho thấp." @@ -2990,6 +3057,300 @@ msgstr "" msgid "Django site admin" msgstr "Quản trị viên trang web Django" +#: engine/core/templates/admin_doc/bookmarklets.html:4 +#: engine/core/templates/admin_doc/bookmarklets.html:17 +msgid "Documentation bookmarklets" +msgstr "Các bookmarklet tài liệu" + +#: engine/core/templates/admin_doc/bookmarklets.html:10 +#: engine/core/templates/admin_doc/index.html:4 +#: engine/core/templates/admin_doc/index.html:10 +#: engine/core/templates/admin_doc/index.html:15 +#: engine/core/templates/admin_doc/missing_docutils.html:10 +#: engine/core/templates/admin_doc/missing_docutils.html:19 +#: engine/core/templates/admin_doc/model_detail.html:10 +#: engine/core/templates/admin_doc/model_index.html:10 +#: engine/core/templates/admin_doc/template_detail.html:10 +#: engine/core/templates/admin_doc/template_filter_index.html:10 +#: engine/core/templates/admin_doc/template_tag_index.html:10 +#: engine/core/templates/admin_doc/view_detail.html:10 +#: engine/core/templates/admin_doc/view_index.html:10 +msgid "Documentation" +msgstr "Tài liệu" + +#: engine/core/templates/admin_doc/bookmarklets.html:12 +#: engine/core/templates/admin_doc/index.html:53 +msgid "Bookmarklets" +msgstr "Dấu trang" + +#: engine/core/templates/admin_doc/bookmarklets.html:19 +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Để cài đặt bookmarklet, hãy kéo liên kết vào thanh công cụ dấu trang của " +"bạn, hoặc nhấp chuột phải vào liên kết và thêm nó vào dấu trang của bạn. Bây" +" giờ bạn có thể chọn bookmarklet từ bất kỳ trang nào trên trang web." + +#: engine/core/templates/admin_doc/bookmarklets.html:29 +msgid "Documentation for this page" +msgstr "Hướng dẫn sử dụng cho trang này" + +#: engine/core/templates/admin_doc/bookmarklets.html:31 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Chuyển bạn từ bất kỳ trang nào đến tài liệu hướng dẫn cho giao diện người " +"dùng tạo ra trang đó." + +#: engine/core/templates/admin_doc/index.html:21 +#: engine/core/templates/admin_doc/model_detail.html:12 +#: engine/core/templates/admin_doc/model_index.html:4 +#: engine/core/templates/admin_doc/model_index.html:12 +msgid "Models" +msgstr "Các mô hình" + +#: engine/core/templates/admin_doc/index.html:23 +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Các mô hình là mô tả về tất cả các đối tượng trong hệ thống và các trường " +"liên quan của chúng. Mỗi mô hình có một danh sách các trường có thể được " +"truy cập như các biến mẫu." + +#: engine/core/templates/admin_doc/index.html:29 +#: engine/core/templates/admin_doc/view_detail.html:12 +#: engine/core/templates/admin_doc/view_index.html:4 +#: engine/core/templates/admin_doc/view_index.html:12 +msgid "Views" +msgstr "Số lượt xem" + +#: engine/core/templates/admin_doc/index.html:31 +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Mỗi trang trên trang web công khai được tạo ra bởi một view. View xác định " +"mẫu nào được sử dụng để tạo trang và các đối tượng nào có sẵn cho mẫu đó." + +#: engine/core/templates/admin_doc/index.html:39 +msgid "List of all the template tags and their functions." +msgstr "Danh sách tất cả các thẻ mẫu và chức năng của chúng." + +#: engine/core/templates/admin_doc/index.html:45 +#: engine/core/templates/admin_doc/template_filter_index.html:12 +msgid "Filters" +msgstr "Bộ lọc" + +#: engine/core/templates/admin_doc/index.html:47 +msgid "" +"Filters are actions which can be applied to variables in a template to alter" +" the output." +msgstr "" +"Bộ lọc là các thao tác có thể được áp dụng cho các biến trong một mẫu để " +"thay đổi kết quả đầu ra." + +#: engine/core/templates/admin_doc/index.html:55 +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Công cụ cho trình duyệt của bạn để truy cập nhanh các chức năng quản trị." + +#: engine/core/templates/admin_doc/missing_docutils.html:4 +msgid "Please install docutils" +msgstr "Vui lòng cài đặt docutils." + +#: engine/core/templates/admin_doc/missing_docutils.html:20 +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"Hệ thống tài liệu quản trị yêu cầu thư viện docutils của Python." + +#: engine/core/templates/admin_doc/missing_docutils.html:21 +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Vui lòng yêu cầu các quản trị viên của bạn cài đặt docutils." + +#: engine/core/templates/admin_doc/model_detail.html:4 +#, python-format +msgid "Model: %(name)s" +msgstr "Mẫu: %(name)s" + +#: engine/core/templates/admin_doc/model_detail.html:29 +msgid "Fields" +msgstr "Các lĩnh vực" + +#: engine/core/templates/admin_doc/model_detail.html:36 +msgid "Field" +msgstr "Trường" + +#: engine/core/templates/admin_doc/model_detail.html:37 +msgid "Type" +msgstr "Loại" + +#: engine/core/templates/admin_doc/model_detail.html:38 +#: engine/core/templates/admin_doc/model_detail.html:70 +msgid "Description" +msgstr "Mô tả" + +#: engine/core/templates/admin_doc/model_detail.html:61 +msgid "Methods with arguments" +msgstr "Phương pháp có tham số" + +#: engine/core/templates/admin_doc/model_detail.html:68 +msgid "Method" +msgstr "Phương pháp" + +#: engine/core/templates/admin_doc/model_detail.html:69 +msgid "Arguments" +msgstr "Luận điểm" + +#: engine/core/templates/admin_doc/model_detail.html:89 +msgid "Back to Model documentation" +msgstr "Trở lại tài liệu mô hình" + +#: engine/core/templates/admin_doc/model_index.html:17 +msgid "Model documentation" +msgstr "Tài liệu mô hình" + +#: engine/core/templates/admin_doc/model_index.html:44 +msgid "Model groups" +msgstr "Nhóm mô hình" + +#: engine/core/templates/admin_doc/template_detail.html:4 +#, python-format +msgid "Template: %(name)s" +msgstr "Mẫu: %(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:12 +msgid "Templates" +msgstr "Mẫu" + +#: engine/core/templates/admin_doc/template_detail.html:17 +#, python-format +msgid "" +"Template: %(name)s" +msgstr "" +"Mẫu: %(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:21 +#, python-format +msgid "Search path for template %(name)s:" +msgstr "Đường dẫn tìm kiếm cho mẫu %(name)s:" + +#: engine/core/templates/admin_doc/template_detail.html:29 +msgid "(does not exist)" +msgstr "(không tồn tại)" + +#: engine/core/templates/admin_doc/template_detail.html:40 +msgid "Back to Documentation" +msgstr "Trở lại Tài liệu" + +#: engine/core/templates/admin_doc/template_filter_index.html:4 +msgid "Template filters" +msgstr "Bộ lọc mẫu" + +#: engine/core/templates/admin_doc/template_filter_index.html:17 +msgid "Template filter documentation" +msgstr "Hướng dẫn sử dụng bộ lọc mẫu" + +#: engine/core/templates/admin_doc/template_filter_index.html:26 +#: engine/core/templates/admin_doc/template_filter_index.html:52 +msgid "Built-in filters" +msgstr "Bộ lọc tích hợp" + +#: engine/core/templates/admin_doc/template_filter_index.html:29 +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before using" +" the filter." +msgstr "" +"Để sử dụng các bộ lọc này, hãy đặt %(code)s trong mẫu của bạn " +"trước khi sử dụng bộ lọc." + +#: engine/core/templates/admin_doc/template_tag_index.html:4 +msgid "Template tags" +msgstr "Thẻ mẫu" + +#: engine/core/templates/admin_doc/template_tag_index.html:17 +msgid "Template tag documentation" +msgstr "Hướng dẫn sử dụng thẻ mẫu" + +#: engine/core/templates/admin_doc/template_tag_index.html:26 +#: engine/core/templates/admin_doc/template_tag_index.html:52 +msgid "Built-in tags" +msgstr "Thẻ tích hợp sẵn" + +#: engine/core/templates/admin_doc/template_tag_index.html:29 +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using the tag." +msgstr "" +"Để sử dụng các thẻ này, hãy đặt %(code)s trong mẫu của bạn trước khi " +"sử dụng thẻ." + +#: engine/core/templates/admin_doc/view_detail.html:4 +#, python-format +msgid "View: %(name)s" +msgstr "Xem: %(name)s" + +#: engine/core/templates/admin_doc/view_detail.html:28 +msgid "Context:" +msgstr "Bối cảnh:" + +#: engine/core/templates/admin_doc/view_detail.html:33 +msgid "Templates:" +msgstr "Mẫu:" + +#: engine/core/templates/admin_doc/view_detail.html:41 +msgid "Back to View documentation" +msgstr "Trở lại xem tài liệu" + +#: engine/core/templates/admin_doc/view_index.html:17 +msgid "View documentation" +msgstr "Xem tài liệu" + +#: engine/core/templates/admin_doc/view_index.html:28 +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Xem theo không gian tên %(name)s" + +#: engine/core/templates/admin_doc/view_index.html:30 +msgid "Views by empty namespace" +msgstr "Số lượt xem theo không gian tên trống" + +#: engine/core/templates/admin_doc/view_index.html:40 +#, python-format +msgid "" +"View function: %(full_name)s. Name: %(url_name)s." +msgstr "" +"Chức năng xem: %(full_name)s. Tên: %(url_name)s." + +#: engine/core/templates/admin_doc/view_index.html:54 +msgid "Jump to namespace" +msgstr "Chuyển đến không gian tên" + +#: engine/core/templates/admin_doc/view_index.html:59 +msgid "Empty namespace" +msgstr "Không gian tên trống" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -3088,7 +3449,7 @@ msgid "" msgstr "Thông tin bổ sung" #: engine/core/templates/digital_order_delivered_email.html:137 -#: engine/core/templates/json_table_widget.html:6 +#: engine/core/templates/json_table_widget.html:26 msgid "value" msgstr "Giá trị" @@ -3108,11 +3469,23 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "Trân trọng,
Đội ngũ %(project_name)s" -#: engine/core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:7 +msgid "Key" +msgstr "Chìa khóa" + +#: engine/core/templates/json_table_widget.html:8 +msgid "Value" +msgstr "Giá trị" + +#: engine/core/templates/json_table_widget.html:19 msgid "key" msgstr "Chìa khóa" -#: engine/core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:32 +msgid "Delete row" +msgstr "Xóa hàng" + +#: engine/core/templates/json_table_widget.html:44 msgid "Add Row" msgstr "Thêm hàng" @@ -3199,13 +3572,23 @@ msgstr "Bạn không có quyền thực hiện hành động này." msgid "NOMINATIM_URL must be configured." msgstr "Tham số NOMINATIM_URL phải được cấu hình!" -#: engine/core/validators.py:23 +#: engine/core/validators.py:18 +msgid "could not determine file type" +msgstr "Không thể xác định loại tệp." + +#: engine/core/validators.py:24 +#, python-brace-format +msgid "unsupported video format. supported formats: {supported}" +msgstr "" +"Định dạng video không được hỗ trợ. Các định dạng được hỗ trợ: {supported}" + +#: engine/core/validators.py:45 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "Kích thước hình ảnh không được vượt quá w{max_width} x h{max_height} pixel!" -#: engine/core/views.py:104 +#: engine/core/views.py:108 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3213,7 +3596,7 @@ msgstr "" "Xử lý yêu cầu về sơ đồ trang web (sitemap index) và trả về phản hồi XML. Nó " "đảm bảo rằng phản hồi bao gồm tiêu đề loại nội dung XML phù hợp." -#: engine/core/views.py:119 +#: engine/core/views.py:123 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3223,17 +3606,17 @@ msgstr "" "lấy phản hồi chi tiết phù hợp của sơ đồ trang web và đặt tiêu đề Content-" "Type cho XML." -#: engine/core/views.py:155 +#: engine/core/views.py:174 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Trả về danh sách các ngôn ngữ được hỗ trợ và thông tin tương ứng của chúng." -#: engine/core/views.py:182 +#: engine/core/views.py:201 msgid "Returns the parameters of the website as a JSON object." msgstr "Trả về các tham số của trang web dưới dạng đối tượng JSON." -#: engine/core/views.py:198 +#: engine/core/views.py:217 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3241,27 +3624,27 @@ msgstr "" "Xử lý các thao tác bộ nhớ đệm như đọc và ghi dữ liệu bộ nhớ đệm với khóa và " "thời gian chờ được chỉ định." -#: engine/core/views.py:220 +#: engine/core/views.py:239 msgid "Handles `contact us` form submissions." msgstr "Xử lý các biểu mẫu liên hệ." -#: engine/core/views.py:236 +#: engine/core/views.py:255 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." msgstr "Xử lý các yêu cầu xử lý và xác thực URL từ các yêu cầu POST đến." -#: engine/core/views.py:273 +#: engine/core/views.py:292 msgid "Handles global search queries." msgstr "Xử lý các truy vấn tìm kiếm toàn cầu." -#: engine/core/views.py:289 +#: engine/core/views.py:308 msgid "Handles the logic of buying as a business without registration." msgstr "" "Xử lý logic của việc mua hàng như một hoạt động kinh doanh mà không cần đăng" " ký." -#: engine/core/views.py:337 +#: engine/core/views.py:356 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3271,32 +3654,32 @@ msgstr "" " lưu trữ của dự án. Nếu tệp không được tìm thấy, một lỗi HTTP 404 sẽ được " "trả về để thông báo rằng tài nguyên không khả dụng." -#: engine/core/views.py:348 +#: engine/core/views.py:367 msgid "order_product_uuid is required" msgstr "order_product_uuid là trường bắt buộc." -#: engine/core/views.py:355 +#: engine/core/views.py:374 msgid "order product does not exist" msgstr "Sản phẩm không tồn tại" -#: engine/core/views.py:358 +#: engine/core/views.py:377 msgid "you can only download the digital asset once" msgstr "Bạn chỉ có thể tải xuống tài sản kỹ thuật số một lần." -#: engine/core/views.py:362 +#: engine/core/views.py:381 msgid "the order must be paid before downloading the digital asset" msgstr "" "Đơn hàng phải được thanh toán trước khi tải xuống tài sản kỹ thuật số." -#: engine/core/views.py:369 +#: engine/core/views.py:388 msgid "the order product does not have a product" msgstr "Sản phẩm đặt hàng không có sản phẩm." -#: engine/core/views.py:412 +#: engine/core/views.py:431 msgid "favicon not found" msgstr "Biểu tượng trang web không tìm thấy" -#: engine/core/views.py:418 +#: engine/core/views.py:437 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3306,7 +3689,7 @@ msgstr "" "không được tìm thấy, một lỗi HTTP 404 sẽ được trả về để thông báo rằng tài " "nguyên không khả dụng." -#: engine/core/views.py:432 +#: engine/core/views.py:451 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3317,16 +3700,20 @@ msgstr "" "Django. Nó sử dụng hàm `redirect` của Django để xử lý việc chuyển hướng " "HTTP." -#: engine/core/views.py:445 +#: engine/core/views.py:464 msgid "Returns current version of the Schon. " msgstr "Trả về phiên bản hiện tại của Schon." -#: engine/core/views.py:674 engine/core/views.py:689 +#: engine/core/views.py:475 +msgid "no image file provided" +msgstr "Không có tệp hình ảnh được cung cấp." + +#: engine/core/views.py:710 engine/core/views.py:725 #, python-format msgid "Revenue & Orders (last %(days)d)" msgstr "Doanh thu & Đơn hàng (lần cuối %(days)d)" -#: engine/core/views.py:870 +#: engine/core/views.py:911 msgid "Returns custom variables for Dashboard. " msgstr "Trả về các biến tùy chỉnh cho Bảng điều khiển." @@ -3414,7 +3801,7 @@ msgstr "" "thương hiệu. Nó sử dụng khung ViewSet của Django để đơn giản hóa việc triển " "khai các điểm cuối API cho các đối tượng thương hiệu." -#: engine/core/viewsets.py:458 +#: engine/core/viewsets.py:460 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3432,7 +3819,17 @@ msgstr "" "thức để lấy thông tin chi tiết về sản phẩm, áp dụng quyền truy cập và truy " "cập phản hồi liên quan đến sản phẩm." -#: engine/core/viewsets.py:605 +#: engine/core/viewsets.py:541 +msgid "identificator_type and identificators are required" +msgstr "Loại định danh và các định danh là bắt buộc." + +#: engine/core/viewsets.py:554 +msgid "identificator_type must be one of: uuid, slug, sku" +msgstr "" +"Loại định danh (identificator_type) phải là một trong các giá trị sau: uuid," +" slug, sku" + +#: engine/core/viewsets.py:635 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3447,7 +3844,7 @@ msgstr "" "khác nhau. Mục đích của lớp này là cung cấp truy cập thuận tiện đến các tài " "nguyên liên quan đến Nhà cung cấp thông qua khung làm việc Django REST." -#: engine/core/viewsets.py:625 +#: engine/core/viewsets.py:655 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3463,7 +3860,7 @@ msgstr "" "với các đối tượng Feedback có thể truy cập. Nó kế thừa từ lớp cơ sở " "`schonViewSet` và sử dụng hệ thống lọc của Django để truy vấn dữ liệu." -#: engine/core/viewsets.py:652 +#: engine/core/viewsets.py:682 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3482,7 +3879,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." -#: engine/core/viewsets.py:914 +#: engine/core/viewsets.py:944 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3497,11 +3894,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." -#: engine/core/viewsets.py:974 +#: engine/core/viewsets.py:1004 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." -#: engine/core/viewsets.py:988 +#: engine/core/viewsets.py:1018 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3509,15 +3906,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." -#: engine/core/viewsets.py:1019 +#: engine/core/viewsets.py:1049 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." -#: engine/core/viewsets.py:1032 +#: engine/core/viewsets.py:1062 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." -#: engine/core/viewsets.py:1046 +#: engine/core/viewsets.py:1076 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3536,7 +3933,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." -#: engine/core/viewsets.py:1183 +#: engine/core/viewsets.py:1213 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3550,12 +3947,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." -#: engine/core/viewsets.py:1254 +#: engine/core/viewsets.py:1275 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Lỗi địa chỉ địa lý: {e}" -#: engine/core/viewsets.py:1262 +#: engine/core/viewsets.py:1283 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/zh_Hans/LC_MESSAGES/django.mo b/engine/core/locale/zh_Hans/LC_MESSAGES/django.mo index 42f721f0..fea76871 100644 Binary files a/engine/core/locale/zh_Hans/LC_MESSAGES/django.mo and b/engine/core/locale/zh_Hans/LC_MESSAGES/django.mo differ diff --git a/engine/core/locale/zh_Hans/LC_MESSAGES/django.po b/engine/core/locale/zh_Hans/LC_MESSAGES/django.po index 2992ce1a..dbe45724 100644 --- a/engine/core/locale/zh_Hans/LC_MESSAGES/django.po +++ b/engine/core/locale/zh_Hans/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -47,113 +47,133 @@ msgstr "改装" msgid "when the object was last modified" msgstr "对象最后一次编辑的时间" -#: engine/core/admin.py:94 +#: engine/core/admin.py:98 msgid "translations" msgstr "翻译" -#: engine/core/admin.py:102 +#: engine/core/admin.py:106 msgid "general" msgstr "一般情况" -#: engine/core/admin.py:106 +#: engine/core/admin.py:110 msgid "relations" msgstr "关系" -#: engine/core/admin.py:111 +#: engine/core/admin.py:115 msgid "additional info" msgstr "其他信息" -#: engine/core/admin.py:133 +#: engine/core/admin.py:137 msgid "metadata" msgstr "元数据" -#: engine/core/admin.py:141 +#: engine/core/admin.py:145 msgid "timestamps" msgstr "时间戳" -#: engine/core/admin.py:158 +#: engine/core/admin.py:162 #, python-format msgid "Activate selected %(verbose_name_plural)s" msgstr "激活选定的 %(verbose_name_plural)s" -#: engine/core/admin.py:166 +#: engine/core/admin.py:170 msgid "selected items have been activated." msgstr "所选项目已激活!" -#: engine/core/admin.py:174 +#: engine/core/admin.py:178 #, python-format msgid "Deactivate selected %(verbose_name_plural)s" msgstr "停用选定的 %(verbose_name_plural)s" -#: engine/core/admin.py:184 +#: engine/core/admin.py:188 msgid "selected items have been deactivated." msgstr "选定项目已停用!" -#: engine/core/admin.py:196 engine/core/graphene/object_types.py:653 -#: engine/core/graphene/object_types.py:660 engine/core/models.py:832 -#: engine/core/models.py:840 +#: engine/core/admin.py:200 engine/core/graphene/object_types.py:666 +#: engine/core/graphene/object_types.py:673 engine/core/models.py:918 +#: engine/core/models.py:928 msgid "attribute value" msgstr "属性值" -#: engine/core/admin.py:197 engine/core/graphene/object_types.py:77 -#: engine/core/models.py:841 +#: engine/core/admin.py:201 engine/core/graphene/object_types.py:81 +#: engine/core/models.py:929 msgid "attribute values" msgstr "属性值" -#: engine/core/admin.py:208 +#: engine/core/admin.py:212 engine/core/models.py:2232 msgid "image" msgstr "图片" -#: engine/core/admin.py:209 engine/core/graphene/object_types.py:530 +#: engine/core/admin.py:213 engine/core/graphene/object_types.py:535 msgid "images" msgstr "图片" -#: engine/core/admin.py:220 engine/core/models.py:576 +#: engine/core/admin.py:224 engine/core/models.py:635 msgid "stock" msgstr "库存" -#: engine/core/admin.py:221 engine/core/graphene/object_types.py:713 +#: engine/core/admin.py:225 engine/core/graphene/object_types.py:735 msgid "stocks" msgstr "股票" -#: engine/core/admin.py:232 engine/core/models.py:1938 +#: engine/core/admin.py:236 engine/core/models.py:2046 msgid "order product" msgstr "订购产品" -#: engine/core/admin.py:233 engine/core/graphene/object_types.py:441 -#: engine/core/models.py:1939 +#: engine/core/admin.py:237 engine/core/graphene/object_types.py:446 +#: engine/core/models.py:2047 msgid "order products" msgstr "订购产品" -#: engine/core/admin.py:251 engine/core/admin.py:252 +#: engine/core/admin.py:255 engine/core/admin.py:256 msgid "children" msgstr "儿童" -#: engine/core/admin.py:528 +#: engine/core/admin.py:545 +msgid "video preview" +msgstr "视频预览" + +#: engine/core/admin.py:551 msgid "has images" msgstr "图片" -#: engine/core/admin.py:531 +#: engine/core/admin.py:554 #, python-format msgid "Export selected %(verbose_name_plural)s to marketplaces' feeds" msgstr "激活选定的 %(verbose_name_plural)s" -#: engine/core/admin.py:542 +#: engine/core/admin.py:565 #, python-format msgid "selected %(verbose_name_plural)s have been marked for export." msgstr "激活选定的 %(verbose_name_plural)s" -#: engine/core/admin.py:553 +#: engine/core/admin.py:576 #, python-format msgid "Ban selected %(verbose_name_plural)s from marketplaces' feeds" msgstr "激活选定的 %(verbose_name_plural)s" -#: engine/core/admin.py:564 +#: engine/core/admin.py:587 #, python-format msgid "selected %(verbose_name_plural)s have been banned from export." msgstr "激活选定的 %(verbose_name_plural)s" -#: engine/core/admin.py:1116 +#: engine/core/admin.py:1030 +msgid "Preview" +msgstr "预览" + +#: engine/core/admin.py:1031 +msgid "Metadata" +msgstr "元数据" + +#: engine/core/admin.py:1034 +msgid "preview" +msgstr "预览" + +#: engine/core/admin.py:1043 +msgid "image preview" +msgstr "图片预览" + +#: engine/core/admin.py:1166 msgid "Config" msgstr "配置" @@ -217,7 +237,7 @@ msgid "" "parameter both." msgstr "该 API 的 OpenApi3 模式。可通过内容协商选择格式。可通过 Accept-Language 和查询参数选择语言。" -#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:36 +#: engine/core/docs/drf/views.py:46 engine/core/graphene/mutations.py:37 msgid "cache I/O" msgstr "缓存输入/输出" @@ -241,7 +261,7 @@ msgstr "获取应用程序的可公开参数" msgid "send a message to the support team" msgstr "向支持团队发送信息" -#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:106 engine/core/graphene/mutations.py:59 msgid "request a CORSed URL" msgstr "请求 CORSed URL。只允许使用 https。" @@ -369,11 +389,11 @@ msgstr "重写现有类别,保存不可编辑内容" msgid "rewrite some fields of an existing category saving non-editables" msgstr "重写现有类别的某些字段,保存不可编辑内容" -#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:757 -#: engine/core/docs/drf/viewsets.py:1046 -#: engine/core/graphene/object_types.py:119 -#: engine/core/graphene/object_types.py:239 -#: engine/core/graphene/object_types.py:540 +#: engine/core/docs/drf/viewsets.py:280 engine/core/docs/drf/viewsets.py:781 +#: engine/core/docs/drf/viewsets.py:1070 +#: engine/core/graphene/object_types.py:123 +#: engine/core/graphene/object_types.py:247 +#: engine/core/graphene/object_types.py:546 msgid "SEO Meta snapshot" msgstr "搜索引擎优化元快照" @@ -643,7 +663,7 @@ msgstr "检索单个产品(详细视图)" #: engine/core/docs/drf/viewsets.py:653 engine/core/docs/drf/viewsets.py:683 #: engine/core/docs/drf/viewsets.py:706 engine/core/docs/drf/viewsets.py:725 -#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:763 +#: engine/core/docs/drf/viewsets.py:744 engine/core/docs/drf/viewsets.py:787 msgid "Product UUID or slug" msgstr "产品 UUID 或 Slug" @@ -668,267 +688,280 @@ msgstr "删除产品" msgid "lists all permitted feedbacks for a product" msgstr "列出产品的所有允许反馈" -#: engine/core/docs/drf/viewsets.py:758 +#: engine/core/docs/drf/viewsets.py:757 +msgid "retrieve exact products by identifier" +msgstr "通过标识符检索精确产品" + +#: engine/core/docs/drf/viewsets.py:759 +msgid "" +"retrieve a list of products by identifier type (uuid, slug, or sku). Send a " +"POST request with `identificator_type` and `identificators` (list of " +"values)." +msgstr "" +"通过标识符类型(uuid、slug 或 sku)检索产品列表。发送 POST 请求,包含 `identificator_type` 和 " +"`identificators`(值列表)。" + +#: engine/core/docs/drf/viewsets.py:782 msgid "returns a snapshot of the product's SEO meta data" msgstr "返回产品的搜索引擎优化元数据快照" -#: engine/core/docs/drf/viewsets.py:779 +#: engine/core/docs/drf/viewsets.py:803 msgid "list all addresses" msgstr "列出所有地址" -#: engine/core/docs/drf/viewsets.py:789 +#: engine/core/docs/drf/viewsets.py:813 msgid "retrieve a single address" msgstr "检索单个地址" -#: engine/core/docs/drf/viewsets.py:799 +#: engine/core/docs/drf/viewsets.py:823 msgid "create a new address" msgstr "创建新地址" -#: engine/core/docs/drf/viewsets.py:810 +#: engine/core/docs/drf/viewsets.py:834 msgid "delete an address" msgstr "删除地址" -#: engine/core/docs/drf/viewsets.py:820 +#: engine/core/docs/drf/viewsets.py:844 msgid "update an entire address" msgstr "更新整个地址" -#: engine/core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:855 msgid "partially update an address" msgstr "部分更新地址" -#: engine/core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:866 msgid "autocomplete address suggestions" msgstr "自动完成地址输入" -#: engine/core/docs/drf/viewsets.py:848 +#: engine/core/docs/drf/viewsets.py:872 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "原始数据查询字符串,请附加来自地理 IP 端点的数据" -#: engine/core/docs/drf/viewsets.py:855 +#: engine/core/docs/drf/viewsets.py:879 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "限制结果数量,1 < limit < 10,默认:5" -#: engine/core/docs/drf/viewsets.py:871 +#: engine/core/docs/drf/viewsets.py:895 msgid "list all feedbacks (simple view)" msgstr "列出所有反馈(简单视图)" -#: engine/core/docs/drf/viewsets.py:881 +#: engine/core/docs/drf/viewsets.py:905 msgid "retrieve a single feedback (detailed view)" msgstr "检索单个反馈(详细视图)" -#: engine/core/docs/drf/viewsets.py:888 +#: engine/core/docs/drf/viewsets.py:912 msgid "create a feedback" msgstr "创建反馈" -#: engine/core/docs/drf/viewsets.py:895 +#: engine/core/docs/drf/viewsets.py:919 msgid "delete a feedback" msgstr "删除反馈" -#: engine/core/docs/drf/viewsets.py:902 +#: engine/core/docs/drf/viewsets.py:926 msgid "rewrite an existing feedback saving non-editables" msgstr "重写现有的反馈,保存不可编辑的内容" -#: engine/core/docs/drf/viewsets.py:909 +#: engine/core/docs/drf/viewsets.py:933 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "重写现有反馈的某些字段,保存不可编辑的内容" -#: engine/core/docs/drf/viewsets.py:919 +#: engine/core/docs/drf/viewsets.py:943 msgid "list all order–product relations (simple view)" msgstr "列出所有订单-产品关系(简单视图)" -#: engine/core/docs/drf/viewsets.py:929 +#: engine/core/docs/drf/viewsets.py:953 msgid "retrieve a single order–product relation (detailed view)" msgstr "检索单一订单-产品关系(详细视图)" -#: engine/core/docs/drf/viewsets.py:939 +#: engine/core/docs/drf/viewsets.py:963 msgid "create a new order–product relation" msgstr "创建新的订单-产品关系" -#: engine/core/docs/drf/viewsets.py:949 +#: engine/core/docs/drf/viewsets.py:973 msgid "replace an existing order–product relation" msgstr "替换现有的订单-产品关系" -#: engine/core/docs/drf/viewsets.py:959 +#: engine/core/docs/drf/viewsets.py:983 msgid "partially update an existing order–product relation" msgstr "部分更新现有的订单-产品关系" -#: engine/core/docs/drf/viewsets.py:969 +#: engine/core/docs/drf/viewsets.py:993 msgid "delete an order–product relation" msgstr "删除订单-产品关系" -#: engine/core/docs/drf/viewsets.py:979 +#: engine/core/docs/drf/viewsets.py:1003 msgid "add or remove feedback on an order–product relation" msgstr "添加或删除订单与产品关系中的反馈信息" -#: engine/core/docs/drf/viewsets.py:996 +#: engine/core/docs/drf/viewsets.py:1020 msgid "list all brands (simple view)" msgstr "列出所有品牌(简单视图)" -#: engine/core/docs/drf/viewsets.py:1003 +#: engine/core/docs/drf/viewsets.py:1027 msgid "retrieve a single brand (detailed view)" msgstr "检索单一品牌(详细视图)" -#: engine/core/docs/drf/viewsets.py:1008 engine/core/docs/drf/viewsets.py:1051 +#: engine/core/docs/drf/viewsets.py:1032 engine/core/docs/drf/viewsets.py:1075 msgid "Brand UUID or slug" msgstr "品牌 UUID 或标签" -#: engine/core/docs/drf/viewsets.py:1018 +#: engine/core/docs/drf/viewsets.py:1042 msgid "create a brand" msgstr "创建品牌" -#: engine/core/docs/drf/viewsets.py:1025 +#: engine/core/docs/drf/viewsets.py:1049 msgid "delete a brand" msgstr "删除品牌" -#: engine/core/docs/drf/viewsets.py:1032 +#: engine/core/docs/drf/viewsets.py:1056 msgid "rewrite an existing brand saving non-editables" msgstr "重写现有品牌,节省非编辑材料" -#: engine/core/docs/drf/viewsets.py:1039 +#: engine/core/docs/drf/viewsets.py:1063 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "重写现有品牌的某些字段,保存不可编辑字段" -#: engine/core/docs/drf/viewsets.py:1064 +#: engine/core/docs/drf/viewsets.py:1088 msgid "list all vendors (simple view)" msgstr "列出所有供应商(简单视图)" -#: engine/core/docs/drf/viewsets.py:1074 +#: engine/core/docs/drf/viewsets.py:1098 msgid "retrieve a single vendor (detailed view)" msgstr "检索单个供应商(详细视图)" -#: engine/core/docs/drf/viewsets.py:1081 +#: engine/core/docs/drf/viewsets.py:1105 msgid "create a vendor" msgstr "创建供应商" -#: engine/core/docs/drf/viewsets.py:1088 +#: engine/core/docs/drf/viewsets.py:1112 msgid "delete a vendor" msgstr "删除供应商" -#: engine/core/docs/drf/viewsets.py:1095 +#: engine/core/docs/drf/viewsets.py:1119 msgid "rewrite an existing vendor saving non-editables" msgstr "重写现有供应商,保存不可编辑内容" -#: engine/core/docs/drf/viewsets.py:1102 +#: engine/core/docs/drf/viewsets.py:1126 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "重写现有供应商的某些字段,保存不可编辑字段" -#: engine/core/docs/drf/viewsets.py:1112 +#: engine/core/docs/drf/viewsets.py:1136 msgid "list all product images (simple view)" msgstr "列出所有产品图片(简单视图)" -#: engine/core/docs/drf/viewsets.py:1122 +#: engine/core/docs/drf/viewsets.py:1146 msgid "retrieve a single product image (detailed view)" msgstr "检索单个产品图片(详细视图)" -#: engine/core/docs/drf/viewsets.py:1129 +#: engine/core/docs/drf/viewsets.py:1153 msgid "create a product image" msgstr "创建产品形象" -#: engine/core/docs/drf/viewsets.py:1139 +#: engine/core/docs/drf/viewsets.py:1163 msgid "delete a product image" msgstr "删除产品图像" -#: engine/core/docs/drf/viewsets.py:1146 +#: engine/core/docs/drf/viewsets.py:1170 msgid "rewrite an existing product image saving non-editables" msgstr "重写现有产品图像,保存不可编辑图像" -#: engine/core/docs/drf/viewsets.py:1154 +#: engine/core/docs/drf/viewsets.py:1178 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "重写现有产品图像的某些字段,保存不可编辑的内容" -#: engine/core/docs/drf/viewsets.py:1165 +#: engine/core/docs/drf/viewsets.py:1189 msgid "list all promo codes (simple view)" msgstr "列出所有促销代码(简单视图)" -#: engine/core/docs/drf/viewsets.py:1175 +#: engine/core/docs/drf/viewsets.py:1199 msgid "retrieve a single promo code (detailed view)" msgstr "检索单个促销代码(详细视图)" -#: engine/core/docs/drf/viewsets.py:1182 +#: engine/core/docs/drf/viewsets.py:1206 msgid "create a promo code" msgstr "创建促销代码" -#: engine/core/docs/drf/viewsets.py:1189 +#: engine/core/docs/drf/viewsets.py:1213 msgid "delete a promo code" msgstr "删除促销代码" -#: engine/core/docs/drf/viewsets.py:1196 +#: engine/core/docs/drf/viewsets.py:1220 msgid "rewrite an existing promo code saving non-editables" msgstr "重写现有促销代码,保存不可编辑的代码" -#: engine/core/docs/drf/viewsets.py:1203 +#: engine/core/docs/drf/viewsets.py:1227 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "重写现有促销代码的某些字段,保存不可编辑的内容" -#: engine/core/docs/drf/viewsets.py:1213 +#: engine/core/docs/drf/viewsets.py:1237 msgid "list all promotions (simple view)" msgstr "列出所有促销活动(简单视图)" -#: engine/core/docs/drf/viewsets.py:1223 +#: engine/core/docs/drf/viewsets.py:1247 msgid "retrieve a single promotion (detailed view)" msgstr "检索单个促销活动(详细视图)" -#: engine/core/docs/drf/viewsets.py:1230 +#: engine/core/docs/drf/viewsets.py:1254 msgid "create a promotion" msgstr "创建促销活动" -#: engine/core/docs/drf/viewsets.py:1237 +#: engine/core/docs/drf/viewsets.py:1261 msgid "delete a promotion" msgstr "删除促销" -#: engine/core/docs/drf/viewsets.py:1244 +#: engine/core/docs/drf/viewsets.py:1268 msgid "rewrite an existing promotion saving non-editables" msgstr "重写现有促销活动,保存不可编辑内容" -#: engine/core/docs/drf/viewsets.py:1251 +#: engine/core/docs/drf/viewsets.py:1275 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "重写现有促销活动的某些字段,保存不可编辑字段" -#: engine/core/docs/drf/viewsets.py:1261 +#: engine/core/docs/drf/viewsets.py:1285 msgid "list all stocks (simple view)" msgstr "列出所有股票(简单视图)" -#: engine/core/docs/drf/viewsets.py:1268 +#: engine/core/docs/drf/viewsets.py:1292 msgid "retrieve a single stock (detailed view)" msgstr "检索单个股票(详细视图)" -#: engine/core/docs/drf/viewsets.py:1275 +#: engine/core/docs/drf/viewsets.py:1299 msgid "create a stock record" msgstr "创建库存记录" -#: engine/core/docs/drf/viewsets.py:1282 +#: engine/core/docs/drf/viewsets.py:1306 msgid "delete a stock record" msgstr "删除库存记录" -#: engine/core/docs/drf/viewsets.py:1289 +#: engine/core/docs/drf/viewsets.py:1313 msgid "rewrite an existing stock record saving non-editables" msgstr "重写现有库存记录,保存不可编辑数据" -#: engine/core/docs/drf/viewsets.py:1297 +#: engine/core/docs/drf/viewsets.py:1321 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "重写现有库存记录的某些字段,保存不可编辑的内容" -#: engine/core/docs/drf/viewsets.py:1308 +#: engine/core/docs/drf/viewsets.py:1332 msgid "list all product tags (simple view)" msgstr "列出所有产品标签(简单视图)" -#: engine/core/docs/drf/viewsets.py:1318 +#: engine/core/docs/drf/viewsets.py:1342 msgid "retrieve a single product tag (detailed view)" msgstr "检索单个产品标签(详细视图)" -#: engine/core/docs/drf/viewsets.py:1325 +#: engine/core/docs/drf/viewsets.py:1349 msgid "create a product tag" msgstr "创建产品标签" -#: engine/core/docs/drf/viewsets.py:1335 +#: engine/core/docs/drf/viewsets.py:1359 msgid "delete a product tag" msgstr "删除产品标签" -#: engine/core/docs/drf/viewsets.py:1342 +#: engine/core/docs/drf/viewsets.py:1366 msgid "rewrite an existing product tag saving non-editables" msgstr "重写现有产品标签,保存不可编辑内容" -#: engine/core/docs/drf/viewsets.py:1350 +#: engine/core/docs/drf/viewsets.py:1374 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "重写现有产品标签的某些字段,保存不可编辑字段" @@ -937,420 +970,426 @@ msgstr "重写现有产品标签的某些字段,保存不可编辑字段" msgid "no search term provided." msgstr "未提供搜索条件。" -#: engine/core/filters.py:78 engine/core/filters.py:484 -#: engine/core/filters.py:625 +#: engine/core/filters.py:79 engine/core/filters.py:485 +#: engine/core/filters.py:626 msgid "Search" msgstr "搜索" -#: engine/core/filters.py:79 engine/core/filters.py:663 -#: engine/core/filters.py:692 +#: engine/core/filters.py:80 engine/core/filters.py:664 +#: engine/core/filters.py:693 msgid "UUID" msgstr "UUID" -#: engine/core/filters.py:80 engine/core/filters.py:487 -#: engine/core/filters.py:627 +#: engine/core/filters.py:81 engine/core/filters.py:488 +#: engine/core/filters.py:628 msgid "Name" msgstr "名称" -#: engine/core/filters.py:82 engine/core/filters.py:630 +#: engine/core/filters.py:83 engine/core/filters.py:631 msgid "Categories" msgstr "类别" -#: engine/core/filters.py:86 +#: engine/core/filters.py:87 msgid "Categories Slugs" msgstr "类别 蛞蝓" -#: engine/core/filters.py:88 engine/core/filters.py:495 +#: engine/core/filters.py:89 engine/core/filters.py:496 +#: engine/core/templates/admin_doc/index.html:37 +#: engine/core/templates/admin_doc/template_tag_index.html:12 msgid "Tags" msgstr "标签" -#: engine/core/filters.py:90 +#: engine/core/filters.py:91 msgid "Min Price" msgstr "最低价格" -#: engine/core/filters.py:93 +#: engine/core/filters.py:94 msgid "Max Price" msgstr "最高价格" -#: engine/core/filters.py:95 +#: engine/core/filters.py:96 msgid "Is Active" msgstr "处于活动状态" -#: engine/core/filters.py:96 +#: engine/core/filters.py:97 msgid "Brand" msgstr "品牌" -#: engine/core/filters.py:97 +#: engine/core/filters.py:98 msgid "Attributes" msgstr "属性" -#: engine/core/filters.py:99 +#: engine/core/filters.py:100 msgid "Quantity" msgstr "数量" -#: engine/core/filters.py:101 engine/core/filters.py:489 -#: engine/core/filters.py:628 engine/core/models.py:316 -#: engine/core/models.py:497 engine/core/models.py:663 +#: engine/core/filters.py:102 engine/core/filters.py:490 +#: engine/core/filters.py:629 engine/core/models.py:339 +#: engine/core/models.py:546 engine/core/models.py:736 msgid "Slug" msgstr "蛞蝓" -#: engine/core/filters.py:102 +#: engine/core/filters.py:103 msgid "Is Digital" msgstr "是数字" -#: engine/core/filters.py:104 +#: engine/core/filters.py:105 msgid "Include sub-categories" msgstr "包括子类别" -#: engine/core/filters.py:108 +#: engine/core/filters.py:109 msgid "Include personal ordered" msgstr "包括个人订购的产品" -#: engine/core/filters.py:110 engine/core/models.py:667 +#: engine/core/filters.py:111 engine/core/models.py:740 msgid "SKU" msgstr "商品编号" -#: engine/core/filters.py:212 +#: engine/core/filters.py:213 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "必须有 category_uuid 才能使用 include_subcategories 标志" -#: engine/core/filters.py:398 +#: engine/core/filters.py:399 msgid "Search (ID, product name or part number)" msgstr "搜索(ID、产品名称或零件编号)" -#: engine/core/filters.py:402 +#: engine/core/filters.py:403 msgid "Bought after (inclusive)" msgstr "之后购买(含)" -#: engine/core/filters.py:405 +#: engine/core/filters.py:406 msgid "Bought before (inclusive)" msgstr "之前购买(含)" -#: engine/core/filters.py:410 engine/core/filters.py:461 -#: engine/core/filters.py:697 +#: engine/core/filters.py:411 engine/core/filters.py:462 +#: engine/core/filters.py:698 msgid "User email" msgstr "用户电子邮件" -#: engine/core/filters.py:413 engine/core/filters.py:464 -#: engine/core/filters.py:672 engine/core/filters.py:694 +#: engine/core/filters.py:414 engine/core/filters.py:465 +#: engine/core/filters.py:673 engine/core/filters.py:695 msgid "User UUID" msgstr "用户 UUID" -#: engine/core/filters.py:415 +#: engine/core/filters.py:416 msgid "Status" msgstr "现状" -#: engine/core/filters.py:419 +#: engine/core/filters.py:420 msgid "Human Readable ID" msgstr "人可读 ID" -#: engine/core/filters.py:488 +#: engine/core/filters.py:489 msgid "Parent" msgstr "家长" -#: engine/core/filters.py:492 +#: engine/core/filters.py:493 msgid "Whole category(has at least 1 product or not)" msgstr "整个类别(是否至少有 1 个产品)" -#: engine/core/filters.py:496 +#: engine/core/filters.py:497 msgid "Level" msgstr "级别" -#: engine/core/filters.py:667 +#: engine/core/filters.py:668 msgid "Product UUID" msgstr "产品 UUID" -#: engine/core/graphene/mutations.py:40 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "在缓存中查找或设置的关键字" -#: engine/core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:43 msgid "data to store in cache" msgstr "缓存中要存储的数据" -#: engine/core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:46 msgid "timeout in seconds to set the data for into the cache" msgstr "将数据设置为缓存的超时(以秒为单位" -#: engine/core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:49 msgid "cached data" msgstr "缓存数据" -#: engine/core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:64 msgid "camelized JSON data from the requested URL" msgstr "从请求的 URL 中获取驼峰化 JSON 数据" -#: engine/core/graphene/mutations.py:68 engine/core/views.py:248 +#: engine/core/graphene/mutations.py:69 engine/core/views.py:267 msgid "only URLs starting with http(s):// are allowed" msgstr "只允许使用以 http(s):// 开头的 URL" -#: engine/core/graphene/mutations.py:86 +#: engine/core/graphene/mutations.py:87 msgid "add a product to the order" msgstr "在订单中添加产品" -#: engine/core/graphene/mutations.py:109 engine/core/graphene/mutations.py:138 -#: engine/core/graphene/mutations.py:254 engine/core/graphene/mutations.py:306 +#: engine/core/graphene/mutations.py:110 engine/core/graphene/mutations.py:139 +#: engine/core/graphene/mutations.py:256 engine/core/graphene/mutations.py:308 #, python-brace-format msgid "order {order_uuid} not found" msgstr "未找到 {order_uuid} 订单!" -#: engine/core/graphene/mutations.py:115 engine/core/graphene/mutations.py:166 +#: engine/core/graphene/mutations.py:116 engine/core/graphene/mutations.py:167 msgid "remove a product from the order" msgstr "从订单中删除产品" -#: engine/core/graphene/mutations.py:144 +#: engine/core/graphene/mutations.py:145 msgid "remove all products from the order" msgstr "从订单中删除所有产品" -#: engine/core/graphene/mutations.py:189 +#: engine/core/graphene/mutations.py:190 msgid "buy an order" msgstr "购买订单" -#: engine/core/graphene/mutations.py:220 engine/core/graphene/mutations.py:282 +#: engine/core/graphene/mutations.py:222 engine/core/graphene/mutations.py:284 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "请提供 order_uuid 或 order_hr_id(互斥)!" -#: engine/core/graphene/mutations.py:249 engine/core/graphene/mutations.py:524 -#: engine/core/graphene/mutations.py:573 engine/core/viewsets.py:753 +#: engine/core/graphene/mutations.py:251 engine/core/graphene/mutations.py:526 +#: engine/core/graphene/mutations.py:576 engine/core/viewsets.py:783 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "order.buy() 方法中的类型有误:{type(instance)!s}" -#: engine/core/graphene/mutations.py:260 +#: engine/core/graphene/mutations.py:262 msgid "perform an action on a list of products in the order" msgstr "对订单中的产品列表执行操作" -#: engine/core/graphene/mutations.py:265 +#: engine/core/graphene/mutations.py:267 msgid "remove/add" msgstr "删除/添加" -#: engine/core/graphene/mutations.py:301 engine/core/graphene/mutations.py:342 +#: engine/core/graphene/mutations.py:303 engine/core/graphene/mutations.py:342 msgid "action must be either add or remove" msgstr "操作必须是 \"添加 \"或 \"删除\"!" -#: engine/core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:314 msgid "perform an action on a list of products in the wishlist" msgstr "对愿望清单中的产品列表执行操作" -#: engine/core/graphene/mutations.py:330 -msgid "please provide wishlist_uuid value" -msgstr "请提供 `wishlist_uuid` 值。" - -#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:423 -#: engine/core/graphene/mutations.py:451 engine/core/graphene/mutations.py:479 -#: engine/core/graphene/mutations.py:529 +#: engine/core/graphene/mutations.py:347 engine/core/graphene/mutations.py:424 +#: engine/core/graphene/mutations.py:452 engine/core/graphene/mutations.py:480 +#: engine/core/graphene/mutations.py:531 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "未找到 Wishlist {wishlist_uuid}!" -#: engine/core/graphene/mutations.py:401 +#: engine/core/graphene/mutations.py:402 msgid "add a product to the wishlist" msgstr "在订单中添加产品" -#: engine/core/graphene/mutations.py:429 +#: engine/core/graphene/mutations.py:430 msgid "remove a product from the wishlist" msgstr "从订单中删除产品" -#: engine/core/graphene/mutations.py:457 +#: engine/core/graphene/mutations.py:458 msgid "remove all products from the wishlist" msgstr "从订单中删除产品" -#: engine/core/graphene/mutations.py:485 +#: engine/core/graphene/mutations.py:486 msgid "buy all products from the wishlist" msgstr "从订单中删除产品" -#: engine/core/graphene/mutations.py:535 +#: engine/core/graphene/mutations.py:537 msgid "buy a product" msgstr "购买订单" -#: engine/core/graphene/mutations.py:542 +#: engine/core/graphene/mutations.py:544 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" msgstr "请以字符串形式发送属性,格式如 attr1=value1,attr2=value2" -#: engine/core/graphene/mutations.py:580 +#: engine/core/graphene/mutations.py:583 msgid "add or delete a feedback for orderproduct" msgstr "添加或删除订单产品的反馈信息" -#: engine/core/graphene/mutations.py:606 +#: engine/core/graphene/mutations.py:610 msgid "action must be either `add` or `remove`" msgstr "操作必须是 \"添加 \"或 \"删除\"!" -#: engine/core/graphene/mutations.py:609 +#: engine/core/graphene/mutations.py:613 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "未找到订购产品 {order_product_uuid}!" -#: engine/core/graphene/mutations.py:616 +#: engine/core/graphene/mutations.py:620 msgid "original address string provided by the user" msgstr "用户提供的原始地址字符串" -#: engine/core/graphene/mutations.py:653 engine/core/models.py:986 -#: engine/core/models.py:999 engine/core/models.py:1443 -#: engine/core/models.py:1474 engine/core/models.py:1505 -#: engine/core/viewsets.py:760 +#: engine/core/graphene/mutations.py:662 engine/core/models.py:1079 +#: engine/core/models.py:1092 engine/core/models.py:1544 +#: engine/core/models.py:1575 engine/core/models.py:1606 +#: engine/core/viewsets.py:790 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} 不存在:{uuid}!" -#: engine/core/graphene/mutations.py:667 +#: engine/core/graphene/mutations.py:676 msgid "limit must be between 1 and 10" msgstr "限值必须在 1 和 10 之间" -#: engine/core/graphene/mutations.py:716 +#: engine/core/graphene/mutations.py:726 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - 工作起来得心应手" -#: engine/core/graphene/object_types.py:84 -#: engine/core/graphene/object_types.py:420 -#: engine/core/graphene/object_types.py:471 engine/core/models.py:803 -#: engine/core/models.py:1297 engine/core/models.py:2033 +#: engine/core/graphene/object_types.py:88 +#: engine/core/graphene/object_types.py:425 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:889 +#: engine/core/models.py:1394 engine/core/models.py:2139 msgid "attributes" msgstr "属性" -#: engine/core/graphene/object_types.py:97 +#: engine/core/graphene/object_types.py:101 msgid "grouped attributes" msgstr "分组属性" -#: engine/core/graphene/object_types.py:104 +#: engine/core/graphene/object_types.py:108 msgid "groups of attributes" msgstr "属性组" -#: engine/core/graphene/object_types.py:118 -#: engine/core/graphene/object_types.py:217 -#: engine/core/graphene/object_types.py:255 engine/core/models.py:440 +#: engine/core/graphene/object_types.py:122 +#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:264 engine/core/models.py:489 msgid "categories" msgstr "类别" -#: engine/core/graphene/object_types.py:134 engine/core/models.py:511 +#: engine/core/graphene/object_types.py:138 engine/core/models.py:564 msgid "brands" msgstr "品牌" -#: engine/core/graphene/object_types.py:219 +#: engine/core/graphene/object_types.py:226 msgid "category image url" msgstr "类别" -#: engine/core/graphene/object_types.py:220 -#: engine/core/graphene/object_types.py:365 engine/core/models.py:278 +#: engine/core/graphene/object_types.py:227 +#: engine/core/graphene/object_types.py:369 engine/core/models.py:301 msgid "markup percentage" msgstr "加价百分比" -#: engine/core/graphene/object_types.py:224 +#: engine/core/graphene/object_types.py:231 msgid "which attributes and values can be used for filtering this category." msgstr "哪些属性和值可用于筛选该类别。" -#: engine/core/graphene/object_types.py:230 +#: engine/core/graphene/object_types.py:237 msgid "" "minimum and maximum prices for products in this category, if available." msgstr "该类别产品的最低和最高价格(如有)。" -#: engine/core/graphene/object_types.py:234 +#: engine/core/graphene/object_types.py:240 +msgid "brands in this category" +msgstr "该类别的品牌" + +#: engine/core/graphene/object_types.py:242 msgid "tags for this category" msgstr "此类别的标签" -#: engine/core/graphene/object_types.py:237 +#: engine/core/graphene/object_types.py:245 msgid "products in this category" msgstr "该类别中的产品" -#: engine/core/graphene/object_types.py:372 engine/core/models.py:183 +#: engine/core/graphene/object_types.py:376 engine/core/models.py:202 msgid "vendors" msgstr "供应商" -#: engine/core/graphene/object_types.py:376 +#: engine/core/graphene/object_types.py:380 msgid "Latitude (Y coordinate)" msgstr "纬度(Y 坐标)" -#: engine/core/graphene/object_types.py:377 +#: engine/core/graphene/object_types.py:381 msgid "Longitude (X coordinate)" msgstr "经度(X 坐标)" -#: engine/core/graphene/object_types.py:406 +#: engine/core/graphene/object_types.py:411 msgid "comment" msgstr "如何" -#: engine/core/graphene/object_types.py:408 -#: engine/core/graphene/object_types.py:542 +#: engine/core/graphene/object_types.py:413 +#: engine/core/graphene/object_types.py:548 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "评级值从 1 到 10(包括 10),如果未设置,则为 0。" -#: engine/core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:421 msgid "represents feedback from a user." msgstr "代表用户的反馈意见。" -#: engine/core/graphene/object_types.py:421 -#: engine/core/graphene/object_types.py:472 engine/core/models.py:1291 +#: engine/core/graphene/object_types.py:426 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:1388 msgid "notifications" msgstr "通知" -#: engine/core/graphene/object_types.py:423 +#: engine/core/graphene/object_types.py:428 msgid "download url for this order product if applicable" msgstr "此订单产品的下载网址(如适用" -#: engine/core/graphene/object_types.py:425 engine/core/models.py:1856 +#: engine/core/graphene/object_types.py:430 engine/core/models.py:1959 msgid "feedback" msgstr "反馈意见" -#: engine/core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:464 msgid "a list of order products in this order" msgstr "该订单中的订单产品列表" -#: engine/core/graphene/object_types.py:461 engine/core/models.py:1261 +#: engine/core/graphene/object_types.py:466 engine/core/models.py:1358 msgid "billing address" msgstr "账单地址" -#: engine/core/graphene/object_types.py:465 +#: engine/core/graphene/object_types.py:470 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" msgstr "此订单的送货地址,如果与账单地址相同或不适用,请留空" -#: engine/core/graphene/object_types.py:468 +#: engine/core/graphene/object_types.py:473 msgid "total price of this order" msgstr "订单总价" -#: engine/core/graphene/object_types.py:469 +#: engine/core/graphene/object_types.py:474 msgid "total quantity of products in order" msgstr "订单中产品的总数量" -#: engine/core/graphene/object_types.py:470 +#: engine/core/graphene/object_types.py:475 msgid "are all products in the order digital" msgstr "订单中的所有产品都是数字产品吗?" -#: engine/core/graphene/object_types.py:474 +#: engine/core/graphene/object_types.py:479 msgid "transactions for this order" msgstr "此订单的交易" -#: engine/core/graphene/object_types.py:494 engine/core/models.py:1325 +#: engine/core/graphene/object_types.py:499 engine/core/models.py:1422 msgid "orders" msgstr "订单" -#: engine/core/graphene/object_types.py:515 +#: engine/core/graphene/object_types.py:520 msgid "image url" msgstr "图片 URL" -#: engine/core/graphene/object_types.py:522 +#: engine/core/graphene/object_types.py:527 msgid "product's images" msgstr "产品图片" -#: engine/core/graphene/object_types.py:529 engine/core/models.py:439 -#: engine/core/models.py:596 +#: engine/core/graphene/object_types.py:534 engine/core/models.py:488 +#: engine/core/models.py:661 msgid "category" msgstr "类别" -#: engine/core/graphene/object_types.py:531 engine/core/models.py:1857 +#: engine/core/graphene/object_types.py:536 engine/core/models.py:1960 msgid "feedbacks" msgstr "反馈意见" -#: engine/core/graphene/object_types.py:532 engine/core/models.py:510 -#: engine/core/models.py:605 +#: engine/core/graphene/object_types.py:537 engine/core/models.py:563 +#: engine/core/models.py:670 msgid "brand" msgstr "品牌" -#: engine/core/graphene/object_types.py:534 engine/core/models.py:103 +#: engine/core/graphene/object_types.py:538 +msgid "video url" +msgstr "视频网址" + +#: engine/core/graphene/object_types.py:540 engine/core/models.py:122 msgid "attribute groups" msgstr "属性组" -#: engine/core/graphene/object_types.py:536 +#: engine/core/graphene/object_types.py:542 #: engine/core/templates/digital_order_created_email.html:111 #: engine/core/templates/digital_order_delivered_email.html:109 #: engine/core/templates/shipped_order_created_email.html:109 @@ -1358,7 +1397,7 @@ msgstr "属性组" msgid "price" msgstr "价格" -#: engine/core/graphene/object_types.py:537 +#: engine/core/graphene/object_types.py:543 #: engine/core/templates/digital_order_created_email.html:110 #: engine/core/templates/digital_order_delivered_email.html:108 #: engine/core/templates/shipped_order_created_email.html:108 @@ -1366,39 +1405,39 @@ msgstr "价格" msgid "quantity" msgstr "数量" -#: engine/core/graphene/object_types.py:538 +#: engine/core/graphene/object_types.py:544 msgid "number of feedbacks" msgstr "反馈数量" -#: engine/core/graphene/object_types.py:539 +#: engine/core/graphene/object_types.py:545 msgid "only available for personal orders" msgstr "仅限个人订购的产品" -#: engine/core/graphene/object_types.py:544 +#: engine/core/graphene/object_types.py:550 msgid "discount price" msgstr "折扣价" -#: engine/core/graphene/object_types.py:568 engine/core/models.py:682 +#: engine/core/graphene/object_types.py:575 engine/core/models.py:755 msgid "products" msgstr "产品" -#: engine/core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:691 msgid "promocodes" msgstr "促销代码" -#: engine/core/graphene/object_types.py:693 +#: engine/core/graphene/object_types.py:706 msgid "products on sale" msgstr "销售产品" -#: engine/core/graphene/object_types.py:701 engine/core/models.py:935 +#: engine/core/graphene/object_types.py:720 engine/core/models.py:1028 msgid "promotions" msgstr "促销活动" -#: engine/core/graphene/object_types.py:705 engine/core/models.py:182 +#: engine/core/graphene/object_types.py:727 engine/core/models.py:201 msgid "vendor" msgstr "供应商" -#: engine/core/graphene/object_types.py:706 engine/core/models.py:681 +#: engine/core/graphene/object_types.py:728 engine/core/models.py:754 #: engine/core/templates/digital_order_created_email.html:109 #: engine/core/templates/digital_order_delivered_email.html:107 #: engine/core/templates/shipped_order_created_email.html:107 @@ -1406,102 +1445,102 @@ msgstr "供应商" msgid "product" msgstr "产品" -#: engine/core/graphene/object_types.py:718 engine/core/models.py:958 +#: engine/core/graphene/object_types.py:740 engine/core/models.py:1051 msgid "wishlisted products" msgstr "心愿单上的产品" -#: engine/core/graphene/object_types.py:725 engine/core/models.py:975 +#: engine/core/graphene/object_types.py:747 engine/core/models.py:1068 msgid "wishlists" msgstr "愿望清单" -#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:752 msgid "tagged products" msgstr "标签产品" -#: engine/core/graphene/object_types.py:738 engine/core/models.py:219 -#: engine/core/models.py:611 +#: engine/core/graphene/object_types.py:760 engine/core/models.py:238 +#: engine/core/models.py:676 msgid "product tags" msgstr "产品标签" -#: engine/core/graphene/object_types.py:743 +#: engine/core/graphene/object_types.py:765 msgid "tagged categories" msgstr "标签类别" -#: engine/core/graphene/object_types.py:751 +#: engine/core/graphene/object_types.py:773 msgid "categories tags" msgstr "类别标签" -#: engine/core/graphene/object_types.py:755 +#: engine/core/graphene/object_types.py:777 msgid "project name" msgstr "项目名称" -#: engine/core/graphene/object_types.py:756 +#: engine/core/graphene/object_types.py:778 msgid "company name" msgstr "公司名称" -#: engine/core/graphene/object_types.py:757 +#: engine/core/graphene/object_types.py:779 msgid "company address" msgstr "公司地址" -#: engine/core/graphene/object_types.py:758 +#: engine/core/graphene/object_types.py:780 msgid "company phone number" msgstr "公司电话号码" -#: engine/core/graphene/object_types.py:761 +#: engine/core/graphene/object_types.py:783 msgid "email from, sometimes it must be used instead of host user value" msgstr "电子邮件来自\",有时必须使用它来代替主机用户值" -#: engine/core/graphene/object_types.py:764 +#: engine/core/graphene/object_types.py:786 msgid "email host user" msgstr "电子邮件主机用户" -#: engine/core/graphene/object_types.py:765 +#: engine/core/graphene/object_types.py:787 msgid "maximum amount for payment" msgstr "最高付款额" -#: engine/core/graphene/object_types.py:766 +#: engine/core/graphene/object_types.py:788 msgid "minimum amount for payment" msgstr "最低付款额" -#: engine/core/graphene/object_types.py:767 +#: engine/core/graphene/object_types.py:789 msgid "analytics data" msgstr "分析数据" -#: engine/core/graphene/object_types.py:768 +#: engine/core/graphene/object_types.py:790 msgid "advertisement data" msgstr "广告数据" -#: engine/core/graphene/object_types.py:771 +#: engine/core/graphene/object_types.py:793 msgid "company configuration" msgstr "配置" -#: engine/core/graphene/object_types.py:775 +#: engine/core/graphene/object_types.py:797 msgid "language code" msgstr "语言代码" -#: engine/core/graphene/object_types.py:776 +#: engine/core/graphene/object_types.py:798 msgid "language name" msgstr "语言名称" -#: engine/core/graphene/object_types.py:777 +#: engine/core/graphene/object_types.py:799 msgid "language flag, if exists :)" msgstr "语言标志(如果有):)" -#: engine/core/graphene/object_types.py:780 +#: engine/core/graphene/object_types.py:802 msgid "supported languages" msgstr "获取支持的语言列表" -#: engine/core/graphene/object_types.py:812 -#: engine/core/graphene/object_types.py:815 -#: engine/core/graphene/object_types.py:818 +#: engine/core/graphene/object_types.py:834 +#: engine/core/graphene/object_types.py:837 +#: engine/core/graphene/object_types.py:840 msgid "products search results" msgstr "产品搜索结果" -#: engine/core/graphene/object_types.py:820 +#: engine/core/graphene/object_types.py:842 msgid "posts search results" msgstr "产品搜索结果" -#: engine/core/models.py:75 +#: engine/core/models.py:91 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1510,23 +1549,23 @@ msgid "" msgstr "" "代表一组属性,可以是分层的。该类用于管理和组织属性组。一个属性组可以有一个父组,从而形成一个层次结构。这有助于在复杂的系统中更有效地分类和管理属性。" -#: engine/core/models.py:88 +#: engine/core/models.py:107 msgid "parent of this group" msgstr "本组家长" -#: engine/core/models.py:89 +#: engine/core/models.py:108 msgid "parent attribute group" msgstr "父属性组" -#: engine/core/models.py:93 engine/core/models.py:94 +#: engine/core/models.py:112 engine/core/models.py:113 msgid "attribute group's name" msgstr "属性组名称" -#: engine/core/models.py:102 engine/core/models.py:763 +#: engine/core/models.py:121 engine/core/models.py:849 msgid "attribute group" msgstr "属性组" -#: engine/core/models.py:108 +#: engine/core/models.py:127 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1538,47 +1577,47 @@ msgid "" msgstr "" "代表一个供应商实体,能够存储有关外部供应商及其交互要求的信息。供应商类用于定义和管理与外部供应商相关的信息。它存储供应商的名称、通信所需的身份验证详细信息,以及从供应商处检索产品时所应用的百分比标记。该模型还维护附加的元数据和约束,使其适用于与第三方供应商交互的系统。" -#: engine/core/models.py:122 +#: engine/core/models.py:141 msgid "stores credentials and endpoints required for vendor communication" msgstr "存储供应商应用程序接口通信所需的凭证和端点" -#: engine/core/models.py:124 +#: engine/core/models.py:143 msgid "authentication info" msgstr "认证信息" -#: engine/core/models.py:129 +#: engine/core/models.py:148 msgid "define the markup for products retrieved from this vendor" msgstr "定义从该供应商获取的产品的标记" -#: engine/core/models.py:130 +#: engine/core/models.py:149 msgid "vendor markup percentage" msgstr "供应商加价百分比" -#: engine/core/models.py:134 +#: engine/core/models.py:153 msgid "name of this vendor" msgstr "供应商名称" -#: engine/core/models.py:135 +#: engine/core/models.py:154 msgid "vendor name" msgstr "供应商名称" -#: engine/core/models.py:150 +#: engine/core/models.py:169 msgid "response file" msgstr "回复文件" -#: engine/core/models.py:151 +#: engine/core/models.py:170 msgid "vendor's last processing response" msgstr "供应商最后的处理回复" -#: engine/core/models.py:157 +#: engine/core/models.py:176 msgid "vendor's integration file path" msgstr "供应商的集成文件路径" -#: engine/core/models.py:158 +#: engine/core/models.py:177 msgid "integration path" msgstr "整合路径" -#: engine/core/models.py:192 +#: engine/core/models.py:211 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1589,42 +1628,42 @@ msgstr "" "代表用于分类或识别产品的产品标签。ProductTag " "类旨在通过内部标签标识符和用户友好显示名称的组合,对产品进行唯一标识和分类。它支持通过混合功能导出的操作,并为管理目的提供元数据定制功能。" -#: engine/core/models.py:204 engine/core/models.py:235 +#: engine/core/models.py:223 engine/core/models.py:254 msgid "internal tag identifier for the product tag" msgstr "产品标签的内部标签标识符" -#: engine/core/models.py:205 engine/core/models.py:236 +#: engine/core/models.py:224 engine/core/models.py:255 msgid "tag name" msgstr "标签名称" -#: engine/core/models.py:209 engine/core/models.py:240 +#: engine/core/models.py:228 engine/core/models.py:259 msgid "user-friendly name for the product tag" msgstr "方便用户使用的产品标签名称" -#: engine/core/models.py:210 engine/core/models.py:241 +#: engine/core/models.py:229 engine/core/models.py:260 msgid "tag display name" msgstr "标签显示名称" -#: engine/core/models.py:218 +#: engine/core/models.py:237 msgid "product tag" msgstr "产品标签" -#: engine/core/models.py:224 +#: engine/core/models.py:243 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 "代表用于产品的类别标签。该类是类别标签的模型,可用于关联和分类产品。它包括内部标签标识符和用户友好显示名称的属性。" -#: engine/core/models.py:249 +#: engine/core/models.py:268 msgid "category tag" msgstr "类别标签" -#: engine/core/models.py:250 engine/core/models.py:322 +#: engine/core/models.py:269 engine/core/models.py:345 msgid "category tags" msgstr "类别标签" -#: engine/core/models.py:255 +#: engine/core/models.py:274 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1638,51 +1677,51 @@ msgid "" msgstr "" "代表类别实体,用于在分层结构中组织和分组相关项目。类别可与其他类别建立层次关系,支持父子关系。该类包括元数据和可视化表示字段,是类别相关功能的基础。该类通常用于定义和管理应用程序中的产品类别或其他类似分组,允许用户或管理员指定类别的名称、描述和层次结构,以及分配图像、标记或优先级等属性。" -#: engine/core/models.py:269 +#: engine/core/models.py:292 msgid "upload an image representing this category" msgstr "上传代表该类别的图片" -#: engine/core/models.py:272 +#: engine/core/models.py:295 msgid "category image" msgstr "类别 图像" -#: engine/core/models.py:277 +#: engine/core/models.py:300 msgid "define a markup percentage for products in this category" msgstr "定义该类别产品的加价百分比" -#: engine/core/models.py:286 +#: engine/core/models.py:309 msgid "parent of this category to form a hierarchical structure" msgstr "该类别的父类别,形成等级结构" -#: engine/core/models.py:287 +#: engine/core/models.py:310 msgid "parent category" msgstr "父类" -#: engine/core/models.py:292 +#: engine/core/models.py:315 msgid "category name" msgstr "类别名称" -#: engine/core/models.py:293 +#: engine/core/models.py:316 msgid "provide a name for this category" msgstr "提供该类别的名称" -#: engine/core/models.py:300 +#: engine/core/models.py:323 msgid "add a detailed description for this category" msgstr "为该类别添加详细说明" -#: engine/core/models.py:301 +#: engine/core/models.py:324 msgid "category description" msgstr "类别说明" -#: engine/core/models.py:321 +#: engine/core/models.py:344 msgid "tags that help describe or group this category" msgstr "有助于描述或归类该类别的标签" -#: engine/core/models.py:328 engine/core/models.py:503 +#: engine/core/models.py:351 engine/core/models.py:552 msgid "priority" msgstr "优先权" -#: engine/core/models.py:446 +#: engine/core/models.py:495 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1692,47 +1731,43 @@ msgid "" msgstr "" "代表系统中的品牌对象。该类用于处理与品牌相关的信息和属性,包括名称、徽标、描述、相关类别、唯一标签和优先顺序。它允许在应用程序中组织和表示与品牌相关的数据。" -#: engine/core/models.py:456 +#: engine/core/models.py:505 msgid "name of this brand" msgstr "品牌名称" -#: engine/core/models.py:457 +#: engine/core/models.py:506 msgid "brand name" msgstr "品牌名称" -#: engine/core/models.py:464 +#: engine/core/models.py:513 msgid "upload a logo representing this brand" msgstr "上传代表该品牌的徽标" -#: engine/core/models.py:466 +#: engine/core/models.py:515 msgid "brand small image" msgstr "品牌小形象" -#: engine/core/models.py:472 +#: engine/core/models.py:521 msgid "upload a big logo representing this brand" msgstr "上传代表该品牌的大徽标" -#: engine/core/models.py:474 +#: engine/core/models.py:523 msgid "brand big image" msgstr "品牌大形象" -#: engine/core/models.py:479 +#: engine/core/models.py:528 msgid "add a detailed description of the brand" msgstr "添加品牌的详细描述" -#: engine/core/models.py:480 +#: engine/core/models.py:529 msgid "brand description" msgstr "品牌描述" -#: engine/core/models.py:485 -msgid "optional categories that this brand is associated with" -msgstr "与该品牌相关的可选类别" +#: engine/core/models.py:534 engine/core/models.py:535 +msgid "DEPRECATED" +msgstr "已弃用" -#: engine/core/models.py:486 -msgid "associated categories" -msgstr "类别" - -#: engine/core/models.py:516 +#: engine/core/models.py:569 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1744,72 +1779,72 @@ msgstr "" "代表系统中管理的产品库存。该类提供有关供应商、产品及其库存信息之间关系的详细信息,以及与库存相关的属性,如价格、购买价格、数量、SKU " "和数字资产。它是库存管理系统的一部分,用于跟踪和评估不同供应商提供的产品。" -#: engine/core/models.py:528 +#: engine/core/models.py:581 msgid "the vendor supplying this product stock" msgstr "提供该产品库存的供应商" -#: engine/core/models.py:529 +#: engine/core/models.py:582 msgid "associated vendor" msgstr "相关供应商" -#: engine/core/models.py:533 +#: engine/core/models.py:588 msgid "final price to the customer after markups" msgstr "加价后给客户的最终价格" -#: engine/core/models.py:534 +#: engine/core/models.py:589 msgid "selling price" msgstr "销售价格" -#: engine/core/models.py:539 +#: engine/core/models.py:594 msgid "the product associated with this stock entry" msgstr "与该库存条目相关的产品" -#: engine/core/models.py:540 engine/core/models.py:828 -#: engine/core/models.py:874 engine/core/models.py:1912 +#: engine/core/models.py:595 engine/core/models.py:914 +#: engine/core/models.py:962 engine/core/models.py:2020 msgid "associated product" msgstr "相关产品" -#: engine/core/models.py:547 +#: engine/core/models.py:604 msgid "the price paid to the vendor for this product" msgstr "为该产品支付给供应商的价格" -#: engine/core/models.py:548 +#: engine/core/models.py:605 msgid "vendor purchase price" msgstr "供应商购买价格" -#: engine/core/models.py:552 +#: engine/core/models.py:609 msgid "available quantity of the product in stock" msgstr "产品的可用库存量" -#: engine/core/models.py:553 +#: engine/core/models.py:610 msgid "quantity in stock" msgstr "库存数量" -#: engine/core/models.py:557 +#: engine/core/models.py:614 msgid "vendor-assigned SKU for identifying the product" msgstr "供应商指定的 SKU,用于识别产品" -#: engine/core/models.py:558 +#: engine/core/models.py:615 msgid "vendor sku" msgstr "供应商 SKU" -#: engine/core/models.py:564 +#: engine/core/models.py:621 msgid "digital file associated with this stock if applicable" msgstr "与该库存相关的数字文件(如适用" -#: engine/core/models.py:565 +#: engine/core/models.py:622 msgid "digital file" msgstr "数字文件" -#: engine/core/models.py:569 +#: engine/core/models.py:626 msgid "system attributes" msgstr "系统属性" -#: engine/core/models.py:577 +#: engine/core/models.py:636 msgid "stock entries" msgstr "库存条目" -#: engine/core/models.py:582 +#: engine/core/models.py:641 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1823,71 +1858,79 @@ msgstr "" "代表产品的属性,如类别、品牌、标签、数字状态、名称、描述、零件编号和标签。提供相关的实用属性,以检索评级、反馈计数、价格、数量和订单总数。设计用于处理电子商务或库存管理的系统。该类可与相关模型(如类别、品牌和" " ProductTag)交互,并对频繁访问的属性进行缓存管理,以提高性能。它用于在应用程序中定义和操作产品数据及其相关信息。" -#: engine/core/models.py:595 +#: engine/core/models.py:660 msgid "category this product belongs to" msgstr "该产品所属类别" -#: engine/core/models.py:604 +#: engine/core/models.py:669 msgid "optionally associate this product with a brand" msgstr "可选择将该产品与某个品牌联系起来" -#: engine/core/models.py:610 +#: engine/core/models.py:675 msgid "tags that help describe or group this product" msgstr "有助于描述或归类该产品的标签" -#: engine/core/models.py:615 +#: engine/core/models.py:680 msgid "indicates whether this product is digitally delivered" msgstr "表示该产品是否以数字方式交付" -#: engine/core/models.py:616 +#: engine/core/models.py:681 msgid "is product digital" msgstr "产品是否数字化" -#: engine/core/models.py:623 +#: engine/core/models.py:688 msgid "indicates whether this product should be updated from periodic task" msgstr "表示该产品是否应从定期任务中更新" -#: engine/core/models.py:625 +#: engine/core/models.py:690 msgid "is product updatable" msgstr "产品是否可更新" -#: engine/core/models.py:631 +#: engine/core/models.py:696 msgid "provide a clear identifying name for the product" msgstr "为产品提供一个明确的标识名称" -#: engine/core/models.py:632 +#: engine/core/models.py:697 msgid "product name" msgstr "产品名称" -#: engine/core/models.py:638 engine/core/models.py:923 +#: engine/core/models.py:703 engine/core/models.py:1012 msgid "add a detailed description of the product" msgstr "添加产品的详细描述" -#: engine/core/models.py:639 +#: engine/core/models.py:704 msgid "product description" msgstr "产品说明" -#: engine/core/models.py:646 +#: engine/core/models.py:710 +msgid "optional video file for this product" +msgstr "本产品的可选视频文件" + +#: engine/core/models.py:711 +msgid "product video" +msgstr "产品视频" + +#: engine/core/models.py:719 msgid "part number for this product" msgstr "该产品的零件编号" -#: engine/core/models.py:647 +#: engine/core/models.py:720 msgid "part number" msgstr "部件编号" -#: engine/core/models.py:666 +#: engine/core/models.py:739 msgid "stock keeping unit for this product" msgstr "该产品的库存单位" -#: engine/core/models.py:673 +#: engine/core/models.py:746 msgid "whether to export this product to marketplaces" msgstr "是否将此产品出口至市场" -#: engine/core/models.py:674 +#: engine/core/models.py:747 msgid "Export to Marketplaces" msgstr "导出至市场平台" -#: engine/core/models.py:749 +#: engine/core/models.py:835 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 " @@ -1898,83 +1941,83 @@ msgid "" msgstr "" "代表系统中的一个属性。该类用于定义和管理属性,属性是可与其他实体关联的自定义数据块。属性有相关的类别、组、值类型和名称。该模型支持多种类型的值,包括字符串、整数、浮点数、布尔值、数组和对象。这样就可以实现动态、灵活的数据结构。" -#: engine/core/models.py:762 +#: engine/core/models.py:848 msgid "group of this attribute" msgstr "该属性的组" -#: engine/core/models.py:768 +#: engine/core/models.py:854 msgid "string" msgstr "字符串" -#: engine/core/models.py:769 +#: engine/core/models.py:855 msgid "integer" msgstr "整数" -#: engine/core/models.py:770 +#: engine/core/models.py:856 msgid "float" msgstr "浮动" -#: engine/core/models.py:771 +#: engine/core/models.py:857 msgid "boolean" msgstr "布尔型" -#: engine/core/models.py:772 +#: engine/core/models.py:858 msgid "array" msgstr "阵列" -#: engine/core/models.py:773 +#: engine/core/models.py:859 msgid "object" msgstr "对象" -#: engine/core/models.py:775 +#: engine/core/models.py:861 msgid "type of the attribute's value" msgstr "属性值的类型" -#: engine/core/models.py:776 +#: engine/core/models.py:862 msgid "value type" msgstr "价值类型" -#: engine/core/models.py:781 +#: engine/core/models.py:867 msgid "name of this attribute" msgstr "该属性的名称" -#: engine/core/models.py:782 +#: engine/core/models.py:868 msgid "attribute's name" msgstr "属性名称" -#: engine/core/models.py:787 +#: engine/core/models.py:873 msgid "is filterable" msgstr "可过滤" -#: engine/core/models.py:789 +#: engine/core/models.py:875 msgid "designates whether this attribute can be used for filtering or not" msgstr "指定该属性是否可用于筛选" -#: engine/core/models.py:802 engine/core/models.py:820 +#: engine/core/models.py:888 engine/core/models.py:906 #: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "属性" -#: engine/core/models.py:808 +#: engine/core/models.py:894 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 "代表与产品相关联的属性的特定值。它将 \"属性 \"与唯一的 \"值 \"联系起来,从而更好地组织和动态呈现产品特征。" -#: engine/core/models.py:819 +#: engine/core/models.py:905 msgid "attribute of this value" msgstr "该值的属性" -#: engine/core/models.py:827 +#: engine/core/models.py:913 msgid "the specific product associated with this attribute's value" msgstr "与该属性值相关的特定产品" -#: engine/core/models.py:833 +#: engine/core/models.py:919 msgid "the specific value for this attribute" msgstr "该属性的具体值" -#: engine/core/models.py:846 +#: engine/core/models.py:934 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -1984,39 +2027,39 @@ msgid "" msgstr "" "代表与系统中产品相关联的产品图片。该类用于管理产品图片,包括上传图片文件、将图片与特定产品关联以及确定图片显示顺序等功能。它还包括一个为图像提供替代文本的可访问性功能。" -#: engine/core/models.py:857 +#: engine/core/models.py:945 msgid "provide alternative text for the image for accessibility" msgstr "为图像提供替代文字,以便于访问" -#: engine/core/models.py:858 +#: engine/core/models.py:946 msgid "image alt text" msgstr "图片 alt 文本" -#: engine/core/models.py:861 +#: engine/core/models.py:949 msgid "upload the image file for this product" msgstr "上传该产品的图片文件" -#: engine/core/models.py:862 engine/core/models.py:893 +#: engine/core/models.py:950 engine/core/models.py:982 msgid "product image" msgstr "产品图片" -#: engine/core/models.py:867 +#: engine/core/models.py:955 msgid "determines the order in which images are displayed" msgstr "确定图像的显示顺序" -#: engine/core/models.py:868 +#: engine/core/models.py:956 msgid "display priority" msgstr "显示优先级" -#: engine/core/models.py:873 +#: engine/core/models.py:961 msgid "the product that this image represents" msgstr "该图片所代表的产品" -#: engine/core/models.py:894 +#: engine/core/models.py:983 msgid "product images" msgstr "产品图片" -#: engine/core/models.py:899 +#: engine/core/models.py:988 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -2027,39 +2070,39 @@ msgid "" msgstr "" "代表有折扣的产品促销活动。该类用于定义和管理为产品提供百分比折扣的促销活动。该类包括用于设置折扣率、提供促销详情以及将其链接到适用产品的属性。它与产品目录集成,以确定促销活动中受影响的产品。" -#: engine/core/models.py:911 +#: engine/core/models.py:1000 msgid "percentage discount for the selected products" msgstr "所选产品的折扣百分比" -#: engine/core/models.py:912 +#: engine/core/models.py:1001 msgid "discount percentage" msgstr "折扣百分比" -#: engine/core/models.py:917 +#: engine/core/models.py:1006 msgid "provide a unique name for this promotion" msgstr "为该促销活动提供一个独特的名称" -#: engine/core/models.py:918 +#: engine/core/models.py:1007 msgid "promotion name" msgstr "推广名称" -#: engine/core/models.py:924 +#: engine/core/models.py:1013 msgid "promotion description" msgstr "促销说明" -#: engine/core/models.py:929 +#: engine/core/models.py:1018 msgid "select which products are included in this promotion" msgstr "选择促销活动包括哪些产品" -#: engine/core/models.py:930 +#: engine/core/models.py:1019 msgid "included products" msgstr "包括产品" -#: engine/core/models.py:934 +#: engine/core/models.py:1027 msgid "promotion" msgstr "促销活动" -#: engine/core/models.py:945 +#: engine/core/models.py:1038 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2067,23 +2110,23 @@ msgid "" "operations for adding and removing multiple products at once." msgstr "代表用户用于存储和管理所需产品的愿望清单。该类提供管理产品集合的功能,支持添加和删除产品等操作,还支持同时添加和删除多个产品的操作。" -#: engine/core/models.py:957 +#: engine/core/models.py:1050 msgid "products that the user has marked as wanted" msgstr "用户标记为想要的产品" -#: engine/core/models.py:965 +#: engine/core/models.py:1058 msgid "user who owns this wishlist" msgstr "拥有此愿望清单的用户" -#: engine/core/models.py:966 +#: engine/core/models.py:1059 msgid "wishlist owner" msgstr "心愿单所有者" -#: engine/core/models.py:974 +#: engine/core/models.py:1067 msgid "wishlist" msgstr "愿望清单" -#: engine/core/models.py:1016 +#: engine/core/models.py:1109 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2094,19 +2137,19 @@ msgid "" msgstr "" "代表与产品相关的文档记录。该类用于存储与特定产品相关的文档信息,包括文件上传及其元数据。它包含处理文件类型和文档文件存储路径的方法和属性。它扩展了特定混合类的功能,并提供了额外的自定义功能。" -#: engine/core/models.py:1031 +#: engine/core/models.py:1124 msgid "documentary" msgstr "纪录片" -#: engine/core/models.py:1032 +#: engine/core/models.py:1125 msgid "documentaries" msgstr "纪录片" -#: engine/core/models.py:1042 +#: engine/core/models.py:1135 msgid "unresolved" msgstr "未解决" -#: engine/core/models.py:1047 +#: engine/core/models.py:1140 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2120,59 +2163,59 @@ msgstr "" "代表一个地址实体,其中包括位置详情以及与用户的关联。提供地理和地址数据存储功能,以及与地理编码服务集成的功能。该类旨在存储详细的地址信息,包括街道、城市、地区、国家和地理位置(经度和纬度)等组件。它支持与地理编码" " API 集成,可存储原始 API 响应,以便进一步处理或检查。该类还可以将地址与用户关联起来,方便个性化数据处理。" -#: engine/core/models.py:1062 +#: engine/core/models.py:1155 msgid "address line for the customer" msgstr "客户地址栏" -#: engine/core/models.py:1063 +#: engine/core/models.py:1156 msgid "address line" msgstr "地址栏" -#: engine/core/models.py:1065 +#: engine/core/models.py:1158 msgid "street" msgstr "街道" -#: engine/core/models.py:1066 +#: engine/core/models.py:1159 msgid "district" msgstr "地区" -#: engine/core/models.py:1067 +#: engine/core/models.py:1160 msgid "city" msgstr "城市" -#: engine/core/models.py:1068 +#: engine/core/models.py:1161 msgid "region" msgstr "地区" -#: engine/core/models.py:1069 +#: engine/core/models.py:1162 msgid "postal code" msgstr "邮政编码" -#: engine/core/models.py:1070 +#: engine/core/models.py:1163 msgid "country" msgstr "国家" -#: engine/core/models.py:1077 +#: engine/core/models.py:1170 msgid "geolocation point: (longitude, latitude)" msgstr "地理位置点(经度、纬度)" -#: engine/core/models.py:1083 +#: engine/core/models.py:1176 msgid "full JSON response from geocoder for this address" msgstr "地理编码器对此地址的完整 JSON 响应" -#: engine/core/models.py:1089 +#: engine/core/models.py:1182 msgid "stored JSON response from the geocoding service" msgstr "存储的来自地理编码服务的 JSON 响应" -#: engine/core/models.py:1099 +#: engine/core/models.py:1192 msgid "address" msgstr "地址" -#: engine/core/models.py:1100 +#: engine/core/models.py:1193 msgid "addresses" msgstr "地址" -#: engine/core/models.py:1112 +#: engine/core/models.py:1205 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2184,86 +2227,86 @@ msgstr "" "代表可用于折扣的促销代码,管理其有效期、折扣类型和应用。PromoCode " "类存储促销代码的详细信息,包括其唯一标识符、折扣属性(金额或百分比)、有效期、关联用户(如有)及其使用状态。该类包含验证促销代码并将其应用于订单的功能,同时确保符合约束条件。" -#: engine/core/models.py:1126 +#: engine/core/models.py:1219 msgid "unique code used by a user to redeem a discount" msgstr "用户用于兑换折扣的唯一代码" -#: engine/core/models.py:1127 +#: engine/core/models.py:1220 msgid "promo code identifier" msgstr "促销代码标识符" -#: engine/core/models.py:1134 +#: engine/core/models.py:1227 msgid "fixed discount amount applied if percent is not used" msgstr "如果不使用百分比,则使用固定折扣额" -#: engine/core/models.py:1135 +#: engine/core/models.py:1228 msgid "fixed discount amount" msgstr "固定折扣额" -#: engine/core/models.py:1141 +#: engine/core/models.py:1234 msgid "percentage discount applied if fixed amount is not used" msgstr "未使用固定金额时适用的折扣百分比" -#: engine/core/models.py:1142 +#: engine/core/models.py:1235 msgid "percentage discount" msgstr "折扣百分比" -#: engine/core/models.py:1147 +#: engine/core/models.py:1240 msgid "timestamp when the promocode expires" msgstr "促销代码过期的时间戳" -#: engine/core/models.py:1148 +#: engine/core/models.py:1241 msgid "end validity time" msgstr "结束有效时间" -#: engine/core/models.py:1153 +#: engine/core/models.py:1246 msgid "timestamp from which this promocode is valid" msgstr "该促销代码有效的时间戳" -#: engine/core/models.py:1154 +#: engine/core/models.py:1247 msgid "start validity time" msgstr "开始有效时间" -#: engine/core/models.py:1159 +#: engine/core/models.py:1252 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "使用促销代码的时间戳,如果尚未使用,则留空" -#: engine/core/models.py:1160 +#: engine/core/models.py:1253 msgid "usage timestamp" msgstr "使用时间戳" -#: engine/core/models.py:1165 +#: engine/core/models.py:1258 msgid "user assigned to this promocode if applicable" msgstr "分配给此促销代码的用户(如适用" -#: engine/core/models.py:1166 +#: engine/core/models.py:1259 msgid "assigned user" msgstr "指定用户" -#: engine/core/models.py:1173 +#: engine/core/models.py:1266 msgid "promo code" msgstr "促销代码" -#: engine/core/models.py:1174 +#: engine/core/models.py:1267 msgid "promo codes" msgstr "促销代码" -#: engine/core/models.py:1190 +#: engine/core/models.py:1283 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "只能定义一种折扣类型(金额或百分比),而不能同时定义两种类型或两者都不定义。" -#: engine/core/models.py:1212 +#: engine/core/models.py:1305 msgid "promocode already used" msgstr "促销代码已被使用" -#: engine/core/models.py:1234 +#: engine/core/models.py:1327 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "促销代码 {self.uuid} 的折扣类型无效!" -#: engine/core/models.py:1243 +#: engine/core/models.py:1336 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 " @@ -2274,145 +2317,145 @@ msgid "" msgstr "" "代表用户下达的订单。该类在应用程序中模拟订单,包括订单的各种属性,如账单和发货信息、状态、关联用户、通知和相关操作。订单可以有关联的产品,可以应用促销活动,设置地址,更新发货或账单详情。同样,该功能还支持在订单生命周期中管理产品。" -#: engine/core/models.py:1260 +#: engine/core/models.py:1357 msgid "the billing address used for this order" msgstr "该订单使用的账单地址" -#: engine/core/models.py:1268 +#: engine/core/models.py:1365 msgid "optional promo code applied to this order" msgstr "此订单可选择使用促销代码" -#: engine/core/models.py:1269 +#: engine/core/models.py:1366 msgid "applied promo code" msgstr "应用促销代码" -#: engine/core/models.py:1277 +#: engine/core/models.py:1374 msgid "the shipping address used for this order" msgstr "该订单使用的送货地址" -#: engine/core/models.py:1278 +#: engine/core/models.py:1375 msgid "shipping address" msgstr "送货地址" -#: engine/core/models.py:1284 +#: engine/core/models.py:1381 msgid "current status of the order in its lifecycle" msgstr "订单在其生命周期中的当前状态" -#: engine/core/models.py:1285 +#: engine/core/models.py:1382 msgid "order status" msgstr "订单状态" -#: engine/core/models.py:1290 engine/core/models.py:1889 +#: engine/core/models.py:1387 engine/core/models.py:1997 msgid "json structure of notifications to display to users" msgstr "向用户显示的通知的 JSON 结构,在管理用户界面中使用表格视图" -#: engine/core/models.py:1296 +#: engine/core/models.py:1393 msgid "json representation of order attributes for this order" msgstr "该订单属性的 JSON 表示形式" -#: engine/core/models.py:1302 +#: engine/core/models.py:1399 msgid "the user who placed the order" msgstr "下订单的用户" -#: engine/core/models.py:1303 +#: engine/core/models.py:1400 msgid "user" msgstr "用户" -#: engine/core/models.py:1309 +#: engine/core/models.py:1406 msgid "the timestamp when the order was finalized" msgstr "订单确定的时间戳" -#: engine/core/models.py:1310 +#: engine/core/models.py:1407 msgid "buy time" msgstr "购买时间" -#: engine/core/models.py:1317 +#: engine/core/models.py:1414 msgid "a human-readable identifier for the order" msgstr "订单的人工可读标识符" -#: engine/core/models.py:1318 +#: engine/core/models.py:1415 msgid "human readable id" msgstr "人类可读 ID" -#: engine/core/models.py:1324 +#: engine/core/models.py:1421 msgid "order" msgstr "订购" -#: engine/core/models.py:1371 +#: engine/core/models.py:1468 msgid "a user must have only one pending order at a time" msgstr "用户每次只能有一个挂单!" -#: engine/core/models.py:1404 +#: engine/core/models.py:1504 msgid "you cannot add products to an order that is not a pending one" msgstr "您不能向非待处理订单添加产品" -#: engine/core/models.py:1410 +#: engine/core/models.py:1510 msgid "you cannot add inactive products to order" msgstr "您不能在订单中添加非活动产品" -#: engine/core/models.py:1432 +#: engine/core/models.py:1533 msgid "you cannot add more products than available in stock" msgstr "添加的产品数量不能超过现有库存" -#: engine/core/models.py:1456 engine/core/models.py:1485 -#: engine/core/models.py:1495 +#: engine/core/models.py:1557 engine/core/models.py:1586 +#: engine/core/models.py:1596 msgid "you cannot remove products from an order that is not a pending one" msgstr "您不能从非待处理订单中删除产品" -#: engine/core/models.py:1480 +#: engine/core/models.py:1581 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "查询 <{query}> 时,{name} 不存在!" -#: engine/core/models.py:1519 +#: engine/core/models.py:1620 msgid "promocode does not exist" msgstr "促销代码不存在" -#: engine/core/models.py:1534 +#: engine/core/models.py:1635 msgid "you can only buy physical products with shipping address specified" msgstr "您只能购买指定送货地址的实物产品!" -#: engine/core/models.py:1555 +#: engine/core/models.py:1656 msgid "address does not exist" msgstr "地址不存在" -#: engine/core/models.py:1577 engine/core/models.py:1656 +#: engine/core/models.py:1678 engine/core/models.py:1757 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "您现在无法购买,请稍后再试。" -#: engine/core/models.py:1583 engine/core/models.py:1649 +#: engine/core/models.py:1684 engine/core/models.py:1750 msgid "invalid force value" msgstr "力值无效" -#: engine/core/models.py:1589 engine/core/models.py:1660 +#: engine/core/models.py:1690 engine/core/models.py:1761 msgid "you cannot purchase an empty order!" msgstr "您不能购买空单!" -#: engine/core/models.py:1610 +#: engine/core/models.py:1711 msgid "you cannot buy an order without a user" msgstr "没有用户就无法购买订单!" -#: engine/core/models.py:1624 +#: engine/core/models.py:1725 msgid "a user without a balance cannot buy with balance" msgstr "没有余额的用户不能使用余额购买!" -#: engine/core/models.py:1630 +#: engine/core/models.py:1731 msgid "insufficient funds to complete the order" msgstr "资金不足,无法完成订单" -#: engine/core/models.py:1671 +#: engine/core/models.py:1772 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "未经注册不能购买,请提供以下信息:客户姓名、客户电子邮件、客户电话号码" -#: engine/core/models.py:1682 +#: engine/core/models.py:1783 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "付款方式无效:来自 {available_payment_methods} 的 {payment_method} !" -#: engine/core/models.py:1813 +#: engine/core/models.py:1916 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2422,32 +2465,32 @@ msgid "" msgstr "" "管理产品的用户反馈。该类用于捕获和存储用户对其购买的特定产品的反馈。它包含用于存储用户评论的属性、订单中相关产品的引用以及用户指定的评分。该类使用数据库字段对反馈数据进行有效建模和管理。" -#: engine/core/models.py:1825 +#: engine/core/models.py:1928 msgid "user-provided comments about their experience with the product" msgstr "用户提供的产品使用体验评论" -#: engine/core/models.py:1826 +#: engine/core/models.py:1929 msgid "feedback comments" msgstr "反馈意见" -#: engine/core/models.py:1834 +#: engine/core/models.py:1937 msgid "" "references the specific product in an order that this feedback is about" msgstr "引用该反馈意见涉及的订单中的具体产品" -#: engine/core/models.py:1836 +#: engine/core/models.py:1939 msgid "related order product" msgstr "相关订购产品" -#: engine/core/models.py:1841 +#: engine/core/models.py:1944 msgid "user-assigned rating for the product" msgstr "用户对产品的评分" -#: engine/core/models.py:1842 +#: engine/core/models.py:1945 msgid "product rating" msgstr "产品评级" -#: engine/core/models.py:1862 +#: engine/core/models.py:1965 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2463,108 +2506,108 @@ msgstr "" "模型维护订单中产品的相关信息,包括购买价格、数量、产品属性和状态等详细信息。它为用户和管理员管理通知,并处理返回产品余额或添加反馈等操作。该模型还提供支持业务逻辑的方法和属性,如计算总价或为数字产品生成下载" " URL。该模型与订单和产品模型集成,并存储对它们的引用。" -#: engine/core/models.py:1877 +#: engine/core/models.py:1985 msgid "the price paid by the customer for this product at purchase time" msgstr "客户购买该产品时支付的价格" -#: engine/core/models.py:1878 +#: engine/core/models.py:1986 msgid "purchase price at order time" msgstr "订购时的购买价格" -#: engine/core/models.py:1883 +#: engine/core/models.py:1991 msgid "internal comments for admins about this ordered product" msgstr "管理员对该订购产品的内部评论" -#: engine/core/models.py:1884 +#: engine/core/models.py:1992 msgid "internal comments" msgstr "内部意见" -#: engine/core/models.py:1890 +#: engine/core/models.py:1998 msgid "user notifications" msgstr "用户通知" -#: engine/core/models.py:1895 +#: engine/core/models.py:2003 msgid "json representation of this item's attributes" msgstr "该项属性的 JSON 表示形式" -#: engine/core/models.py:1896 +#: engine/core/models.py:2004 msgid "ordered product attributes" msgstr "有序的产品属性" -#: engine/core/models.py:1901 +#: engine/core/models.py:2009 msgid "reference to the parent order that contains this product" msgstr "对包含该产品的父订单的引用" -#: engine/core/models.py:1902 +#: engine/core/models.py:2010 msgid "parent order" msgstr "父顺序" -#: engine/core/models.py:1911 +#: engine/core/models.py:2019 msgid "the specific product associated with this order line" msgstr "与该订单项目相关的具体产品" -#: engine/core/models.py:1918 +#: engine/core/models.py:2026 msgid "quantity of this specific product in the order" msgstr "订单中该特定产品的数量" -#: engine/core/models.py:1919 +#: engine/core/models.py:2027 msgid "product quantity" msgstr "产品数量" -#: engine/core/models.py:1926 +#: engine/core/models.py:2034 msgid "current status of this product in the order" msgstr "订单中该产品的当前状态" -#: engine/core/models.py:1927 +#: engine/core/models.py:2035 msgid "product line status" msgstr "产品系列状态" -#: engine/core/models.py:1998 +#: engine/core/models.py:2106 msgid "order product must have an order" msgstr "订单产品必须有相关的订单!" -#: engine/core/models.py:2000 +#: engine/core/models.py:2108 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "为反馈指定了错误的操作:{action}!" -#: engine/core/models.py:2017 +#: engine/core/models.py:2125 msgid "you cannot feedback an order which is not received" msgstr "您不能反馈未收到的订单" -#: engine/core/models.py:2026 +#: engine/core/models.py:2132 engine/core/models.py:2227 msgid "name" msgstr "名称" -#: engine/core/models.py:2028 +#: engine/core/models.py:2134 msgid "URL of the integration" msgstr "集成的 URL" -#: engine/core/models.py:2031 +#: engine/core/models.py:2137 msgid "authentication credentials" msgstr "认证证书" -#: engine/core/models.py:2054 +#: engine/core/models.py:2160 msgid "you can only have one default CRM provider" msgstr "只能有一个默认 CRM 提供商" -#: engine/core/models.py:2064 +#: engine/core/models.py:2170 msgid "CRM" msgstr "客户关系管理" -#: engine/core/models.py:2065 +#: engine/core/models.py:2171 msgid "CRMs" msgstr "客户关系管理" -#: engine/core/models.py:2081 +#: engine/core/models.py:2187 msgid "order CRM link" msgstr "订单的客户关系管理链接" -#: engine/core/models.py:2082 +#: engine/core/models.py:2188 msgid "orders CRM links" msgstr "订单的客户关系管理链接" -#: engine/core/models.py:2087 +#: engine/core/models.py:2193 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2577,20 +2620,54 @@ msgstr "" "类提供了管理和访问与订单产品相关的下载的功能。该类维护相关订单产品的信息、下载次数以及资产是否公开可见。当相关订单处于完成状态时,该类包含一个生成用于下载资产的" " URL 的方法。" -#: engine/core/models.py:2103 +#: engine/core/models.py:2209 msgid "download" msgstr "下载" -#: engine/core/models.py:2104 +#: engine/core/models.py:2210 msgid "downloads" msgstr "下载" +#: engine/core/models.py:2228 +msgid "descriptive name for the image" +msgstr "图像的描述性名称" + +#: engine/core/models.py:2233 +msgid "image file pasted in the markdown editor" +msgstr "粘贴在Markdown编辑器中的图片文件" + +#: engine/core/models.py:2239 +msgid "alt text" +msgstr "其他文本" + +#: engine/core/models.py:2240 +msgid "alternative text for accessibility" +msgstr "辅助功能替代文本" + +#: engine/core/models.py:2244 +msgid "pasted image" +msgstr "粘贴的图片" + +#: engine/core/models.py:2245 +msgid "pasted images" +msgstr "粘贴的图片" + #: engine/core/serializers/utility.py:91 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "您必须提供评论、评级和订单产品 uuid 才能添加反馈。" #: engine/core/sitemaps.py:25 +#: engine/core/templates/admin_doc/bookmarklets.html:8 +#: engine/core/templates/admin_doc/index.html:8 +#: engine/core/templates/admin_doc/missing_docutils.html:8 +#: engine/core/templates/admin_doc/model_detail.html:8 +#: engine/core/templates/admin_doc/model_index.html:8 +#: engine/core/templates/admin_doc/template_detail.html:8 +#: engine/core/templates/admin_doc/template_filter_index.html:8 +#: engine/core/templates/admin_doc/template_tag_index.html:8 +#: engine/core/templates/admin_doc/view_detail.html:8 +#: engine/core/templates/admin_doc/view_index.html:8 msgid "Home" msgstr "首页" @@ -2643,45 +2720,34 @@ msgstr "毛额" msgid "Dashboard" msgstr "仪表板" -#: engine/core/templates/admin/dashboard/_income_overview.html:7 +#: engine/core/templates/admin/dashboard/_income_overview.html:6 msgid "Income overview" msgstr "收入概览" -#: engine/core/templates/admin/dashboard/_income_overview.html:31 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Net" +#: engine/core/templates/admin/dashboard/_income_overview.html:16 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 +#: engine/core/templates/admin/dashboard/_kpis.html:48 +msgid "Net revenue" msgstr "净收入" -#: engine/core/templates/admin/dashboard/_income_overview.html:37 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 -msgid "Taxes" -msgstr "税收" - -#: engine/core/templates/admin/dashboard/_income_overview.html:43 -#: engine/core/templates/admin/dashboard/_income_overview.html:66 +#: engine/core/templates/admin/dashboard/_income_overview.html:21 +#: engine/core/templates/admin/dashboard/_income_overview.html:44 msgid "Returns" msgstr "返回" -#: engine/core/templates/admin/dashboard/_income_overview.html:48 -msgid "Gross (pie total)" -msgstr "总收入" - -#: engine/core/templates/admin/dashboard/_income_overview.html:72 -msgid "No data" -msgstr "无日期" - +#: engine/core/templates/admin/dashboard/_income_overview.html:26 #: engine/core/templates/admin/dashboard/_kpis.html:6 msgid "GMV" msgstr "GMV" +#: engine/core/templates/admin/dashboard/_income_overview.html:50 +msgid "No data" +msgstr "无日期" + #: engine/core/templates/admin/dashboard/_kpis.html:34 msgid "AOV" msgstr "AOV" -#: engine/core/templates/admin/dashboard/_kpis.html:48 -msgid "Net revenue" -msgstr "净收入" - #: engine/core/templates/admin/dashboard/_kpis.html:62 msgid "Refund rate" msgstr "退款率" @@ -2694,7 +2760,7 @@ msgstr "已返回" msgid "Low stock" msgstr "低库存" -#: engine/core/templates/admin/dashboard/_low_stock.html:29 +#: engine/core/templates/admin/dashboard/_low_stock.html:33 msgid "No low stock items." msgstr "无低价商品。" @@ -2751,6 +2817,282 @@ msgstr "最近 30 天内无类别销售。" msgid "Django site admin" msgstr "Django 网站管理员" +#: engine/core/templates/admin_doc/bookmarklets.html:4 +#: engine/core/templates/admin_doc/bookmarklets.html:17 +msgid "Documentation bookmarklets" +msgstr "文档书签" + +#: engine/core/templates/admin_doc/bookmarklets.html:10 +#: engine/core/templates/admin_doc/index.html:4 +#: engine/core/templates/admin_doc/index.html:10 +#: engine/core/templates/admin_doc/index.html:15 +#: engine/core/templates/admin_doc/missing_docutils.html:10 +#: engine/core/templates/admin_doc/missing_docutils.html:19 +#: engine/core/templates/admin_doc/model_detail.html:10 +#: engine/core/templates/admin_doc/model_index.html:10 +#: engine/core/templates/admin_doc/template_detail.html:10 +#: engine/core/templates/admin_doc/template_filter_index.html:10 +#: engine/core/templates/admin_doc/template_tag_index.html:10 +#: engine/core/templates/admin_doc/view_detail.html:10 +#: engine/core/templates/admin_doc/view_index.html:10 +msgid "Documentation" +msgstr "文档" + +#: engine/core/templates/admin_doc/bookmarklets.html:12 +#: engine/core/templates/admin_doc/index.html:53 +msgid "Bookmarklets" +msgstr "书签小工具" + +#: engine/core/templates/admin_doc/bookmarklets.html:19 +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "要安装书签小工具,请将链接拖拽至书签工具栏,或右键点击链接并将其添加至书签。现在您可在本站任意页面选择该书签小工具。" + +#: engine/core/templates/admin_doc/bookmarklets.html:29 +msgid "Documentation for this page" +msgstr "本页文档" + +#: engine/core/templates/admin_doc/bookmarklets.html:31 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "从任意页面跳转至生成该页面的视图文档。" + +#: engine/core/templates/admin_doc/index.html:21 +#: engine/core/templates/admin_doc/model_detail.html:12 +#: engine/core/templates/admin_doc/model_index.html:4 +#: engine/core/templates/admin_doc/model_index.html:12 +msgid "Models" +msgstr "模型" + +#: engine/core/templates/admin_doc/index.html:23 +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "模型是对系统中所有对象及其关联字段的描述。每个模型都包含一个字段列表,这些字段可作为模板变量进行访问。" + +#: engine/core/templates/admin_doc/index.html:29 +#: engine/core/templates/admin_doc/view_detail.html:12 +#: engine/core/templates/admin_doc/view_index.html:4 +#: engine/core/templates/admin_doc/view_index.html:12 +msgid "Views" +msgstr "观点" + +#: engine/core/templates/admin_doc/index.html:31 +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "公共网站上的每个页面都是由视图生成的。视图定义了用于生成页面的模板以及该模板可用的对象。" + +#: engine/core/templates/admin_doc/index.html:39 +msgid "List of all the template tags and their functions." +msgstr "所有模板标签及其功能的列表。" + +#: engine/core/templates/admin_doc/index.html:45 +#: engine/core/templates/admin_doc/template_filter_index.html:12 +msgid "Filters" +msgstr "过滤器" + +#: engine/core/templates/admin_doc/index.html:47 +msgid "" +"Filters are actions which can be applied to variables in a template to alter" +" the output." +msgstr "过滤器是可应用于模板中变量的操作,用于改变输出结果。" + +#: engine/core/templates/admin_doc/index.html:55 +msgid "Tools for your browser to quickly access admin functionality." +msgstr "浏览器工具,助您快速访问管理功能。" + +#: engine/core/templates/admin_doc/missing_docutils.html:4 +msgid "Please install docutils" +msgstr "请安装 docutils" + +#: engine/core/templates/admin_doc/missing_docutils.html:20 +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"管理文档系统需要Python的docutils库。" + +#: engine/core/templates/admin_doc/missing_docutils.html:21 +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "请联系您的管理员安装 docutils。" + +#: engine/core/templates/admin_doc/model_detail.html:4 +#, python-format +msgid "Model: %(name)s" +msgstr "型号:%(name)s" + +#: engine/core/templates/admin_doc/model_detail.html:29 +msgid "Fields" +msgstr "领域" + +#: engine/core/templates/admin_doc/model_detail.html:36 +msgid "Field" +msgstr "领域" + +#: engine/core/templates/admin_doc/model_detail.html:37 +msgid "Type" +msgstr "类型" + +#: engine/core/templates/admin_doc/model_detail.html:38 +#: engine/core/templates/admin_doc/model_detail.html:70 +msgid "Description" +msgstr "描述" + +#: engine/core/templates/admin_doc/model_detail.html:61 +msgid "Methods with arguments" +msgstr "带参数的方法" + +#: engine/core/templates/admin_doc/model_detail.html:68 +msgid "Method" +msgstr "方法" + +#: engine/core/templates/admin_doc/model_detail.html:69 +msgid "Arguments" +msgstr "论点" + +#: engine/core/templates/admin_doc/model_detail.html:89 +msgid "Back to Model documentation" +msgstr "返回模型文档" + +#: engine/core/templates/admin_doc/model_index.html:17 +msgid "Model documentation" +msgstr "模型文档" + +#: engine/core/templates/admin_doc/model_index.html:44 +msgid "Model groups" +msgstr "模型组" + +#: engine/core/templates/admin_doc/template_detail.html:4 +#, python-format +msgid "Template: %(name)s" +msgstr "模板:%(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:12 +msgid "Templates" +msgstr "模板" + +#: engine/core/templates/admin_doc/template_detail.html:17 +#, python-format +msgid "" +"Template: %(name)s" +msgstr "" +"模板:%(name)s" + +#: engine/core/templates/admin_doc/template_detail.html:21 +#, python-format +msgid "Search path for template %(name)s:" +msgstr "模板 %(name)s 的搜索路径:" + +#: engine/core/templates/admin_doc/template_detail.html:29 +msgid "(does not exist)" +msgstr "(不存在)" + +#: engine/core/templates/admin_doc/template_detail.html:40 +msgid "Back to Documentation" +msgstr "返回文档" + +#: engine/core/templates/admin_doc/template_filter_index.html:4 +msgid "Template filters" +msgstr "模板过滤器" + +#: engine/core/templates/admin_doc/template_filter_index.html:17 +msgid "Template filter documentation" +msgstr "模板过滤器文档" + +#: engine/core/templates/admin_doc/template_filter_index.html:26 +#: engine/core/templates/admin_doc/template_filter_index.html:52 +msgid "Built-in filters" +msgstr "内置滤镜" + +#: engine/core/templates/admin_doc/template_filter_index.html:29 +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before using" +" the filter." +msgstr "" +"要使用这些过滤器,请在模板中使用过滤器之前添加%(code)s。" + +#: engine/core/templates/admin_doc/template_tag_index.html:4 +msgid "Template tags" +msgstr "模板标签" + +#: engine/core/templates/admin_doc/template_tag_index.html:17 +msgid "Template tag documentation" +msgstr "模板标签文档" + +#: engine/core/templates/admin_doc/template_tag_index.html:26 +#: engine/core/templates/admin_doc/template_tag_index.html:52 +msgid "Built-in tags" +msgstr "内置标签" + +#: engine/core/templates/admin_doc/template_tag_index.html:29 +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using the tag." +msgstr "" +"要使用这些标签,请在模板中使用标签前添加以下代码:%(code)s" + +#: engine/core/templates/admin_doc/view_detail.html:4 +#, python-format +msgid "View: %(name)s" +msgstr "视图:%(name)s" + +#: engine/core/templates/admin_doc/view_detail.html:28 +msgid "Context:" +msgstr "上下文:" + +#: engine/core/templates/admin_doc/view_detail.html:33 +msgid "Templates:" +msgstr "模板:" + +#: engine/core/templates/admin_doc/view_detail.html:41 +msgid "Back to View documentation" +msgstr "返回查看文档" + +#: engine/core/templates/admin_doc/view_index.html:17 +msgid "View documentation" +msgstr "查看文档" + +#: engine/core/templates/admin_doc/view_index.html:28 +#, python-format +msgid "Views by namespace %(name)s" +msgstr "按命名空间查看 %(name)s" + +#: engine/core/templates/admin_doc/view_index.html:30 +msgid "Views by empty namespace" +msgstr "空命名空间的视图" + +#: engine/core/templates/admin_doc/view_index.html:40 +#, python-format +msgid "" +"View function: %(full_name)s. Name: %(url_name)s." +msgstr "视图函数:%(full_name)s。名称:%(url_name)s。" + +#: engine/core/templates/admin_doc/view_index.html:54 +msgid "Jump to namespace" +msgstr "跳转到命名空间" + +#: engine/core/templates/admin_doc/view_index.html:59 +msgid "Empty namespace" +msgstr "空命名空间" + #: engine/core/templates/digital_order_created_email.html:7 #: engine/core/templates/digital_order_created_email.html:100 #: engine/core/templates/digital_order_delivered_email.html:6 @@ -2844,7 +3186,7 @@ msgstr "" " 附加信息" #: engine/core/templates/digital_order_delivered_email.html:137 -#: engine/core/templates/json_table_widget.html:6 +#: engine/core/templates/json_table_widget.html:26 msgid "value" msgstr "价值" @@ -2862,11 +3204,23 @@ msgstr "如果您有任何问题,请随时拨打 %(contact_email)s 联系我 msgid "best regards,
the %(project_name)s team" msgstr "致以最诚挚的问候,
%(project_name)s_团队" -#: engine/core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:7 +msgid "Key" +msgstr "关键" + +#: engine/core/templates/json_table_widget.html:8 +msgid "Value" +msgstr "价值" + +#: engine/core/templates/json_table_widget.html:19 msgid "key" msgstr "钥匙" -#: engine/core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:32 +msgid "Delete row" +msgstr "删除行" + +#: engine/core/templates/json_table_widget.html:44 msgid "Add Row" msgstr "添加行" @@ -2951,58 +3305,67 @@ msgstr "您没有执行此操作的权限。" msgid "NOMINATIM_URL must be configured." msgstr "必须配置 NOMINATIM_URL 参数!" -#: engine/core/validators.py:23 +#: engine/core/validators.py:18 +msgid "could not determine file type" +msgstr "无法确定文件类型" + +#: engine/core/validators.py:24 +#, python-brace-format +msgid "unsupported video format. supported formats: {supported}" +msgstr "不支持的视频格式。支持的格式:{supported}" + +#: engine/core/validators.py:45 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "图像尺寸不应超过 w{max_width} x h{max_height} 像素!" -#: engine/core/views.py:104 +#: engine/core/views.py:108 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." msgstr "处理网站地图索引请求并返回 XML 响应。它确保响应包含适当的 XML 内容类型标头。" -#: engine/core/views.py:119 +#: engine/core/views.py:123 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " "Content-Type header for XML." msgstr "处理网站地图的详细视图响应。该函数处理请求,获取相应的网站地图详细响应,并将 Content-Type 标头设置为 XML。" -#: engine/core/views.py:155 +#: engine/core/views.py:174 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "返回支持语言及其相应信息的列表。" -#: engine/core/views.py:182 +#: engine/core/views.py:201 msgid "Returns the parameters of the website as a JSON object." msgstr "以 JSON 对象形式返回网站参数。" -#: engine/core/views.py:198 +#: engine/core/views.py:217 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." msgstr "处理缓存操作,如使用指定的键和超时读取和设置缓存数据。" -#: engine/core/views.py:220 +#: engine/core/views.py:239 msgid "Handles `contact us` form submissions." msgstr "处理 \"联系我们 \"表单提交。" -#: engine/core/views.py:236 +#: engine/core/views.py:255 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." msgstr "处理来自传入 POST 请求的处理和验证 URL 的请求。" -#: engine/core/views.py:273 +#: engine/core/views.py:292 msgid "Handles global search queries." msgstr "处理全局搜索查询。" -#: engine/core/views.py:289 +#: engine/core/views.py:308 msgid "Handles the logic of buying as a business without registration." msgstr "处理未注册企业的购买逻辑。" -#: engine/core/views.py:337 +#: engine/core/views.py:356 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3010,31 +3373,31 @@ msgstr "" "处理与订单相关的数字资产的下载。\n" "此函数会尝试为位于项目存储目录中的数字资产文件提供服务。如果未找到文件,则会出现 HTTP 404 错误,表示资源不可用。" -#: engine/core/views.py:348 +#: engine/core/views.py:367 msgid "order_product_uuid is required" msgstr "order_product_uuid 为必填项" -#: engine/core/views.py:355 +#: engine/core/views.py:374 msgid "order product does not exist" msgstr "订单产品不存在" -#: engine/core/views.py:358 +#: engine/core/views.py:377 msgid "you can only download the digital asset once" msgstr "您只能下载一次数字资产" -#: engine/core/views.py:362 +#: engine/core/views.py:381 msgid "the order must be paid before downloading the digital asset" msgstr "在下载数字资产前必须支付订单费用" -#: engine/core/views.py:369 +#: engine/core/views.py:388 msgid "the order product does not have a product" msgstr "订单产品没有产品" -#: engine/core/views.py:412 +#: engine/core/views.py:431 msgid "favicon not found" msgstr "未找到 favicon" -#: engine/core/views.py:418 +#: engine/core/views.py:437 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3042,7 +3405,7 @@ msgstr "" "处理网站的 favicon 请求。\n" "该函数会尝试为位于项目静态目录中的 favicon 文件提供服务。如果找不到 favicon 文件,就会出现 HTTP 404 错误,表示资源不可用。" -#: engine/core/views.py:432 +#: engine/core/views.py:451 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3051,16 +3414,20 @@ msgstr "" "将请求重定向到管理索引页面。该函数处理传入的 HTTP 请求并将其重定向到 Django 管理界面索引页面。它使用 Django 的 " "`redirect` 函数来处理 HTTP 重定向。" -#: engine/core/views.py:445 +#: engine/core/views.py:464 msgid "Returns current version of the Schon. " msgstr "返回 Schon 的当前版本。" -#: engine/core/views.py:674 engine/core/views.py:689 +#: engine/core/views.py:475 +msgid "no image file provided" +msgstr "未提供图像文件" + +#: engine/core/views.py:710 engine/core/views.py:725 #, python-format msgid "Revenue & Orders (last %(days)d)" msgstr "收入与订单(最近的%(days)d)" -#: engine/core/views.py:870 +#: engine/core/views.py:911 msgid "Returns custom variables for Dashboard. " msgstr "返回 Dashboard 的自定义变量。" @@ -3130,7 +3497,7 @@ msgstr "" "代表用于管理品牌实例的视图集。该类提供了查询、过滤和序列化品牌对象的功能。它使用 Django 的 ViewSet 框架来简化品牌对象 API " "端点的实现。" -#: engine/core/viewsets.py:458 +#: engine/core/viewsets.py:460 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3144,7 +3511,15 @@ msgstr "" "`schonViewSet` 扩展而来,使用通用功能,并与 Django REST 框架集成,用于 RESTful API " "操作。包括检索产品详细信息、应用权限和访问产品相关反馈的方法。" -#: engine/core/viewsets.py:605 +#: engine/core/viewsets.py:541 +msgid "identificator_type and identificators are required" +msgstr "标识符类型和标识符是必需的" + +#: engine/core/viewsets.py:554 +msgid "identificator_type must be one of: uuid, slug, sku" +msgstr "标识符类型必须为以下之一:uuid、slug、sku" + +#: engine/core/viewsets.py:635 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3155,7 +3530,7 @@ msgstr "" "代表用于管理供应商对象的视图集。该视图集允许获取、过滤和序列化 Vendor " "数据。它定义了用于处理不同操作的查询集、过滤器配置和序列化器类。该类的目的是通过 Django REST 框架提供对 Vendor 相关资源的简化访问。" -#: engine/core/viewsets.py:625 +#: engine/core/viewsets.py:655 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3167,7 +3542,7 @@ msgstr "" "处理反馈对象的视图集的表示。该类管理与反馈对象相关的操作,包括列出、筛选和检索详细信息。该视图集的目的是为不同的操作提供不同的序列化器,并对可访问的反馈对象实施基于权限的处理。它扩展了基本的" " `schonViewSet` 并使用 Django 的过滤系统来查询数据。" -#: engine/core/viewsets.py:652 +#: engine/core/viewsets.py:682 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3181,7 +3556,7 @@ msgstr "" "ViewSet。该类提供了检索、修改和管理订单对象的功能。它包括用于处理订单操作的各种端点,如添加或删除产品、为注册用户和未注册用户执行购买操作,以及检索当前已验证用户的待处理订单。ViewSet" " 根据正在执行的特定操作使用多个序列化器,并在与订单数据交互时执行相应的权限。" -#: engine/core/viewsets.py:914 +#: engine/core/viewsets.py:944 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3193,25 +3568,25 @@ msgstr "" "模型的自定义操作。它包括过滤、权限检查和根据请求的操作切换序列化器。此外,它还提供了一个详细的操作,用于处理有关 OrderProduct " "实例的反馈信息" -#: engine/core/viewsets.py:974 +#: engine/core/viewsets.py:1004 msgid "Manages operations related to Product images in the application. " msgstr "管理应用程序中与产品图像相关的操作。" -#: engine/core/viewsets.py:988 +#: engine/core/viewsets.py:1018 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "通过各种 API 操作管理 PromoCode 实例的检索和处理。" -#: engine/core/viewsets.py:1019 +#: engine/core/viewsets.py:1049 msgid "Represents a view set for managing promotions. " msgstr "代表用于管理促销活动的视图集。" -#: engine/core/viewsets.py:1032 +#: engine/core/viewsets.py:1062 msgid "Handles operations related to Stock data in the system." msgstr "处理系统中与库存数据有关的操作。" -#: engine/core/viewsets.py:1046 +#: engine/core/viewsets.py:1076 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3224,7 +3599,7 @@ msgstr "" "用于管理愿望清单操作的 ViewSet。WishlistViewSet 提供了与用户愿望清单交互的端点,允许检索、修改和定制愿望清单中的产品。该 " "ViewSet 支持添加、删除和批量操作愿望清单产品等功能。此外,还集成了权限检查功能,以确保用户只能管理自己的愿望清单,除非获得明确的权限。" -#: engine/core/viewsets.py:1183 +#: engine/core/viewsets.py:1213 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3235,12 +3610,12 @@ msgstr "" "该类为管理 \"地址 \"对象提供了视图集功能。AddressViewSet 类支持与地址实体相关的 CRUD 操作、过滤和自定义操作。它包括针对不同 " "HTTP 方法的专门行为、序列化器重载以及基于请求上下文的权限处理。" -#: engine/core/viewsets.py:1254 +#: engine/core/viewsets.py:1275 #, python-brace-format msgid "Geocoding error: {e}" msgstr "地理编码错误:{e}" -#: engine/core/viewsets.py:1262 +#: engine/core/viewsets.py:1283 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/management/commands/deepl_translate.py b/engine/core/management/commands/deepl_translate.py index dfef27b1..0eb6bdac 100644 --- a/engine/core/management/commands/deepl_translate.py +++ b/engine/core/management/commands/deepl_translate.py @@ -262,10 +262,12 @@ class Command(BaseCommand): maps.append(p_map) data = [ - ("auth_key", auth_key), ("target_lang", api_code), ] + [("text", t) for t in protected] - resp = requests.post("https://api.deepl.com/v2/translate", data=data) + headers = {"Authorization": f"DeepL-Auth-Key {auth_key}"} + resp = requests.post( + "https://api.deepl.com/v2/translate", data=data, headers=headers + ) try: resp.raise_for_status() result = resp.json() diff --git a/engine/core/management/commands/translate_fields.py b/engine/core/management/commands/translate_fields.py index 8ab893b8..8ac879ac 100644 --- a/engine/core/management/commands/translate_fields.py +++ b/engine/core/management/commands/translate_fields.py @@ -91,10 +91,10 @@ class Command(BaseCommand): resp = requests.post( DEEPL_API_URL, data={ - "auth_key": auth_key, "text": src_text, "target_lang": deepl_lang, }, + headers={"Authorization": f"DeepL-Auth-Key {auth_key}"}, timeout=30, ) if resp.status_code != 200: diff --git a/engine/payments/locale/ar_AR/LC_MESSAGES/django.po b/engine/payments/locale/ar_AR/LC_MESSAGES/django.po index 8200d6ef..e6aa0a29 100644 --- a/engine/payments/locale/ar_AR/LC_MESSAGES/django.po +++ b/engine/payments/locale/ar_AR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 01:59+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/payments/admin.py:17 engine/payments/models.py:68 +#: engine/payments/admin.py:17 engine/payments/models.py:66 msgid "transaction" msgstr "المعاملات" -#: engine/payments/admin.py:18 engine/payments/models.py:69 +#: engine/payments/admin.py:18 engine/payments/models.py:67 msgid "transactions" msgstr "المعاملات" @@ -85,67 +85,67 @@ msgstr "الرصيد" msgid "balances" msgstr "الموازين" -#: engine/payments/models.py:102 +#: engine/payments/models.py:100 msgid "name" msgstr "الاسم" -#: engine/payments/models.py:107 +#: engine/payments/models.py:105 msgid "default currency" msgstr "العملة الافتراضية" -#: engine/payments/models.py:114 +#: engine/payments/models.py:112 msgid "currencies" msgstr "العملات" -#: engine/payments/models.py:116 +#: engine/payments/models.py:114 msgid "comma separated list of currencies supported by this gateway, " msgstr "قائمة مفصولة بفاصلة بالعملات التي تدعمها هذه البوابة," -#: engine/payments/models.py:122 +#: engine/payments/models.py:125 msgid "minimum transaction amount" msgstr "الحد الأدنى لمبلغ المعاملة" -#: engine/payments/models.py:125 +#: engine/payments/models.py:133 msgid "maximum transaction amount" msgstr "الحد الأقصى لمبلغ المعاملة" -#: engine/payments/models.py:131 +#: engine/payments/models.py:139 msgid "daily limit" msgstr "الحد اليومي" -#: engine/payments/models.py:132 +#: engine/payments/models.py:140 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "حد المجموع اليومي لمبالغ المعاملات. 0 يعني عدم وجود حد" -#: engine/payments/models.py:138 +#: engine/payments/models.py:146 msgid "monthly limit" msgstr "الحد الشهري" -#: engine/payments/models.py:139 +#: engine/payments/models.py:147 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "حد المجموع الشهري لمبالغ المعاملات. 0 يعني عدم وجود حد" -#: engine/payments/models.py:142 +#: engine/payments/models.py:150 msgid "priority" msgstr "الأولوية" -#: engine/payments/models.py:145 +#: engine/payments/models.py:153 msgid "integration variables" msgstr "متغيرات التكامل" -#: engine/payments/models.py:152 +#: engine/payments/models.py:160 msgid "payment gateway" msgstr "بوابة الدفع" -#: engine/payments/models.py:153 +#: engine/payments/models.py:161 msgid "payment gateways" msgstr "بوابات الدفع" -#: engine/payments/models.py:198 +#: engine/payments/models.py:206 msgid "gateway integration path is not set" msgstr "لم يتم تعيين مسار تكامل البوابة" -#: engine/payments/models.py:204 +#: engine/payments/models.py:212 #, python-format msgid "invalid integration path: %(path)s" msgstr "مسار تكامل غير صالح: %(path)s" diff --git a/engine/payments/locale/cs_CZ/LC_MESSAGES/django.po b/engine/payments/locale/cs_CZ/LC_MESSAGES/django.po index abd12a59..55336fac 100644 --- a/engine/payments/locale/cs_CZ/LC_MESSAGES/django.po +++ b/engine/payments/locale/cs_CZ/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 01:44+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/payments/admin.py:17 engine/payments/models.py:68 +#: engine/payments/admin.py:17 engine/payments/models.py:66 msgid "transaction" msgstr "Transakce" -#: engine/payments/admin.py:18 engine/payments/models.py:69 +#: engine/payments/admin.py:18 engine/payments/models.py:67 msgid "transactions" msgstr "Transakce" @@ -85,67 +85,67 @@ msgstr "Bilance" msgid "balances" msgstr "Váhy" -#: engine/payments/models.py:102 +#: engine/payments/models.py:100 msgid "name" msgstr "název" -#: engine/payments/models.py:107 +#: engine/payments/models.py:105 msgid "default currency" msgstr "výchozí měna" -#: engine/payments/models.py:114 +#: engine/payments/models.py:112 msgid "currencies" msgstr "měny" -#: engine/payments/models.py:116 +#: engine/payments/models.py:114 msgid "comma separated list of currencies supported by this gateway, " msgstr "seznam měn podporovaných touto bránou oddělený čárkou," -#: engine/payments/models.py:122 +#: engine/payments/models.py:125 msgid "minimum transaction amount" msgstr "minimální částka transakce" -#: engine/payments/models.py:125 +#: engine/payments/models.py:133 msgid "maximum transaction amount" msgstr "maximální částka transakce" -#: engine/payments/models.py:131 +#: engine/payments/models.py:139 msgid "daily limit" msgstr "denní limit" -#: engine/payments/models.py:132 +#: engine/payments/models.py:140 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "denní limit součtu částek transakcí. 0 znamená žádný limit" -#: engine/payments/models.py:138 +#: engine/payments/models.py:146 msgid "monthly limit" msgstr "měsíční limit" -#: engine/payments/models.py:139 +#: engine/payments/models.py:147 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "měsíční limit součtu částek transakcí. 0 znamená žádný limit" -#: engine/payments/models.py:142 +#: engine/payments/models.py:150 msgid "priority" msgstr "priorita" -#: engine/payments/models.py:145 +#: engine/payments/models.py:153 msgid "integration variables" msgstr "integrační proměnné" -#: engine/payments/models.py:152 +#: engine/payments/models.py:160 msgid "payment gateway" msgstr "platební brána" -#: engine/payments/models.py:153 +#: engine/payments/models.py:161 msgid "payment gateways" msgstr "platební brány" -#: engine/payments/models.py:198 +#: engine/payments/models.py:206 msgid "gateway integration path is not set" msgstr "cesta integrace brány není nastavena" -#: engine/payments/models.py:204 +#: engine/payments/models.py:212 #, python-format msgid "invalid integration path: %(path)s" msgstr "neplatná cesta integrace: %(path)s" diff --git a/engine/payments/locale/da_DK/LC_MESSAGES/django.po b/engine/payments/locale/da_DK/LC_MESSAGES/django.po index 8027f513..c72e598b 100644 --- a/engine/payments/locale/da_DK/LC_MESSAGES/django.po +++ b/engine/payments/locale/da_DK/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:02+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/payments/admin.py:17 engine/payments/models.py:68 +#: engine/payments/admin.py:17 engine/payments/models.py:66 msgid "transaction" msgstr "Transaktion" -#: engine/payments/admin.py:18 engine/payments/models.py:69 +#: engine/payments/admin.py:18 engine/payments/models.py:67 msgid "transactions" msgstr "Transaktioner" @@ -85,67 +85,67 @@ msgstr "Balance" msgid "balances" msgstr "Vægte" -#: engine/payments/models.py:102 +#: engine/payments/models.py:100 msgid "name" msgstr "Navn" -#: engine/payments/models.py:107 +#: engine/payments/models.py:105 msgid "default currency" msgstr "Standardvaluta" -#: engine/payments/models.py:114 +#: engine/payments/models.py:112 msgid "currencies" msgstr "Valutaer" -#: engine/payments/models.py:116 +#: engine/payments/models.py:114 msgid "comma separated list of currencies supported by this gateway, " msgstr "kommasepareret liste over valutaer, der understøttes af denne gateway," -#: engine/payments/models.py:122 +#: engine/payments/models.py:125 msgid "minimum transaction amount" msgstr "mindste transaktionsbeløb" -#: engine/payments/models.py:125 +#: engine/payments/models.py:133 msgid "maximum transaction amount" msgstr "maksimalt transaktionsbeløb" -#: engine/payments/models.py:131 +#: engine/payments/models.py:139 msgid "daily limit" msgstr "daglig grænse" -#: engine/payments/models.py:132 +#: engine/payments/models.py:140 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "daglig sumgrænse for transaktionsbeløb. 0 betyder ingen grænse" -#: engine/payments/models.py:138 +#: engine/payments/models.py:146 msgid "monthly limit" msgstr "månedlig grænse" -#: engine/payments/models.py:139 +#: engine/payments/models.py:147 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "månedlig sumgrænse for transaktionsbeløb. 0 betyder ingen grænse" -#: engine/payments/models.py:142 +#: engine/payments/models.py:150 msgid "priority" msgstr "prioritet" -#: engine/payments/models.py:145 +#: engine/payments/models.py:153 msgid "integration variables" msgstr "Integrationsvariabler" -#: engine/payments/models.py:152 +#: engine/payments/models.py:160 msgid "payment gateway" msgstr "betalingsgateway" -#: engine/payments/models.py:153 +#: engine/payments/models.py:161 msgid "payment gateways" msgstr "Betalingsgateways" -#: engine/payments/models.py:198 +#: engine/payments/models.py:206 msgid "gateway integration path is not set" msgstr "gateway-integrationsstien er ikke indstillet" -#: engine/payments/models.py:204 +#: engine/payments/models.py:212 #, python-format msgid "invalid integration path: %(path)s" msgstr "Ugyldig integrationssti: %(path)s." diff --git a/engine/payments/locale/de_DE/LC_MESSAGES/django.po b/engine/payments/locale/de_DE/LC_MESSAGES/django.po index 23ae3381..c9394aac 100644 --- a/engine/payments/locale/de_DE/LC_MESSAGES/django.po +++ b/engine/payments/locale/de_DE/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 01:44+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/payments/admin.py:17 engine/payments/models.py:68 +#: engine/payments/admin.py:17 engine/payments/models.py:66 msgid "transaction" msgstr "Transaktion" -#: engine/payments/admin.py:18 engine/payments/models.py:69 +#: engine/payments/admin.py:18 engine/payments/models.py:67 msgid "transactions" msgstr "Transaktionen" @@ -85,71 +85,71 @@ msgstr "Waage" msgid "balances" msgstr "Waagen" -#: engine/payments/models.py:102 +#: engine/payments/models.py:100 msgid "name" msgstr "Name" -#: engine/payments/models.py:107 +#: engine/payments/models.py:105 msgid "default currency" msgstr "Standardwährung" -#: engine/payments/models.py:114 +#: engine/payments/models.py:112 msgid "currencies" msgstr "Währungen" -#: engine/payments/models.py:116 +#: engine/payments/models.py:114 msgid "comma separated list of currencies supported by this gateway, " msgstr "kommagetrennte Liste der von diesem Gateway unterstützten Währungen," -#: engine/payments/models.py:122 +#: engine/payments/models.py:125 msgid "minimum transaction amount" msgstr "Mindesttransaktionsbetrag" -#: engine/payments/models.py:125 +#: engine/payments/models.py:133 msgid "maximum transaction amount" msgstr "maximaler Transaktionsbetrag" -#: engine/payments/models.py:131 +#: engine/payments/models.py:139 msgid "daily limit" msgstr "Tageslimit" -#: engine/payments/models.py:132 +#: engine/payments/models.py:140 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "" "tägliches Summenlimit für die Beträge der Transaktionen. 0 bedeutet kein " "Limit" -#: engine/payments/models.py:138 +#: engine/payments/models.py:146 msgid "monthly limit" msgstr "monatliche Obergrenze" -#: engine/payments/models.py:139 +#: engine/payments/models.py:147 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "" "monatliches Summenlimit für die Beträge der Transaktionen. 0 bedeutet kein " "Limit" -#: engine/payments/models.py:142 +#: engine/payments/models.py:150 msgid "priority" msgstr "Priorität" -#: engine/payments/models.py:145 +#: engine/payments/models.py:153 msgid "integration variables" msgstr "Integrationsvariablen" -#: engine/payments/models.py:152 +#: engine/payments/models.py:160 msgid "payment gateway" msgstr "Zahlungs-Gateway" -#: engine/payments/models.py:153 +#: engine/payments/models.py:161 msgid "payment gateways" msgstr "Zahlungs-Gateways" -#: engine/payments/models.py:198 +#: engine/payments/models.py:206 msgid "gateway integration path is not set" msgstr "Gateway-Integrationspfad ist nicht festgelegt" -#: engine/payments/models.py:204 +#: engine/payments/models.py:212 #, python-format msgid "invalid integration path: %(path)s" msgstr "Ungültiger Integrationspfad: %(path)s" diff --git a/engine/payments/locale/en_GB/LC_MESSAGES/django.po b/engine/payments/locale/en_GB/LC_MESSAGES/django.po index f65e2d3c..528bceab 100644 --- a/engine/payments/locale/en_GB/LC_MESSAGES/django.po +++ b/engine/payments/locale/en_GB/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -17,11 +17,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/payments/admin.py:17 engine/payments/models.py:68 +#: engine/payments/admin.py:17 engine/payments/models.py:66 msgid "transaction" msgstr "Transaction" -#: engine/payments/admin.py:18 engine/payments/models.py:69 +#: engine/payments/admin.py:18 engine/payments/models.py:67 msgid "transactions" msgstr "Transactions" @@ -89,67 +89,67 @@ msgstr "Balance" msgid "balances" msgstr "Balances" -#: engine/payments/models.py:102 +#: engine/payments/models.py:100 msgid "name" msgstr "name" -#: engine/payments/models.py:107 +#: engine/payments/models.py:105 msgid "default currency" msgstr "default currency" -#: engine/payments/models.py:114 +#: engine/payments/models.py:112 msgid "currencies" msgstr "currencies" -#: engine/payments/models.py:116 +#: engine/payments/models.py:114 msgid "comma separated list of currencies supported by this gateway, " msgstr "comma separated list of currencies supported by this gateway," -#: engine/payments/models.py:122 +#: engine/payments/models.py:125 msgid "minimum transaction amount" msgstr "minimum transaction amount" -#: engine/payments/models.py:125 +#: engine/payments/models.py:133 msgid "maximum transaction amount" msgstr "maximum transaction amount" -#: engine/payments/models.py:131 +#: engine/payments/models.py:139 msgid "daily limit" msgstr "daily limit" -#: engine/payments/models.py:132 +#: engine/payments/models.py:140 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "daily sum limit of transactions' amounts. 0 means no limit" -#: engine/payments/models.py:138 +#: engine/payments/models.py:146 msgid "monthly limit" msgstr "monthly limit" -#: engine/payments/models.py:139 +#: engine/payments/models.py:147 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "monthly sum limit of transactions' amounts. 0 means no limit" -#: engine/payments/models.py:142 +#: engine/payments/models.py:150 msgid "priority" msgstr "priority" -#: engine/payments/models.py:145 +#: engine/payments/models.py:153 msgid "integration variables" msgstr "integration variables" -#: engine/payments/models.py:152 +#: engine/payments/models.py:160 msgid "payment gateway" msgstr "payment gateway" -#: engine/payments/models.py:153 +#: engine/payments/models.py:161 msgid "payment gateways" msgstr "payment gateways" -#: engine/payments/models.py:198 +#: engine/payments/models.py:206 msgid "gateway integration path is not set" msgstr "gateway integration path is not set" -#: engine/payments/models.py:204 +#: engine/payments/models.py:212 #, python-format msgid "invalid integration path: %(path)s" msgstr "invalid integration path: %(path)s" diff --git a/engine/payments/locale/en_US/LC_MESSAGES/django.po b/engine/payments/locale/en_US/LC_MESSAGES/django.po index 5a710551..8790e2f6 100644 --- a/engine/payments/locale/en_US/LC_MESSAGES/django.po +++ b/engine/payments/locale/en_US/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:21+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/payments/admin.py:17 engine/payments/models.py:68 +#: engine/payments/admin.py:17 engine/payments/models.py:66 msgid "transaction" msgstr "Transaction" -#: engine/payments/admin.py:18 engine/payments/models.py:69 +#: engine/payments/admin.py:18 engine/payments/models.py:67 msgid "transactions" msgstr "Transactions" @@ -85,67 +85,67 @@ msgstr "Balance" msgid "balances" msgstr "Scales" -#: engine/payments/models.py:102 +#: engine/payments/models.py:100 msgid "name" msgstr "name" -#: engine/payments/models.py:107 +#: engine/payments/models.py:105 msgid "default currency" msgstr "default currency" -#: engine/payments/models.py:114 +#: engine/payments/models.py:112 msgid "currencies" msgstr "currencies" -#: engine/payments/models.py:116 +#: engine/payments/models.py:114 msgid "comma separated list of currencies supported by this gateway, " msgstr "comma separated list of currencies supported by this gateway," -#: engine/payments/models.py:122 +#: engine/payments/models.py:125 msgid "minimum transaction amount" msgstr "minimum transaction amount" -#: engine/payments/models.py:125 +#: engine/payments/models.py:133 msgid "maximum transaction amount" msgstr "maximum transaction amount" -#: engine/payments/models.py:131 +#: engine/payments/models.py:139 msgid "daily limit" msgstr "daily limit" -#: engine/payments/models.py:132 +#: engine/payments/models.py:140 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "daily sum limit of transactions' amounts. 0 means no limit" -#: engine/payments/models.py:138 +#: engine/payments/models.py:146 msgid "monthly limit" msgstr "monthly limit" -#: engine/payments/models.py:139 +#: engine/payments/models.py:147 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "monthly sum limit of transactions' amounts. 0 means no limit" -#: engine/payments/models.py:142 +#: engine/payments/models.py:150 msgid "priority" msgstr "priority" -#: engine/payments/models.py:145 +#: engine/payments/models.py:153 msgid "integration variables" msgstr "integration variables" -#: engine/payments/models.py:152 +#: engine/payments/models.py:160 msgid "payment gateway" msgstr "payment gateway" -#: engine/payments/models.py:153 +#: engine/payments/models.py:161 msgid "payment gateways" msgstr "payment gateways" -#: engine/payments/models.py:198 +#: engine/payments/models.py:206 msgid "gateway integration path is not set" msgstr "gateway integration path is not set" -#: engine/payments/models.py:204 +#: engine/payments/models.py:212 #, python-format msgid "invalid integration path: %(path)s" msgstr "invalid integration path: %(path)s" diff --git a/engine/payments/locale/es_ES/LC_MESSAGES/django.po b/engine/payments/locale/es_ES/LC_MESSAGES/django.po index 554243da..6cf62b79 100644 --- a/engine/payments/locale/es_ES/LC_MESSAGES/django.po +++ b/engine/payments/locale/es_ES/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 01:44+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/payments/admin.py:17 engine/payments/models.py:68 +#: engine/payments/admin.py:17 engine/payments/models.py:66 msgid "transaction" msgstr "Transacción" -#: engine/payments/admin.py:18 engine/payments/models.py:69 +#: engine/payments/admin.py:18 engine/payments/models.py:67 msgid "transactions" msgstr "Transacciones" @@ -85,71 +85,71 @@ msgstr "Saldo" msgid "balances" msgstr "Escalas" -#: engine/payments/models.py:102 +#: engine/payments/models.py:100 msgid "name" msgstr "nombre" -#: engine/payments/models.py:107 +#: engine/payments/models.py:105 msgid "default currency" msgstr "moneda por defecto" -#: engine/payments/models.py:114 +#: engine/payments/models.py:112 msgid "currencies" msgstr "divisas" -#: engine/payments/models.py:116 +#: engine/payments/models.py:114 msgid "comma separated list of currencies supported by this gateway, " msgstr "lista separada por comas de las divisas admitidas por esta pasarela," -#: engine/payments/models.py:122 +#: engine/payments/models.py:125 msgid "minimum transaction amount" msgstr "importe mínimo de transacción" -#: engine/payments/models.py:125 +#: engine/payments/models.py:133 msgid "maximum transaction amount" msgstr "importe máximo de transacción" -#: engine/payments/models.py:131 +#: engine/payments/models.py:139 msgid "daily limit" msgstr "límite diario" -#: engine/payments/models.py:132 +#: engine/payments/models.py:140 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "" "límite de la suma diaria de los importes de las transacciones. 0 significa " "sin límite" -#: engine/payments/models.py:138 +#: engine/payments/models.py:146 msgid "monthly limit" msgstr "límite mensual" -#: engine/payments/models.py:139 +#: engine/payments/models.py:147 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "" "límite de la suma mensual de los importes de las transacciones. 0 significa " "sin límite" -#: engine/payments/models.py:142 +#: engine/payments/models.py:150 msgid "priority" msgstr "prioridad" -#: engine/payments/models.py:145 +#: engine/payments/models.py:153 msgid "integration variables" msgstr "variables de integración" -#: engine/payments/models.py:152 +#: engine/payments/models.py:160 msgid "payment gateway" msgstr "pasarela de pagos" -#: engine/payments/models.py:153 +#: engine/payments/models.py:161 msgid "payment gateways" msgstr "pasarelas de pago" -#: engine/payments/models.py:198 +#: engine/payments/models.py:206 msgid "gateway integration path is not set" msgstr "la ruta de integración de la pasarela no está configurada" -#: engine/payments/models.py:204 +#: engine/payments/models.py:212 #, python-format msgid "invalid integration path: %(path)s" msgstr "ruta de integración no válida: %(path)s" diff --git a/engine/payments/locale/fa_IR/LC_MESSAGES/django.po b/engine/payments/locale/fa_IR/LC_MESSAGES/django.po index 854aec3d..9bd354c9 100644 --- a/engine/payments/locale/fa_IR/LC_MESSAGES/django.po +++ b/engine/payments/locale/fa_IR/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 01:44+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,11 +16,11 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: engine/payments/admin.py:17 engine/payments/models.py:68 +#: engine/payments/admin.py:17 engine/payments/models.py:66 msgid "transaction" msgstr "" -#: engine/payments/admin.py:18 engine/payments/models.py:69 +#: engine/payments/admin.py:18 engine/payments/models.py:67 msgid "transactions" msgstr "" @@ -86,67 +86,67 @@ msgstr "" msgid "balances" msgstr "" -#: engine/payments/models.py:102 +#: engine/payments/models.py:100 msgid "name" msgstr "" -#: engine/payments/models.py:107 +#: engine/payments/models.py:105 msgid "default currency" msgstr "" -#: engine/payments/models.py:114 +#: engine/payments/models.py:112 msgid "currencies" msgstr "" -#: engine/payments/models.py:116 +#: engine/payments/models.py:114 msgid "comma separated list of currencies supported by this gateway, " msgstr "" -#: engine/payments/models.py:122 +#: engine/payments/models.py:125 msgid "minimum transaction amount" msgstr "" -#: engine/payments/models.py:125 +#: engine/payments/models.py:133 msgid "maximum transaction amount" msgstr "" -#: engine/payments/models.py:131 +#: engine/payments/models.py:139 msgid "daily limit" msgstr "" -#: engine/payments/models.py:132 +#: engine/payments/models.py:140 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "" -#: engine/payments/models.py:138 +#: engine/payments/models.py:146 msgid "monthly limit" msgstr "" -#: engine/payments/models.py:139 +#: engine/payments/models.py:147 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "" -#: engine/payments/models.py:142 +#: engine/payments/models.py:150 msgid "priority" msgstr "" -#: engine/payments/models.py:145 +#: engine/payments/models.py:153 msgid "integration variables" msgstr "" -#: engine/payments/models.py:152 +#: engine/payments/models.py:160 msgid "payment gateway" msgstr "" -#: engine/payments/models.py:153 +#: engine/payments/models.py:161 msgid "payment gateways" msgstr "" -#: engine/payments/models.py:198 +#: engine/payments/models.py:206 msgid "gateway integration path is not set" msgstr "" -#: engine/payments/models.py:204 +#: engine/payments/models.py:212 #, python-format msgid "invalid integration path: %(path)s" msgstr "" diff --git a/engine/payments/locale/fr_FR/LC_MESSAGES/django.po b/engine/payments/locale/fr_FR/LC_MESSAGES/django.po index c69a3536..dccf23d2 100644 --- a/engine/payments/locale/fr_FR/LC_MESSAGES/django.po +++ b/engine/payments/locale/fr_FR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 01:44+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/payments/admin.py:17 engine/payments/models.py:68 +#: engine/payments/admin.py:17 engine/payments/models.py:66 msgid "transaction" msgstr "Transaction" -#: engine/payments/admin.py:18 engine/payments/models.py:69 +#: engine/payments/admin.py:18 engine/payments/models.py:67 msgid "transactions" msgstr "Transactions" @@ -85,71 +85,71 @@ msgstr "Balance" msgid "balances" msgstr "Balances" -#: engine/payments/models.py:102 +#: engine/payments/models.py:100 msgid "name" msgstr "nom" -#: engine/payments/models.py:107 +#: engine/payments/models.py:105 msgid "default currency" msgstr "monnaie par défaut" -#: engine/payments/models.py:114 +#: engine/payments/models.py:112 msgid "currencies" msgstr "monnaies" -#: engine/payments/models.py:116 +#: engine/payments/models.py:114 msgid "comma separated list of currencies supported by this gateway, " msgstr "" "liste séparée par des virgules des devises prises en charge par cette " "passerelle," -#: engine/payments/models.py:122 +#: engine/payments/models.py:125 msgid "minimum transaction amount" msgstr "montant minimum de la transaction" -#: engine/payments/models.py:125 +#: engine/payments/models.py:133 msgid "maximum transaction amount" msgstr "montant maximum de la transaction" -#: engine/payments/models.py:131 +#: engine/payments/models.py:139 msgid "daily limit" msgstr "limite journalière" -#: engine/payments/models.py:132 +#: engine/payments/models.py:140 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "" "la limite quotidienne des montants des transactions. 0 signifie aucune limite" -#: engine/payments/models.py:138 +#: engine/payments/models.py:146 msgid "monthly limit" msgstr "limite mensuelle" -#: engine/payments/models.py:139 +#: engine/payments/models.py:147 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "" "limite mensuelle des montants des transactions. 0 signifie aucune limite" -#: engine/payments/models.py:142 +#: engine/payments/models.py:150 msgid "priority" msgstr "priorité" -#: engine/payments/models.py:145 +#: engine/payments/models.py:153 msgid "integration variables" msgstr "variables d'intégration" -#: engine/payments/models.py:152 +#: engine/payments/models.py:160 msgid "payment gateway" msgstr "passerelle de paiement" -#: engine/payments/models.py:153 +#: engine/payments/models.py:161 msgid "payment gateways" msgstr "passerelles de paiement" -#: engine/payments/models.py:198 +#: engine/payments/models.py:206 msgid "gateway integration path is not set" msgstr "le chemin d'intégration de la passerelle n'est pas défini" -#: engine/payments/models.py:204 +#: engine/payments/models.py:212 #, python-format msgid "invalid integration path: %(path)s" msgstr "chemin d'intégration non valide : %(path)s" diff --git a/engine/payments/locale/he_IL/LC_MESSAGES/django.po b/engine/payments/locale/he_IL/LC_MESSAGES/django.po index 3babca65..0efbb596 100644 --- a/engine/payments/locale/he_IL/LC_MESSAGES/django.po +++ b/engine/payments/locale/he_IL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 01:44+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/payments/admin.py:17 engine/payments/models.py:68 +#: engine/payments/admin.py:17 engine/payments/models.py:66 msgid "transaction" msgstr "עסקה" -#: engine/payments/admin.py:18 engine/payments/models.py:69 +#: engine/payments/admin.py:18 engine/payments/models.py:67 msgid "transactions" msgstr "עסקאות" @@ -83,67 +83,67 @@ msgstr "מאזניים" msgid "balances" msgstr "מאזניים" -#: engine/payments/models.py:102 +#: engine/payments/models.py:100 msgid "name" msgstr "שם" -#: engine/payments/models.py:107 +#: engine/payments/models.py:105 msgid "default currency" msgstr "מטבע ברירת מחדל" -#: engine/payments/models.py:114 +#: engine/payments/models.py:112 msgid "currencies" msgstr "מטבעות" -#: engine/payments/models.py:116 +#: engine/payments/models.py:114 msgid "comma separated list of currencies supported by this gateway, " msgstr "רשימה מופרדת בפסיקים של המטבעות הנתמכים על ידי שער זה," -#: engine/payments/models.py:122 +#: engine/payments/models.py:125 msgid "minimum transaction amount" msgstr "סכום העסקה המינימלי" -#: engine/payments/models.py:125 +#: engine/payments/models.py:133 msgid "maximum transaction amount" msgstr "סכום העסקה המקסימלי" -#: engine/payments/models.py:131 +#: engine/payments/models.py:139 msgid "daily limit" msgstr "מגבלה יומית" -#: engine/payments/models.py:132 +#: engine/payments/models.py:140 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "הגבלה יומית על סכום העסקאות. 0 פירושו ללא הגבלה." -#: engine/payments/models.py:138 +#: engine/payments/models.py:146 msgid "monthly limit" msgstr "מגבלה חודשית" -#: engine/payments/models.py:139 +#: engine/payments/models.py:147 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "הגבלת סכום חודשי של סכומי העסקאות. 0 פירושו ללא הגבלת סכום." -#: engine/payments/models.py:142 +#: engine/payments/models.py:150 msgid "priority" msgstr "עדיפות" -#: engine/payments/models.py:145 +#: engine/payments/models.py:153 msgid "integration variables" msgstr "משתני אינטגרציה" -#: engine/payments/models.py:152 +#: engine/payments/models.py:160 msgid "payment gateway" msgstr "שער תשלום" -#: engine/payments/models.py:153 +#: engine/payments/models.py:161 msgid "payment gateways" msgstr "שערי תשלום" -#: engine/payments/models.py:198 +#: engine/payments/models.py:206 msgid "gateway integration path is not set" msgstr "נתיב שילוב השער אינו מוגדר" -#: engine/payments/models.py:204 +#: engine/payments/models.py:212 #, python-format msgid "invalid integration path: %(path)s" msgstr "נתיב אינטגרציה לא חוקי: %(path)s" diff --git a/engine/payments/locale/hi_IN/LC_MESSAGES/django.po b/engine/payments/locale/hi_IN/LC_MESSAGES/django.po index 995aaf8a..fed40657 100644 --- a/engine/payments/locale/hi_IN/LC_MESSAGES/django.po +++ b/engine/payments/locale/hi_IN/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:26+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -12,11 +12,11 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: engine/payments/admin.py:17 engine/payments/models.py:68 +#: engine/payments/admin.py:17 engine/payments/models.py:66 msgid "transaction" msgstr "" -#: engine/payments/admin.py:18 engine/payments/models.py:69 +#: engine/payments/admin.py:18 engine/payments/models.py:67 msgid "transactions" msgstr "" @@ -82,67 +82,67 @@ msgstr "" msgid "balances" msgstr "" -#: engine/payments/models.py:102 +#: engine/payments/models.py:100 msgid "name" msgstr "" -#: engine/payments/models.py:107 +#: engine/payments/models.py:105 msgid "default currency" msgstr "" -#: engine/payments/models.py:114 +#: engine/payments/models.py:112 msgid "currencies" msgstr "" -#: engine/payments/models.py:116 +#: engine/payments/models.py:114 msgid "comma separated list of currencies supported by this gateway, " msgstr "" -#: engine/payments/models.py:122 +#: engine/payments/models.py:125 msgid "minimum transaction amount" msgstr "" -#: engine/payments/models.py:125 +#: engine/payments/models.py:133 msgid "maximum transaction amount" msgstr "" -#: engine/payments/models.py:131 +#: engine/payments/models.py:139 msgid "daily limit" msgstr "" -#: engine/payments/models.py:132 +#: engine/payments/models.py:140 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "" -#: engine/payments/models.py:138 +#: engine/payments/models.py:146 msgid "monthly limit" msgstr "" -#: engine/payments/models.py:139 +#: engine/payments/models.py:147 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "" -#: engine/payments/models.py:142 +#: engine/payments/models.py:150 msgid "priority" msgstr "" -#: engine/payments/models.py:145 +#: engine/payments/models.py:153 msgid "integration variables" msgstr "" -#: engine/payments/models.py:152 +#: engine/payments/models.py:160 msgid "payment gateway" msgstr "" -#: engine/payments/models.py:153 +#: engine/payments/models.py:161 msgid "payment gateways" msgstr "" -#: engine/payments/models.py:198 +#: engine/payments/models.py:206 msgid "gateway integration path is not set" msgstr "" -#: engine/payments/models.py:204 +#: engine/payments/models.py:212 #, python-format msgid "invalid integration path: %(path)s" msgstr "" diff --git a/engine/payments/locale/hr_HR/LC_MESSAGES/django.po b/engine/payments/locale/hr_HR/LC_MESSAGES/django.po index 854aec3d..9bd354c9 100644 --- a/engine/payments/locale/hr_HR/LC_MESSAGES/django.po +++ b/engine/payments/locale/hr_HR/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 01:44+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,11 +16,11 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: engine/payments/admin.py:17 engine/payments/models.py:68 +#: engine/payments/admin.py:17 engine/payments/models.py:66 msgid "transaction" msgstr "" -#: engine/payments/admin.py:18 engine/payments/models.py:69 +#: engine/payments/admin.py:18 engine/payments/models.py:67 msgid "transactions" msgstr "" @@ -86,67 +86,67 @@ msgstr "" msgid "balances" msgstr "" -#: engine/payments/models.py:102 +#: engine/payments/models.py:100 msgid "name" msgstr "" -#: engine/payments/models.py:107 +#: engine/payments/models.py:105 msgid "default currency" msgstr "" -#: engine/payments/models.py:114 +#: engine/payments/models.py:112 msgid "currencies" msgstr "" -#: engine/payments/models.py:116 +#: engine/payments/models.py:114 msgid "comma separated list of currencies supported by this gateway, " msgstr "" -#: engine/payments/models.py:122 +#: engine/payments/models.py:125 msgid "minimum transaction amount" msgstr "" -#: engine/payments/models.py:125 +#: engine/payments/models.py:133 msgid "maximum transaction amount" msgstr "" -#: engine/payments/models.py:131 +#: engine/payments/models.py:139 msgid "daily limit" msgstr "" -#: engine/payments/models.py:132 +#: engine/payments/models.py:140 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "" -#: engine/payments/models.py:138 +#: engine/payments/models.py:146 msgid "monthly limit" msgstr "" -#: engine/payments/models.py:139 +#: engine/payments/models.py:147 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "" -#: engine/payments/models.py:142 +#: engine/payments/models.py:150 msgid "priority" msgstr "" -#: engine/payments/models.py:145 +#: engine/payments/models.py:153 msgid "integration variables" msgstr "" -#: engine/payments/models.py:152 +#: engine/payments/models.py:160 msgid "payment gateway" msgstr "" -#: engine/payments/models.py:153 +#: engine/payments/models.py:161 msgid "payment gateways" msgstr "" -#: engine/payments/models.py:198 +#: engine/payments/models.py:206 msgid "gateway integration path is not set" msgstr "" -#: engine/payments/models.py:204 +#: engine/payments/models.py:212 #, python-format msgid "invalid integration path: %(path)s" msgstr "" diff --git a/engine/payments/locale/id_ID/LC_MESSAGES/django.po b/engine/payments/locale/id_ID/LC_MESSAGES/django.po index cc55618b..78862c00 100644 --- a/engine/payments/locale/id_ID/LC_MESSAGES/django.po +++ b/engine/payments/locale/id_ID/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 01:44+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/payments/admin.py:17 engine/payments/models.py:68 +#: engine/payments/admin.py:17 engine/payments/models.py:66 msgid "transaction" msgstr "Transaksi" -#: engine/payments/admin.py:18 engine/payments/models.py:69 +#: engine/payments/admin.py:18 engine/payments/models.py:67 msgid "transactions" msgstr "Transaksi" @@ -85,68 +85,68 @@ msgstr "Keseimbangan" msgid "balances" msgstr "Timbangan" -#: engine/payments/models.py:102 +#: engine/payments/models.py:100 msgid "name" msgstr "nama" -#: engine/payments/models.py:107 +#: engine/payments/models.py:105 msgid "default currency" msgstr "mata uang default" -#: engine/payments/models.py:114 +#: engine/payments/models.py:112 msgid "currencies" msgstr "mata uang" -#: engine/payments/models.py:116 +#: engine/payments/models.py:114 msgid "comma separated list of currencies supported by this gateway, " msgstr "" "daftar mata uang yang didukung oleh gateway ini yang dipisahkan dengan koma," -#: engine/payments/models.py:122 +#: engine/payments/models.py:125 msgid "minimum transaction amount" msgstr "jumlah transaksi minimum" -#: engine/payments/models.py:125 +#: engine/payments/models.py:133 msgid "maximum transaction amount" msgstr "jumlah transaksi maksimum" -#: engine/payments/models.py:131 +#: engine/payments/models.py:139 msgid "daily limit" msgstr "batas harian" -#: engine/payments/models.py:132 +#: engine/payments/models.py:140 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "batas jumlah transaksi harian. 0 berarti tidak ada batas" -#: engine/payments/models.py:138 +#: engine/payments/models.py:146 msgid "monthly limit" msgstr "batas bulanan" -#: engine/payments/models.py:139 +#: engine/payments/models.py:147 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "batas jumlah transaksi bulanan. 0 berarti tidak ada limit" -#: engine/payments/models.py:142 +#: engine/payments/models.py:150 msgid "priority" msgstr "prioritas" -#: engine/payments/models.py:145 +#: engine/payments/models.py:153 msgid "integration variables" msgstr "variabel integrasi" -#: engine/payments/models.py:152 +#: engine/payments/models.py:160 msgid "payment gateway" msgstr "gerbang pembayaran" -#: engine/payments/models.py:153 +#: engine/payments/models.py:161 msgid "payment gateways" msgstr "gateway pembayaran" -#: engine/payments/models.py:198 +#: engine/payments/models.py:206 msgid "gateway integration path is not set" msgstr "jalur integrasi gateway tidak ditetapkan" -#: engine/payments/models.py:204 +#: engine/payments/models.py:212 #, python-format msgid "invalid integration path: %(path)s" msgstr "jalur integrasi yang tidak valid: %(path)s" diff --git a/engine/payments/locale/it_IT/LC_MESSAGES/django.po b/engine/payments/locale/it_IT/LC_MESSAGES/django.po index 77316157..d7cfee41 100644 --- a/engine/payments/locale/it_IT/LC_MESSAGES/django.po +++ b/engine/payments/locale/it_IT/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:02+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/payments/admin.py:17 engine/payments/models.py:68 +#: engine/payments/admin.py:17 engine/payments/models.py:66 msgid "transaction" msgstr "Transazione" -#: engine/payments/admin.py:18 engine/payments/models.py:69 +#: engine/payments/admin.py:18 engine/payments/models.py:67 msgid "transactions" msgstr "Transazioni" @@ -85,71 +85,71 @@ msgstr "Equilibrio" msgid "balances" msgstr "Bilance" -#: engine/payments/models.py:102 +#: engine/payments/models.py:100 msgid "name" msgstr "nome" -#: engine/payments/models.py:107 +#: engine/payments/models.py:105 msgid "default currency" msgstr "valuta predefinita" -#: engine/payments/models.py:114 +#: engine/payments/models.py:112 msgid "currencies" msgstr "valute" -#: engine/payments/models.py:116 +#: engine/payments/models.py:114 msgid "comma separated list of currencies supported by this gateway, " msgstr "elenco separato da virgole delle valute supportate da questo gateway," -#: engine/payments/models.py:122 +#: engine/payments/models.py:125 msgid "minimum transaction amount" msgstr "importo minimo della transazione" -#: engine/payments/models.py:125 +#: engine/payments/models.py:133 msgid "maximum transaction amount" msgstr "importo massimo della transazione" -#: engine/payments/models.py:131 +#: engine/payments/models.py:139 msgid "daily limit" msgstr "limite giornaliero" -#: engine/payments/models.py:132 +#: engine/payments/models.py:140 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "" "limite di somma giornaliera degli importi delle transazioni. 0 significa " "nessun limite" -#: engine/payments/models.py:138 +#: engine/payments/models.py:146 msgid "monthly limit" msgstr "limite mensile" -#: engine/payments/models.py:139 +#: engine/payments/models.py:147 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "" "limite di somma mensile degli importi delle transazioni. 0 significa nessun " "limite" -#: engine/payments/models.py:142 +#: engine/payments/models.py:150 msgid "priority" msgstr "priorità" -#: engine/payments/models.py:145 +#: engine/payments/models.py:153 msgid "integration variables" msgstr "variabili di integrazione" -#: engine/payments/models.py:152 +#: engine/payments/models.py:160 msgid "payment gateway" msgstr "gateway di pagamento" -#: engine/payments/models.py:153 +#: engine/payments/models.py:161 msgid "payment gateways" msgstr "gateway di pagamento" -#: engine/payments/models.py:198 +#: engine/payments/models.py:206 msgid "gateway integration path is not set" msgstr "Il percorso di integrazione del gateway non è impostato" -#: engine/payments/models.py:204 +#: engine/payments/models.py:212 #, python-format msgid "invalid integration path: %(path)s" msgstr "percorso di integrazione non valido: %(path)s" diff --git a/engine/payments/locale/ja_JP/LC_MESSAGES/django.po b/engine/payments/locale/ja_JP/LC_MESSAGES/django.po index 28d59839..ac8c1662 100644 --- a/engine/payments/locale/ja_JP/LC_MESSAGES/django.po +++ b/engine/payments/locale/ja_JP/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:19+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/payments/admin.py:17 engine/payments/models.py:68 +#: engine/payments/admin.py:17 engine/payments/models.py:66 msgid "transaction" msgstr "トランザクション" -#: engine/payments/admin.py:18 engine/payments/models.py:69 +#: engine/payments/admin.py:18 engine/payments/models.py:67 msgid "transactions" msgstr "トランザクション" @@ -83,67 +83,67 @@ msgstr "バランス" msgid "balances" msgstr "体重計" -#: engine/payments/models.py:102 +#: engine/payments/models.py:100 msgid "name" msgstr "名称" -#: engine/payments/models.py:107 +#: engine/payments/models.py:105 msgid "default currency" msgstr "デフォルト通貨" -#: engine/payments/models.py:114 +#: engine/payments/models.py:112 msgid "currencies" msgstr "通貨" -#: engine/payments/models.py:116 +#: engine/payments/models.py:114 msgid "comma separated list of currencies supported by this gateway, " msgstr "このゲートウェイがサポートする通貨のカンマ区切りリスト、" -#: engine/payments/models.py:122 +#: engine/payments/models.py:125 msgid "minimum transaction amount" msgstr "最低取引金額" -#: engine/payments/models.py:125 +#: engine/payments/models.py:133 msgid "maximum transaction amount" msgstr "最高取引額" -#: engine/payments/models.py:131 +#: engine/payments/models.py:139 msgid "daily limit" msgstr "デイリーリミット" -#: engine/payments/models.py:132 +#: engine/payments/models.py:140 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "取引金額の日次合計限度額。0は制限なし" -#: engine/payments/models.py:138 +#: engine/payments/models.py:146 msgid "monthly limit" msgstr "月間限度額" -#: engine/payments/models.py:139 +#: engine/payments/models.py:147 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "取引金額の月間合計限度額。0は制限なし" -#: engine/payments/models.py:142 +#: engine/payments/models.py:150 msgid "priority" msgstr "優先順位" -#: engine/payments/models.py:145 +#: engine/payments/models.py:153 msgid "integration variables" msgstr "統合変数" -#: engine/payments/models.py:152 +#: engine/payments/models.py:160 msgid "payment gateway" msgstr "ペイメントゲートウェイ" -#: engine/payments/models.py:153 +#: engine/payments/models.py:161 msgid "payment gateways" msgstr "ペイメントゲートウェイ" -#: engine/payments/models.py:198 +#: engine/payments/models.py:206 msgid "gateway integration path is not set" msgstr "ゲートウェイ統合パスが設定されていない" -#: engine/payments/models.py:204 +#: engine/payments/models.py:212 #, python-format msgid "invalid integration path: %(path)s" msgstr "無効な統合パスです:%(path)s" diff --git a/engine/payments/locale/kk_KZ/LC_MESSAGES/django.po b/engine/payments/locale/kk_KZ/LC_MESSAGES/django.po index e68301f8..fed40657 100644 --- a/engine/payments/locale/kk_KZ/LC_MESSAGES/django.po +++ b/engine/payments/locale/kk_KZ/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:13+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -12,11 +12,11 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: engine/payments/admin.py:17 engine/payments/models.py:68 +#: engine/payments/admin.py:17 engine/payments/models.py:66 msgid "transaction" msgstr "" -#: engine/payments/admin.py:18 engine/payments/models.py:69 +#: engine/payments/admin.py:18 engine/payments/models.py:67 msgid "transactions" msgstr "" @@ -82,67 +82,67 @@ msgstr "" msgid "balances" msgstr "" -#: engine/payments/models.py:102 +#: engine/payments/models.py:100 msgid "name" msgstr "" -#: engine/payments/models.py:107 +#: engine/payments/models.py:105 msgid "default currency" msgstr "" -#: engine/payments/models.py:114 +#: engine/payments/models.py:112 msgid "currencies" msgstr "" -#: engine/payments/models.py:116 +#: engine/payments/models.py:114 msgid "comma separated list of currencies supported by this gateway, " msgstr "" -#: engine/payments/models.py:122 +#: engine/payments/models.py:125 msgid "minimum transaction amount" msgstr "" -#: engine/payments/models.py:125 +#: engine/payments/models.py:133 msgid "maximum transaction amount" msgstr "" -#: engine/payments/models.py:131 +#: engine/payments/models.py:139 msgid "daily limit" msgstr "" -#: engine/payments/models.py:132 +#: engine/payments/models.py:140 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "" -#: engine/payments/models.py:138 +#: engine/payments/models.py:146 msgid "monthly limit" msgstr "" -#: engine/payments/models.py:139 +#: engine/payments/models.py:147 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "" -#: engine/payments/models.py:142 +#: engine/payments/models.py:150 msgid "priority" msgstr "" -#: engine/payments/models.py:145 +#: engine/payments/models.py:153 msgid "integration variables" msgstr "" -#: engine/payments/models.py:152 +#: engine/payments/models.py:160 msgid "payment gateway" msgstr "" -#: engine/payments/models.py:153 +#: engine/payments/models.py:161 msgid "payment gateways" msgstr "" -#: engine/payments/models.py:198 +#: engine/payments/models.py:206 msgid "gateway integration path is not set" msgstr "" -#: engine/payments/models.py:204 +#: engine/payments/models.py:212 #, python-format msgid "invalid integration path: %(path)s" msgstr "" diff --git a/engine/payments/locale/ko_KR/LC_MESSAGES/django.po b/engine/payments/locale/ko_KR/LC_MESSAGES/django.po index 6850a1eb..9b3976aa 100644 --- a/engine/payments/locale/ko_KR/LC_MESSAGES/django.po +++ b/engine/payments/locale/ko_KR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 01:50+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/payments/admin.py:17 engine/payments/models.py:68 +#: engine/payments/admin.py:17 engine/payments/models.py:66 msgid "transaction" msgstr "거래" -#: engine/payments/admin.py:18 engine/payments/models.py:69 +#: engine/payments/admin.py:18 engine/payments/models.py:67 msgid "transactions" msgstr "거래" @@ -83,67 +83,67 @@ msgstr "잔액" msgid "balances" msgstr "저울" -#: engine/payments/models.py:102 +#: engine/payments/models.py:100 msgid "name" msgstr "이름" -#: engine/payments/models.py:107 +#: engine/payments/models.py:105 msgid "default currency" msgstr "기본 통화" -#: engine/payments/models.py:114 +#: engine/payments/models.py:112 msgid "currencies" msgstr "통화" -#: engine/payments/models.py:116 +#: engine/payments/models.py:114 msgid "comma separated list of currencies supported by this gateway, " msgstr "쉼표로 구분된 이 게이트웨이에서 지원하는 통화 목록입니다," -#: engine/payments/models.py:122 +#: engine/payments/models.py:125 msgid "minimum transaction amount" msgstr "최소 거래 금액" -#: engine/payments/models.py:125 +#: engine/payments/models.py:133 msgid "maximum transaction amount" msgstr "최대 거래 금액" -#: engine/payments/models.py:131 +#: engine/payments/models.py:139 msgid "daily limit" msgstr "일일 한도" -#: engine/payments/models.py:132 +#: engine/payments/models.py:140 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "거래 금액의 일일 합산 한도입니다. 0은 한도가 없음을 의미합니다." -#: engine/payments/models.py:138 +#: engine/payments/models.py:146 msgid "monthly limit" msgstr "월별 한도" -#: engine/payments/models.py:139 +#: engine/payments/models.py:147 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "거래 금액의 월별 합산 한도입니다. 0은 한도가 없음을 의미합니다." -#: engine/payments/models.py:142 +#: engine/payments/models.py:150 msgid "priority" msgstr "우선순위" -#: engine/payments/models.py:145 +#: engine/payments/models.py:153 msgid "integration variables" msgstr "통합 변수" -#: engine/payments/models.py:152 +#: engine/payments/models.py:160 msgid "payment gateway" msgstr "결제 게이트웨이" -#: engine/payments/models.py:153 +#: engine/payments/models.py:161 msgid "payment gateways" msgstr "결제 게이트웨이" -#: engine/payments/models.py:198 +#: engine/payments/models.py:206 msgid "gateway integration path is not set" msgstr "게이트웨이 통합 경로가 설정되지 않았습니다." -#: engine/payments/models.py:204 +#: engine/payments/models.py:212 #, python-format msgid "invalid integration path: %(path)s" msgstr "잘못된 통합 경로입니다: %(path)s" diff --git a/engine/payments/locale/nl_NL/LC_MESSAGES/django.po b/engine/payments/locale/nl_NL/LC_MESSAGES/django.po index 8f3b14b8..55bd1de8 100644 --- a/engine/payments/locale/nl_NL/LC_MESSAGES/django.po +++ b/engine/payments/locale/nl_NL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 01:44+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/payments/admin.py:17 engine/payments/models.py:68 +#: engine/payments/admin.py:17 engine/payments/models.py:66 msgid "transaction" msgstr "Transactie" -#: engine/payments/admin.py:18 engine/payments/models.py:69 +#: engine/payments/admin.py:18 engine/payments/models.py:67 msgid "transactions" msgstr "Transacties" @@ -85,69 +85,69 @@ msgstr "Saldo" msgid "balances" msgstr "Weegschaal" -#: engine/payments/models.py:102 +#: engine/payments/models.py:100 msgid "name" msgstr "naam" -#: engine/payments/models.py:107 +#: engine/payments/models.py:105 msgid "default currency" msgstr "standaardvaluta" -#: engine/payments/models.py:114 +#: engine/payments/models.py:112 msgid "currencies" msgstr "valuta" -#: engine/payments/models.py:116 +#: engine/payments/models.py:114 msgid "comma separated list of currencies supported by this gateway, " msgstr "" "door komma's gescheiden lijst van munteenheden die door deze gateway worden " "ondersteund," -#: engine/payments/models.py:122 +#: engine/payments/models.py:125 msgid "minimum transaction amount" msgstr "minimum transactiebedrag" -#: engine/payments/models.py:125 +#: engine/payments/models.py:133 msgid "maximum transaction amount" msgstr "maximaal transactiebedrag" -#: engine/payments/models.py:131 +#: engine/payments/models.py:139 msgid "daily limit" msgstr "daglimiet" -#: engine/payments/models.py:132 +#: engine/payments/models.py:140 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "dagelijkse somlimiet van transactiebedragen. 0 betekent geen limiet" -#: engine/payments/models.py:138 +#: engine/payments/models.py:146 msgid "monthly limit" msgstr "maandelijkse limiet" -#: engine/payments/models.py:139 +#: engine/payments/models.py:147 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "maandelijkse somlimiet van transactiebedragen. 0 betekent geen limiet" -#: engine/payments/models.py:142 +#: engine/payments/models.py:150 msgid "priority" msgstr "prioriteit" -#: engine/payments/models.py:145 +#: engine/payments/models.py:153 msgid "integration variables" msgstr "integratievariabelen" -#: engine/payments/models.py:152 +#: engine/payments/models.py:160 msgid "payment gateway" msgstr "betalingsgateway" -#: engine/payments/models.py:153 +#: engine/payments/models.py:161 msgid "payment gateways" msgstr "betalingsgateways" -#: engine/payments/models.py:198 +#: engine/payments/models.py:206 msgid "gateway integration path is not set" msgstr "gateway integratiepad is niet ingesteld" -#: engine/payments/models.py:204 +#: engine/payments/models.py:212 #, python-format msgid "invalid integration path: %(path)s" msgstr "ongeldig integratiepad: %(path)s" diff --git a/engine/payments/locale/no_NO/LC_MESSAGES/django.po b/engine/payments/locale/no_NO/LC_MESSAGES/django.po index 64b34183..a6bdbdc1 100644 --- a/engine/payments/locale/no_NO/LC_MESSAGES/django.po +++ b/engine/payments/locale/no_NO/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 01:44+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/payments/admin.py:17 engine/payments/models.py:68 +#: engine/payments/admin.py:17 engine/payments/models.py:66 msgid "transaction" msgstr "Transaksjon" -#: engine/payments/admin.py:18 engine/payments/models.py:69 +#: engine/payments/admin.py:18 engine/payments/models.py:67 msgid "transactions" msgstr "Transaksjoner" @@ -85,67 +85,67 @@ msgstr "Balanse" msgid "balances" msgstr "Vekt" -#: engine/payments/models.py:102 +#: engine/payments/models.py:100 msgid "name" msgstr "navn" -#: engine/payments/models.py:107 +#: engine/payments/models.py:105 msgid "default currency" msgstr "standard valuta" -#: engine/payments/models.py:114 +#: engine/payments/models.py:112 msgid "currencies" msgstr "valutaer" -#: engine/payments/models.py:116 +#: engine/payments/models.py:114 msgid "comma separated list of currencies supported by this gateway, " msgstr "kommaseparert liste over valutaer som støttes av denne gatewayen," -#: engine/payments/models.py:122 +#: engine/payments/models.py:125 msgid "minimum transaction amount" msgstr "minimum transaksjonsbeløp" -#: engine/payments/models.py:125 +#: engine/payments/models.py:133 msgid "maximum transaction amount" msgstr "maksimalt transaksjonsbeløp" -#: engine/payments/models.py:131 +#: engine/payments/models.py:139 msgid "daily limit" msgstr "daglig grense" -#: engine/payments/models.py:132 +#: engine/payments/models.py:140 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "daglig sumgrense for transaksjonsbeløp. 0 betyr ingen grense" -#: engine/payments/models.py:138 +#: engine/payments/models.py:146 msgid "monthly limit" msgstr "månedlig grense" -#: engine/payments/models.py:139 +#: engine/payments/models.py:147 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "månedlig sumgrense for transaksjonsbeløp. 0 betyr ingen grense" -#: engine/payments/models.py:142 +#: engine/payments/models.py:150 msgid "priority" msgstr "prioritet" -#: engine/payments/models.py:145 +#: engine/payments/models.py:153 msgid "integration variables" msgstr "integrasjonsvariabler" -#: engine/payments/models.py:152 +#: engine/payments/models.py:160 msgid "payment gateway" msgstr "betalingsgateway" -#: engine/payments/models.py:153 +#: engine/payments/models.py:161 msgid "payment gateways" msgstr "betalingsportaler" -#: engine/payments/models.py:198 +#: engine/payments/models.py:206 msgid "gateway integration path is not set" msgstr "gateway-integrasjonsbanen er ikke angitt" -#: engine/payments/models.py:204 +#: engine/payments/models.py:212 #, python-format msgid "invalid integration path: %(path)s" msgstr "ugyldig integrasjonsbane: %(path)s" diff --git a/engine/payments/locale/pl_PL/LC_MESSAGES/django.po b/engine/payments/locale/pl_PL/LC_MESSAGES/django.po index fa9c3f04..46a29049 100644 --- a/engine/payments/locale/pl_PL/LC_MESSAGES/django.po +++ b/engine/payments/locale/pl_PL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 01:44+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/payments/admin.py:17 engine/payments/models.py:68 +#: engine/payments/admin.py:17 engine/payments/models.py:66 msgid "transaction" msgstr "Transakcja" -#: engine/payments/admin.py:18 engine/payments/models.py:69 +#: engine/payments/admin.py:18 engine/payments/models.py:67 msgid "transactions" msgstr "Transakcje" @@ -85,67 +85,67 @@ msgstr "Równowaga" msgid "balances" msgstr "Wagi" -#: engine/payments/models.py:102 +#: engine/payments/models.py:100 msgid "name" msgstr "nazwa" -#: engine/payments/models.py:107 +#: engine/payments/models.py:105 msgid "default currency" msgstr "waluta domyślna" -#: engine/payments/models.py:114 +#: engine/payments/models.py:112 msgid "currencies" msgstr "waluty" -#: engine/payments/models.py:116 +#: engine/payments/models.py:114 msgid "comma separated list of currencies supported by this gateway, " msgstr "rozdzielana przecinkami lista walut obsługiwanych przez tę bramę," -#: engine/payments/models.py:122 +#: engine/payments/models.py:125 msgid "minimum transaction amount" msgstr "minimalna kwota transakcji" -#: engine/payments/models.py:125 +#: engine/payments/models.py:133 msgid "maximum transaction amount" msgstr "maksymalna kwota transakcji" -#: engine/payments/models.py:131 +#: engine/payments/models.py:139 msgid "daily limit" msgstr "limit dzienny" -#: engine/payments/models.py:132 +#: engine/payments/models.py:140 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "dzienny limit sumy kwot transakcji. 0 oznacza brak limitu" -#: engine/payments/models.py:138 +#: engine/payments/models.py:146 msgid "monthly limit" msgstr "limit miesięczny" -#: engine/payments/models.py:139 +#: engine/payments/models.py:147 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "miesięczny limit sumy kwot transakcji. 0 oznacza brak limitu" -#: engine/payments/models.py:142 +#: engine/payments/models.py:150 msgid "priority" msgstr "priorytet" -#: engine/payments/models.py:145 +#: engine/payments/models.py:153 msgid "integration variables" msgstr "zmienne integracji" -#: engine/payments/models.py:152 +#: engine/payments/models.py:160 msgid "payment gateway" msgstr "bramka płatności" -#: engine/payments/models.py:153 +#: engine/payments/models.py:161 msgid "payment gateways" msgstr "bramki płatności" -#: engine/payments/models.py:198 +#: engine/payments/models.py:206 msgid "gateway integration path is not set" msgstr "ścieżka integracji bramy nie jest ustawiona" -#: engine/payments/models.py:204 +#: engine/payments/models.py:212 #, python-format msgid "invalid integration path: %(path)s" msgstr "Nieprawidłowa ścieżka integracji: %(path)s" diff --git a/engine/payments/locale/pt_BR/LC_MESSAGES/django.po b/engine/payments/locale/pt_BR/LC_MESSAGES/django.po index 5bae6a05..b340c968 100644 --- a/engine/payments/locale/pt_BR/LC_MESSAGES/django.po +++ b/engine/payments/locale/pt_BR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 01:44+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/payments/admin.py:17 engine/payments/models.py:68 +#: engine/payments/admin.py:17 engine/payments/models.py:66 msgid "transaction" msgstr "Transação" -#: engine/payments/admin.py:18 engine/payments/models.py:69 +#: engine/payments/admin.py:18 engine/payments/models.py:67 msgid "transactions" msgstr "Transações" @@ -85,70 +85,70 @@ msgstr "Equilíbrio" msgid "balances" msgstr "Balanças" -#: engine/payments/models.py:102 +#: engine/payments/models.py:100 msgid "name" msgstr "nome" -#: engine/payments/models.py:107 +#: engine/payments/models.py:105 msgid "default currency" msgstr "moeda padrão" -#: engine/payments/models.py:114 +#: engine/payments/models.py:112 msgid "currencies" msgstr "moedas" -#: engine/payments/models.py:116 +#: engine/payments/models.py:114 msgid "comma separated list of currencies supported by this gateway, " msgstr "lista separada por vírgulas das moedas aceitas por esse gateway," -#: engine/payments/models.py:122 +#: engine/payments/models.py:125 msgid "minimum transaction amount" msgstr "valor mínimo da transação" -#: engine/payments/models.py:125 +#: engine/payments/models.py:133 msgid "maximum transaction amount" msgstr "valor máximo da transação" -#: engine/payments/models.py:131 +#: engine/payments/models.py:139 msgid "daily limit" msgstr "limite diário" -#: engine/payments/models.py:132 +#: engine/payments/models.py:140 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "" "limite de soma diária dos valores das transações. 0 significa que não há " "limite" -#: engine/payments/models.py:138 +#: engine/payments/models.py:146 msgid "monthly limit" msgstr "limite mensal" -#: engine/payments/models.py:139 +#: engine/payments/models.py:147 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "" "limite de soma mensal dos valores das transações. 0 significa sem limite" -#: engine/payments/models.py:142 +#: engine/payments/models.py:150 msgid "priority" msgstr "prioridade" -#: engine/payments/models.py:145 +#: engine/payments/models.py:153 msgid "integration variables" msgstr "variáveis de integração" -#: engine/payments/models.py:152 +#: engine/payments/models.py:160 msgid "payment gateway" msgstr "gateway de pagamento" -#: engine/payments/models.py:153 +#: engine/payments/models.py:161 msgid "payment gateways" msgstr "gateways de pagamento" -#: engine/payments/models.py:198 +#: engine/payments/models.py:206 msgid "gateway integration path is not set" msgstr "O caminho de integração do gateway não está definido" -#: engine/payments/models.py:204 +#: engine/payments/models.py:212 #, python-format msgid "invalid integration path: %(path)s" msgstr "Caminho de integração inválido: %(path)s" diff --git a/engine/payments/locale/ro_RO/LC_MESSAGES/django.po b/engine/payments/locale/ro_RO/LC_MESSAGES/django.po index cb0d6358..3907606b 100644 --- a/engine/payments/locale/ro_RO/LC_MESSAGES/django.po +++ b/engine/payments/locale/ro_RO/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:19+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/payments/admin.py:17 engine/payments/models.py:68 +#: engine/payments/admin.py:17 engine/payments/models.py:66 msgid "transaction" msgstr "Tranzacție" -#: engine/payments/admin.py:18 engine/payments/models.py:69 +#: engine/payments/admin.py:18 engine/payments/models.py:67 msgid "transactions" msgstr "Tranzacții" @@ -85,67 +85,67 @@ msgstr "Echilibru" msgid "balances" msgstr "Balanță" -#: engine/payments/models.py:102 +#: engine/payments/models.py:100 msgid "name" msgstr "nume" -#: engine/payments/models.py:107 +#: engine/payments/models.py:105 msgid "default currency" msgstr "moneda implicită" -#: engine/payments/models.py:114 +#: engine/payments/models.py:112 msgid "currencies" msgstr "valute" -#: engine/payments/models.py:116 +#: engine/payments/models.py:114 msgid "comma separated list of currencies supported by this gateway, " msgstr "listă separată prin virgulă a valutelor acceptate de acest gateway," -#: engine/payments/models.py:122 +#: engine/payments/models.py:125 msgid "minimum transaction amount" msgstr "valoarea minimă a tranzacției" -#: engine/payments/models.py:125 +#: engine/payments/models.py:133 msgid "maximum transaction amount" msgstr "valoarea maximă a tranzacției" -#: engine/payments/models.py:131 +#: engine/payments/models.py:139 msgid "daily limit" msgstr "limită zilnică" -#: engine/payments/models.py:132 +#: engine/payments/models.py:140 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "suma limită zilnică a sumelor tranzacțiilor. 0 înseamnă nicio limită" -#: engine/payments/models.py:138 +#: engine/payments/models.py:146 msgid "monthly limit" msgstr "limită lunară" -#: engine/payments/models.py:139 +#: engine/payments/models.py:147 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "limita sumei lunare a sumelor tranzacțiilor. 0 înseamnă nicio limită" -#: engine/payments/models.py:142 +#: engine/payments/models.py:150 msgid "priority" msgstr "prioritate" -#: engine/payments/models.py:145 +#: engine/payments/models.py:153 msgid "integration variables" msgstr "variabile de integrare" -#: engine/payments/models.py:152 +#: engine/payments/models.py:160 msgid "payment gateway" msgstr "gateway de plată" -#: engine/payments/models.py:153 +#: engine/payments/models.py:161 msgid "payment gateways" msgstr "gateway-uri de plată" -#: engine/payments/models.py:198 +#: engine/payments/models.py:206 msgid "gateway integration path is not set" msgstr "calea de integrare a gateway-ului nu este setată" -#: engine/payments/models.py:204 +#: engine/payments/models.py:212 #, python-format msgid "invalid integration path: %(path)s" msgstr "cale de integrare invalidă: %(path)s" diff --git a/engine/payments/locale/ru_RU/LC_MESSAGES/django.po b/engine/payments/locale/ru_RU/LC_MESSAGES/django.po index f0a7687b..71372df6 100644 --- a/engine/payments/locale/ru_RU/LC_MESSAGES/django.po +++ b/engine/payments/locale/ru_RU/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 01:47+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/payments/admin.py:17 engine/payments/models.py:68 +#: engine/payments/admin.py:17 engine/payments/models.py:66 msgid "transaction" msgstr "Транзакция" -#: engine/payments/admin.py:18 engine/payments/models.py:69 +#: engine/payments/admin.py:18 engine/payments/models.py:67 msgid "transactions" msgstr "Транзакции" @@ -85,67 +85,67 @@ msgstr "Баланс" msgid "balances" msgstr "Балансы" -#: engine/payments/models.py:102 +#: engine/payments/models.py:100 msgid "name" msgstr "имя" -#: engine/payments/models.py:107 +#: engine/payments/models.py:105 msgid "default currency" msgstr "валюта по умолчанию" -#: engine/payments/models.py:114 +#: engine/payments/models.py:112 msgid "currencies" msgstr "валюты" -#: engine/payments/models.py:116 +#: engine/payments/models.py:114 msgid "comma separated list of currencies supported by this gateway, " msgstr "список валют, поддерживаемых данным шлюзом, разделенный запятыми," -#: engine/payments/models.py:122 +#: engine/payments/models.py:125 msgid "minimum transaction amount" msgstr "минимальная сумма транзакции" -#: engine/payments/models.py:125 +#: engine/payments/models.py:133 msgid "maximum transaction amount" msgstr "максимальная сумма транзакции" -#: engine/payments/models.py:131 +#: engine/payments/models.py:139 msgid "daily limit" msgstr "суточный лимит" -#: engine/payments/models.py:132 +#: engine/payments/models.py:140 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "суточный лимит сумм транзакций. 0 означает отсутствие лимита" -#: engine/payments/models.py:138 +#: engine/payments/models.py:146 msgid "monthly limit" msgstr "месячный лимит" -#: engine/payments/models.py:139 +#: engine/payments/models.py:147 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "месячный лимит сумм транзакций. 0 означает отсутствие лимита" -#: engine/payments/models.py:142 +#: engine/payments/models.py:150 msgid "priority" msgstr "приоритет" -#: engine/payments/models.py:145 +#: engine/payments/models.py:153 msgid "integration variables" msgstr "интеграционные переменные" -#: engine/payments/models.py:152 +#: engine/payments/models.py:160 msgid "payment gateway" msgstr "платёжный шлюз" -#: engine/payments/models.py:153 +#: engine/payments/models.py:161 msgid "payment gateways" msgstr "платёжные шлюзы" -#: engine/payments/models.py:198 +#: engine/payments/models.py:206 msgid "gateway integration path is not set" msgstr "путь интеграции шлюза не установлен" -#: engine/payments/models.py:204 +#: engine/payments/models.py:212 #, python-format msgid "invalid integration path: %(path)s" msgstr "Неверный путь интеграции: %(path)s" diff --git a/engine/payments/locale/sv_SE/LC_MESSAGES/django.po b/engine/payments/locale/sv_SE/LC_MESSAGES/django.po index f1481824..59853c31 100644 --- a/engine/payments/locale/sv_SE/LC_MESSAGES/django.po +++ b/engine/payments/locale/sv_SE/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:04+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/payments/admin.py:17 engine/payments/models.py:68 +#: engine/payments/admin.py:17 engine/payments/models.py:66 msgid "transaction" msgstr "Transaktion" -#: engine/payments/admin.py:18 engine/payments/models.py:69 +#: engine/payments/admin.py:18 engine/payments/models.py:67 msgid "transactions" msgstr "Transaktioner" @@ -85,69 +85,69 @@ msgstr "Balans" msgid "balances" msgstr "Vågskålar" -#: engine/payments/models.py:102 +#: engine/payments/models.py:100 msgid "name" msgstr "namn" -#: engine/payments/models.py:107 +#: engine/payments/models.py:105 msgid "default currency" msgstr "standardvaluta" -#: engine/payments/models.py:114 +#: engine/payments/models.py:112 msgid "currencies" msgstr "valutor" -#: engine/payments/models.py:116 +#: engine/payments/models.py:114 msgid "comma separated list of currencies supported by this gateway, " msgstr "Kommaseparerad lista över valutor som stöds av denna gateway," -#: engine/payments/models.py:122 +#: engine/payments/models.py:125 msgid "minimum transaction amount" msgstr "minsta transaktionsbelopp" -#: engine/payments/models.py:125 +#: engine/payments/models.py:133 msgid "maximum transaction amount" msgstr "högsta transaktionsbelopp" -#: engine/payments/models.py:131 +#: engine/payments/models.py:139 msgid "daily limit" msgstr "daglig gräns" -#: engine/payments/models.py:132 +#: engine/payments/models.py:140 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "" "gräns för daglig summa av transaktionernas belopp. 0 betyder ingen gräns" -#: engine/payments/models.py:138 +#: engine/payments/models.py:146 msgid "monthly limit" msgstr "månadsgräns" -#: engine/payments/models.py:139 +#: engine/payments/models.py:147 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "" "månadsgräns för summan av transaktionernas belopp. 0 betyder ingen gräns" -#: engine/payments/models.py:142 +#: engine/payments/models.py:150 msgid "priority" msgstr "prioritet" -#: engine/payments/models.py:145 +#: engine/payments/models.py:153 msgid "integration variables" msgstr "integrationsvariabler" -#: engine/payments/models.py:152 +#: engine/payments/models.py:160 msgid "payment gateway" msgstr "Betalningsgateway" -#: engine/payments/models.py:153 +#: engine/payments/models.py:161 msgid "payment gateways" msgstr "Betalningsgateways" -#: engine/payments/models.py:198 +#: engine/payments/models.py:206 msgid "gateway integration path is not set" msgstr "Integrationsvägen för gateway är inte inställd" -#: engine/payments/models.py:204 +#: engine/payments/models.py:212 #, python-format msgid "invalid integration path: %(path)s" msgstr "ogiltig integrationsväg: %(path)s" diff --git a/engine/payments/locale/th_TH/LC_MESSAGES/django.po b/engine/payments/locale/th_TH/LC_MESSAGES/django.po index 1a6d0938..21bd81a7 100644 --- a/engine/payments/locale/th_TH/LC_MESSAGES/django.po +++ b/engine/payments/locale/th_TH/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 01:44+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/payments/admin.py:17 engine/payments/models.py:68 +#: engine/payments/admin.py:17 engine/payments/models.py:66 msgid "transaction" msgstr "ธุรกรรม" -#: engine/payments/admin.py:18 engine/payments/models.py:69 +#: engine/payments/admin.py:18 engine/payments/models.py:67 msgid "transactions" msgstr "ธุรกรรม" @@ -83,67 +83,67 @@ msgstr "สมดุล" msgid "balances" msgstr "สเกล" -#: engine/payments/models.py:102 +#: engine/payments/models.py:100 msgid "name" msgstr "ชื่อ" -#: engine/payments/models.py:107 +#: engine/payments/models.py:105 msgid "default currency" msgstr "สกุลเงินเริ่มต้น" -#: engine/payments/models.py:114 +#: engine/payments/models.py:112 msgid "currencies" msgstr "สกุลเงิน" -#: engine/payments/models.py:116 +#: engine/payments/models.py:114 msgid "comma separated list of currencies supported by this gateway, " msgstr "รายการสกุลเงินที่รองรับโดยเกตเวย์นี้ แยกด้วยเครื่องหมายจุลภาค" -#: engine/payments/models.py:122 +#: engine/payments/models.py:125 msgid "minimum transaction amount" msgstr "จำนวนเงินการทำรายการขั้นต่ำ" -#: engine/payments/models.py:125 +#: engine/payments/models.py:133 msgid "maximum transaction amount" msgstr "จำนวนเงินสูงสุดต่อรายการ" -#: engine/payments/models.py:131 +#: engine/payments/models.py:139 msgid "daily limit" msgstr "ขีดจำกัดรายวัน" -#: engine/payments/models.py:132 +#: engine/payments/models.py:140 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "ขีดจำกัดยอดรวมต่อวันของจำนวนเงินธุรกรรม 0 หมายถึงไม่มีขีดจำกัด" -#: engine/payments/models.py:138 +#: engine/payments/models.py:146 msgid "monthly limit" msgstr "วงเงินรายเดือน" -#: engine/payments/models.py:139 +#: engine/payments/models.py:147 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "วงเงินรวมรายเดือนของจำนวนธุรกรรม 0 หมายถึงไม่มีขีดจำกัด" -#: engine/payments/models.py:142 +#: engine/payments/models.py:150 msgid "priority" msgstr "ลำดับความสำคัญ" -#: engine/payments/models.py:145 +#: engine/payments/models.py:153 msgid "integration variables" msgstr "ตัวแปรการรวม" -#: engine/payments/models.py:152 +#: engine/payments/models.py:160 msgid "payment gateway" msgstr "เกตเวย์การชำระเงิน" -#: engine/payments/models.py:153 +#: engine/payments/models.py:161 msgid "payment gateways" msgstr "เกตเวย์การชำระเงิน" -#: engine/payments/models.py:198 +#: engine/payments/models.py:206 msgid "gateway integration path is not set" msgstr "ไม่ได้ตั้งค่าเส้นทางการรวมเกตเวย์" -#: engine/payments/models.py:204 +#: engine/payments/models.py:212 #, python-format msgid "invalid integration path: %(path)s" msgstr "เส้นทางบูรณาการไม่ถูกต้อง: %(path)s" diff --git a/engine/payments/locale/tr_TR/LC_MESSAGES/django.po b/engine/payments/locale/tr_TR/LC_MESSAGES/django.po index b4b7ca98..f206a4af 100644 --- a/engine/payments/locale/tr_TR/LC_MESSAGES/django.po +++ b/engine/payments/locale/tr_TR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 01:44+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/payments/admin.py:17 engine/payments/models.py:68 +#: engine/payments/admin.py:17 engine/payments/models.py:66 msgid "transaction" msgstr "İşlem" -#: engine/payments/admin.py:18 engine/payments/models.py:69 +#: engine/payments/admin.py:18 engine/payments/models.py:67 msgid "transactions" msgstr "İşlemler" @@ -85,69 +85,69 @@ msgstr "Denge" msgid "balances" msgstr "Terazi" -#: engine/payments/models.py:102 +#: engine/payments/models.py:100 msgid "name" msgstr "isim" -#: engine/payments/models.py:107 +#: engine/payments/models.py:105 msgid "default currency" msgstr "varsayılan para birimi" -#: engine/payments/models.py:114 +#: engine/payments/models.py:112 msgid "currencies" msgstr "para birimleri" -#: engine/payments/models.py:116 +#: engine/payments/models.py:114 msgid "comma separated list of currencies supported by this gateway, " msgstr "" "Bu ağ geçidi tarafından desteklenen para birimlerinin virgülle ayrılmış " "listesi," -#: engine/payments/models.py:122 +#: engine/payments/models.py:125 msgid "minimum transaction amount" msgstr "minimum işlem tutarı" -#: engine/payments/models.py:125 +#: engine/payments/models.py:133 msgid "maximum transaction amount" msgstr "maksimum işlem tutarı" -#: engine/payments/models.py:131 +#: engine/payments/models.py:139 msgid "daily limit" msgstr "günlük limit" -#: engine/payments/models.py:132 +#: engine/payments/models.py:140 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "işlem tutarlarının günlük toplam limiti. 0 limit yok anlamına gelir" -#: engine/payments/models.py:138 +#: engine/payments/models.py:146 msgid "monthly limit" msgstr "aylık limit" -#: engine/payments/models.py:139 +#: engine/payments/models.py:147 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "işlem tutarlarının aylık toplam limiti. 0 limit yok anlamına gelir" -#: engine/payments/models.py:142 +#: engine/payments/models.py:150 msgid "priority" msgstr "öncelik" -#: engine/payments/models.py:145 +#: engine/payments/models.py:153 msgid "integration variables" msgstr "entegrasyon değişkenleri" -#: engine/payments/models.py:152 +#: engine/payments/models.py:160 msgid "payment gateway" msgstr "ödeme ağ geçidi" -#: engine/payments/models.py:153 +#: engine/payments/models.py:161 msgid "payment gateways" msgstr "ödeme ağ geçitleri" -#: engine/payments/models.py:198 +#: engine/payments/models.py:206 msgid "gateway integration path is not set" msgstr "ağ geçidi entegrasyon yolu ayarlanmamış" -#: engine/payments/models.py:204 +#: engine/payments/models.py:212 #, python-format msgid "invalid integration path: %(path)s" msgstr "geçersiz entegrasyon yolu: %(path)s" diff --git a/engine/payments/locale/vi_VN/LC_MESSAGES/django.po b/engine/payments/locale/vi_VN/LC_MESSAGES/django.po index 82b5c950..9c580cfe 100644 --- a/engine/payments/locale/vi_VN/LC_MESSAGES/django.po +++ b/engine/payments/locale/vi_VN/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 01:44+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/payments/admin.py:17 engine/payments/models.py:68 +#: engine/payments/admin.py:17 engine/payments/models.py:66 msgid "transaction" msgstr "Giao dịch" -#: engine/payments/admin.py:18 engine/payments/models.py:69 +#: engine/payments/admin.py:18 engine/payments/models.py:67 msgid "transactions" msgstr "Giao dịch" @@ -85,71 +85,71 @@ msgstr "Cân bằng" msgid "balances" msgstr "Cân" -#: engine/payments/models.py:102 +#: engine/payments/models.py:100 msgid "name" msgstr "tên" -#: engine/payments/models.py:107 +#: engine/payments/models.py:105 msgid "default currency" msgstr "Tiền tệ mặc định" -#: engine/payments/models.py:114 +#: engine/payments/models.py:112 msgid "currencies" msgstr "tiền tệ" -#: engine/payments/models.py:116 +#: engine/payments/models.py:114 msgid "comma separated list of currencies supported by this gateway, " msgstr "" "Danh sách các loại tiền tệ được hỗ trợ bởi cổng thanh toán này, được phân " "tách bằng dấu phẩy," -#: engine/payments/models.py:122 +#: engine/payments/models.py:125 msgid "minimum transaction amount" msgstr "Số tiền giao dịch tối thiểu" -#: engine/payments/models.py:125 +#: engine/payments/models.py:133 msgid "maximum transaction amount" msgstr "Số tiền giao dịch tối đa" -#: engine/payments/models.py:131 +#: engine/payments/models.py:139 msgid "daily limit" msgstr "giới hạn hàng ngày" -#: engine/payments/models.py:132 +#: engine/payments/models.py:140 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "" "Giới hạn tổng số tiền giao dịch hàng ngày. 0 có nghĩa là không có giới hạn." -#: engine/payments/models.py:138 +#: engine/payments/models.py:146 msgid "monthly limit" msgstr "giới hạn hàng tháng" -#: engine/payments/models.py:139 +#: engine/payments/models.py:147 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "" "Giới hạn tổng số tiền giao dịch hàng tháng. 0 có nghĩa là không có giới hạn." -#: engine/payments/models.py:142 +#: engine/payments/models.py:150 msgid "priority" msgstr "ưu tiên" -#: engine/payments/models.py:145 +#: engine/payments/models.py:153 msgid "integration variables" msgstr "biến tích phân" -#: engine/payments/models.py:152 +#: engine/payments/models.py:160 msgid "payment gateway" msgstr "cổng thanh toán" -#: engine/payments/models.py:153 +#: engine/payments/models.py:161 msgid "payment gateways" msgstr "Cổng thanh toán" -#: engine/payments/models.py:198 +#: engine/payments/models.py:206 msgid "gateway integration path is not set" msgstr "Đường dẫn tích hợp cổng không được thiết lập." -#: engine/payments/models.py:204 +#: engine/payments/models.py:212 #, python-format msgid "invalid integration path: %(path)s" msgstr "Đường dẫn tích hợp không hợp lệ: %(path)s" diff --git a/engine/payments/locale/zh_Hans/LC_MESSAGES/django.po b/engine/payments/locale/zh_Hans/LC_MESSAGES/django.po index 8379a6a0..70fd1405 100644 --- a/engine/payments/locale/zh_Hans/LC_MESSAGES/django.po +++ b/engine/payments/locale/zh_Hans/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 01:44+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/payments/admin.py:17 engine/payments/models.py:68 +#: engine/payments/admin.py:17 engine/payments/models.py:66 msgid "transaction" msgstr "交易" -#: engine/payments/admin.py:18 engine/payments/models.py:69 +#: engine/payments/admin.py:18 engine/payments/models.py:67 msgid "transactions" msgstr "交易" @@ -83,67 +83,67 @@ msgstr "平衡" msgid "balances" msgstr "天平" -#: engine/payments/models.py:102 +#: engine/payments/models.py:100 msgid "name" msgstr "名字" -#: engine/payments/models.py:107 +#: engine/payments/models.py:105 msgid "default currency" msgstr "默认货币" -#: engine/payments/models.py:114 +#: engine/payments/models.py:112 msgid "currencies" msgstr "货币" -#: engine/payments/models.py:116 +#: engine/payments/models.py:114 msgid "comma separated list of currencies supported by this gateway, " msgstr "以逗号分隔的该网关支持的货币列表、" -#: engine/payments/models.py:122 +#: engine/payments/models.py:125 msgid "minimum transaction amount" msgstr "最低交易额" -#: engine/payments/models.py:125 +#: engine/payments/models.py:133 msgid "maximum transaction amount" msgstr "最高交易额" -#: engine/payments/models.py:131 +#: engine/payments/models.py:139 msgid "daily limit" msgstr "每日限额" -#: engine/payments/models.py:132 +#: engine/payments/models.py:140 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "交易金额的每日总限额。0 表示无限额" -#: engine/payments/models.py:138 +#: engine/payments/models.py:146 msgid "monthly limit" msgstr "月限额" -#: engine/payments/models.py:139 +#: engine/payments/models.py:147 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "交易金额的月限额。0 表示无限额" -#: engine/payments/models.py:142 +#: engine/payments/models.py:150 msgid "priority" msgstr "优先权" -#: engine/payments/models.py:145 +#: engine/payments/models.py:153 msgid "integration variables" msgstr "整合变量" -#: engine/payments/models.py:152 +#: engine/payments/models.py:160 msgid "payment gateway" msgstr "支付网关" -#: engine/payments/models.py:153 +#: engine/payments/models.py:161 msgid "payment gateways" msgstr "支付网关" -#: engine/payments/models.py:198 +#: engine/payments/models.py:206 msgid "gateway integration path is not set" msgstr "网关集成路径未设置" -#: engine/payments/models.py:204 +#: engine/payments/models.py:212 #, python-format msgid "invalid integration path: %(path)s" msgstr "集成路径无效:%(path)s" diff --git a/engine/vibes_auth/locale/ar_AR/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/ar_AR/LC_MESSAGES/django.mo index 412b5d89..2967bcac 100644 Binary files a/engine/vibes_auth/locale/ar_AR/LC_MESSAGES/django.mo and b/engine/vibes_auth/locale/ar_AR/LC_MESSAGES/django.mo differ diff --git a/engine/vibes_auth/locale/ar_AR/LC_MESSAGES/django.po b/engine/vibes_auth/locale/ar_AR/LC_MESSAGES/django.po index 0b9172c1..d9208217 100644 --- a/engine/vibes_auth/locale/ar_AR/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/ar_AR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 03:06+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,32 +13,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:65 engine/vibes_auth/admin.py:66 +#: engine/vibes_auth/admin.py:64 engine/vibes_auth/admin.py:65 #: engine/vibes_auth/graphene/object_types.py:54 msgid "balance" msgstr "الرصيد" -#: engine/vibes_auth/admin.py:74 +#: engine/vibes_auth/admin.py:73 msgid "order" msgstr "الطلب" -#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:51 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:51 msgid "orders" msgstr "الطلبات" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:84 msgid "personal info" msgstr "معلومات شخصية" -#: engine/vibes_auth/admin.py:89 engine/vibes_auth/graphene/object_types.py:50 +#: engine/vibes_auth/admin.py:88 engine/vibes_auth/graphene/object_types.py:50 msgid "permissions" msgstr "الأذونات" -#: engine/vibes_auth/admin.py:102 +#: engine/vibes_auth/admin.py:101 msgid "important dates" msgstr "تواريخ مهمة" -#: engine/vibes_auth/admin.py:103 +#: engine/vibes_auth/admin.py:102 msgid "additional info" msgstr "معلومات إضافية" @@ -54,79 +54,83 @@ msgstr "إغلاق المواضيع المحددة" msgid "Open selected threads" msgstr "فتح المواضيع المحددة" -#: engine/vibes_auth/admin.py:208 -msgid "Preview" -msgstr "معاينة" - -#: engine/vibes_auth/admin.py:209 engine/vibes_auth/admin.py:249 -#: engine/vibes_auth/admin.py:326 -msgid "Metadata" -msgstr "البيانات الوصفية" - -#: engine/vibes_auth/admin.py:212 -msgid "preview" -msgstr "معاينة" - -#: engine/vibes_auth/admin.py:221 -msgid "image preview" -msgstr "معاينة الصورة" - -#: engine/vibes_auth/admin.py:241 +#: engine/vibes_auth/admin.py:209 msgid "Content" msgstr "المحتوى" -#: engine/vibes_auth/admin.py:243 +#: engine/vibes_auth/admin.py:211 msgid "Documentation" msgstr "التوثيق" -#: engine/vibes_auth/admin.py:313 +#: engine/vibes_auth/admin.py:217 engine/vibes_auth/admin.py:294 +msgid "Metadata" +msgstr "البيانات الوصفية" + +#: engine/vibes_auth/admin.py:281 msgid "Scheduling" msgstr "الجدولة" -#: engine/vibes_auth/admin.py:315 +#: engine/vibes_auth/admin.py:283 msgid "Statistics" msgstr "الإحصاءات" -#: engine/vibes_auth/admin.py:329 +#: engine/vibes_auth/admin.py:297 msgid "stats" msgstr "حالة" -#: engine/vibes_auth/admin.py:335 +#: engine/vibes_auth/admin.py:303 msgid "Prepare recipients (subscribed users)" msgstr "تحضير المستلمين (المستخدمين المشتركين)" -#: engine/vibes_auth/admin.py:343 +#: engine/vibes_auth/admin.py:311 msgid "Campaign '{}' is not in draft status." msgstr "الحملة '{}' ليست في حالة مسودة." -#: engine/vibes_auth/admin.py:350 +#: engine/vibes_auth/admin.py:318 msgid "Preparing recipients for campaign '{}'." msgstr "تحضير المستلمين لحملة \"{}\"." -#: engine/vibes_auth/admin.py:354 +#: engine/vibes_auth/admin.py:322 msgid "Send campaign now" msgstr "أرسل الحملة الآن" -#: engine/vibes_auth/admin.py:362 +#: engine/vibes_auth/admin.py:330 msgid "Campaign '{}' cannot be sent (status: {})." msgstr "لا يمكن إرسال الحملة '{}' (الحالة: {})." -#: engine/vibes_auth/admin.py:372 +#: engine/vibes_auth/admin.py:340 msgid "Campaign '{}' has no recipients. Prepare recipients first." msgstr "الحملة '{}' ليس لها مستلمون. قم بإعداد المستلمين أولاً." -#: engine/vibes_auth/admin.py:383 +#: engine/vibes_auth/admin.py:351 msgid "Started sending campaign '{}'." msgstr "بدأت حملة إرسال \"{}\"." -#: engine/vibes_auth/admin.py:387 +#: engine/vibes_auth/admin.py:355 msgid "Cancel campaign" msgstr "إلغاء الحملة" -#: engine/vibes_auth/admin.py:396 +#: engine/vibes_auth/admin.py:364 msgid "{} campaign(s) cancelled." msgstr "تم إلغاء الحملة (الحملات)." +#: engine/vibes_auth/admin_site.py:24 +msgid "Verification code" +msgstr "رمز التحقق" + +#: engine/vibes_auth/admin_site.py:62 +msgid "A verification code has been sent to your email." +msgstr "تم إرسال رمز التحقق إلى بريدك الإلكتروني." + +#: engine/vibes_auth/admin_site.py:118 +msgid "Invalid or expired code. Please try again." +msgstr "رمز غير صالح أو منتهي الصلاحية. يرجى المحاولة مرة أخرى." + +#: engine/vibes_auth/admin_site.py:124 +#: engine/vibes_auth/templates/admin/verify_otp.html:10 +msgid "Two-factor authentication" +msgstr "المصادقة الثنائية" + #: engine/vibes_auth/apps.py:8 msgid "Accounting" msgstr "المحاسبة" @@ -151,6 +155,143 @@ msgstr "الموظفون" msgid "System" msgstr "النظام" +#: engine/vibes_auth/docs/drf/emailing.py:18 +msgid "" +"UUID token for unsubscribing. This token is unique per user and is included " +"in the unsubscribe link of every campaign email. The token remains constant " +"for each user unless regenerated." +msgstr "" +"رمز UUID لإلغاء الاشتراك. هذا الرمز فريد لكل مستخدم ويتم تضمينه في رابط " +"إلغاء الاشتراك في كل رسالة بريد إلكتروني للحملة. يظل الرمز ثابتًا لكل مستخدم" +" ما لم يتم إعادة إنشاؤه." + +#: engine/vibes_auth/docs/drf/emailing.py:37 +#: engine/vibes_auth/emailing/views.py:69 +msgid "You have been successfully unsubscribed from our emails." +msgstr "لقد تم إلغاء اشتراكك في رسائلنا الإلكترونية بنجاح." + +#: engine/vibes_auth/docs/drf/emailing.py:45 +#: engine/vibes_auth/emailing/views.py:61 +msgid "You are already unsubscribed." +msgstr "لقد تم إلغاء اشتراكك بالفعل." + +#: engine/vibes_auth/docs/drf/emailing.py:52 +msgid "Unsubscribe from email campaigns" +msgstr "إلغاء الاشتراك في الحملات البريدية الإلكترونية" + +#: engine/vibes_auth/docs/drf/emailing.py:54 +msgid "" +"Unsubscribe a user from all marketing email campaigns using their unique unsubscribe token.\n" +"\n" +"This endpoint is designed for email client compatibility where clicking a link triggers a GET request. The user will no longer receive promotional emails after successful unsubscription.\n" +"\n" +"**Note:** Transactional emails (order confirmations, password resets, etc.) are not affected by this setting." +msgstr "" +"قم بإلغاء اشتراك مستخدم من جميع حملات البريد الإلكتروني التسويقية باستخدام " +"رمز إلغاء الاشتراك الفريد الخاص به. تم تصميم نقطة النهاية هذه لتتوافق مع " +"عميل البريد الإلكتروني حيث يؤدي النقر على الرابط إلى تشغيل طلب GET. لن يتلقى" +" المستخدم رسائل البريد الإلكتروني الترويجية بعد إلغاء الاشتراك بنجاح. " +"**ملاحظة:** لا تتأثر رسائل البريد الإلكتروني المتعلقة بالمعاملات (تأكيدات " +"الطلبات، إعادة تعيين كلمات المرور، إلخ) بهذا الإعداد." + +#: engine/vibes_auth/docs/drf/emailing.py:66 +#: engine/vibes_auth/docs/drf/emailing.py:146 +msgid "Successfully unsubscribed from email campaigns." +msgstr "تم إلغاء الاشتراك بنجاح من الحملات البريدية الإلكترونية." + +#: engine/vibes_auth/docs/drf/emailing.py:82 +#: engine/vibes_auth/docs/drf/emailing.py:162 +msgid "Invalid or missing unsubscribe token." +msgstr "رمز إلغاء الاشتراك غير صالح أو مفقود." + +#: engine/vibes_auth/docs/drf/emailing.py:96 +#: engine/vibes_auth/docs/drf/emailing.py:176 +msgid "User associated with the token was not found." +msgstr "لم يتم العثور على المستخدم المرتبط بالرمز المميز." + +#: engine/vibes_auth/docs/drf/emailing.py:118 +msgid "One-Click Unsubscribe (RFC 8058)" +msgstr "إلغاء الاشتراك بنقرة واحدة (RFC 8058)" + +#: engine/vibes_auth/docs/drf/emailing.py:120 +msgid "" +"RFC 8058 compliant one-click unsubscribe endpoint for email campaigns.\n" +"\n" +"This endpoint supports the List-Unsubscribe-Post header mechanism defined in RFC 8058, which allows email clients to unsubscribe users with a single click without leaving the email application.\n" +"\n" +"The token can be provided either as a query parameter or in the request body.\n" +"\n" +"**Standards Compliance:**\n" +"- RFC 8058: Signaling One-Click Functionality for List Email Headers\n" +"- RFC 2369: The Use of URLs as Meta-Syntax for Core Mail List Commands\n" +"\n" +"**Note:** Transactional emails are not affected by this setting." +msgstr "" +"نقطة نهاية إلغاء الاشتراك بنقرة واحدة متوافقة مع RFC 8058 لحملات البريد الإلكتروني. تدعم نقطة النهاية هذه آلية رأس List-Unsubscribe-Post المحددة في RFC 8058، والتي تسمح لعملاء البريد الإلكتروني بإلغاء اشتراك المستخدمين بنقرة واحدة دون مغادرة تطبيق البريد الإلكتروني. يمكن توفير الرمز المميز إما كمعلمة استعلام أو في نص الطلب.\n" +"\n" +"**الامتثال للمعايير:** - RFC 8058: الإشارة إلى وظيفة النقرة الواحدة لرؤوس قائمة البريد الإلكتروني - RFC 2369: استخدام عناوين URL كصيغة ميتا لأوامر قائمة البريد الأساسية **ملاحظة:** لا تتأثر رسائل البريد الإلكتروني الخاصة بالمعاملات بهذا الإعداد." + +#: engine/vibes_auth/docs/drf/emailing.py:137 +msgid "" +"Unsubscribe token (alternative to query parameter). Can be omitted if token " +"is provided in URL." +msgstr "" +"رمز إلغاء الاشتراك (بديل لمعلمة الاستعلام). يمكن حذفه إذا تم توفير الرمز في " +"عنوان URL." + +#: engine/vibes_auth/docs/drf/emailing.py:200 +msgid "Track email open event" +msgstr "تتبع حدث فتح البريد الإلكتروني" + +#: engine/vibes_auth/docs/drf/emailing.py:202 +msgid "" +"Records when a campaign email is opened by the recipient.\n" +"\n" +"This endpoint is called automatically when the tracking pixel (1x1 transparent GIF) embedded in the email is loaded by the recipient's email client.\n" +"\n" +"**How it works:**\n" +"1. Each campaign email contains a unique tracking pixel URL with a `tid` parameter\n" +"2. When the email is opened and images are loaded, this endpoint is called\n" +"3. The recipient's status is updated to 'opened' and the timestamp is recorded\n" +"4. The campaign's aggregate opened count is updated\n" +"\n" +"**Privacy considerations:**\n" +"- Only the first open is recorded (subsequent opens are ignored)\n" +"- No personal information beyond the tracking ID is logged\n" +"- Users who disable image loading will not trigger this event\n" +"\n" +"**Response:**\n" +"Returns a 1x1 transparent GIF image regardless of whether tracking succeeded, to ensure consistent behavior and prevent information leakage." +msgstr "" +"يسجل عندما يفتح المستلم رسالة البريد الإلكتروني الخاصة بالحملة. يتم استدعاء نقطة النهاية هذه تلقائيًا عندما يتم تحميل بكسل التتبع (1x1 GIF شفاف) المضمن في البريد الإلكتروني بواسطة عميل البريد الإلكتروني الخاص بالمستلم.\n" +"\n" +"**كيفية العمل:** 1. تحتوي كل رسالة بريد إلكتروني تابعة للحملة على عنوان URL فريد لبيكسل التتبع مع معلمة `tid` 2. عند فتح البريد الإلكتروني وتحميل الصور، يتم استدعاء نقطة النهاية هذه 3. يتم تحديث حالة المستلم إلى \"مفتوح\" ويتم تسجيل الطابع الزمني 4. يتم تحديث العدد الإجمالي لعمليات الفتح الخاصة بالحملة **اعتبارات الخصوصية:**\n" +"- يتم تسجيل الفتح الأول فقط (يتم تجاهل عمليات الفتح اللاحقة) - لا يتم تسجيل أي معلومات شخصية بخلاف معرف التتبع - لن يؤدي المستخدمون الذين يعطلون تحميل الصور إلى تشغيل هذا الحدث **الاستجابة:** إرجاع صورة GIF شفافة 1x1 بغض النظر عن نجاح التتبع، لضمان سلوك متسق ومنع تسرب المعلومات." + +#: engine/vibes_auth/docs/drf/emailing.py:223 +msgid "" +"Tracking ID (UUID) unique to each campaign-recipient combination. This ID " +"links the open event to a specific recipient and campaign." +msgstr "" +"معرف التتبع (UUID) الفريد لكل مجموعة من الحملات والمستلمين. يربط هذا المعرف " +"حدث الفتح بمستلم وحملة معينين." + +#: engine/vibes_auth/docs/drf/emailing.py:241 +msgid "" +"1x1 transparent GIF image. Always returned regardless of tracking status to " +"maintain consistent behavior." +msgstr "" +"صورة GIF شفافة 1x1. يتم إرجاعها دائمًا بغض النظر عن حالة التتبع للحفاظ على " +"سلوك متسق." + +#: engine/vibes_auth/docs/drf/emailing.py:247 +msgid "" +"Returned when no tracking ID is provided. Note: Invalid tracking IDs still " +"return 200 with the GIF to prevent enumeration attacks." +msgstr "" +"يتم إرجاعه عند عدم توفير معرف التتبع. ملاحظة: معرفات التتبع غير الصالحة لا " +"تزال ترجع 200 مع GIF لمنع هجمات التعداد." + #: engine/vibes_auth/docs/drf/messaging.py:17 msgid "User messages entrypoint" msgstr "نقطة إدخال رسائل المستخدم" @@ -246,9 +387,9 @@ msgid "confirm a user's password reset" msgstr "تأكيد إعادة تعيين كلمة مرور المستخدم" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:351 +#: engine/vibes_auth/graphene/mutations.py:358 #: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107 -#: engine/vibes_auth/viewsets.py:94 +#: engine/vibes_auth/viewsets.py:97 msgid "passwords do not match" msgstr "كلمات المرور غير متطابقة" @@ -301,195 +442,166 @@ msgstr "افتتح" msgid "Clicked" msgstr "نقرت" -#: engine/vibes_auth/emailing/models.py:35 -#: engine/vibes_auth/emailing/models.py:71 -#: engine/vibes_auth/emailing/models.py:121 +#: engine/vibes_auth/emailing/models.py:38 +#: engine/vibes_auth/emailing/models.py:88 msgid "name" msgstr "الاسم" -#: engine/vibes_auth/emailing/models.py:36 -msgid "descriptive name for the image" -msgstr "اسم وصفي للصورة" - -#: engine/vibes_auth/emailing/models.py:40 -msgid "image" -msgstr "صورة" - -#: engine/vibes_auth/emailing/models.py:41 -msgid "image file to use in email templates" -msgstr "ملف صورة لاستخدامه في قوالب البريد الإلكتروني" - -#: engine/vibes_auth/emailing/models.py:47 -msgid "alt text" -msgstr "نص آخر" - -#: engine/vibes_auth/emailing/models.py:48 -msgid "alternative text for accessibility" -msgstr "نص بديل لضمان إمكانية الوصول" - -#: engine/vibes_auth/emailing/models.py:52 -msgid "email image" -msgstr "صورة البريد الإلكتروني" - -#: engine/vibes_auth/emailing/models.py:53 -msgid "email images" -msgstr "صور البريد الإلكتروني" - -#: engine/vibes_auth/emailing/models.py:72 +#: engine/vibes_auth/emailing/models.py:39 msgid "internal name for the template" msgstr "الاسم الداخلي للقالب" -#: engine/vibes_auth/emailing/models.py:76 +#: engine/vibes_auth/emailing/models.py:43 msgid "slug" msgstr "slug" -#: engine/vibes_auth/emailing/models.py:77 +#: engine/vibes_auth/emailing/models.py:44 msgid "unique identifier for the template" msgstr "المعرف الفريد للقالب" -#: engine/vibes_auth/emailing/models.py:81 +#: engine/vibes_auth/emailing/models.py:48 msgid "subject" msgstr "الموضوع" -#: engine/vibes_auth/emailing/models.py:82 +#: engine/vibes_auth/emailing/models.py:49 msgid "email subject line - supports {{ variables }}" msgstr "موضوع البريد الإلكتروني - يدعم {{ variables }}" -#: engine/vibes_auth/emailing/models.py:85 -msgid "HTML content" -msgstr "محتوى HTML" +#: engine/vibes_auth/emailing/models.py:52 +msgid "content" +msgstr "المحتوى" -#: engine/vibes_auth/emailing/models.py:87 +#: engine/vibes_auth/emailing/models.py:54 msgid "" -"email body content - supports {{ user.first_name }}, {{ user.email }}, {{ " -"project_name }}, {{ unsubscribe_url }}" +"email body in markdown - supports {{ user.first_name }}, {{ user.email }}, " +"{{ project_name }}, {{ unsubscribe_url }}" msgstr "" "محتوى نص البريد الإلكتروني - يدعم {{ user.first_name }}, {{ user.email }}, " "{{ project_name }}, {{ unsubscribe_url }}" -#: engine/vibes_auth/emailing/models.py:94 +#: engine/vibes_auth/emailing/models.py:61 msgid "plain text content" msgstr "محتوى نص عادي" -#: engine/vibes_auth/emailing/models.py:95 +#: engine/vibes_auth/emailing/models.py:62 msgid "plain text fallback (auto-generated if empty)" msgstr "نص عادي احتياطي (يتم إنشاؤه تلقائيًا إذا كان فارغًا)" -#: engine/vibes_auth/emailing/models.py:100 +#: engine/vibes_auth/emailing/models.py:67 msgid "available variables" msgstr "المتغيرات المتاحة" -#: engine/vibes_auth/emailing/models.py:101 +#: engine/vibes_auth/emailing/models.py:68 msgid "documentation of available template variables" msgstr "توثيق متغيرات القوالب المتاحة" -#: engine/vibes_auth/emailing/models.py:105 +#: engine/vibes_auth/emailing/models.py:72 msgid "email template" msgstr "نموذج البريد الإلكتروني" -#: engine/vibes_auth/emailing/models.py:106 +#: engine/vibes_auth/emailing/models.py:73 msgid "email templates" msgstr "قوالب البريد الإلكتروني" -#: engine/vibes_auth/emailing/models.py:122 +#: engine/vibes_auth/emailing/models.py:89 msgid "internal name for the campaign" msgstr "الاسم الداخلي للحملة" -#: engine/vibes_auth/emailing/models.py:129 +#: engine/vibes_auth/emailing/models.py:96 msgid "template" msgstr "قالب" -#: engine/vibes_auth/emailing/models.py:130 +#: engine/vibes_auth/emailing/models.py:97 msgid "email template to use for this campaign" msgstr "نموذج البريد الإلكتروني الذي سيتم استخدامه في هذه الحملة" -#: engine/vibes_auth/emailing/models.py:136 -#: engine/vibes_auth/emailing/models.py:206 +#: engine/vibes_auth/emailing/models.py:103 +#: engine/vibes_auth/emailing/models.py:173 msgid "status" msgstr "الحالة" -#: engine/vibes_auth/emailing/models.py:141 +#: engine/vibes_auth/emailing/models.py:108 msgid "scheduled at" msgstr "مقرر في" -#: engine/vibes_auth/emailing/models.py:142 +#: engine/vibes_auth/emailing/models.py:109 msgid "when to send the campaign (leave empty for manual send)" msgstr "متى يتم إرسال الحملة (اتركه فارغًا للإرسال اليدوي)" -#: engine/vibes_auth/emailing/models.py:147 -#: engine/vibes_auth/emailing/models.py:211 +#: engine/vibes_auth/emailing/models.py:114 +#: engine/vibes_auth/emailing/models.py:178 msgid "sent at" msgstr "في وقت متأخر من ذلك" -#: engine/vibes_auth/emailing/models.py:148 +#: engine/vibes_auth/emailing/models.py:115 msgid "when the campaign was actually sent" msgstr "عندما تم إرسال الحملة فعليًا" -#: engine/vibes_auth/emailing/models.py:153 +#: engine/vibes_auth/emailing/models.py:120 msgid "total recipients" msgstr "إجمالي عدد المستفيدين" -#: engine/vibes_auth/emailing/models.py:157 +#: engine/vibes_auth/emailing/models.py:124 msgid "sent count" msgstr "عدد المرسلة" -#: engine/vibes_auth/emailing/models.py:161 +#: engine/vibes_auth/emailing/models.py:128 msgid "failed count" msgstr "عدد الفاشلين" -#: engine/vibes_auth/emailing/models.py:165 +#: engine/vibes_auth/emailing/models.py:132 msgid "opened count" msgstr "عدد مرات الفتح" -#: engine/vibes_auth/emailing/models.py:169 +#: engine/vibes_auth/emailing/models.py:136 msgid "clicked count" msgstr "عدد النقرات" -#: engine/vibes_auth/emailing/models.py:173 +#: engine/vibes_auth/emailing/models.py:140 msgid "email campaign" msgstr "حملة بريد إلكتروني" -#: engine/vibes_auth/emailing/models.py:174 +#: engine/vibes_auth/emailing/models.py:141 msgid "email campaigns" msgstr "حملات البريد الإلكتروني" -#: engine/vibes_auth/emailing/models.py:194 +#: engine/vibes_auth/emailing/models.py:161 msgid "campaign" msgstr "حملة" -#: engine/vibes_auth/emailing/models.py:200 engine/vibes_auth/models.py:146 +#: engine/vibes_auth/emailing/models.py:167 engine/vibes_auth/models.py:183 msgid "user" msgstr "المستخدم" -#: engine/vibes_auth/emailing/models.py:216 +#: engine/vibes_auth/emailing/models.py:183 msgid "opened at" msgstr "افتتح في" -#: engine/vibes_auth/emailing/models.py:221 +#: engine/vibes_auth/emailing/models.py:188 msgid "clicked at" msgstr "نقرت على" -#: engine/vibes_auth/emailing/models.py:227 +#: engine/vibes_auth/emailing/models.py:194 msgid "tracking ID" msgstr "رقم التتبع" -#: engine/vibes_auth/emailing/models.py:228 +#: engine/vibes_auth/emailing/models.py:195 msgid "unique ID for tracking opens and clicks" msgstr "معرف فريد لتتبع عمليات الفتح والنقرات" -#: engine/vibes_auth/emailing/models.py:233 +#: engine/vibes_auth/emailing/models.py:200 msgid "error message" msgstr "رسالة خطأ" -#: engine/vibes_auth/emailing/models.py:234 +#: engine/vibes_auth/emailing/models.py:201 msgid "error details if sending failed" msgstr "تفاصيل الخطأ في حالة فشل الإرسال" -#: engine/vibes_auth/emailing/models.py:238 +#: engine/vibes_auth/emailing/models.py:205 msgid "campaign recipient" msgstr "مستلم الحملة" -#: engine/vibes_auth/emailing/models.py:239 +#: engine/vibes_auth/emailing/models.py:206 msgid "campaign recipients" msgstr "مستلمو الحملة" @@ -505,73 +617,73 @@ msgstr "لقد تلقيت هذا البريد الإلكتروني لأنك اش msgid "Unsubscribe" msgstr "إلغاء الاشتراك" -#: engine/vibes_auth/emailing/views.py:71 +#: engine/vibes_auth/emailing/views.py:39 msgid "Unsubscribe token is required." msgstr "رمز إلغاء الاشتراك مطلوب." -#: engine/vibes_auth/emailing/views.py:79 +#: engine/vibes_auth/emailing/views.py:47 msgid "Invalid unsubscribe token format." msgstr "تنسيق رمز إلغاء الاشتراك غير صالح." -#: engine/vibes_auth/emailing/views.py:87 +#: engine/vibes_auth/emailing/views.py:55 msgid "User not found." msgstr "لم يتم العثور على المستخدم." -#: engine/vibes_auth/emailing/views.py:93 -msgid "You are already unsubscribed." -msgstr "لقد تم إلغاء اشتراكك بالفعل." - -#: engine/vibes_auth/emailing/views.py:101 -msgid "You have been successfully unsubscribed from our emails." -msgstr "لقد تم إلغاء اشتراكك في رسائلنا الإلكترونية بنجاح." - -#: engine/vibes_auth/graphene/mutations.py:46 +#: engine/vibes_auth/graphene/mutations.py:47 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "معرّف المستخدم الذي تم ترميزه بـ b64 الذي أحال المستخدم الجديد إلينا." -#: engine/vibes_auth/graphene/mutations.py:68 +#: engine/vibes_auth/graphene/mutations.py:70 msgid "password too weak" msgstr "كلمة المرور ضعيفة جداً" -#: engine/vibes_auth/graphene/mutations.py:128 +#: engine/vibes_auth/graphene/mutations.py:130 msgid "malformed email" msgstr "بريد إلكتروني مشوه" -#: engine/vibes_auth/graphene/mutations.py:140 +#: engine/vibes_auth/graphene/mutations.py:142 #: engine/vibes_auth/serializers.py:117 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "رقم هاتف مشوه: {phone_number}!" -#: engine/vibes_auth/graphene/mutations.py:165 +#: engine/vibes_auth/graphene/mutations.py:167 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "تنسيق السمة غير صالح: {attribute_pair}!" -#: engine/vibes_auth/graphene/mutations.py:182 +#: engine/vibes_auth/graphene/mutations.py:184 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} غير موجود: {uuid}!" -#: engine/vibes_auth/graphene/mutations.py:304 -#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180 +#: engine/vibes_auth/graphene/mutations.py:309 +#: engine/vibes_auth/viewsets.py:174 engine/vibes_auth/viewsets.py:198 msgid "activation link is invalid!" msgstr "رابط التفعيل غير صالح!" -#: engine/vibes_auth/graphene/mutations.py:307 +#: engine/vibes_auth/graphene/mutations.py:312 msgid "account already activated..." msgstr "تم تفعيل الحساب بالفعل..." -#: engine/vibes_auth/graphene/mutations.py:314 -#: engine/vibes_auth/graphene/mutations.py:376 +#: engine/vibes_auth/graphene/mutations.py:319 +#: engine/vibes_auth/graphene/mutations.py:383 msgid "something went wrong: {e!s}" msgstr "حدث خطأ ما: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:358 -#: engine/vibes_auth/viewsets.py:106 +#: engine/vibes_auth/graphene/mutations.py:365 +#: engine/vibes_auth/viewsets.py:109 msgid "token is invalid!" msgstr "الرمز غير صالح!" +#: engine/vibes_auth/graphene/mutations.py:403 +msgid "only image files are allowed (jpg, png, gif, webp)" +msgstr "يُسمح فقط بملفات الصور (jpg، png، gif، webp)" + +#: engine/vibes_auth/graphene/mutations.py:406 +msgid "file size must not exceed 5 MB" +msgstr "يجب ألا يتجاوز حجم الملف 5 ميغابايت" + #: engine/vibes_auth/graphene/object_types.py:46 msgid "" "the products this user has viewed most recently (max 48), in " @@ -580,7 +692,7 @@ msgstr "" "المنتجات التي شاهدها هذا المستخدم مؤخرًا (بحد أقصى 48)، بترتيب زمني عكسي." #: engine/vibes_auth/graphene/object_types.py:49 -#: engine/vibes_auth/models.py:214 +#: engine/vibes_auth/models.py:270 msgid "groups" msgstr "المجموعات" @@ -589,7 +701,7 @@ msgid "wishlist" msgstr "قائمة الرغبات" #: engine/vibes_auth/graphene/object_types.py:56 -#: engine/vibes_auth/models.py:70 +#: engine/vibes_auth/models.py:75 msgid "avatar" msgstr "الصورة الرمزية" @@ -624,7 +736,7 @@ msgstr "نحن نبحث عن عامل التشغيل للرد عليك بالف msgid "Assignee must be a staff user." msgstr "يجب أن يكون المعين مستخدمًا من الموظفين." -#: engine/vibes_auth/models.py:42 +#: engine/vibes_auth/models.py:44 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -641,123 +753,135 @@ msgstr "" " إلى الرمز المميز للتحقق من الحسابات. تم تصميم نموذج المستخدم للتعامل مع " "حالات استخدام محددة لإدارة المستخدم المحسنة." -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "email" msgstr "البريد الإلكتروني" -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "user email address" msgstr "عنوان البريد الإلكتروني للمستخدم" -#: engine/vibes_auth/models.py:55 +#: engine/vibes_auth/models.py:57 msgid "phone_number" msgstr "رقم الهاتف" -#: engine/vibes_auth/models.py:60 +#: engine/vibes_auth/models.py:61 msgid "user phone number" msgstr "رقم هاتف المستخدم" -#: engine/vibes_auth/models.py:66 +#: engine/vibes_auth/models.py:68 msgid "first_name" msgstr "الاسم الأول" -#: engine/vibes_auth/models.py:67 +#: engine/vibes_auth/models.py:71 msgid "last_name" msgstr "اسم العائلة" -#: engine/vibes_auth/models.py:73 +#: engine/vibes_auth/models.py:78 msgid "user profile image" msgstr "صورة ملف تعريف المستخدم" -#: engine/vibes_auth/models.py:78 +#: engine/vibes_auth/models.py:83 msgid "is verified" msgstr "تم التحقق" -#: engine/vibes_auth/models.py:79 +#: engine/vibes_auth/models.py:84 msgid "user verification status" msgstr "حالة التحقق من المستخدم" -#: engine/vibes_auth/models.py:82 +#: engine/vibes_auth/models.py:87 msgid "is_active" msgstr "نشط" -#: engine/vibes_auth/models.py:84 +#: engine/vibes_auth/models.py:89 msgid "unselect this instead of deleting accounts" msgstr "قم بإلغاء تحديد هذا بدلاً من حذف الحسابات" -#: engine/vibes_auth/models.py:87 +#: engine/vibes_auth/models.py:92 msgid "is_subscribed" msgstr "مشترك" -#: engine/vibes_auth/models.py:88 +#: engine/vibes_auth/models.py:93 msgid "user's newsletter subscription status" msgstr "حالة اشتراك المستخدم في النشرة الإخبارية" -#: engine/vibes_auth/models.py:92 +#: engine/vibes_auth/models.py:98 msgid "activation token" msgstr "رمز التفعيل" -#: engine/vibes_auth/models.py:95 +#: engine/vibes_auth/models.py:103 +msgid "activation token created" +msgstr "تم إنشاء رمز التنشيط" + +#: engine/vibes_auth/models.py:107 msgid "unsubscribe token" msgstr "رمز إلغاء الاشتراك" -#: engine/vibes_auth/models.py:96 +#: engine/vibes_auth/models.py:108 msgid "token for secure one-click unsubscribe from campaigns" msgstr "رمز مميز لإلغاء الاشتراك الآمن بنقرة واحدة من الحملات" -#: engine/vibes_auth/models.py:106 +#: engine/vibes_auth/models.py:118 msgid "attributes" msgstr "السمات" -#: engine/vibes_auth/models.py:147 +#: engine/vibes_auth/models.py:184 msgid "users" msgstr "المستخدمون" -#: engine/vibes_auth/models.py:154 +#: engine/vibes_auth/models.py:202 +msgid "admin OTP code" +msgstr "رمز OTP الإداري" + +#: engine/vibes_auth/models.py:203 +msgid "admin OTP codes" +msgstr "رموز OTP الإدارية" + +#: engine/vibes_auth/models.py:210 msgid "For anonymous threads" msgstr "بالنسبة للمواضيع المجهولة" -#: engine/vibes_auth/models.py:178 +#: engine/vibes_auth/models.py:234 msgid "Chat thread" msgstr "موضوع المحادثة" -#: engine/vibes_auth/models.py:179 +#: engine/vibes_auth/models.py:235 msgid "Chat threads" msgstr "خيوط الدردشة" -#: engine/vibes_auth/models.py:185 +#: engine/vibes_auth/models.py:241 msgid "provide user or email for anonymous thread." msgstr "توفير مستخدم أو بريد إلكتروني لموضوع مجهول." -#: engine/vibes_auth/models.py:188 +#: engine/vibes_auth/models.py:244 msgid "assignee must be a staff user." msgstr "يجب أن يكون المُحال إليه مستخدمًا من الموظفين." -#: engine/vibes_auth/models.py:206 +#: engine/vibes_auth/models.py:262 msgid "Chat message" msgstr "رسالة الدردشة" -#: engine/vibes_auth/models.py:207 +#: engine/vibes_auth/models.py:263 msgid "Chat messages" msgstr "رسائل المحادثة" -#: engine/vibes_auth/models.py:213 +#: engine/vibes_auth/models.py:269 msgid "group" msgstr "المجموعة" -#: engine/vibes_auth/models.py:220 +#: engine/vibes_auth/models.py:276 msgid "outstanding token" msgstr "الرمز المميز" -#: engine/vibes_auth/models.py:221 +#: engine/vibes_auth/models.py:277 msgid "outstanding tokens" msgstr "الرموز المميزة المعلقة" -#: engine/vibes_auth/models.py:227 +#: engine/vibes_auth/models.py:283 msgid "blacklisted token" msgstr "الرمز المميز المدرج في القائمة السوداء" -#: engine/vibes_auth/models.py:228 +#: engine/vibes_auth/models.py:284 msgid "blacklisted tokens" msgstr "الرموز المميزة المدرجة في القائمة السوداء" @@ -799,6 +923,10 @@ msgstr "لا توجد مطالبة معرف المستخدم في الرمز ا msgid "user does not exist" msgstr "المستخدم غير موجود" +#: engine/vibes_auth/templates/admin/verify_otp.html:27 +msgid "Verify" +msgstr "تحقق" + #: engine/vibes_auth/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "إعادة تعيين كلمة المرور" @@ -884,12 +1012,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "مع أطيب تحياتي،
فريق %(project_name)s" -#: engine/vibes_auth/utils/emailing.py:24 +#: engine/vibes_auth/utils/emailing.py:27 #, python-brace-format msgid "{settings.PROJECT_NAME} | Activate Account" msgstr "{settings.PROJECT_NAME} | تفعيل الحساب" -#: engine/vibes_auth/utils/emailing.py:63 +#: engine/vibes_auth/utils/emailing.py:66 #, python-brace-format msgid "{settings.PROJECT_NAME} | Reset Password" msgstr "{settings.PROJECT_NAME} | إعادة تعيين كلمة المرور" @@ -941,7 +1069,7 @@ msgstr "" msgid "the token is invalid" msgstr "الرمز المميز غير صالح" -#: engine/vibes_auth/viewsets.py:44 +#: engine/vibes_auth/viewsets.py:47 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." @@ -949,10 +1077,18 @@ msgstr "" "تنفيذ مجموعة عرض المستخدم.\n" "يوفر مجموعة من الإجراءات التي تدير البيانات المتعلقة بالمستخدم مثل الإنشاء والاسترجاع والتحديثات والحذف والإجراءات المخصصة بما في ذلك إعادة تعيين كلمة المرور وتحميل الصورة الرمزية وتفعيل الحساب ودمج العناصر التي تم عرضها مؤخرًا. تعمل هذه الفئة على توسيع mixins و GenericViewSet لمعالجة واجهة برمجة التطبيقات القوية." -#: engine/vibes_auth/viewsets.py:113 +#: engine/vibes_auth/viewsets.py:116 msgid "password reset successfully" msgstr "تمت إعادة تعيين كلمة المرور بنجاح!" -#: engine/vibes_auth/viewsets.py:161 +#: engine/vibes_auth/viewsets.py:146 +msgid "" +"Account already registered but not yet activated. A new activation email has" +" been sent." +msgstr "" +"الحساب مسجل بالفعل ولكن لم يتم تفعيله بعد. تم إرسال بريد إلكتروني جديد " +"للتفعيل." + +#: engine/vibes_auth/viewsets.py:179 msgid "account already activated!" msgstr "لقد قمت بتفعيل الحساب بالفعل..." diff --git a/engine/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.mo index 039c28db..be03b1bb 100644 Binary files a/engine/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.mo and b/engine/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.mo differ diff --git a/engine/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.po b/engine/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.po index b9197f04..39c7a8c6 100644 --- a/engine/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 03:06+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,32 +13,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:65 engine/vibes_auth/admin.py:66 +#: engine/vibes_auth/admin.py:64 engine/vibes_auth/admin.py:65 #: engine/vibes_auth/graphene/object_types.py:54 msgid "balance" msgstr "Bilance" -#: engine/vibes_auth/admin.py:74 +#: engine/vibes_auth/admin.py:73 msgid "order" msgstr "Objednávka" -#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:51 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:51 msgid "orders" msgstr "Objednávky" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:84 msgid "personal info" msgstr "Osobní informace" -#: engine/vibes_auth/admin.py:89 engine/vibes_auth/graphene/object_types.py:50 +#: engine/vibes_auth/admin.py:88 engine/vibes_auth/graphene/object_types.py:50 msgid "permissions" msgstr "Oprávnění" -#: engine/vibes_auth/admin.py:102 +#: engine/vibes_auth/admin.py:101 msgid "important dates" msgstr "Důležitá data" -#: engine/vibes_auth/admin.py:103 +#: engine/vibes_auth/admin.py:102 msgid "additional info" msgstr "Další informace" @@ -54,79 +54,83 @@ msgstr "Zavřít vybraná vlákna" msgid "Open selected threads" msgstr "Otevřít vybraná vlákna" -#: engine/vibes_auth/admin.py:208 -msgid "Preview" -msgstr "Náhled" - -#: engine/vibes_auth/admin.py:209 engine/vibes_auth/admin.py:249 -#: engine/vibes_auth/admin.py:326 -msgid "Metadata" -msgstr "Metadata" - -#: engine/vibes_auth/admin.py:212 -msgid "preview" -msgstr "náhled" - -#: engine/vibes_auth/admin.py:221 -msgid "image preview" -msgstr "náhled obrázku" - -#: engine/vibes_auth/admin.py:241 +#: engine/vibes_auth/admin.py:209 msgid "Content" msgstr "Obsah" -#: engine/vibes_auth/admin.py:243 +#: engine/vibes_auth/admin.py:211 msgid "Documentation" msgstr "Dokumentace" -#: engine/vibes_auth/admin.py:313 +#: engine/vibes_auth/admin.py:217 engine/vibes_auth/admin.py:294 +msgid "Metadata" +msgstr "Metadata" + +#: engine/vibes_auth/admin.py:281 msgid "Scheduling" msgstr "Plánování" -#: engine/vibes_auth/admin.py:315 +#: engine/vibes_auth/admin.py:283 msgid "Statistics" msgstr "Statistiky" -#: engine/vibes_auth/admin.py:329 +#: engine/vibes_auth/admin.py:297 msgid "stats" msgstr "stát" -#: engine/vibes_auth/admin.py:335 +#: engine/vibes_auth/admin.py:303 msgid "Prepare recipients (subscribed users)" msgstr "Připravte příjemce (přihlášené uživatele)" -#: engine/vibes_auth/admin.py:343 +#: engine/vibes_auth/admin.py:311 msgid "Campaign '{}' is not in draft status." msgstr "Kampaň „{}“ není ve stavu konceptu." -#: engine/vibes_auth/admin.py:350 +#: engine/vibes_auth/admin.py:318 msgid "Preparing recipients for campaign '{}'." msgstr "Příprava příjemců pro kampaň „{}“." -#: engine/vibes_auth/admin.py:354 +#: engine/vibes_auth/admin.py:322 msgid "Send campaign now" msgstr "Odeslat kampaň nyní" -#: engine/vibes_auth/admin.py:362 +#: engine/vibes_auth/admin.py:330 msgid "Campaign '{}' cannot be sent (status: {})." msgstr "Kampaň '{}' nelze odeslat (stav: {})." -#: engine/vibes_auth/admin.py:372 +#: engine/vibes_auth/admin.py:340 msgid "Campaign '{}' has no recipients. Prepare recipients first." msgstr "Kampaň „{}“ nemá žádné příjemce. Nejprve připravte příjemce." -#: engine/vibes_auth/admin.py:383 +#: engine/vibes_auth/admin.py:351 msgid "Started sending campaign '{}'." msgstr "Zahájena kampaň „{}“." -#: engine/vibes_auth/admin.py:387 +#: engine/vibes_auth/admin.py:355 msgid "Cancel campaign" msgstr "Zrušit kampaň" -#: engine/vibes_auth/admin.py:396 +#: engine/vibes_auth/admin.py:364 msgid "{} campaign(s) cancelled." msgstr "{} kampaň(e) zrušena." +#: engine/vibes_auth/admin_site.py:24 +msgid "Verification code" +msgstr "Ověřovací kód" + +#: engine/vibes_auth/admin_site.py:62 +msgid "A verification code has been sent to your email." +msgstr "Na vaši e-mailovou adresu byl zaslán ověřovací kód." + +#: engine/vibes_auth/admin_site.py:118 +msgid "Invalid or expired code. Please try again." +msgstr "Neplatný nebo prošlý kód. Zkuste to znovu." + +#: engine/vibes_auth/admin_site.py:124 +#: engine/vibes_auth/templates/admin/verify_otp.html:10 +msgid "Two-factor authentication" +msgstr "Dvoufaktorová autentizace" + #: engine/vibes_auth/apps.py:8 msgid "Accounting" msgstr "Účetnictví" @@ -151,6 +155,144 @@ msgstr "Zaměstnanci" msgid "System" msgstr "Systém" +#: engine/vibes_auth/docs/drf/emailing.py:18 +msgid "" +"UUID token for unsubscribing. This token is unique per user and is included " +"in the unsubscribe link of every campaign email. The token remains constant " +"for each user unless regenerated." +msgstr "" +"UUID token pro odhlášení. Tento token je jedinečný pro každého uživatele a " +"je součástí odkazu pro odhlášení v každém e-mailu kampaně. Token zůstává pro" +" každého uživatele neměnný, pokud není znovu vygenerován." + +#: engine/vibes_auth/docs/drf/emailing.py:37 +#: engine/vibes_auth/emailing/views.py:69 +msgid "You have been successfully unsubscribed from our emails." +msgstr "Byli jste úspěšně odhlášeni z odběru našich e-mailů." + +#: engine/vibes_auth/docs/drf/emailing.py:45 +#: engine/vibes_auth/emailing/views.py:61 +msgid "You are already unsubscribed." +msgstr "Již jste odhlášeni." + +#: engine/vibes_auth/docs/drf/emailing.py:52 +msgid "Unsubscribe from email campaigns" +msgstr "Odhlásit se z e-mailových kampaní" + +#: engine/vibes_auth/docs/drf/emailing.py:54 +msgid "" +"Unsubscribe a user from all marketing email campaigns using their unique unsubscribe token.\n" +"\n" +"This endpoint is designed for email client compatibility where clicking a link triggers a GET request. The user will no longer receive promotional emails after successful unsubscription.\n" +"\n" +"**Note:** Transactional emails (order confirmations, password resets, etc.) are not affected by this setting." +msgstr "" +"Odhlásit uživatele ze všech marketingových e-mailových kampaní pomocí jeho " +"jedinečného tokenu pro odhlášení. Tento koncový bod je navržen pro " +"kompatibilitu s e-mailovými klienty, kde kliknutí na odkaz spustí požadavek " +"GET. Po úspěšném odhlášení již uživatel nebude dostávat propagační e-maily. " +"**Poznámka:** Transakční e-maily (potvrzení objednávky, resetování hesla " +"atd.) nejsou tímto nastavením ovlivněny." + +#: engine/vibes_auth/docs/drf/emailing.py:66 +#: engine/vibes_auth/docs/drf/emailing.py:146 +msgid "Successfully unsubscribed from email campaigns." +msgstr "Úspěšně odhlášen z e-mailových kampaní." + +#: engine/vibes_auth/docs/drf/emailing.py:82 +#: engine/vibes_auth/docs/drf/emailing.py:162 +msgid "Invalid or missing unsubscribe token." +msgstr "Neplatný nebo chybějící token pro odhlášení." + +#: engine/vibes_auth/docs/drf/emailing.py:96 +#: engine/vibes_auth/docs/drf/emailing.py:176 +msgid "User associated with the token was not found." +msgstr "Uživatel spojený s tokenem nebyl nalezen." + +#: engine/vibes_auth/docs/drf/emailing.py:118 +msgid "One-Click Unsubscribe (RFC 8058)" +msgstr "Odhlášení jedním kliknutím (RFC 8058)" + +#: engine/vibes_auth/docs/drf/emailing.py:120 +msgid "" +"RFC 8058 compliant one-click unsubscribe endpoint for email campaigns.\n" +"\n" +"This endpoint supports the List-Unsubscribe-Post header mechanism defined in RFC 8058, which allows email clients to unsubscribe users with a single click without leaving the email application.\n" +"\n" +"The token can be provided either as a query parameter or in the request body.\n" +"\n" +"**Standards Compliance:**\n" +"- RFC 8058: Signaling One-Click Functionality for List Email Headers\n" +"- RFC 2369: The Use of URLs as Meta-Syntax for Core Mail List Commands\n" +"\n" +"**Note:** Transactional emails are not affected by this setting." +msgstr "" +"Konec pro odhlášení z e-mailových kampaní jedním kliknutím v souladu s RFC 8058. Tento konec podporuje mechanismus záhlaví List-Unsubscribe-Post definovaný v RFC 8058, který umožňuje e-mailovým klientům odhlásit uživatele jediným kliknutím, aniž by museli opustit e-mailovou aplikaci. Token lze poskytnout buď jako parametr dotazu, nebo v těle požadavku.\n" +"\n" +"**Soulad s normami:** - RFC 8058: Signalizace funkce jedním kliknutím pro hlavičky e-mailových seznamů - RFC 2369: Použití URL jako meta-syntaxe pro základní příkazy e-mailových seznamů **Poznámka:** Transakční e-maily nejsou tímto nastavením ovlivněny." + +#: engine/vibes_auth/docs/drf/emailing.py:137 +msgid "" +"Unsubscribe token (alternative to query parameter). Can be omitted if token " +"is provided in URL." +msgstr "" +"Token pro odhlášení (alternativa k parametru dotazu). Lze vynechat, pokud je" +" token uveden v URL." + +#: engine/vibes_auth/docs/drf/emailing.py:200 +msgid "Track email open event" +msgstr "Sledovat událost otevření e-mailu" + +#: engine/vibes_auth/docs/drf/emailing.py:202 +msgid "" +"Records when a campaign email is opened by the recipient.\n" +"\n" +"This endpoint is called automatically when the tracking pixel (1x1 transparent GIF) embedded in the email is loaded by the recipient's email client.\n" +"\n" +"**How it works:**\n" +"1. Each campaign email contains a unique tracking pixel URL with a `tid` parameter\n" +"2. When the email is opened and images are loaded, this endpoint is called\n" +"3. The recipient's status is updated to 'opened' and the timestamp is recorded\n" +"4. The campaign's aggregate opened count is updated\n" +"\n" +"**Privacy considerations:**\n" +"- Only the first open is recorded (subsequent opens are ignored)\n" +"- No personal information beyond the tracking ID is logged\n" +"- Users who disable image loading will not trigger this event\n" +"\n" +"**Response:**\n" +"Returns a 1x1 transparent GIF image regardless of whether tracking succeeded, to ensure consistent behavior and prevent information leakage." +msgstr "" +"Zaznamenává, kdy příjemce otevře e-mail kampaně. Tento koncový bod se automaticky volá, když e-mailový klient příjemce načte sledovací pixel (1x1 průhledný GIF) vložený do e-mailu.\n" +"\n" +"**Jak to funguje:** 1. Každý e-mail kampaně obsahuje jedinečnou URL adresu sledovacího pixelu s parametrem „tid“. 2. Když je e-mail otevřen a obrázky načteny, je tento koncový bod vyvolán. 3. Stav příjemce je aktualizován na „otevřeno“ a zaznamenán časový údaj. 4. Celkový počet otevření kampaně je aktualizován. **Ochrana osobních údajů:**\n" +"- Zaznamenáno je pouze první otevření (další otevření jsou ignorována). - Kromě identifikačního čísla pro sledování nejsou zaznamenávány žádné osobní údaje. - Uživatelé, kteří zakážou načítání obrázků, tuto událost nespustí. **Odpověď:** Vrátí průhledný obrázek GIF o rozměrech 1x1 bez ohledu na to, zda bylo sledování úspěšné, aby bylo zajištěno konzistentní chování a zabráněno úniku informací." + +#: engine/vibes_auth/docs/drf/emailing.py:223 +msgid "" +"Tracking ID (UUID) unique to each campaign-recipient combination. This ID " +"links the open event to a specific recipient and campaign." +msgstr "" +"Sledovací ID (UUID) jedinečné pro každou kombinaci kampaně a příjemce. Toto " +"ID propojuje událost otevření s konkrétním příjemcem a kampaní." + +#: engine/vibes_auth/docs/drf/emailing.py:241 +msgid "" +"1x1 transparent GIF image. Always returned regardless of tracking status to " +"maintain consistent behavior." +msgstr "" +"1x1 průhledný obrázek ve formátu GIF. Vždy vrácen bez ohledu na stav " +"sledování, aby bylo zachováno konzistentní chování." + +#: engine/vibes_auth/docs/drf/emailing.py:247 +msgid "" +"Returned when no tracking ID is provided. Note: Invalid tracking IDs still " +"return 200 with the GIF to prevent enumeration attacks." +msgstr "" +"Vrátí se, pokud není zadáno žádné identifikační číslo pro sledování. " +"Poznámka: Neplatná identifikační čísla pro sledování stále vracejí 200 s " +"GIF, aby se zabránilo enumerativním útokům." + #: engine/vibes_auth/docs/drf/messaging.py:17 msgid "User messages entrypoint" msgstr "Vstupní bod uživatelských zpráv" @@ -244,9 +386,9 @@ msgid "confirm a user's password reset" msgstr "Potvrzení obnovení hesla uživatele" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:351 +#: engine/vibes_auth/graphene/mutations.py:358 #: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107 -#: engine/vibes_auth/viewsets.py:94 +#: engine/vibes_auth/viewsets.py:97 msgid "passwords do not match" msgstr "Hesla se neshodují" @@ -299,195 +441,166 @@ msgstr "Otevřeno" msgid "Clicked" msgstr "Kliknuto" -#: engine/vibes_auth/emailing/models.py:35 -#: engine/vibes_auth/emailing/models.py:71 -#: engine/vibes_auth/emailing/models.py:121 +#: engine/vibes_auth/emailing/models.py:38 +#: engine/vibes_auth/emailing/models.py:88 msgid "name" msgstr "název" -#: engine/vibes_auth/emailing/models.py:36 -msgid "descriptive name for the image" -msgstr "popisný název obrázku" - -#: engine/vibes_auth/emailing/models.py:40 -msgid "image" -msgstr "obrázek" - -#: engine/vibes_auth/emailing/models.py:41 -msgid "image file to use in email templates" -msgstr "obrazový soubor pro použití v e-mailových šablonách" - -#: engine/vibes_auth/emailing/models.py:47 -msgid "alt text" -msgstr "jiný text" - -#: engine/vibes_auth/emailing/models.py:48 -msgid "alternative text for accessibility" -msgstr "alternativní text pro přístupnost" - -#: engine/vibes_auth/emailing/models.py:52 -msgid "email image" -msgstr "e-mailový obrázek" - -#: engine/vibes_auth/emailing/models.py:53 -msgid "email images" -msgstr "e-mailové obrázky" - -#: engine/vibes_auth/emailing/models.py:72 +#: engine/vibes_auth/emailing/models.py:39 msgid "internal name for the template" msgstr "interní název šablony" -#: engine/vibes_auth/emailing/models.py:76 +#: engine/vibes_auth/emailing/models.py:43 msgid "slug" msgstr "služebníci" -#: engine/vibes_auth/emailing/models.py:77 +#: engine/vibes_auth/emailing/models.py:44 msgid "unique identifier for the template" msgstr "jedinečný identifikátor šablony" -#: engine/vibes_auth/emailing/models.py:81 +#: engine/vibes_auth/emailing/models.py:48 msgid "subject" msgstr "předmět" -#: engine/vibes_auth/emailing/models.py:82 +#: engine/vibes_auth/emailing/models.py:49 msgid "email subject line - supports {{ variables }}" msgstr "předmět e-mailu – podporuje {{ variables }}" -#: engine/vibes_auth/emailing/models.py:85 -msgid "HTML content" -msgstr "Obsah HTML" +#: engine/vibes_auth/emailing/models.py:52 +msgid "content" +msgstr "obsah" -#: engine/vibes_auth/emailing/models.py:87 +#: engine/vibes_auth/emailing/models.py:54 msgid "" -"email body content - supports {{ user.first_name }}, {{ user.email }}, {{ " -"project_name }}, {{ unsubscribe_url }}" +"email body in markdown - supports {{ user.first_name }}, {{ user.email }}, " +"{{ project_name }}, {{ unsubscribe_url }}" msgstr "" "obsah těla e-mailu – podporuje {{ user.first_name }}, {{ user.email }}, {{ " "project_name }}, {{ unsubscribe_url }}" -#: engine/vibes_auth/emailing/models.py:94 +#: engine/vibes_auth/emailing/models.py:61 msgid "plain text content" msgstr "obsah ve formě prostého textu" -#: engine/vibes_auth/emailing/models.py:95 +#: engine/vibes_auth/emailing/models.py:62 msgid "plain text fallback (auto-generated if empty)" msgstr "záložní text (automaticky generovaný, pokud je pole prázdné)" -#: engine/vibes_auth/emailing/models.py:100 +#: engine/vibes_auth/emailing/models.py:67 msgid "available variables" msgstr "dostupné proměnné" -#: engine/vibes_auth/emailing/models.py:101 +#: engine/vibes_auth/emailing/models.py:68 msgid "documentation of available template variables" msgstr "dokumentace dostupných proměnných šablony" -#: engine/vibes_auth/emailing/models.py:105 +#: engine/vibes_auth/emailing/models.py:72 msgid "email template" msgstr "šablona e-mailu" -#: engine/vibes_auth/emailing/models.py:106 +#: engine/vibes_auth/emailing/models.py:73 msgid "email templates" msgstr "e-mailové šablony" -#: engine/vibes_auth/emailing/models.py:122 +#: engine/vibes_auth/emailing/models.py:89 msgid "internal name for the campaign" msgstr "interní název kampaně" -#: engine/vibes_auth/emailing/models.py:129 +#: engine/vibes_auth/emailing/models.py:96 msgid "template" msgstr "šablona" -#: engine/vibes_auth/emailing/models.py:130 +#: engine/vibes_auth/emailing/models.py:97 msgid "email template to use for this campaign" msgstr "šablona e-mailu, která se použije pro tuto kampaň" -#: engine/vibes_auth/emailing/models.py:136 -#: engine/vibes_auth/emailing/models.py:206 +#: engine/vibes_auth/emailing/models.py:103 +#: engine/vibes_auth/emailing/models.py:173 msgid "status" msgstr "status" -#: engine/vibes_auth/emailing/models.py:141 +#: engine/vibes_auth/emailing/models.py:108 msgid "scheduled at" msgstr "naplánováno na" -#: engine/vibes_auth/emailing/models.py:142 +#: engine/vibes_auth/emailing/models.py:109 msgid "when to send the campaign (leave empty for manual send)" msgstr "kdy odeslat kampaň (pro ruční odeslání nechte pole prázdné)" -#: engine/vibes_auth/emailing/models.py:147 -#: engine/vibes_auth/emailing/models.py:211 +#: engine/vibes_auth/emailing/models.py:114 +#: engine/vibes_auth/emailing/models.py:178 msgid "sent at" msgstr "pozdě to" -#: engine/vibes_auth/emailing/models.py:148 +#: engine/vibes_auth/emailing/models.py:115 msgid "when the campaign was actually sent" msgstr "když byla kampaň skutečně odeslána" -#: engine/vibes_auth/emailing/models.py:153 +#: engine/vibes_auth/emailing/models.py:120 msgid "total recipients" msgstr "celkový počet příjemců" -#: engine/vibes_auth/emailing/models.py:157 +#: engine/vibes_auth/emailing/models.py:124 msgid "sent count" msgstr "počet odeslaných" -#: engine/vibes_auth/emailing/models.py:161 +#: engine/vibes_auth/emailing/models.py:128 msgid "failed count" msgstr "neúspěšný pokus" -#: engine/vibes_auth/emailing/models.py:165 +#: engine/vibes_auth/emailing/models.py:132 msgid "opened count" msgstr "otevřený počet" -#: engine/vibes_auth/emailing/models.py:169 +#: engine/vibes_auth/emailing/models.py:136 msgid "clicked count" msgstr "počet kliknutí" -#: engine/vibes_auth/emailing/models.py:173 +#: engine/vibes_auth/emailing/models.py:140 msgid "email campaign" msgstr "e-mailová kampaň" -#: engine/vibes_auth/emailing/models.py:174 +#: engine/vibes_auth/emailing/models.py:141 msgid "email campaigns" msgstr "e-mailové kampaně" -#: engine/vibes_auth/emailing/models.py:194 +#: engine/vibes_auth/emailing/models.py:161 msgid "campaign" msgstr "kampaň" -#: engine/vibes_auth/emailing/models.py:200 engine/vibes_auth/models.py:146 +#: engine/vibes_auth/emailing/models.py:167 engine/vibes_auth/models.py:183 msgid "user" msgstr "Uživatel" -#: engine/vibes_auth/emailing/models.py:216 +#: engine/vibes_auth/emailing/models.py:183 msgid "opened at" msgstr "otevřeno v" -#: engine/vibes_auth/emailing/models.py:221 +#: engine/vibes_auth/emailing/models.py:188 msgid "clicked at" msgstr "kliknuto na" -#: engine/vibes_auth/emailing/models.py:227 +#: engine/vibes_auth/emailing/models.py:194 msgid "tracking ID" msgstr "sledovací číslo" -#: engine/vibes_auth/emailing/models.py:228 +#: engine/vibes_auth/emailing/models.py:195 msgid "unique ID for tracking opens and clicks" msgstr "jedinečné ID pro sledování otevření a kliknutí" -#: engine/vibes_auth/emailing/models.py:233 +#: engine/vibes_auth/emailing/models.py:200 msgid "error message" msgstr "chybová zpráva" -#: engine/vibes_auth/emailing/models.py:234 +#: engine/vibes_auth/emailing/models.py:201 msgid "error details if sending failed" msgstr "podrobnosti o chybě, pokud se odeslání nezdařilo" -#: engine/vibes_auth/emailing/models.py:238 +#: engine/vibes_auth/emailing/models.py:205 msgid "campaign recipient" msgstr "příjemce kampaně" -#: engine/vibes_auth/emailing/models.py:239 +#: engine/vibes_auth/emailing/models.py:206 msgid "campaign recipients" msgstr "příjemci kampaně" @@ -505,73 +618,73 @@ msgstr "" msgid "Unsubscribe" msgstr "Odhlásit se" -#: engine/vibes_auth/emailing/views.py:71 +#: engine/vibes_auth/emailing/views.py:39 msgid "Unsubscribe token is required." msgstr "Je vyžadován token pro odhlášení." -#: engine/vibes_auth/emailing/views.py:79 +#: engine/vibes_auth/emailing/views.py:47 msgid "Invalid unsubscribe token format." msgstr "Neplatný formát tokenu pro odhlášení." -#: engine/vibes_auth/emailing/views.py:87 +#: engine/vibes_auth/emailing/views.py:55 msgid "User not found." msgstr "Uživatel nebyl nalezen." -#: engine/vibes_auth/emailing/views.py:93 -msgid "You are already unsubscribed." -msgstr "Již jste odhlášeni." - -#: engine/vibes_auth/emailing/views.py:101 -msgid "You have been successfully unsubscribed from our emails." -msgstr "Byli jste úspěšně odhlášeni z odběru našich e-mailů." - -#: engine/vibes_auth/graphene/mutations.py:46 +#: engine/vibes_auth/graphene/mutations.py:47 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "Uuid uživatele s kódem b64, který nám nového uživatele doporučil." -#: engine/vibes_auth/graphene/mutations.py:68 +#: engine/vibes_auth/graphene/mutations.py:70 msgid "password too weak" msgstr "Heslo je příliš slabé" -#: engine/vibes_auth/graphene/mutations.py:128 +#: engine/vibes_auth/graphene/mutations.py:130 msgid "malformed email" msgstr "Špatně formulovaný e-mail" -#: engine/vibes_auth/graphene/mutations.py:140 +#: engine/vibes_auth/graphene/mutations.py:142 #: engine/vibes_auth/serializers.py:117 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Chybně zadané telefonní číslo: {phone_number}!" -#: engine/vibes_auth/graphene/mutations.py:165 +#: engine/vibes_auth/graphene/mutations.py:167 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Nesprávný formát atributu: {attribute_pair}!" -#: engine/vibes_auth/graphene/mutations.py:182 +#: engine/vibes_auth/graphene/mutations.py:184 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} neexistuje: {uuid}!" -#: engine/vibes_auth/graphene/mutations.py:304 -#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180 +#: engine/vibes_auth/graphene/mutations.py:309 +#: engine/vibes_auth/viewsets.py:174 engine/vibes_auth/viewsets.py:198 msgid "activation link is invalid!" msgstr "Aktivační odkaz je neplatný!" -#: engine/vibes_auth/graphene/mutations.py:307 +#: engine/vibes_auth/graphene/mutations.py:312 msgid "account already activated..." msgstr "Účet byl již aktivován..." -#: engine/vibes_auth/graphene/mutations.py:314 -#: engine/vibes_auth/graphene/mutations.py:376 +#: engine/vibes_auth/graphene/mutations.py:319 +#: engine/vibes_auth/graphene/mutations.py:383 msgid "something went wrong: {e!s}" msgstr "Něco se pokazilo: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:358 -#: engine/vibes_auth/viewsets.py:106 +#: engine/vibes_auth/graphene/mutations.py:365 +#: engine/vibes_auth/viewsets.py:109 msgid "token is invalid!" msgstr "Token je neplatný!" +#: engine/vibes_auth/graphene/mutations.py:403 +msgid "only image files are allowed (jpg, png, gif, webp)" +msgstr "Povoleny jsou pouze obrazové soubory (jpg, png, gif, webp)" + +#: engine/vibes_auth/graphene/mutations.py:406 +msgid "file size must not exceed 5 MB" +msgstr "Velikost souboru nesmí překročit 5 MB." + #: engine/vibes_auth/graphene/object_types.py:46 msgid "" "the products this user has viewed most recently (max 48), in " @@ -581,7 +694,7 @@ msgstr "" "opačném pořadí." #: engine/vibes_auth/graphene/object_types.py:49 -#: engine/vibes_auth/models.py:214 +#: engine/vibes_auth/models.py:270 msgid "groups" msgstr "Skupiny" @@ -590,7 +703,7 @@ msgid "wishlist" msgstr "Seznam přání" #: engine/vibes_auth/graphene/object_types.py:56 -#: engine/vibes_auth/models.py:70 +#: engine/vibes_auth/models.py:75 msgid "avatar" msgstr "Avatar" @@ -626,7 +739,7 @@ msgstr "Už hledáme operátora, který vám odpoví, vydržte!" msgid "Assignee must be a staff user." msgstr "Příjemce musí být zaměstnanecký uživatel." -#: engine/vibes_auth/models.py:42 +#: engine/vibes_auth/models.py:44 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -644,123 +757,135 @@ msgstr "" " User je navržen tak, aby zvládal specifické případy použití pro rozšířenou " "správu uživatelů." -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "email" msgstr "E-mail" -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "user email address" msgstr "E-mailová adresa uživatele" -#: engine/vibes_auth/models.py:55 +#: engine/vibes_auth/models.py:57 msgid "phone_number" msgstr "Telefonní číslo" -#: engine/vibes_auth/models.py:60 +#: engine/vibes_auth/models.py:61 msgid "user phone number" msgstr "Telefonní číslo uživatele" -#: engine/vibes_auth/models.py:66 +#: engine/vibes_auth/models.py:68 msgid "first_name" msgstr "Křestní jméno" -#: engine/vibes_auth/models.py:67 +#: engine/vibes_auth/models.py:71 msgid "last_name" msgstr "Příjmení" -#: engine/vibes_auth/models.py:73 +#: engine/vibes_auth/models.py:78 msgid "user profile image" msgstr "Obrázek profilu uživatele" -#: engine/vibes_auth/models.py:78 +#: engine/vibes_auth/models.py:83 msgid "is verified" msgstr "Je ověřeno" -#: engine/vibes_auth/models.py:79 +#: engine/vibes_auth/models.py:84 msgid "user verification status" msgstr "Stav ověření uživatele" -#: engine/vibes_auth/models.py:82 +#: engine/vibes_auth/models.py:87 msgid "is_active" msgstr "Je aktivní" -#: engine/vibes_auth/models.py:84 +#: engine/vibes_auth/models.py:89 msgid "unselect this instead of deleting accounts" msgstr "Zrušení výběru této možnosti místo odstranění účtů" -#: engine/vibes_auth/models.py:87 +#: engine/vibes_auth/models.py:92 msgid "is_subscribed" msgstr "Je přihlášena k odběru" -#: engine/vibes_auth/models.py:88 +#: engine/vibes_auth/models.py:93 msgid "user's newsletter subscription status" msgstr "Stav odběru newsletteru uživatele" -#: engine/vibes_auth/models.py:92 +#: engine/vibes_auth/models.py:98 msgid "activation token" msgstr "Aktivační token" -#: engine/vibes_auth/models.py:95 +#: engine/vibes_auth/models.py:103 +msgid "activation token created" +msgstr "Aktivační token vytvořen" + +#: engine/vibes_auth/models.py:107 msgid "unsubscribe token" msgstr "token pro odhlášení" -#: engine/vibes_auth/models.py:96 +#: engine/vibes_auth/models.py:108 msgid "token for secure one-click unsubscribe from campaigns" msgstr "token pro bezpečné odhlášení z kampaní jedním kliknutím" -#: engine/vibes_auth/models.py:106 +#: engine/vibes_auth/models.py:118 msgid "attributes" msgstr "Atributy" -#: engine/vibes_auth/models.py:147 +#: engine/vibes_auth/models.py:184 msgid "users" msgstr "Uživatelé" -#: engine/vibes_auth/models.py:154 +#: engine/vibes_auth/models.py:202 +msgid "admin OTP code" +msgstr "Kód OTP správce" + +#: engine/vibes_auth/models.py:203 +msgid "admin OTP codes" +msgstr "Kódy OTP správce" + +#: engine/vibes_auth/models.py:210 msgid "For anonymous threads" msgstr "Pro anonymní vlákna" -#: engine/vibes_auth/models.py:178 +#: engine/vibes_auth/models.py:234 msgid "Chat thread" msgstr "Vlákno chatu" -#: engine/vibes_auth/models.py:179 +#: engine/vibes_auth/models.py:235 msgid "Chat threads" msgstr "Vlákna chatu" -#: engine/vibes_auth/models.py:185 +#: engine/vibes_auth/models.py:241 msgid "provide user or email for anonymous thread." msgstr "zadejte uživatele nebo e-mail pro anonymní vlákno." -#: engine/vibes_auth/models.py:188 +#: engine/vibes_auth/models.py:244 msgid "assignee must be a staff user." msgstr "Příjemce musí být personálním uživatelem." -#: engine/vibes_auth/models.py:206 +#: engine/vibes_auth/models.py:262 msgid "Chat message" msgstr "Zpráva na chatu" -#: engine/vibes_auth/models.py:207 +#: engine/vibes_auth/models.py:263 msgid "Chat messages" msgstr "Zprávy v chatu" -#: engine/vibes_auth/models.py:213 +#: engine/vibes_auth/models.py:269 msgid "group" msgstr "Skupina" -#: engine/vibes_auth/models.py:220 +#: engine/vibes_auth/models.py:276 msgid "outstanding token" msgstr "Vynikající žeton" -#: engine/vibes_auth/models.py:221 +#: engine/vibes_auth/models.py:277 msgid "outstanding tokens" msgstr "Nevyplacené žetony" -#: engine/vibes_auth/models.py:227 +#: engine/vibes_auth/models.py:283 msgid "blacklisted token" msgstr "Token na černé listině" -#: engine/vibes_auth/models.py:228 +#: engine/vibes_auth/models.py:284 msgid "blacklisted tokens" msgstr "Tokeny na černé listině" @@ -802,6 +927,10 @@ msgstr "V tokenu není deklarace uuid uživatele" msgid "user does not exist" msgstr "Uživatel neexistuje" +#: engine/vibes_auth/templates/admin/verify_otp.html:27 +msgid "Verify" +msgstr "Ověřit" + #: engine/vibes_auth/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "Obnovení hesla" @@ -887,12 +1016,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "S pozdravem,
tým %(project_name)s" -#: engine/vibes_auth/utils/emailing.py:24 +#: engine/vibes_auth/utils/emailing.py:27 #, python-brace-format msgid "{settings.PROJECT_NAME} | Activate Account" msgstr "{settings.PROJECT_NAME} | Aktivovat účet" -#: engine/vibes_auth/utils/emailing.py:63 +#: engine/vibes_auth/utils/emailing.py:66 #, python-brace-format msgid "{settings.PROJECT_NAME} | Reset Password" msgstr "{settings.PROJECT_NAME} | Obnovit heslo" @@ -946,7 +1075,7 @@ msgstr "" msgid "the token is invalid" msgstr "Token je neplatný" -#: engine/vibes_auth/viewsets.py:44 +#: engine/vibes_auth/viewsets.py:47 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." @@ -954,10 +1083,18 @@ 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." -#: engine/vibes_auth/viewsets.py:113 +#: engine/vibes_auth/viewsets.py:116 msgid "password reset successfully" msgstr "Heslo bylo úspěšně resetováno!" -#: engine/vibes_auth/viewsets.py:161 +#: engine/vibes_auth/viewsets.py:146 +msgid "" +"Account already registered but not yet activated. A new activation email has" +" been sent." +msgstr "" +"Účet již byl zaregistrován, ale ještě nebyl aktivován. Byl odeslán nový " +"aktivační e-mail." + +#: engine/vibes_auth/viewsets.py:179 msgid "account already activated!" msgstr "Účet jste již aktivovali..." diff --git a/engine/vibes_auth/locale/da_DK/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/da_DK/LC_MESSAGES/django.mo index 42d67c77..af7d06c6 100644 Binary files a/engine/vibes_auth/locale/da_DK/LC_MESSAGES/django.mo and b/engine/vibes_auth/locale/da_DK/LC_MESSAGES/django.mo differ diff --git a/engine/vibes_auth/locale/da_DK/LC_MESSAGES/django.po b/engine/vibes_auth/locale/da_DK/LC_MESSAGES/django.po index b3adc9cd..54681eaa 100644 --- a/engine/vibes_auth/locale/da_DK/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/da_DK/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 03:06+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,32 +13,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:65 engine/vibes_auth/admin.py:66 +#: engine/vibes_auth/admin.py:64 engine/vibes_auth/admin.py:65 #: engine/vibes_auth/graphene/object_types.py:54 msgid "balance" msgstr "Balance" -#: engine/vibes_auth/admin.py:74 +#: engine/vibes_auth/admin.py:73 msgid "order" msgstr "Bestil" -#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:51 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:51 msgid "orders" msgstr "Bestillinger" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:84 msgid "personal info" msgstr "Personlig information" -#: engine/vibes_auth/admin.py:89 engine/vibes_auth/graphene/object_types.py:50 +#: engine/vibes_auth/admin.py:88 engine/vibes_auth/graphene/object_types.py:50 msgid "permissions" msgstr "Tilladelser" -#: engine/vibes_auth/admin.py:102 +#: engine/vibes_auth/admin.py:101 msgid "important dates" msgstr "Vigtige datoer" -#: engine/vibes_auth/admin.py:103 +#: engine/vibes_auth/admin.py:102 msgid "additional info" msgstr "Yderligere information" @@ -54,79 +54,83 @@ msgstr "Luk udvalgte tråde" msgid "Open selected threads" msgstr "Åbn udvalgte tråde" -#: engine/vibes_auth/admin.py:208 -msgid "Preview" -msgstr "Forhåndsvisning" - -#: engine/vibes_auth/admin.py:209 engine/vibes_auth/admin.py:249 -#: engine/vibes_auth/admin.py:326 -msgid "Metadata" -msgstr "Metadata" - -#: engine/vibes_auth/admin.py:212 -msgid "preview" -msgstr "forhåndsvisning" - -#: engine/vibes_auth/admin.py:221 -msgid "image preview" -msgstr "billedforhåndsvisning" - -#: engine/vibes_auth/admin.py:241 +#: engine/vibes_auth/admin.py:209 msgid "Content" msgstr "Indhold" -#: engine/vibes_auth/admin.py:243 +#: engine/vibes_auth/admin.py:211 msgid "Documentation" msgstr "Dokumentation" -#: engine/vibes_auth/admin.py:313 +#: engine/vibes_auth/admin.py:217 engine/vibes_auth/admin.py:294 +msgid "Metadata" +msgstr "Metadata" + +#: engine/vibes_auth/admin.py:281 msgid "Scheduling" msgstr "Planlægning" -#: engine/vibes_auth/admin.py:315 +#: engine/vibes_auth/admin.py:283 msgid "Statistics" msgstr "Statistik" -#: engine/vibes_auth/admin.py:329 +#: engine/vibes_auth/admin.py:297 msgid "stats" msgstr "tilstand" -#: engine/vibes_auth/admin.py:335 +#: engine/vibes_auth/admin.py:303 msgid "Prepare recipients (subscribed users)" msgstr "Forbered modtagere (abonnenter)" -#: engine/vibes_auth/admin.py:343 +#: engine/vibes_auth/admin.py:311 msgid "Campaign '{}' is not in draft status." msgstr "Kampagnen '{}' er ikke i udkaststatus." -#: engine/vibes_auth/admin.py:350 +#: engine/vibes_auth/admin.py:318 msgid "Preparing recipients for campaign '{}'." msgstr "Forberedelse af modtagere til kampagnen '{}'." -#: engine/vibes_auth/admin.py:354 +#: engine/vibes_auth/admin.py:322 msgid "Send campaign now" msgstr "Send kampagne nu" -#: engine/vibes_auth/admin.py:362 +#: engine/vibes_auth/admin.py:330 msgid "Campaign '{}' cannot be sent (status: {})." msgstr "Kampagnen '{}' kan ikke sendes (status: {})." -#: engine/vibes_auth/admin.py:372 +#: engine/vibes_auth/admin.py:340 msgid "Campaign '{}' has no recipients. Prepare recipients first." msgstr "Kampagnen '{}' har ingen modtagere. Forbered først modtagerne." -#: engine/vibes_auth/admin.py:383 +#: engine/vibes_auth/admin.py:351 msgid "Started sending campaign '{}'." msgstr "Startede med at sende kampagnen '{}'." -#: engine/vibes_auth/admin.py:387 +#: engine/vibes_auth/admin.py:355 msgid "Cancel campaign" msgstr "Annuller kampagne" -#: engine/vibes_auth/admin.py:396 +#: engine/vibes_auth/admin.py:364 msgid "{} campaign(s) cancelled." msgstr "{} kampagne(r) annulleret." +#: engine/vibes_auth/admin_site.py:24 +msgid "Verification code" +msgstr "Bekræftelseskode" + +#: engine/vibes_auth/admin_site.py:62 +msgid "A verification code has been sent to your email." +msgstr "Der er sendt en bekræftelseskode til din e-mail." + +#: engine/vibes_auth/admin_site.py:118 +msgid "Invalid or expired code. Please try again." +msgstr "Ugyldig eller udløbet kode. Prøv igen." + +#: engine/vibes_auth/admin_site.py:124 +#: engine/vibes_auth/templates/admin/verify_otp.html:10 +msgid "Two-factor authentication" +msgstr "To-faktor-autentificering" + #: engine/vibes_auth/apps.py:8 msgid "Accounting" msgstr "Regnskab" @@ -151,6 +155,145 @@ msgstr "Personale" msgid "System" msgstr "System" +#: engine/vibes_auth/docs/drf/emailing.py:18 +msgid "" +"UUID token for unsubscribing. This token is unique per user and is included " +"in the unsubscribe link of every campaign email. The token remains constant " +"for each user unless regenerated." +msgstr "" +"UUID-token til afmelding. Denne token er unik for hver bruger og er " +"inkluderet i afmeldingslinket i hver kampagne-e-mail. Token forbliver " +"konstant for hver bruger, medmindre den genoprettes." + +#: engine/vibes_auth/docs/drf/emailing.py:37 +#: engine/vibes_auth/emailing/views.py:69 +msgid "You have been successfully unsubscribed from our emails." +msgstr "Du er nu afmeldt vores e-mails." + +#: engine/vibes_auth/docs/drf/emailing.py:45 +#: engine/vibes_auth/emailing/views.py:61 +msgid "You are already unsubscribed." +msgstr "Du er allerede afmeldt." + +#: engine/vibes_auth/docs/drf/emailing.py:52 +msgid "Unsubscribe from email campaigns" +msgstr "Afmeld e-mailkampagner" + +#: engine/vibes_auth/docs/drf/emailing.py:54 +msgid "" +"Unsubscribe a user from all marketing email campaigns using their unique unsubscribe token.\n" +"\n" +"This endpoint is designed for email client compatibility where clicking a link triggers a GET request. The user will no longer receive promotional emails after successful unsubscription.\n" +"\n" +"**Note:** Transactional emails (order confirmations, password resets, etc.) are not affected by this setting." +msgstr "" +"Afmeld en bruger fra alle marketing-e-mailkampagner ved hjælp af deres " +"unikke afmeldingstoken. Dette slutpunkt er designet til " +"e-mailklientkompatibilitet, hvor et klik på et link udløser en GET-" +"anmodning. Brugeren vil ikke længere modtage salgsfremmende e-mails efter en" +" vellykket afmelding. **Bemærk:** Transaktions-e-mails (ordrebekræftelser, " +"nulstilling af adgangskode osv.) påvirkes ikke af denne indstilling." + +#: engine/vibes_auth/docs/drf/emailing.py:66 +#: engine/vibes_auth/docs/drf/emailing.py:146 +msgid "Successfully unsubscribed from email campaigns." +msgstr "Du er nu afmeldt e-mailkampagner." + +#: engine/vibes_auth/docs/drf/emailing.py:82 +#: engine/vibes_auth/docs/drf/emailing.py:162 +msgid "Invalid or missing unsubscribe token." +msgstr "Ugyldigt eller manglende afmeldingstoken." + +#: engine/vibes_auth/docs/drf/emailing.py:96 +#: engine/vibes_auth/docs/drf/emailing.py:176 +msgid "User associated with the token was not found." +msgstr "Brugeren, der er knyttet til tokenet, blev ikke fundet." + +#: engine/vibes_auth/docs/drf/emailing.py:118 +msgid "One-Click Unsubscribe (RFC 8058)" +msgstr "Afmelding med et enkelt klik (RFC 8058)" + +#: engine/vibes_auth/docs/drf/emailing.py:120 +msgid "" +"RFC 8058 compliant one-click unsubscribe endpoint for email campaigns.\n" +"\n" +"This endpoint supports the List-Unsubscribe-Post header mechanism defined in RFC 8058, which allows email clients to unsubscribe users with a single click without leaving the email application.\n" +"\n" +"The token can be provided either as a query parameter or in the request body.\n" +"\n" +"**Standards Compliance:**\n" +"- RFC 8058: Signaling One-Click Functionality for List Email Headers\n" +"- RFC 2369: The Use of URLs as Meta-Syntax for Core Mail List Commands\n" +"\n" +"**Note:** Transactional emails are not affected by this setting." +msgstr "" +"RFC 8058-kompatibel endpoint til afmelding med et enkelt klik til e-mailkampagner. Denne endpoint understøtter List-Unsubscribe-Post-header-mekanismen, der er defineret i RFC 8058, som gør det muligt for e-mailklienter at afmelde brugere med et enkelt klik uden at forlade e-mailapplikationen. Token kan leveres enten som en forespørgselsparameter eller i forespørgselsteksten.\n" +"\n" +"**Overholdelse af standarder:** - RFC 8058: Signaling One-Click Functionality for List Email Headers - RFC 2369: The Use of URLs as Meta-Syntax for Core Mail List Commands **Bemærk:** Transaktions-e-mails påvirkes ikke af denne indstilling." + +#: engine/vibes_auth/docs/drf/emailing.py:137 +msgid "" +"Unsubscribe token (alternative to query parameter). Can be omitted if token " +"is provided in URL." +msgstr "" +"Afmeldingstoken (alternativ til forespørgselsparameter). Kan udelades, hvis " +"token er angivet i URL'en." + +#: engine/vibes_auth/docs/drf/emailing.py:200 +msgid "Track email open event" +msgstr "Spor e-mail-åbningsbegivenhed" + +#: engine/vibes_auth/docs/drf/emailing.py:202 +msgid "" +"Records when a campaign email is opened by the recipient.\n" +"\n" +"This endpoint is called automatically when the tracking pixel (1x1 transparent GIF) embedded in the email is loaded by the recipient's email client.\n" +"\n" +"**How it works:**\n" +"1. Each campaign email contains a unique tracking pixel URL with a `tid` parameter\n" +"2. When the email is opened and images are loaded, this endpoint is called\n" +"3. The recipient's status is updated to 'opened' and the timestamp is recorded\n" +"4. The campaign's aggregate opened count is updated\n" +"\n" +"**Privacy considerations:**\n" +"- Only the first open is recorded (subsequent opens are ignored)\n" +"- No personal information beyond the tracking ID is logged\n" +"- Users who disable image loading will not trigger this event\n" +"\n" +"**Response:**\n" +"Returns a 1x1 transparent GIF image regardless of whether tracking succeeded, to ensure consistent behavior and prevent information leakage." +msgstr "" +"Registrerer, når en kampagne-e-mail åbnes af modtageren. Dette endpoint kaldes automatisk, når sporingspixlen (1x1 transparent GIF), der er indlejret i e-mailen, indlæses af modtagerens e-mail-klient.\n" +"\n" +"**Sådan fungerer det:** 1. Hver kampagne-e-mail indeholder en unik sporingspixel-URL med en `tid`-parameter. 2. Når e-mailen åbnes og billederne indlæses, kaldes dette slutpunkt. 3. Modtagerens status opdateres til 'åbnet', og tidsstemplet registreres. 4. Kampagnens samlede antal åbninger opdateres. **Overvejelser vedrørende privatlivets fred:**\n" +"- Kun den første åbning registreres (efterfølgende åbninger ignoreres) - Der logges ingen personlige oplysninger ud over sporings-id'et - Brugere, der deaktiverer billedindlæsning, udløser ikke denne begivenhed **Svar:** Returnerer et 1x1 transparent GIF-billede, uanset om sporingen lykkedes, for at sikre ensartet adfærd og forhindre informationslækage." + +#: engine/vibes_auth/docs/drf/emailing.py:223 +msgid "" +"Tracking ID (UUID) unique to each campaign-recipient combination. This ID " +"links the open event to a specific recipient and campaign." +msgstr "" +"Sporings-ID (UUID), der er unikt for hver kombination af kampagne og " +"modtager. Dette ID knytter åbningsbegivenheden til en bestemt modtager og " +"kampagne." + +#: engine/vibes_auth/docs/drf/emailing.py:241 +msgid "" +"1x1 transparent GIF image. Always returned regardless of tracking status to " +"maintain consistent behavior." +msgstr "" +"1x1 gennemsigtigt GIF-billede. Returneres altid uanset sporingsstatus for at" +" opretholde ensartet adfærd." + +#: engine/vibes_auth/docs/drf/emailing.py:247 +msgid "" +"Returned when no tracking ID is provided. Note: Invalid tracking IDs still " +"return 200 with the GIF to prevent enumeration attacks." +msgstr "" +"Returneres, når der ikke angives noget sporings-ID. Bemærk: Ugyldige " +"sporings-ID'er returnerer stadig 200 med GIF for at forhindre " +"enumerationsangreb." + #: engine/vibes_auth/docs/drf/messaging.py:17 msgid "User messages entrypoint" msgstr "Indgangspunkt for brugermeddelelser" @@ -246,9 +389,9 @@ msgid "confirm a user's password reset" msgstr "Bekræft nulstilling af en brugers adgangskode" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:351 +#: engine/vibes_auth/graphene/mutations.py:358 #: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107 -#: engine/vibes_auth/viewsets.py:94 +#: engine/vibes_auth/viewsets.py:97 msgid "passwords do not match" msgstr "Adgangskoderne stemmer ikke overens" @@ -301,196 +444,167 @@ msgstr "Åbnet" msgid "Clicked" msgstr "Klikket" -#: engine/vibes_auth/emailing/models.py:35 -#: engine/vibes_auth/emailing/models.py:71 -#: engine/vibes_auth/emailing/models.py:121 +#: engine/vibes_auth/emailing/models.py:38 +#: engine/vibes_auth/emailing/models.py:88 msgid "name" msgstr "navn" -#: engine/vibes_auth/emailing/models.py:36 -msgid "descriptive name for the image" -msgstr "beskrivende navn for billedet" - -#: engine/vibes_auth/emailing/models.py:40 -msgid "image" -msgstr "billede" - -#: engine/vibes_auth/emailing/models.py:41 -msgid "image file to use in email templates" -msgstr "billedfil til brug i e-mailskabeloner" - -#: engine/vibes_auth/emailing/models.py:47 -msgid "alt text" -msgstr "andet tekst" - -#: engine/vibes_auth/emailing/models.py:48 -msgid "alternative text for accessibility" -msgstr "alternativ tekst for tilgængelighed" - -#: engine/vibes_auth/emailing/models.py:52 -msgid "email image" -msgstr "e-mail-billede" - -#: engine/vibes_auth/emailing/models.py:53 -msgid "email images" -msgstr "e-mail-billeder" - -#: engine/vibes_auth/emailing/models.py:72 +#: engine/vibes_auth/emailing/models.py:39 msgid "internal name for the template" msgstr "internt navn for skabelonen" -#: engine/vibes_auth/emailing/models.py:76 +#: engine/vibes_auth/emailing/models.py:43 msgid "slug" msgstr "tjenere" -#: engine/vibes_auth/emailing/models.py:77 +#: engine/vibes_auth/emailing/models.py:44 msgid "unique identifier for the template" msgstr "unik identifikator for skabelonen" -#: engine/vibes_auth/emailing/models.py:81 +#: engine/vibes_auth/emailing/models.py:48 msgid "subject" msgstr "emne" -#: engine/vibes_auth/emailing/models.py:82 +#: engine/vibes_auth/emailing/models.py:49 msgid "email subject line - supports {{ variables }}" msgstr "e-mail-emnelinje - understøtter {{ variables }}" -#: engine/vibes_auth/emailing/models.py:85 -msgid "HTML content" -msgstr "HTML-indhold" +#: engine/vibes_auth/emailing/models.py:52 +msgid "content" +msgstr "indhold" -#: engine/vibes_auth/emailing/models.py:87 +#: engine/vibes_auth/emailing/models.py:54 msgid "" -"email body content - supports {{ user.first_name }}, {{ user.email }}, {{ " -"project_name }}, {{ unsubscribe_url }}" +"email body in markdown - supports {{ user.first_name }}, {{ user.email }}, " +"{{ project_name }}, {{ unsubscribe_url }}" msgstr "" "e-mail-indhold - understøtter {{ user.first_name }}, {{ user.email }}, {{ " "project_name }}, {{ unsubscribe_url }}" -#: engine/vibes_auth/emailing/models.py:94 +#: engine/vibes_auth/emailing/models.py:61 msgid "plain text content" msgstr "almindeligt tekstindhold" -#: engine/vibes_auth/emailing/models.py:95 +#: engine/vibes_auth/emailing/models.py:62 msgid "plain text fallback (auto-generated if empty)" msgstr "plain text fallback (genereres automatisk, hvis feltet er tomt)" -#: engine/vibes_auth/emailing/models.py:100 +#: engine/vibes_auth/emailing/models.py:67 msgid "available variables" msgstr "tilgængelige variabler" -#: engine/vibes_auth/emailing/models.py:101 +#: engine/vibes_auth/emailing/models.py:68 msgid "documentation of available template variables" msgstr "dokumentation af tilgængelige skabelonvariabler" -#: engine/vibes_auth/emailing/models.py:105 +#: engine/vibes_auth/emailing/models.py:72 msgid "email template" msgstr "e-mail-skabelon" -#: engine/vibes_auth/emailing/models.py:106 +#: engine/vibes_auth/emailing/models.py:73 msgid "email templates" msgstr "e-mail-skabeloner" -#: engine/vibes_auth/emailing/models.py:122 +#: engine/vibes_auth/emailing/models.py:89 msgid "internal name for the campaign" msgstr "internt navn for kampagnen" -#: engine/vibes_auth/emailing/models.py:129 +#: engine/vibes_auth/emailing/models.py:96 msgid "template" msgstr "skabelon" -#: engine/vibes_auth/emailing/models.py:130 +#: engine/vibes_auth/emailing/models.py:97 msgid "email template to use for this campaign" msgstr "e-mailskabelon til brug for denne kampagne" -#: engine/vibes_auth/emailing/models.py:136 -#: engine/vibes_auth/emailing/models.py:206 +#: engine/vibes_auth/emailing/models.py:103 +#: engine/vibes_auth/emailing/models.py:173 msgid "status" msgstr "status" -#: engine/vibes_auth/emailing/models.py:141 +#: engine/vibes_auth/emailing/models.py:108 msgid "scheduled at" msgstr "planlagt til" -#: engine/vibes_auth/emailing/models.py:142 +#: engine/vibes_auth/emailing/models.py:109 msgid "when to send the campaign (leave empty for manual send)" msgstr "" "hvornår kampagnen skal sendes (lad feltet være tomt for manuel afsendelse)" -#: engine/vibes_auth/emailing/models.py:147 -#: engine/vibes_auth/emailing/models.py:211 +#: engine/vibes_auth/emailing/models.py:114 +#: engine/vibes_auth/emailing/models.py:178 msgid "sent at" msgstr "sent det" -#: engine/vibes_auth/emailing/models.py:148 +#: engine/vibes_auth/emailing/models.py:115 msgid "when the campaign was actually sent" msgstr "når kampagnen faktisk blev sendt" -#: engine/vibes_auth/emailing/models.py:153 +#: engine/vibes_auth/emailing/models.py:120 msgid "total recipients" msgstr "samlet antal modtagere" -#: engine/vibes_auth/emailing/models.py:157 +#: engine/vibes_auth/emailing/models.py:124 msgid "sent count" msgstr "sendt antal" -#: engine/vibes_auth/emailing/models.py:161 +#: engine/vibes_auth/emailing/models.py:128 msgid "failed count" msgstr "fejl i optællingen" -#: engine/vibes_auth/emailing/models.py:165 +#: engine/vibes_auth/emailing/models.py:132 msgid "opened count" msgstr "åben optælling" -#: engine/vibes_auth/emailing/models.py:169 +#: engine/vibes_auth/emailing/models.py:136 msgid "clicked count" msgstr "klikket antal" -#: engine/vibes_auth/emailing/models.py:173 +#: engine/vibes_auth/emailing/models.py:140 msgid "email campaign" msgstr "e-mail-kampagne" -#: engine/vibes_auth/emailing/models.py:174 +#: engine/vibes_auth/emailing/models.py:141 msgid "email campaigns" msgstr "e-mail-kampagner" -#: engine/vibes_auth/emailing/models.py:194 +#: engine/vibes_auth/emailing/models.py:161 msgid "campaign" msgstr "kampagne" -#: engine/vibes_auth/emailing/models.py:200 engine/vibes_auth/models.py:146 +#: engine/vibes_auth/emailing/models.py:167 engine/vibes_auth/models.py:183 msgid "user" msgstr "Bruger" -#: engine/vibes_auth/emailing/models.py:216 +#: engine/vibes_auth/emailing/models.py:183 msgid "opened at" msgstr "åbnet kl." -#: engine/vibes_auth/emailing/models.py:221 +#: engine/vibes_auth/emailing/models.py:188 msgid "clicked at" msgstr "klikket på" -#: engine/vibes_auth/emailing/models.py:227 +#: engine/vibes_auth/emailing/models.py:194 msgid "tracking ID" msgstr "sporings-ID" -#: engine/vibes_auth/emailing/models.py:228 +#: engine/vibes_auth/emailing/models.py:195 msgid "unique ID for tracking opens and clicks" msgstr "unik ID til sporing af åbninger og klik" -#: engine/vibes_auth/emailing/models.py:233 +#: engine/vibes_auth/emailing/models.py:200 msgid "error message" msgstr "fejlmeddelelse" -#: engine/vibes_auth/emailing/models.py:234 +#: engine/vibes_auth/emailing/models.py:201 msgid "error details if sending failed" msgstr "fejldetaljer, hvis afsendelsen mislykkedes" -#: engine/vibes_auth/emailing/models.py:238 +#: engine/vibes_auth/emailing/models.py:205 msgid "campaign recipient" msgstr "kampagnemodtager" -#: engine/vibes_auth/emailing/models.py:239 +#: engine/vibes_auth/emailing/models.py:206 msgid "campaign recipients" msgstr "kampagnemodtagere" @@ -507,73 +621,73 @@ msgstr "" msgid "Unsubscribe" msgstr "Afmeld" -#: engine/vibes_auth/emailing/views.py:71 +#: engine/vibes_auth/emailing/views.py:39 msgid "Unsubscribe token is required." msgstr "Afmeldingstoken er påkrævet." -#: engine/vibes_auth/emailing/views.py:79 +#: engine/vibes_auth/emailing/views.py:47 msgid "Invalid unsubscribe token format." msgstr "Ugyldigt format for afmeldingstoken." -#: engine/vibes_auth/emailing/views.py:87 +#: engine/vibes_auth/emailing/views.py:55 msgid "User not found." msgstr "Bruger ikke fundet." -#: engine/vibes_auth/emailing/views.py:93 -msgid "You are already unsubscribed." -msgstr "Du er allerede afmeldt." - -#: engine/vibes_auth/emailing/views.py:101 -msgid "You have been successfully unsubscribed from our emails." -msgstr "Du er nu afmeldt vores e-mails." - -#: engine/vibes_auth/graphene/mutations.py:46 +#: engine/vibes_auth/graphene/mutations.py:47 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "Brugerens b64-kodede uuid, som henviste den nye bruger til os." -#: engine/vibes_auth/graphene/mutations.py:68 +#: engine/vibes_auth/graphene/mutations.py:70 msgid "password too weak" msgstr "Adgangskoden er for svag" -#: engine/vibes_auth/graphene/mutations.py:128 +#: engine/vibes_auth/graphene/mutations.py:130 msgid "malformed email" msgstr "Misdannet e-mail" -#: engine/vibes_auth/graphene/mutations.py:140 +#: engine/vibes_auth/graphene/mutations.py:142 #: engine/vibes_auth/serializers.py:117 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Misdannet telefonnummer: {phone_number}!" -#: engine/vibes_auth/graphene/mutations.py:165 +#: engine/vibes_auth/graphene/mutations.py:167 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Ugyldigt attributformat: {attribute_pair}!" -#: engine/vibes_auth/graphene/mutations.py:182 +#: engine/vibes_auth/graphene/mutations.py:184 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} findes ikke: {uuid}!" -#: engine/vibes_auth/graphene/mutations.py:304 -#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180 +#: engine/vibes_auth/graphene/mutations.py:309 +#: engine/vibes_auth/viewsets.py:174 engine/vibes_auth/viewsets.py:198 msgid "activation link is invalid!" msgstr "Aktiveringslinket er ugyldigt!" -#: engine/vibes_auth/graphene/mutations.py:307 +#: engine/vibes_auth/graphene/mutations.py:312 msgid "account already activated..." msgstr "Kontoen er allerede aktiveret..." -#: engine/vibes_auth/graphene/mutations.py:314 -#: engine/vibes_auth/graphene/mutations.py:376 +#: engine/vibes_auth/graphene/mutations.py:319 +#: engine/vibes_auth/graphene/mutations.py:383 msgid "something went wrong: {e!s}" msgstr "Noget gik galt: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:358 -#: engine/vibes_auth/viewsets.py:106 +#: engine/vibes_auth/graphene/mutations.py:365 +#: engine/vibes_auth/viewsets.py:109 msgid "token is invalid!" msgstr "Token er ugyldig!" +#: engine/vibes_auth/graphene/mutations.py:403 +msgid "only image files are allowed (jpg, png, gif, webp)" +msgstr "Kun billedfiler er tilladt (jpg, png, gif, webp)" + +#: engine/vibes_auth/graphene/mutations.py:406 +msgid "file size must not exceed 5 MB" +msgstr "Filstørrelsen må ikke overstige 5 MB." + #: engine/vibes_auth/graphene/object_types.py:46 msgid "" "the products this user has viewed most recently (max 48), in " @@ -583,7 +697,7 @@ msgstr "" "kronologisk rækkefølge." #: engine/vibes_auth/graphene/object_types.py:49 -#: engine/vibes_auth/models.py:214 +#: engine/vibes_auth/models.py:270 msgid "groups" msgstr "Grupper" @@ -592,7 +706,7 @@ msgid "wishlist" msgstr "Ønskeliste" #: engine/vibes_auth/graphene/object_types.py:56 -#: engine/vibes_auth/models.py:70 +#: engine/vibes_auth/models.py:75 msgid "avatar" msgstr "Avatar" @@ -628,7 +742,7 @@ msgstr "Vi leder allerede efter en operatør, der kan svare dig, så vent!" msgid "Assignee must be a staff user." msgstr "Modtageren skal være en personalebruger." -#: engine/vibes_auth/models.py:42 +#: engine/vibes_auth/models.py:44 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -646,123 +760,135 @@ msgstr "" "aktivering til verificering af konti. User-modellen er designet til at " "håndtere specifikke brugsscenarier for forbedret brugeradministration." -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "email" msgstr "E-mail" -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "user email address" msgstr "Brugerens e-mailadresse" -#: engine/vibes_auth/models.py:55 +#: engine/vibes_auth/models.py:57 msgid "phone_number" msgstr "Telefonnummer" -#: engine/vibes_auth/models.py:60 +#: engine/vibes_auth/models.py:61 msgid "user phone number" msgstr "Brugerens telefonnummer" -#: engine/vibes_auth/models.py:66 +#: engine/vibes_auth/models.py:68 msgid "first_name" msgstr "Fornavn" -#: engine/vibes_auth/models.py:67 +#: engine/vibes_auth/models.py:71 msgid "last_name" msgstr "Efternavn" -#: engine/vibes_auth/models.py:73 +#: engine/vibes_auth/models.py:78 msgid "user profile image" msgstr "Billede af brugerprofil" -#: engine/vibes_auth/models.py:78 +#: engine/vibes_auth/models.py:83 msgid "is verified" msgstr "Er verificeret" -#: engine/vibes_auth/models.py:79 +#: engine/vibes_auth/models.py:84 msgid "user verification status" msgstr "Brugerens verifikationsstatus" -#: engine/vibes_auth/models.py:82 +#: engine/vibes_auth/models.py:87 msgid "is_active" msgstr "Er aktiv" -#: engine/vibes_auth/models.py:84 +#: engine/vibes_auth/models.py:89 msgid "unselect this instead of deleting accounts" msgstr "Fravælg dette i stedet for at slette konti" -#: engine/vibes_auth/models.py:87 +#: engine/vibes_auth/models.py:92 msgid "is_subscribed" msgstr "Er tilmeldt" -#: engine/vibes_auth/models.py:88 +#: engine/vibes_auth/models.py:93 msgid "user's newsletter subscription status" msgstr "Status for brugerens abonnement på nyhedsbrev" -#: engine/vibes_auth/models.py:92 +#: engine/vibes_auth/models.py:98 msgid "activation token" msgstr "Aktiveringstoken" -#: engine/vibes_auth/models.py:95 +#: engine/vibes_auth/models.py:103 +msgid "activation token created" +msgstr "Aktiveringstoken oprettet" + +#: engine/vibes_auth/models.py:107 msgid "unsubscribe token" msgstr "afmeldingstoken" -#: engine/vibes_auth/models.py:96 +#: engine/vibes_auth/models.py:108 msgid "token for secure one-click unsubscribe from campaigns" msgstr "token til sikker afmelding af kampagner med et enkelt klik" -#: engine/vibes_auth/models.py:106 +#: engine/vibes_auth/models.py:118 msgid "attributes" msgstr "Egenskaber" -#: engine/vibes_auth/models.py:147 +#: engine/vibes_auth/models.py:184 msgid "users" msgstr "Brugere" -#: engine/vibes_auth/models.py:154 +#: engine/vibes_auth/models.py:202 +msgid "admin OTP code" +msgstr "Admin OTP-kode" + +#: engine/vibes_auth/models.py:203 +msgid "admin OTP codes" +msgstr "Admin OTP-koder" + +#: engine/vibes_auth/models.py:210 msgid "For anonymous threads" msgstr "Til anonyme tråde" -#: engine/vibes_auth/models.py:178 +#: engine/vibes_auth/models.py:234 msgid "Chat thread" msgstr "Chat-tråd" -#: engine/vibes_auth/models.py:179 +#: engine/vibes_auth/models.py:235 msgid "Chat threads" msgstr "Chat-tråde" -#: engine/vibes_auth/models.py:185 +#: engine/vibes_auth/models.py:241 msgid "provide user or email for anonymous thread." msgstr "Angiv bruger eller e-mail for anonym tråd." -#: engine/vibes_auth/models.py:188 +#: engine/vibes_auth/models.py:244 msgid "assignee must be a staff user." msgstr "modtageren skal være en personalebruger." -#: engine/vibes_auth/models.py:206 +#: engine/vibes_auth/models.py:262 msgid "Chat message" msgstr "Chat-besked" -#: engine/vibes_auth/models.py:207 +#: engine/vibes_auth/models.py:263 msgid "Chat messages" msgstr "Chat-beskeder" -#: engine/vibes_auth/models.py:213 +#: engine/vibes_auth/models.py:269 msgid "group" msgstr "Gruppe" -#: engine/vibes_auth/models.py:220 +#: engine/vibes_auth/models.py:276 msgid "outstanding token" msgstr "Enestående token" -#: engine/vibes_auth/models.py:221 +#: engine/vibes_auth/models.py:277 msgid "outstanding tokens" msgstr "Udestående tokens" -#: engine/vibes_auth/models.py:227 +#: engine/vibes_auth/models.py:283 msgid "blacklisted token" msgstr "Sortlistet token" -#: engine/vibes_auth/models.py:228 +#: engine/vibes_auth/models.py:284 msgid "blacklisted tokens" msgstr "Sortlistede tokens" @@ -805,6 +931,10 @@ msgstr "Ingen bruger-uuid-krav til stede i token" msgid "user does not exist" msgstr "Brugeren findes ikke" +#: engine/vibes_auth/templates/admin/verify_otp.html:27 +msgid "Verify" +msgstr "Bekræft" + #: engine/vibes_auth/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "Nulstil din adgangskode" @@ -889,12 +1019,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "Med venlig hilsen,
teamet %(project_name)s." -#: engine/vibes_auth/utils/emailing.py:24 +#: engine/vibes_auth/utils/emailing.py:27 #, python-brace-format msgid "{settings.PROJECT_NAME} | Activate Account" msgstr "{settings.PROJECT_NAME} | Aktiver konto" -#: engine/vibes_auth/utils/emailing.py:63 +#: engine/vibes_auth/utils/emailing.py:66 #, python-brace-format msgid "{settings.PROJECT_NAME} | Reset Password" msgstr "{settings.PROJECT_NAME} | Nulstil adgangskode" @@ -949,7 +1079,7 @@ msgstr "" msgid "the token is invalid" msgstr "Tokenet er ugyldigt" -#: engine/vibes_auth/viewsets.py:44 +#: engine/vibes_auth/viewsets.py:47 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." @@ -957,10 +1087,18 @@ 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." -#: engine/vibes_auth/viewsets.py:113 +#: engine/vibes_auth/viewsets.py:116 msgid "password reset successfully" msgstr "Adgangskoden er blevet nulstillet med succes!" -#: engine/vibes_auth/viewsets.py:161 +#: engine/vibes_auth/viewsets.py:146 +msgid "" +"Account already registered but not yet activated. A new activation email has" +" been sent." +msgstr "" +"Kontoen er allerede registreret, men endnu ikke aktiveret. Der er sendt en " +"ny aktiveringsmail." + +#: engine/vibes_auth/viewsets.py:179 msgid "account already activated!" msgstr "Du har allerede aktiveret kontoen..." diff --git a/engine/vibes_auth/locale/de_DE/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/de_DE/LC_MESSAGES/django.mo index e92f0a3a..ac315618 100644 Binary files a/engine/vibes_auth/locale/de_DE/LC_MESSAGES/django.mo and b/engine/vibes_auth/locale/de_DE/LC_MESSAGES/django.mo differ diff --git a/engine/vibes_auth/locale/de_DE/LC_MESSAGES/django.po b/engine/vibes_auth/locale/de_DE/LC_MESSAGES/django.po index aa1b817d..78d05fa2 100644 --- a/engine/vibes_auth/locale/de_DE/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/de_DE/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 03:06+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,32 +13,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:65 engine/vibes_auth/admin.py:66 +#: engine/vibes_auth/admin.py:64 engine/vibes_auth/admin.py:65 #: engine/vibes_auth/graphene/object_types.py:54 msgid "balance" msgstr "Waage" -#: engine/vibes_auth/admin.py:74 +#: engine/vibes_auth/admin.py:73 msgid "order" msgstr "Bestellung" -#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:51 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:51 msgid "orders" msgstr "Bestellungen" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:84 msgid "personal info" msgstr "Persönliche Informationen" -#: engine/vibes_auth/admin.py:89 engine/vibes_auth/graphene/object_types.py:50 +#: engine/vibes_auth/admin.py:88 engine/vibes_auth/graphene/object_types.py:50 msgid "permissions" msgstr "Erlaubnisse" -#: engine/vibes_auth/admin.py:102 +#: engine/vibes_auth/admin.py:101 msgid "important dates" msgstr "Wichtige Termine" -#: engine/vibes_auth/admin.py:103 +#: engine/vibes_auth/admin.py:102 msgid "additional info" msgstr "Zusätzliche Informationen" @@ -54,81 +54,85 @@ msgstr "Ausgewählte Threads schließen" msgid "Open selected threads" msgstr "Ausgewählte Themen öffnen" -#: engine/vibes_auth/admin.py:208 -msgid "Preview" -msgstr "Vorschau" - -#: engine/vibes_auth/admin.py:209 engine/vibes_auth/admin.py:249 -#: engine/vibes_auth/admin.py:326 -msgid "Metadata" -msgstr "Metadaten" - -#: engine/vibes_auth/admin.py:212 -msgid "preview" -msgstr "Vorschau" - -#: engine/vibes_auth/admin.py:221 -msgid "image preview" -msgstr "Bildvorschau" - -#: engine/vibes_auth/admin.py:241 +#: engine/vibes_auth/admin.py:209 msgid "Content" msgstr "Inhalt" -#: engine/vibes_auth/admin.py:243 +#: engine/vibes_auth/admin.py:211 msgid "Documentation" msgstr "Dokumentation" -#: engine/vibes_auth/admin.py:313 +#: engine/vibes_auth/admin.py:217 engine/vibes_auth/admin.py:294 +msgid "Metadata" +msgstr "Metadaten" + +#: engine/vibes_auth/admin.py:281 msgid "Scheduling" msgstr "Terminplanung" -#: engine/vibes_auth/admin.py:315 +#: engine/vibes_auth/admin.py:283 msgid "Statistics" msgstr "Statistiken" -#: engine/vibes_auth/admin.py:329 +#: engine/vibes_auth/admin.py:297 msgid "stats" msgstr "Staats" -#: engine/vibes_auth/admin.py:335 +#: engine/vibes_auth/admin.py:303 msgid "Prepare recipients (subscribed users)" msgstr "Empfänger vorbereiten (abonnierte Benutzer)" -#: engine/vibes_auth/admin.py:343 +#: engine/vibes_auth/admin.py:311 msgid "Campaign '{}' is not in draft status." msgstr "Die Kampagne „{}“ befindet sich nicht im Entwurfsstatus." -#: engine/vibes_auth/admin.py:350 +#: engine/vibes_auth/admin.py:318 msgid "Preparing recipients for campaign '{}'." msgstr "Empfänger für Kampagne „{}“ vorbereiten." -#: engine/vibes_auth/admin.py:354 +#: engine/vibes_auth/admin.py:322 msgid "Send campaign now" msgstr "Kampagne jetzt senden" -#: engine/vibes_auth/admin.py:362 +#: engine/vibes_auth/admin.py:330 msgid "Campaign '{}' cannot be sent (status: {})." msgstr "Die Kampagne '{}' kann nicht gesendet werden (Status: {})." -#: engine/vibes_auth/admin.py:372 +#: engine/vibes_auth/admin.py:340 msgid "Campaign '{}' has no recipients. Prepare recipients first." msgstr "" "Die Kampagne „{}“ hat keine Empfänger. Bereiten Sie zunächst die Empfänger " "vor." -#: engine/vibes_auth/admin.py:383 +#: engine/vibes_auth/admin.py:351 msgid "Started sending campaign '{}'." msgstr "Kampagne „{}“ gestartet." -#: engine/vibes_auth/admin.py:387 +#: engine/vibes_auth/admin.py:355 msgid "Cancel campaign" msgstr "Kampagne abbrechen" -#: engine/vibes_auth/admin.py:396 +#: engine/vibes_auth/admin.py:364 msgid "{} campaign(s) cancelled." msgstr "Kampagne(n) abgebrochen." +#: engine/vibes_auth/admin_site.py:24 +msgid "Verification code" +msgstr "Verifizierungscode" + +#: engine/vibes_auth/admin_site.py:62 +msgid "A verification code has been sent to your email." +msgstr "Ein Bestätigungscode wurde an Ihre E-Mail-Adresse gesendet." + +#: engine/vibes_auth/admin_site.py:118 +msgid "Invalid or expired code. Please try again." +msgstr "Ungültiger oder abgelaufener Code. Bitte versuchen Sie es erneut." + +#: engine/vibes_auth/admin_site.py:124 +#: engine/vibes_auth/templates/admin/verify_otp.html:10 +msgid "Two-factor authentication" +msgstr "Zwei-Faktor-Authentifizierung" + #: engine/vibes_auth/apps.py:8 msgid "Accounting" msgstr "Buchhaltung" @@ -153,6 +157,146 @@ msgstr "Personal" msgid "System" msgstr "System" +#: engine/vibes_auth/docs/drf/emailing.py:18 +msgid "" +"UUID token for unsubscribing. This token is unique per user and is included " +"in the unsubscribe link of every campaign email. The token remains constant " +"for each user unless regenerated." +msgstr "" +"UUID-Token zum Abbestellen. Dieses Token ist für jeden Benutzer einzigartig " +"und in jedem Abmeldelink jeder Kampagnen-E-Mail enthalten. Das Token bleibt " +"für jeden Benutzer unverändert, sofern es nicht neu generiert wird." + +#: engine/vibes_auth/docs/drf/emailing.py:37 +#: engine/vibes_auth/emailing/views.py:69 +msgid "You have been successfully unsubscribed from our emails." +msgstr "Sie haben sich erfolgreich von unseren E-Mails abgemeldet." + +#: engine/vibes_auth/docs/drf/emailing.py:45 +#: engine/vibes_auth/emailing/views.py:61 +msgid "You are already unsubscribed." +msgstr "Sie sind bereits abgemeldet." + +#: engine/vibes_auth/docs/drf/emailing.py:52 +msgid "Unsubscribe from email campaigns" +msgstr "E-Mail-Kampagnen abbestellen" + +#: engine/vibes_auth/docs/drf/emailing.py:54 +msgid "" +"Unsubscribe a user from all marketing email campaigns using their unique unsubscribe token.\n" +"\n" +"This endpoint is designed for email client compatibility where clicking a link triggers a GET request. The user will no longer receive promotional emails after successful unsubscription.\n" +"\n" +"**Note:** Transactional emails (order confirmations, password resets, etc.) are not affected by this setting." +msgstr "" +"Melden Sie einen Benutzer mithilfe seines eindeutigen Abmeldetokens von " +"allen Marketing-E-Mail-Kampagnen ab. Dieser Endpunkt ist für die " +"Kompatibilität mit E-Mail-Clients ausgelegt, bei denen das Klicken auf einen" +" Link eine GET-Anfrage auslöst. Nach erfolgreicher Abmeldung erhält der " +"Benutzer keine Werbe-E-Mails mehr. **Hinweis:** Transaktions-E-Mails " +"(Auftragsbestätigungen, Passwortzurücksetzungen usw.) sind von dieser " +"Einstellung nicht betroffen." + +#: engine/vibes_auth/docs/drf/emailing.py:66 +#: engine/vibes_auth/docs/drf/emailing.py:146 +msgid "Successfully unsubscribed from email campaigns." +msgstr "Erfolgreich von E-Mail-Kampagnen abgemeldet." + +#: engine/vibes_auth/docs/drf/emailing.py:82 +#: engine/vibes_auth/docs/drf/emailing.py:162 +msgid "Invalid or missing unsubscribe token." +msgstr "Ungültiges oder fehlendes Abmeldetoken." + +#: engine/vibes_auth/docs/drf/emailing.py:96 +#: engine/vibes_auth/docs/drf/emailing.py:176 +msgid "User associated with the token was not found." +msgstr "Der mit dem Token verknüpfte Benutzer wurde nicht gefunden." + +#: engine/vibes_auth/docs/drf/emailing.py:118 +msgid "One-Click Unsubscribe (RFC 8058)" +msgstr "Abmelden mit einem Klick (RFC 8058)" + +#: engine/vibes_auth/docs/drf/emailing.py:120 +msgid "" +"RFC 8058 compliant one-click unsubscribe endpoint for email campaigns.\n" +"\n" +"This endpoint supports the List-Unsubscribe-Post header mechanism defined in RFC 8058, which allows email clients to unsubscribe users with a single click without leaving the email application.\n" +"\n" +"The token can be provided either as a query parameter or in the request body.\n" +"\n" +"**Standards Compliance:**\n" +"- RFC 8058: Signaling One-Click Functionality for List Email Headers\n" +"- RFC 2369: The Use of URLs as Meta-Syntax for Core Mail List Commands\n" +"\n" +"**Note:** Transactional emails are not affected by this setting." +msgstr "" +"RFC 8058-konformer Endpunkt zum Abbestellen von E-Mail-Kampagnen mit einem Klick. Dieser Endpunkt unterstützt den in RFC 8058 definierten List-Unsubscribe-Post-Header-Mechanismus, mit dem E-Mail-Clients Benutzer mit einem einzigen Klick abmelden können, ohne die E-Mail-Anwendung verlassen zu müssen. Das Token kann entweder als Abfrageparameter oder im Request-Body bereitgestellt werden.\n" +"\n" +"**Standards-Konformität:** - RFC 8058: Signalisierung der Ein-Klick-Funktionalität für E-Mail-Header von Listen - RFC 2369: Verwendung von URLs als Metasyntax für zentrale Mailinglisten-Befehle **Hinweis:** Transaktions-E-Mails sind von dieser Einstellung nicht betroffen." + +#: engine/vibes_auth/docs/drf/emailing.py:137 +msgid "" +"Unsubscribe token (alternative to query parameter). Can be omitted if token " +"is provided in URL." +msgstr "" +"Abmeldungs-Token (Alternative zum Abfrageparameter). Kann weggelassen " +"werden, wenn das Token in der URL angegeben ist." + +#: engine/vibes_auth/docs/drf/emailing.py:200 +msgid "Track email open event" +msgstr "E-Mail-Öffnungsereignis verfolgen" + +#: engine/vibes_auth/docs/drf/emailing.py:202 +msgid "" +"Records when a campaign email is opened by the recipient.\n" +"\n" +"This endpoint is called automatically when the tracking pixel (1x1 transparent GIF) embedded in the email is loaded by the recipient's email client.\n" +"\n" +"**How it works:**\n" +"1. Each campaign email contains a unique tracking pixel URL with a `tid` parameter\n" +"2. When the email is opened and images are loaded, this endpoint is called\n" +"3. The recipient's status is updated to 'opened' and the timestamp is recorded\n" +"4. The campaign's aggregate opened count is updated\n" +"\n" +"**Privacy considerations:**\n" +"- Only the first open is recorded (subsequent opens are ignored)\n" +"- No personal information beyond the tracking ID is logged\n" +"- Users who disable image loading will not trigger this event\n" +"\n" +"**Response:**\n" +"Returns a 1x1 transparent GIF image regardless of whether tracking succeeded, to ensure consistent behavior and prevent information leakage." +msgstr "" +"Zeichnet auf, wenn eine Kampagnen-E-Mail vom Empfänger geöffnet wird. Dieser Endpunkt wird automatisch aufgerufen, wenn das in der E-Mail eingebettete Tracking-Pixel (1x1 transparentes GIF) vom E-Mail-Client des Empfängers geladen wird.\n" +"\n" +"**So funktioniert es:** 1. Jede Kampagnen-E-Mail enthält eine eindeutige Tracking-Pixel-URL mit einem „tid”-Parameter. 2. Wenn die E-Mail geöffnet und die Bilder geladen werden, wird dieser Endpunkt aufgerufen. 3. Der Status des Empfängers wird auf „geöffnet” aktualisiert und der Zeitstempel wird aufgezeichnet. 4. Die Gesamtzahl der geöffneten E-Mails der Kampagne wird aktualisiert. **Datenschutzhinweise:**\n" +"- Nur das erste Öffnen wird aufgezeichnet (nachfolgende Öffnungen werden ignoriert). - Außer der Tracking-ID werden keine personenbezogenen Daten protokolliert. - Benutzer, die das Laden von Bildern deaktivieren, lösen dieses Ereignis nicht aus. **Antwort:** Gibt unabhängig vom Erfolg des Trackings ein transparentes 1x1-GIF-Bild zurück, um ein konsistentes Verhalten zu gewährleisten und Informationslecks zu verhindern." + +#: engine/vibes_auth/docs/drf/emailing.py:223 +msgid "" +"Tracking ID (UUID) unique to each campaign-recipient combination. This ID " +"links the open event to a specific recipient and campaign." +msgstr "" +"Tracking-ID (UUID), die für jede Kombination aus Kampagne und Empfänger " +"einzigartig ist. Diese ID verknüpft das Öffnen der E-Mail mit einem " +"bestimmten Empfänger und einer bestimmten Kampagne." + +#: engine/vibes_auth/docs/drf/emailing.py:241 +msgid "" +"1x1 transparent GIF image. Always returned regardless of tracking status to " +"maintain consistent behavior." +msgstr "" +"1x1 transparentes GIF-Bild. Wird unabhängig vom Tracking-Status immer " +"zurückgegeben, um ein konsistentes Verhalten zu gewährleisten." + +#: engine/vibes_auth/docs/drf/emailing.py:247 +msgid "" +"Returned when no tracking ID is provided. Note: Invalid tracking IDs still " +"return 200 with the GIF to prevent enumeration attacks." +msgstr "" +"Wird zurückgegeben, wenn keine Tracking-ID angegeben wurde. Hinweis: " +"Ungültige Tracking-IDs geben weiterhin 200 mit dem GIF zurück, um " +"Enumerationsangriffe zu verhindern." + #: engine/vibes_auth/docs/drf/messaging.py:17 msgid "User messages entrypoint" msgstr "User messages entrypoint" @@ -249,9 +393,9 @@ msgid "confirm a user's password reset" msgstr "Bestätigen Sie das Zurücksetzen des Passworts eines Benutzers" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:351 +#: engine/vibes_auth/graphene/mutations.py:358 #: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107 -#: engine/vibes_auth/viewsets.py:94 +#: engine/vibes_auth/viewsets.py:97 msgid "passwords do not match" msgstr "Passwörter stimmen nicht überein" @@ -305,196 +449,167 @@ msgstr "Geöffnet" msgid "Clicked" msgstr "Geklickt" -#: engine/vibes_auth/emailing/models.py:35 -#: engine/vibes_auth/emailing/models.py:71 -#: engine/vibes_auth/emailing/models.py:121 +#: engine/vibes_auth/emailing/models.py:38 +#: engine/vibes_auth/emailing/models.py:88 msgid "name" msgstr "Name" -#: engine/vibes_auth/emailing/models.py:36 -msgid "descriptive name for the image" -msgstr "beschreibender Name für das Bild" - -#: engine/vibes_auth/emailing/models.py:40 -msgid "image" -msgstr "Bild" - -#: engine/vibes_auth/emailing/models.py:41 -msgid "image file to use in email templates" -msgstr "Bilddatei zur Verwendung in E-Mail-Vorlagen" - -#: engine/vibes_auth/emailing/models.py:47 -msgid "alt text" -msgstr "anderer Text" - -#: engine/vibes_auth/emailing/models.py:48 -msgid "alternative text for accessibility" -msgstr "Alternativtext für Barrierefreiheit" - -#: engine/vibes_auth/emailing/models.py:52 -msgid "email image" -msgstr "E-Mail-Bild" - -#: engine/vibes_auth/emailing/models.py:53 -msgid "email images" -msgstr "E-Mail-Bilder" - -#: engine/vibes_auth/emailing/models.py:72 +#: engine/vibes_auth/emailing/models.py:39 msgid "internal name for the template" msgstr "interner Name für die Vorlage" -#: engine/vibes_auth/emailing/models.py:76 +#: engine/vibes_auth/emailing/models.py:43 msgid "slug" msgstr "slug" -#: engine/vibes_auth/emailing/models.py:77 +#: engine/vibes_auth/emailing/models.py:44 msgid "unique identifier for the template" msgstr "Eindeutige Kennung für die Vorlage" -#: engine/vibes_auth/emailing/models.py:81 +#: engine/vibes_auth/emailing/models.py:48 msgid "subject" msgstr "Thema" -#: engine/vibes_auth/emailing/models.py:82 +#: engine/vibes_auth/emailing/models.py:49 msgid "email subject line - supports {{ variables }}" msgstr "E-Mail-Betreffzeile – unterstützt {{ variables }}" -#: engine/vibes_auth/emailing/models.py:85 -msgid "HTML content" -msgstr "HTML-Inhalt" +#: engine/vibes_auth/emailing/models.py:52 +msgid "content" +msgstr "Inhalt" -#: engine/vibes_auth/emailing/models.py:87 +#: engine/vibes_auth/emailing/models.py:54 msgid "" -"email body content - supports {{ user.first_name }}, {{ user.email }}, {{ " -"project_name }}, {{ unsubscribe_url }}" +"email body in markdown - supports {{ user.first_name }}, {{ user.email }}, " +"{{ project_name }}, {{ unsubscribe_url }}" msgstr "" "E-Mail-Textinhalt – unterstützt {{ user.first_name }}, {{ user.email }}, {{ " "project_name }}, {{ unsubscribe_url }}" -#: engine/vibes_auth/emailing/models.py:94 +#: engine/vibes_auth/emailing/models.py:61 msgid "plain text content" msgstr "Klartextinhalt" -#: engine/vibes_auth/emailing/models.py:95 +#: engine/vibes_auth/emailing/models.py:62 msgid "plain text fallback (auto-generated if empty)" msgstr "Fallback für Klartext (wird automatisch generiert, wenn leer)" -#: engine/vibes_auth/emailing/models.py:100 +#: engine/vibes_auth/emailing/models.py:67 msgid "available variables" msgstr "verfügbare Variablen" -#: engine/vibes_auth/emailing/models.py:101 +#: engine/vibes_auth/emailing/models.py:68 msgid "documentation of available template variables" msgstr "Dokumentation der verfügbaren Vorlagenvariablen" -#: engine/vibes_auth/emailing/models.py:105 +#: engine/vibes_auth/emailing/models.py:72 msgid "email template" msgstr "E-Mail-Vorlage" -#: engine/vibes_auth/emailing/models.py:106 +#: engine/vibes_auth/emailing/models.py:73 msgid "email templates" msgstr "E-Mail-Vorlagen" -#: engine/vibes_auth/emailing/models.py:122 +#: engine/vibes_auth/emailing/models.py:89 msgid "internal name for the campaign" msgstr "Interner Name für die Kampagne" -#: engine/vibes_auth/emailing/models.py:129 +#: engine/vibes_auth/emailing/models.py:96 msgid "template" msgstr "Vorlage" -#: engine/vibes_auth/emailing/models.py:130 +#: engine/vibes_auth/emailing/models.py:97 msgid "email template to use for this campaign" msgstr "E-Mail-Vorlage für diese Kampagne" -#: engine/vibes_auth/emailing/models.py:136 -#: engine/vibes_auth/emailing/models.py:206 +#: engine/vibes_auth/emailing/models.py:103 +#: engine/vibes_auth/emailing/models.py:173 msgid "status" msgstr "Status" -#: engine/vibes_auth/emailing/models.py:141 +#: engine/vibes_auth/emailing/models.py:108 msgid "scheduled at" msgstr "geplant für" -#: engine/vibes_auth/emailing/models.py:142 +#: engine/vibes_auth/emailing/models.py:109 msgid "when to send the campaign (leave empty for manual send)" msgstr "" "Wann soll die Kampagne versendet werden (für manuellen Versand leer lassen)?" -#: engine/vibes_auth/emailing/models.py:147 -#: engine/vibes_auth/emailing/models.py:211 +#: engine/vibes_auth/emailing/models.py:114 +#: engine/vibes_auth/emailing/models.py:178 msgid "sent at" msgstr "spät als" -#: engine/vibes_auth/emailing/models.py:148 +#: engine/vibes_auth/emailing/models.py:115 msgid "when the campaign was actually sent" msgstr "als die Kampagne tatsächlich verschickt wurde" -#: engine/vibes_auth/emailing/models.py:153 +#: engine/vibes_auth/emailing/models.py:120 msgid "total recipients" msgstr "Gesamtzahl der Empfänger" -#: engine/vibes_auth/emailing/models.py:157 +#: engine/vibes_auth/emailing/models.py:124 msgid "sent count" msgstr "Gesendete Anzahl" -#: engine/vibes_auth/emailing/models.py:161 +#: engine/vibes_auth/emailing/models.py:128 msgid "failed count" msgstr "fehlgeschlagene Zählung" -#: engine/vibes_auth/emailing/models.py:165 +#: engine/vibes_auth/emailing/models.py:132 msgid "opened count" msgstr "geöffnete Zählung" -#: engine/vibes_auth/emailing/models.py:169 +#: engine/vibes_auth/emailing/models.py:136 msgid "clicked count" msgstr "Klickzahl" -#: engine/vibes_auth/emailing/models.py:173 +#: engine/vibes_auth/emailing/models.py:140 msgid "email campaign" msgstr "E-Mail-Kampagne" -#: engine/vibes_auth/emailing/models.py:174 +#: engine/vibes_auth/emailing/models.py:141 msgid "email campaigns" msgstr "E-Mail-Kampagnen" -#: engine/vibes_auth/emailing/models.py:194 +#: engine/vibes_auth/emailing/models.py:161 msgid "campaign" msgstr "Kampagne" -#: engine/vibes_auth/emailing/models.py:200 engine/vibes_auth/models.py:146 +#: engine/vibes_auth/emailing/models.py:167 engine/vibes_auth/models.py:183 msgid "user" msgstr "Benutzer" -#: engine/vibes_auth/emailing/models.py:216 +#: engine/vibes_auth/emailing/models.py:183 msgid "opened at" msgstr "eröffnet am" -#: engine/vibes_auth/emailing/models.py:221 +#: engine/vibes_auth/emailing/models.py:188 msgid "clicked at" msgstr "angeklickt" -#: engine/vibes_auth/emailing/models.py:227 +#: engine/vibes_auth/emailing/models.py:194 msgid "tracking ID" msgstr "Tracking-ID" -#: engine/vibes_auth/emailing/models.py:228 +#: engine/vibes_auth/emailing/models.py:195 msgid "unique ID for tracking opens and clicks" msgstr "Eindeutige ID zur Nachverfolgung von Öffnungen und Klicks" -#: engine/vibes_auth/emailing/models.py:233 +#: engine/vibes_auth/emailing/models.py:200 msgid "error message" msgstr "Fehlermeldung" -#: engine/vibes_auth/emailing/models.py:234 +#: engine/vibes_auth/emailing/models.py:201 msgid "error details if sending failed" msgstr "Fehlerdetails, wenn der Versand fehlgeschlagen ist" -#: engine/vibes_auth/emailing/models.py:238 +#: engine/vibes_auth/emailing/models.py:205 msgid "campaign recipient" msgstr "Kampagnenempfänger" -#: engine/vibes_auth/emailing/models.py:239 +#: engine/vibes_auth/emailing/models.py:206 msgid "campaign recipients" msgstr "Empfänger der Kampagne" @@ -512,75 +627,75 @@ msgstr "" msgid "Unsubscribe" msgstr "Abmelden" -#: engine/vibes_auth/emailing/views.py:71 +#: engine/vibes_auth/emailing/views.py:39 msgid "Unsubscribe token is required." msgstr "Ein Abmeldetoken ist erforderlich." -#: engine/vibes_auth/emailing/views.py:79 +#: engine/vibes_auth/emailing/views.py:47 msgid "Invalid unsubscribe token format." msgstr "Ungültiges Format des Abmelde-Tokens." -#: engine/vibes_auth/emailing/views.py:87 +#: engine/vibes_auth/emailing/views.py:55 msgid "User not found." msgstr "Benutzer nicht gefunden." -#: engine/vibes_auth/emailing/views.py:93 -msgid "You are already unsubscribed." -msgstr "Sie sind bereits abgemeldet." - -#: engine/vibes_auth/emailing/views.py:101 -msgid "You have been successfully unsubscribed from our emails." -msgstr "Sie haben sich erfolgreich von unseren E-Mails abgemeldet." - -#: engine/vibes_auth/graphene/mutations.py:46 +#: engine/vibes_auth/graphene/mutations.py:47 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" "Die b64-kodierte uuid des Benutzers, der den neuen Benutzer an uns verwiesen" " hat." -#: engine/vibes_auth/graphene/mutations.py:68 +#: engine/vibes_auth/graphene/mutations.py:70 msgid "password too weak" msgstr "Das Passwort ist zu schwach" -#: engine/vibes_auth/graphene/mutations.py:128 +#: engine/vibes_auth/graphene/mutations.py:130 msgid "malformed email" msgstr "Fehlerhafte E-Mail" -#: engine/vibes_auth/graphene/mutations.py:140 +#: engine/vibes_auth/graphene/mutations.py:142 #: engine/vibes_auth/serializers.py:117 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Missgebildete Telefonnummer: {phone_number}!" -#: engine/vibes_auth/graphene/mutations.py:165 +#: engine/vibes_auth/graphene/mutations.py:167 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Ungültiges Attributformat: {attribute_pair}!" -#: engine/vibes_auth/graphene/mutations.py:182 +#: engine/vibes_auth/graphene/mutations.py:184 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} existiert nicht: {uuid}!" -#: engine/vibes_auth/graphene/mutations.py:304 -#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180 +#: engine/vibes_auth/graphene/mutations.py:309 +#: engine/vibes_auth/viewsets.py:174 engine/vibes_auth/viewsets.py:198 msgid "activation link is invalid!" msgstr "Der Aktivierungslink ist ungültig!" -#: engine/vibes_auth/graphene/mutations.py:307 +#: engine/vibes_auth/graphene/mutations.py:312 msgid "account already activated..." msgstr "Das Konto wurde bereits aktiviert..." -#: engine/vibes_auth/graphene/mutations.py:314 -#: engine/vibes_auth/graphene/mutations.py:376 +#: engine/vibes_auth/graphene/mutations.py:319 +#: engine/vibes_auth/graphene/mutations.py:383 msgid "something went wrong: {e!s}" msgstr "Etwas ist schief gelaufen: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:358 -#: engine/vibes_auth/viewsets.py:106 +#: engine/vibes_auth/graphene/mutations.py:365 +#: engine/vibes_auth/viewsets.py:109 msgid "token is invalid!" msgstr "Token ist ungültig!" +#: engine/vibes_auth/graphene/mutations.py:403 +msgid "only image files are allowed (jpg, png, gif, webp)" +msgstr "Es sind nur Bilddateien zulässig (jpg, png, gif, webp)." + +#: engine/vibes_auth/graphene/mutations.py:406 +msgid "file size must not exceed 5 MB" +msgstr "Die Dateigröße darf 5 MB nicht überschreiten." + #: engine/vibes_auth/graphene/object_types.py:46 msgid "" "the products this user has viewed most recently (max 48), in " @@ -590,7 +705,7 @@ msgstr "" "umgekehrter chronologischer Reihenfolge." #: engine/vibes_auth/graphene/object_types.py:49 -#: engine/vibes_auth/models.py:214 +#: engine/vibes_auth/models.py:270 msgid "groups" msgstr "Gruppen" @@ -599,7 +714,7 @@ msgid "wishlist" msgstr "Wunschzettel" #: engine/vibes_auth/graphene/object_types.py:56 -#: engine/vibes_auth/models.py:70 +#: engine/vibes_auth/models.py:75 msgid "avatar" msgstr "Avatar" @@ -639,7 +754,7 @@ msgstr "" msgid "Assignee must be a staff user." msgstr "Der Abtretungsempfänger muss ein Mitarbeiter sein." -#: engine/vibes_auth/models.py:42 +#: engine/vibes_auth/models.py:44 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -659,124 +774,136 @@ msgstr "" "entwickelt, um spezielle Anwendungsfälle für eine erweiterte " "Benutzerverwaltung zu behandeln." -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "email" msgstr "E-Mail" -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "user email address" msgstr "E-Mail Adresse des Benutzers" -#: engine/vibes_auth/models.py:55 +#: engine/vibes_auth/models.py:57 msgid "phone_number" msgstr "Rufnummer" -#: engine/vibes_auth/models.py:60 +#: engine/vibes_auth/models.py:61 msgid "user phone number" msgstr "Rufnummer des Benutzers" -#: engine/vibes_auth/models.py:66 +#: engine/vibes_auth/models.py:68 msgid "first_name" msgstr "Vornamen" -#: engine/vibes_auth/models.py:67 +#: engine/vibes_auth/models.py:71 msgid "last_name" msgstr "Nachname" -#: engine/vibes_auth/models.py:73 +#: engine/vibes_auth/models.py:78 msgid "user profile image" msgstr "Bild des Benutzerprofils" -#: engine/vibes_auth/models.py:78 +#: engine/vibes_auth/models.py:83 msgid "is verified" msgstr "Wird überprüft" -#: engine/vibes_auth/models.py:79 +#: engine/vibes_auth/models.py:84 msgid "user verification status" msgstr "Verifizierungsstatus des Benutzers" -#: engine/vibes_auth/models.py:82 +#: engine/vibes_auth/models.py:87 msgid "is_active" msgstr "Ist aktiv" -#: engine/vibes_auth/models.py:84 +#: engine/vibes_auth/models.py:89 msgid "unselect this instead of deleting accounts" msgstr "Deaktivieren Sie diese Option, anstatt Konten zu löschen" -#: engine/vibes_auth/models.py:87 +#: engine/vibes_auth/models.py:92 msgid "is_subscribed" msgstr "Ist abonniert" -#: engine/vibes_auth/models.py:88 +#: engine/vibes_auth/models.py:93 msgid "user's newsletter subscription status" msgstr "Status des Newsletter-Abonnements des Benutzers" -#: engine/vibes_auth/models.py:92 +#: engine/vibes_auth/models.py:98 msgid "activation token" msgstr "Aktivierungs-Token" -#: engine/vibes_auth/models.py:95 +#: engine/vibes_auth/models.py:103 +msgid "activation token created" +msgstr "Aktivierungstoken erstellt" + +#: engine/vibes_auth/models.py:107 msgid "unsubscribe token" msgstr "Abmeldungs-Token" -#: engine/vibes_auth/models.py:96 +#: engine/vibes_auth/models.py:108 msgid "token for secure one-click unsubscribe from campaigns" msgstr "Token für sicheres Abmelden von Kampagnen mit einem Klick" -#: engine/vibes_auth/models.py:106 +#: engine/vibes_auth/models.py:118 msgid "attributes" msgstr "Attribute" -#: engine/vibes_auth/models.py:147 +#: engine/vibes_auth/models.py:184 msgid "users" msgstr "Benutzer" -#: engine/vibes_auth/models.py:154 +#: engine/vibes_auth/models.py:202 +msgid "admin OTP code" +msgstr "Admin-OTP-Code" + +#: engine/vibes_auth/models.py:203 +msgid "admin OTP codes" +msgstr "Admin-OTP-Codes" + +#: engine/vibes_auth/models.py:210 msgid "For anonymous threads" msgstr "Für anonyme Themen" -#: engine/vibes_auth/models.py:178 +#: engine/vibes_auth/models.py:234 msgid "Chat thread" msgstr "Chat-Thread" -#: engine/vibes_auth/models.py:179 +#: engine/vibes_auth/models.py:235 msgid "Chat threads" msgstr "Chat-Themen" -#: engine/vibes_auth/models.py:185 +#: engine/vibes_auth/models.py:241 msgid "provide user or email for anonymous thread." msgstr "" "Geben Sie einen Benutzer oder eine E-Mail für einen anonymen Thread an." -#: engine/vibes_auth/models.py:188 +#: engine/vibes_auth/models.py:244 msgid "assignee must be a staff user." msgstr "Der Beauftragte muss ein Mitarbeiter sein." -#: engine/vibes_auth/models.py:206 +#: engine/vibes_auth/models.py:262 msgid "Chat message" msgstr "Chat-Nachricht" -#: engine/vibes_auth/models.py:207 +#: engine/vibes_auth/models.py:263 msgid "Chat messages" msgstr "Chat-Nachrichten" -#: engine/vibes_auth/models.py:213 +#: engine/vibes_auth/models.py:269 msgid "group" msgstr "Gruppe" -#: engine/vibes_auth/models.py:220 +#: engine/vibes_auth/models.py:276 msgid "outstanding token" msgstr "Hervorragende Wertmarke" -#: engine/vibes_auth/models.py:221 +#: engine/vibes_auth/models.py:277 msgid "outstanding tokens" msgstr "Ausstehende Wertmarken" -#: engine/vibes_auth/models.py:227 +#: engine/vibes_auth/models.py:283 msgid "blacklisted token" msgstr "Token auf der schwarzen Liste" -#: engine/vibes_auth/models.py:228 +#: engine/vibes_auth/models.py:284 msgid "blacklisted tokens" msgstr "Token auf der schwarzen Liste" @@ -820,6 +947,10 @@ msgstr "Kein Benutzer uuid-Anspruch im Token vorhanden" msgid "user does not exist" msgstr "Benutzer existiert nicht" +#: engine/vibes_auth/templates/admin/verify_otp.html:27 +msgid "Verify" +msgstr "Überprüfen" + #: engine/vibes_auth/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "Ihr Passwort zurücksetzen" @@ -905,12 +1036,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "Mit freundlichen Grüßen,
das %(project_name)s-Team" -#: engine/vibes_auth/utils/emailing.py:24 +#: engine/vibes_auth/utils/emailing.py:27 #, python-brace-format msgid "{settings.PROJECT_NAME} | Activate Account" msgstr "{settings.PROJECT_NAME} | Konto freischalten" -#: engine/vibes_auth/utils/emailing.py:63 +#: engine/vibes_auth/utils/emailing.py:66 #, python-brace-format msgid "{settings.PROJECT_NAME} | Reset Password" msgstr "{settings.PROJECT_NAME} | Passwort zurücksetzen" @@ -967,7 +1098,7 @@ msgstr "" msgid "the token is invalid" msgstr "Das Token ist ungültig" -#: engine/vibes_auth/viewsets.py:44 +#: engine/vibes_auth/viewsets.py:47 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." @@ -975,10 +1106,18 @@ 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." -#: engine/vibes_auth/viewsets.py:113 +#: engine/vibes_auth/viewsets.py:116 msgid "password reset successfully" msgstr "Das Passwort wurde erfolgreich zurückgesetzt!" -#: engine/vibes_auth/viewsets.py:161 +#: engine/vibes_auth/viewsets.py:146 +msgid "" +"Account already registered but not yet activated. A new activation email has" +" been sent." +msgstr "" +"Konto bereits registriert, aber noch nicht aktiviert. Eine neue " +"Aktivierungs-E-Mail wurde versendet." + +#: engine/vibes_auth/viewsets.py:179 msgid "account already activated!" msgstr "Sie haben das Konto bereits aktiviert..." diff --git a/engine/vibes_auth/locale/en_GB/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/en_GB/LC_MESSAGES/django.mo index 309cbaad..b0821dab 100644 Binary files a/engine/vibes_auth/locale/en_GB/LC_MESSAGES/django.mo and b/engine/vibes_auth/locale/en_GB/LC_MESSAGES/django.mo differ diff --git a/engine/vibes_auth/locale/en_GB/LC_MESSAGES/django.po b/engine/vibes_auth/locale/en_GB/LC_MESSAGES/django.po index 8c2e6d88..cbc55061 100644 --- a/engine/vibes_auth/locale/en_GB/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/en_GB/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 03:06+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -17,32 +17,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:65 engine/vibes_auth/admin.py:66 +#: engine/vibes_auth/admin.py:64 engine/vibes_auth/admin.py:65 #: engine/vibes_auth/graphene/object_types.py:54 msgid "balance" msgstr "Balance" -#: engine/vibes_auth/admin.py:74 +#: engine/vibes_auth/admin.py:73 msgid "order" msgstr "Order" -#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:51 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:51 msgid "orders" msgstr "Orders" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:84 msgid "personal info" msgstr "Personal Info" -#: engine/vibes_auth/admin.py:89 engine/vibes_auth/graphene/object_types.py:50 +#: engine/vibes_auth/admin.py:88 engine/vibes_auth/graphene/object_types.py:50 msgid "permissions" msgstr "Permissions" -#: engine/vibes_auth/admin.py:102 +#: engine/vibes_auth/admin.py:101 msgid "important dates" msgstr "Important dates" -#: engine/vibes_auth/admin.py:103 +#: engine/vibes_auth/admin.py:102 msgid "additional info" msgstr "Additional Info" @@ -58,79 +58,83 @@ msgstr "Close selected threads" msgid "Open selected threads" msgstr "Open selected threads" -#: engine/vibes_auth/admin.py:208 -msgid "Preview" -msgstr "Preview" - -#: engine/vibes_auth/admin.py:209 engine/vibes_auth/admin.py:249 -#: engine/vibes_auth/admin.py:326 -msgid "Metadata" -msgstr "Metadata" - -#: engine/vibes_auth/admin.py:212 -msgid "preview" -msgstr "preview" - -#: engine/vibes_auth/admin.py:221 -msgid "image preview" -msgstr "image preview" - -#: engine/vibes_auth/admin.py:241 +#: engine/vibes_auth/admin.py:209 msgid "Content" msgstr "Content" -#: engine/vibes_auth/admin.py:243 +#: engine/vibes_auth/admin.py:211 msgid "Documentation" msgstr "Documentation" -#: engine/vibes_auth/admin.py:313 +#: engine/vibes_auth/admin.py:217 engine/vibes_auth/admin.py:294 +msgid "Metadata" +msgstr "Metadata" + +#: engine/vibes_auth/admin.py:281 msgid "Scheduling" msgstr "Scheduling" -#: engine/vibes_auth/admin.py:315 +#: engine/vibes_auth/admin.py:283 msgid "Statistics" msgstr "Statistics" -#: engine/vibes_auth/admin.py:329 +#: engine/vibes_auth/admin.py:297 msgid "stats" msgstr "stats" -#: engine/vibes_auth/admin.py:335 +#: engine/vibes_auth/admin.py:303 msgid "Prepare recipients (subscribed users)" msgstr "Prepare recipients (subscribed users)" -#: engine/vibes_auth/admin.py:343 +#: engine/vibes_auth/admin.py:311 msgid "Campaign '{}' is not in draft status." msgstr "Campaign '{}' is not in draft status." -#: engine/vibes_auth/admin.py:350 +#: engine/vibes_auth/admin.py:318 msgid "Preparing recipients for campaign '{}'." msgstr "Preparing recipients for campaign '{}'." -#: engine/vibes_auth/admin.py:354 +#: engine/vibes_auth/admin.py:322 msgid "Send campaign now" msgstr "Send campaign now" -#: engine/vibes_auth/admin.py:362 +#: engine/vibes_auth/admin.py:330 msgid "Campaign '{}' cannot be sent (status: {})." msgstr "Campaign '{}' cannot be sent (status: {})." -#: engine/vibes_auth/admin.py:372 +#: engine/vibes_auth/admin.py:340 msgid "Campaign '{}' has no recipients. Prepare recipients first." msgstr "Campaign '{}' has no recipients. Prepare recipients first." -#: engine/vibes_auth/admin.py:383 +#: engine/vibes_auth/admin.py:351 msgid "Started sending campaign '{}'." msgstr "Started sending campaign '{}'." -#: engine/vibes_auth/admin.py:387 +#: engine/vibes_auth/admin.py:355 msgid "Cancel campaign" msgstr "Cancel campaign" -#: engine/vibes_auth/admin.py:396 +#: engine/vibes_auth/admin.py:364 msgid "{} campaign(s) cancelled." msgstr "{} campaign(s) cancelled." +#: engine/vibes_auth/admin_site.py:24 +msgid "Verification code" +msgstr "Verification code" + +#: engine/vibes_auth/admin_site.py:62 +msgid "A verification code has been sent to your email." +msgstr "A verification code has been sent to your email." + +#: engine/vibes_auth/admin_site.py:118 +msgid "Invalid or expired code. Please try again." +msgstr "Invalid or expired code. Please try again." + +#: engine/vibes_auth/admin_site.py:124 +#: engine/vibes_auth/templates/admin/verify_otp.html:10 +msgid "Two-factor authentication" +msgstr "Two-factor authentication" + #: engine/vibes_auth/apps.py:8 msgid "Accounting" msgstr "Accounting" @@ -155,6 +159,163 @@ msgstr "Staff" msgid "System" msgstr "System" +#: engine/vibes_auth/docs/drf/emailing.py:18 +msgid "" +"UUID token for unsubscribing. This token is unique per user and is included " +"in the unsubscribe link of every campaign email. The token remains constant " +"for each user unless regenerated." +msgstr "" +"UUID token for unsubscribing. This token is unique per user and is included " +"in the unsubscribe link of every campaign email. The token remains constant " +"for each user unless regenerated." + +#: engine/vibes_auth/docs/drf/emailing.py:37 +#: engine/vibes_auth/emailing/views.py:69 +msgid "You have been successfully unsubscribed from our emails." +msgstr "You have been successfully unsubscribed from our emails." + +#: engine/vibes_auth/docs/drf/emailing.py:45 +#: engine/vibes_auth/emailing/views.py:61 +msgid "You are already unsubscribed." +msgstr "You are already unsubscribed." + +#: engine/vibes_auth/docs/drf/emailing.py:52 +msgid "Unsubscribe from email campaigns" +msgstr "Unsubscribe from email campaigns" + +#: engine/vibes_auth/docs/drf/emailing.py:54 +msgid "" +"Unsubscribe a user from all marketing email campaigns using their unique unsubscribe token.\n" +"\n" +"This endpoint is designed for email client compatibility where clicking a link triggers a GET request. The user will no longer receive promotional emails after successful unsubscription.\n" +"\n" +"**Note:** Transactional emails (order confirmations, password resets, etc.) are not affected by this setting." +msgstr "" +"Unsubscribe a user from all marketing email campaigns using their unique unsubscribe token.\n" +"\n" +"This endpoint is designed for email client compatibility where clicking a link triggers a GET request. The user will no longer receive promotional emails after successful unsubscription.\n" +"\n" +"**Note:** Transactional emails (order confirmations, password resets, etc.) are not affected by this setting." + +#: engine/vibes_auth/docs/drf/emailing.py:66 +#: engine/vibes_auth/docs/drf/emailing.py:146 +msgid "Successfully unsubscribed from email campaigns." +msgstr "Successfully unsubscribed from email campaigns." + +#: engine/vibes_auth/docs/drf/emailing.py:82 +#: engine/vibes_auth/docs/drf/emailing.py:162 +msgid "Invalid or missing unsubscribe token." +msgstr "Invalid or missing unsubscribe token." + +#: engine/vibes_auth/docs/drf/emailing.py:96 +#: engine/vibes_auth/docs/drf/emailing.py:176 +msgid "User associated with the token was not found." +msgstr "User associated with the token was not found." + +#: engine/vibes_auth/docs/drf/emailing.py:118 +msgid "One-Click Unsubscribe (RFC 8058)" +msgstr "One-Click Unsubscribe (RFC 8058)" + +#: engine/vibes_auth/docs/drf/emailing.py:120 +msgid "" +"RFC 8058 compliant one-click unsubscribe endpoint for email campaigns.\n" +"\n" +"This endpoint supports the List-Unsubscribe-Post header mechanism defined in RFC 8058, which allows email clients to unsubscribe users with a single click without leaving the email application.\n" +"\n" +"The token can be provided either as a query parameter or in the request body.\n" +"\n" +"**Standards Compliance:**\n" +"- RFC 8058: Signaling One-Click Functionality for List Email Headers\n" +"- RFC 2369: The Use of URLs as Meta-Syntax for Core Mail List Commands\n" +"\n" +"**Note:** Transactional emails are not affected by this setting." +msgstr "" +"RFC 8058 compliant one-click unsubscribe endpoint for email campaigns.\n" +"\n" +"This endpoint supports the List-Unsubscribe-Post header mechanism defined in RFC 8058, which allows email clients to unsubscribe users with a single click without leaving the email application.\n" +"\n" +"The token can be provided either as a query parameter or in the request body.\n" +"\n" +"**Standards Compliance:**\n" +"- RFC 8058: Signaling One-Click Functionality for List Email Headers\n" +"- RFC 2369: The Use of URLs as Meta-Syntax for Core Mail List Commands\n" +"\n" +"**Note:** Transactional emails are not affected by this setting." + +#: engine/vibes_auth/docs/drf/emailing.py:137 +msgid "" +"Unsubscribe token (alternative to query parameter). Can be omitted if token " +"is provided in URL." +msgstr "" +"Unsubscribe token (alternative to query parameter). Can be omitted if token " +"is provided in URL." + +#: engine/vibes_auth/docs/drf/emailing.py:200 +msgid "Track email open event" +msgstr "Track email open event" + +#: engine/vibes_auth/docs/drf/emailing.py:202 +msgid "" +"Records when a campaign email is opened by the recipient.\n" +"\n" +"This endpoint is called automatically when the tracking pixel (1x1 transparent GIF) embedded in the email is loaded by the recipient's email client.\n" +"\n" +"**How it works:**\n" +"1. Each campaign email contains a unique tracking pixel URL with a `tid` parameter\n" +"2. When the email is opened and images are loaded, this endpoint is called\n" +"3. The recipient's status is updated to 'opened' and the timestamp is recorded\n" +"4. The campaign's aggregate opened count is updated\n" +"\n" +"**Privacy considerations:**\n" +"- Only the first open is recorded (subsequent opens are ignored)\n" +"- No personal information beyond the tracking ID is logged\n" +"- Users who disable image loading will not trigger this event\n" +"\n" +"**Response:**\n" +"Returns a 1x1 transparent GIF image regardless of whether tracking succeeded, to ensure consistent behavior and prevent information leakage." +msgstr "" +"Records when a campaign email is opened by the recipient.\n" +"\n" +"This endpoint is called automatically when the tracking pixel (1x1 transparent GIF) embedded in the email is loaded by the recipient's email client.\n" +"\n" +"**How it works:**\n" +"1. Each campaign email contains a unique tracking pixel URL with a `tid` parameter\n" +"2. When the email is opened and images are loaded, this endpoint is called\n" +"3. The recipient's status is updated to 'opened' and the timestamp is recorded\n" +"4. The campaign's aggregate opened count is updated\n" +"\n" +"**Privacy considerations:**\n" +"- Only the first open is recorded (subsequent opens are ignored)\n" +"- No personal information beyond the tracking ID is logged\n" +"- Users who disable image loading will not trigger this event\n" +"\n" +"**Response:**\n" +"Returns a 1x1 transparent GIF image regardless of whether tracking succeeded, to ensure consistent behavior and prevent information leakage." + +#: engine/vibes_auth/docs/drf/emailing.py:223 +msgid "" +"Tracking ID (UUID) unique to each campaign-recipient combination. This ID " +"links the open event to a specific recipient and campaign." +msgstr "" +"Tracking ID (UUID) unique to each campaign-recipient combination. This ID " +"links the open event to a specific recipient and campaign." + +#: engine/vibes_auth/docs/drf/emailing.py:241 +msgid "" +"1x1 transparent GIF image. Always returned regardless of tracking status to " +"maintain consistent behavior." +msgstr "" +"1x1 transparent GIF image. Always returned regardless of tracking status to " +"maintain consistent behavior." + +#: engine/vibes_auth/docs/drf/emailing.py:247 +msgid "" +"Returned when no tracking ID is provided. Note: Invalid tracking IDs still " +"return 200 with the GIF to prevent enumeration attacks." +msgstr "" +"Returned when no tracking ID is provided. Note: Invalid tracking IDs still " +"return 200 with the GIF to prevent enumeration attacks." + #: engine/vibes_auth/docs/drf/messaging.py:17 msgid "User messages entrypoint" msgstr "User messages entrypoint" @@ -248,9 +409,9 @@ msgid "confirm a user's password reset" msgstr "Confirm a user's password reset" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:351 +#: engine/vibes_auth/graphene/mutations.py:358 #: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107 -#: engine/vibes_auth/viewsets.py:94 +#: engine/vibes_auth/viewsets.py:97 msgid "passwords do not match" msgstr "Passwords do not match" @@ -303,195 +464,166 @@ msgstr "Opened" msgid "Clicked" msgstr "Clicked" -#: engine/vibes_auth/emailing/models.py:35 -#: engine/vibes_auth/emailing/models.py:71 -#: engine/vibes_auth/emailing/models.py:121 +#: engine/vibes_auth/emailing/models.py:38 +#: engine/vibes_auth/emailing/models.py:88 msgid "name" msgstr "name" -#: engine/vibes_auth/emailing/models.py:36 -msgid "descriptive name for the image" -msgstr "descriptive name for the image" - -#: engine/vibes_auth/emailing/models.py:40 -msgid "image" -msgstr "image" - -#: engine/vibes_auth/emailing/models.py:41 -msgid "image file to use in email templates" -msgstr "image file to use in email templates" - -#: engine/vibes_auth/emailing/models.py:47 -msgid "alt text" -msgstr "alt text" - -#: engine/vibes_auth/emailing/models.py:48 -msgid "alternative text for accessibility" -msgstr "alternative text for accessibility" - -#: engine/vibes_auth/emailing/models.py:52 -msgid "email image" -msgstr "email image" - -#: engine/vibes_auth/emailing/models.py:53 -msgid "email images" -msgstr "email images" - -#: engine/vibes_auth/emailing/models.py:72 +#: engine/vibes_auth/emailing/models.py:39 msgid "internal name for the template" msgstr "internal name for the template" -#: engine/vibes_auth/emailing/models.py:76 +#: engine/vibes_auth/emailing/models.py:43 msgid "slug" msgstr "slug" -#: engine/vibes_auth/emailing/models.py:77 +#: engine/vibes_auth/emailing/models.py:44 msgid "unique identifier for the template" msgstr "unique identifier for the template" -#: engine/vibes_auth/emailing/models.py:81 +#: engine/vibes_auth/emailing/models.py:48 msgid "subject" msgstr "subject" -#: engine/vibes_auth/emailing/models.py:82 +#: engine/vibes_auth/emailing/models.py:49 msgid "email subject line - supports {{ variables }}" msgstr "email subject line - supports {{ variables }}" -#: engine/vibes_auth/emailing/models.py:85 -msgid "HTML content" -msgstr "HTML content" +#: engine/vibes_auth/emailing/models.py:52 +msgid "content" +msgstr "content" -#: engine/vibes_auth/emailing/models.py:87 +#: engine/vibes_auth/emailing/models.py:54 msgid "" -"email body content - supports {{ user.first_name }}, {{ user.email }}, {{ " -"project_name }}, {{ unsubscribe_url }}" +"email body in markdown - supports {{ user.first_name }}, {{ user.email }}, " +"{{ project_name }}, {{ unsubscribe_url }}" msgstr "" "email body content - supports {{ user.first_name }}, {{ user.email }}, {{ " "project_name }}, {{ unsubscribe_url }}" -#: engine/vibes_auth/emailing/models.py:94 +#: engine/vibes_auth/emailing/models.py:61 msgid "plain text content" msgstr "plain text content" -#: engine/vibes_auth/emailing/models.py:95 +#: engine/vibes_auth/emailing/models.py:62 msgid "plain text fallback (auto-generated if empty)" msgstr "plain text fallback (auto-generated if empty)" -#: engine/vibes_auth/emailing/models.py:100 +#: engine/vibes_auth/emailing/models.py:67 msgid "available variables" msgstr "available variables" -#: engine/vibes_auth/emailing/models.py:101 +#: engine/vibes_auth/emailing/models.py:68 msgid "documentation of available template variables" msgstr "documentation of available template variables" -#: engine/vibes_auth/emailing/models.py:105 +#: engine/vibes_auth/emailing/models.py:72 msgid "email template" msgstr "email template" -#: engine/vibes_auth/emailing/models.py:106 +#: engine/vibes_auth/emailing/models.py:73 msgid "email templates" msgstr "email templates" -#: engine/vibes_auth/emailing/models.py:122 +#: engine/vibes_auth/emailing/models.py:89 msgid "internal name for the campaign" msgstr "internal name for the campaign" -#: engine/vibes_auth/emailing/models.py:129 +#: engine/vibes_auth/emailing/models.py:96 msgid "template" msgstr "template" -#: engine/vibes_auth/emailing/models.py:130 +#: engine/vibes_auth/emailing/models.py:97 msgid "email template to use for this campaign" msgstr "email template to use for this campaign" -#: engine/vibes_auth/emailing/models.py:136 -#: engine/vibes_auth/emailing/models.py:206 +#: engine/vibes_auth/emailing/models.py:103 +#: engine/vibes_auth/emailing/models.py:173 msgid "status" msgstr "status" -#: engine/vibes_auth/emailing/models.py:141 +#: engine/vibes_auth/emailing/models.py:108 msgid "scheduled at" msgstr "scheduled at" -#: engine/vibes_auth/emailing/models.py:142 +#: engine/vibes_auth/emailing/models.py:109 msgid "when to send the campaign (leave empty for manual send)" msgstr "when to send the campaign (leave empty for manual send)" -#: engine/vibes_auth/emailing/models.py:147 -#: engine/vibes_auth/emailing/models.py:211 +#: engine/vibes_auth/emailing/models.py:114 +#: engine/vibes_auth/emailing/models.py:178 msgid "sent at" msgstr "sent at" -#: engine/vibes_auth/emailing/models.py:148 +#: engine/vibes_auth/emailing/models.py:115 msgid "when the campaign was actually sent" msgstr "when the campaign was actually sent" -#: engine/vibes_auth/emailing/models.py:153 +#: engine/vibes_auth/emailing/models.py:120 msgid "total recipients" msgstr "total recipients" -#: engine/vibes_auth/emailing/models.py:157 +#: engine/vibes_auth/emailing/models.py:124 msgid "sent count" msgstr "sent count" -#: engine/vibes_auth/emailing/models.py:161 +#: engine/vibes_auth/emailing/models.py:128 msgid "failed count" msgstr "failed count" -#: engine/vibes_auth/emailing/models.py:165 +#: engine/vibes_auth/emailing/models.py:132 msgid "opened count" msgstr "opened count" -#: engine/vibes_auth/emailing/models.py:169 +#: engine/vibes_auth/emailing/models.py:136 msgid "clicked count" msgstr "clicked count" -#: engine/vibes_auth/emailing/models.py:173 +#: engine/vibes_auth/emailing/models.py:140 msgid "email campaign" msgstr "email campaign" -#: engine/vibes_auth/emailing/models.py:174 +#: engine/vibes_auth/emailing/models.py:141 msgid "email campaigns" msgstr "email campaigns" -#: engine/vibes_auth/emailing/models.py:194 +#: engine/vibes_auth/emailing/models.py:161 msgid "campaign" msgstr "campaign" -#: engine/vibes_auth/emailing/models.py:200 engine/vibes_auth/models.py:146 +#: engine/vibes_auth/emailing/models.py:167 engine/vibes_auth/models.py:183 msgid "user" msgstr "User" -#: engine/vibes_auth/emailing/models.py:216 +#: engine/vibes_auth/emailing/models.py:183 msgid "opened at" msgstr "opened at" -#: engine/vibes_auth/emailing/models.py:221 +#: engine/vibes_auth/emailing/models.py:188 msgid "clicked at" msgstr "clicked at" -#: engine/vibes_auth/emailing/models.py:227 +#: engine/vibes_auth/emailing/models.py:194 msgid "tracking ID" msgstr "tracking ID" -#: engine/vibes_auth/emailing/models.py:228 +#: engine/vibes_auth/emailing/models.py:195 msgid "unique ID for tracking opens and clicks" msgstr "unique ID for tracking opens and clicks" -#: engine/vibes_auth/emailing/models.py:233 +#: engine/vibes_auth/emailing/models.py:200 msgid "error message" msgstr "error message" -#: engine/vibes_auth/emailing/models.py:234 +#: engine/vibes_auth/emailing/models.py:201 msgid "error details if sending failed" msgstr "error details if sending failed" -#: engine/vibes_auth/emailing/models.py:238 +#: engine/vibes_auth/emailing/models.py:205 msgid "campaign recipient" msgstr "campaign recipient" -#: engine/vibes_auth/emailing/models.py:239 +#: engine/vibes_auth/emailing/models.py:206 msgid "campaign recipients" msgstr "campaign recipients" @@ -507,73 +639,73 @@ msgstr "You received this email because you subscribed to our newsletter." msgid "Unsubscribe" msgstr "Unsubscribe" -#: engine/vibes_auth/emailing/views.py:71 +#: engine/vibes_auth/emailing/views.py:39 msgid "Unsubscribe token is required." msgstr "Unsubscribe token is required." -#: engine/vibes_auth/emailing/views.py:79 +#: engine/vibes_auth/emailing/views.py:47 msgid "Invalid unsubscribe token format." msgstr "Invalid unsubscribe token format." -#: engine/vibes_auth/emailing/views.py:87 +#: engine/vibes_auth/emailing/views.py:55 msgid "User not found." msgstr "User not found." -#: engine/vibes_auth/emailing/views.py:93 -msgid "You are already unsubscribed." -msgstr "You are already unsubscribed." - -#: engine/vibes_auth/emailing/views.py:101 -msgid "You have been successfully unsubscribed from our emails." -msgstr "You have been successfully unsubscribed from our emails." - -#: engine/vibes_auth/graphene/mutations.py:46 +#: engine/vibes_auth/graphene/mutations.py:47 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "The user's b64-encoded uuid who referred the new user to us." -#: engine/vibes_auth/graphene/mutations.py:68 +#: engine/vibes_auth/graphene/mutations.py:70 msgid "password too weak" msgstr "The password is too weak" -#: engine/vibes_auth/graphene/mutations.py:128 +#: engine/vibes_auth/graphene/mutations.py:130 msgid "malformed email" msgstr "Malformed email" -#: engine/vibes_auth/graphene/mutations.py:140 +#: engine/vibes_auth/graphene/mutations.py:142 #: engine/vibes_auth/serializers.py:117 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Malformed phone number: {phone_number}!" -#: engine/vibes_auth/graphene/mutations.py:165 +#: engine/vibes_auth/graphene/mutations.py:167 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Invalid attribute format: {attribute_pair}!" -#: engine/vibes_auth/graphene/mutations.py:182 +#: engine/vibes_auth/graphene/mutations.py:184 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} does not exist: {uuid}!" -#: engine/vibes_auth/graphene/mutations.py:304 -#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180 +#: engine/vibes_auth/graphene/mutations.py:309 +#: engine/vibes_auth/viewsets.py:174 engine/vibes_auth/viewsets.py:198 msgid "activation link is invalid!" msgstr "Activation link is invalid!" -#: engine/vibes_auth/graphene/mutations.py:307 +#: engine/vibes_auth/graphene/mutations.py:312 msgid "account already activated..." msgstr "Account has been already activated..." -#: engine/vibes_auth/graphene/mutations.py:314 -#: engine/vibes_auth/graphene/mutations.py:376 +#: engine/vibes_auth/graphene/mutations.py:319 +#: engine/vibes_auth/graphene/mutations.py:383 msgid "something went wrong: {e!s}" msgstr "Something went wrong: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:358 -#: engine/vibes_auth/viewsets.py:106 +#: engine/vibes_auth/graphene/mutations.py:365 +#: engine/vibes_auth/viewsets.py:109 msgid "token is invalid!" msgstr "Token is invalid!" +#: engine/vibes_auth/graphene/mutations.py:403 +msgid "only image files are allowed (jpg, png, gif, webp)" +msgstr "Only image files are allowed (jpg, png, gif, webp)" + +#: engine/vibes_auth/graphene/mutations.py:406 +msgid "file size must not exceed 5 MB" +msgstr "File size must not exceed 5 MB" + #: engine/vibes_auth/graphene/object_types.py:46 msgid "" "the products this user has viewed most recently (max 48), in " @@ -583,7 +715,7 @@ msgstr "" "chronological order." #: engine/vibes_auth/graphene/object_types.py:49 -#: engine/vibes_auth/models.py:214 +#: engine/vibes_auth/models.py:270 msgid "groups" msgstr "Groups" @@ -592,7 +724,7 @@ msgid "wishlist" msgstr "Wishlist" #: engine/vibes_auth/graphene/object_types.py:56 -#: engine/vibes_auth/models.py:70 +#: engine/vibes_auth/models.py:75 msgid "avatar" msgstr "Avatar" @@ -629,7 +761,7 @@ msgstr "We're searching for the operator to answer you already, hold by!" msgid "Assignee must be a staff user." msgstr "Assignee must be a staff user." -#: engine/vibes_auth/models.py:42 +#: engine/vibes_auth/models.py:44 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -647,123 +779,135 @@ msgstr "" "verifying accounts. The User model is designed to handle specific use cases " "for enhanced user management." -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "email" msgstr "E-mail" -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "user email address" msgstr "User's email address" -#: engine/vibes_auth/models.py:55 +#: engine/vibes_auth/models.py:57 msgid "phone_number" msgstr "Phone Number" -#: engine/vibes_auth/models.py:60 +#: engine/vibes_auth/models.py:61 msgid "user phone number" msgstr "User phone number" -#: engine/vibes_auth/models.py:66 +#: engine/vibes_auth/models.py:68 msgid "first_name" msgstr "First name" -#: engine/vibes_auth/models.py:67 +#: engine/vibes_auth/models.py:71 msgid "last_name" msgstr "Last name" -#: engine/vibes_auth/models.py:73 +#: engine/vibes_auth/models.py:78 msgid "user profile image" msgstr "User profile image" -#: engine/vibes_auth/models.py:78 +#: engine/vibes_auth/models.py:83 msgid "is verified" msgstr "Is verified" -#: engine/vibes_auth/models.py:79 +#: engine/vibes_auth/models.py:84 msgid "user verification status" msgstr "User's verification status" -#: engine/vibes_auth/models.py:82 +#: engine/vibes_auth/models.py:87 msgid "is_active" msgstr "Is active" -#: engine/vibes_auth/models.py:84 +#: engine/vibes_auth/models.py:89 msgid "unselect this instead of deleting accounts" msgstr "Unselect this instead of deleting accounts" -#: engine/vibes_auth/models.py:87 +#: engine/vibes_auth/models.py:92 msgid "is_subscribed" msgstr "Is subscribed" -#: engine/vibes_auth/models.py:88 +#: engine/vibes_auth/models.py:93 msgid "user's newsletter subscription status" msgstr "User's newsletter subscription status" -#: engine/vibes_auth/models.py:92 +#: engine/vibes_auth/models.py:98 msgid "activation token" msgstr "Activation token" -#: engine/vibes_auth/models.py:95 +#: engine/vibes_auth/models.py:103 +msgid "activation token created" +msgstr "Activation token created" + +#: engine/vibes_auth/models.py:107 msgid "unsubscribe token" msgstr "unsubscribe token" -#: engine/vibes_auth/models.py:96 +#: engine/vibes_auth/models.py:108 msgid "token for secure one-click unsubscribe from campaigns" msgstr "token for secure one-click unsubscribe from campaigns" -#: engine/vibes_auth/models.py:106 +#: engine/vibes_auth/models.py:118 msgid "attributes" msgstr "Attributes" -#: engine/vibes_auth/models.py:147 +#: engine/vibes_auth/models.py:184 msgid "users" msgstr "Users" -#: engine/vibes_auth/models.py:154 +#: engine/vibes_auth/models.py:202 +msgid "admin OTP code" +msgstr "Admin OTP code" + +#: engine/vibes_auth/models.py:203 +msgid "admin OTP codes" +msgstr "Admin OTP codes" + +#: engine/vibes_auth/models.py:210 msgid "For anonymous threads" msgstr "For anonymous threads" -#: engine/vibes_auth/models.py:178 +#: engine/vibes_auth/models.py:234 msgid "Chat thread" msgstr "Chat thread" -#: engine/vibes_auth/models.py:179 +#: engine/vibes_auth/models.py:235 msgid "Chat threads" msgstr "Chat threads" -#: engine/vibes_auth/models.py:185 +#: engine/vibes_auth/models.py:241 msgid "provide user or email for anonymous thread." msgstr "provide user or email for anonymous thread." -#: engine/vibes_auth/models.py:188 +#: engine/vibes_auth/models.py:244 msgid "assignee must be a staff user." msgstr "assignee must be a staff user." -#: engine/vibes_auth/models.py:206 +#: engine/vibes_auth/models.py:262 msgid "Chat message" msgstr "Chat message" -#: engine/vibes_auth/models.py:207 +#: engine/vibes_auth/models.py:263 msgid "Chat messages" msgstr "Chat messages" -#: engine/vibes_auth/models.py:213 +#: engine/vibes_auth/models.py:269 msgid "group" msgstr "Group" -#: engine/vibes_auth/models.py:220 +#: engine/vibes_auth/models.py:276 msgid "outstanding token" msgstr "Outstanding token" -#: engine/vibes_auth/models.py:221 +#: engine/vibes_auth/models.py:277 msgid "outstanding tokens" msgstr "Outstanding tokens" -#: engine/vibes_auth/models.py:227 +#: engine/vibes_auth/models.py:283 msgid "blacklisted token" msgstr "Blacklisted token" -#: engine/vibes_auth/models.py:228 +#: engine/vibes_auth/models.py:284 msgid "blacklisted tokens" msgstr "Blacklisted tokens" @@ -805,6 +949,10 @@ msgstr "No user uuid claim present in token" msgid "user does not exist" msgstr "User does not exist" +#: engine/vibes_auth/templates/admin/verify_otp.html:27 +msgid "Verify" +msgstr "Verify" + #: engine/vibes_auth/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "Reset your password" @@ -890,12 +1038,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "Best regards,
the %(project_name)s team" -#: engine/vibes_auth/utils/emailing.py:24 +#: engine/vibes_auth/utils/emailing.py:27 #, python-brace-format msgid "{settings.PROJECT_NAME} | Activate Account" msgstr "{settings.PROJECT_NAME} | Activate Account" -#: engine/vibes_auth/utils/emailing.py:63 +#: engine/vibes_auth/utils/emailing.py:66 #, python-brace-format msgid "{settings.PROJECT_NAME} | Reset Password" msgstr "{settings.PROJECT_NAME} | Reset Password" @@ -948,7 +1096,7 @@ msgstr "" msgid "the token is invalid" msgstr "The token is invalid" -#: engine/vibes_auth/viewsets.py:44 +#: engine/vibes_auth/viewsets.py:47 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." @@ -956,10 +1104,18 @@ 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." -#: engine/vibes_auth/viewsets.py:113 +#: engine/vibes_auth/viewsets.py:116 msgid "password reset successfully" msgstr "Password has been reset successfully!" -#: engine/vibes_auth/viewsets.py:161 +#: engine/vibes_auth/viewsets.py:146 +msgid "" +"Account already registered but not yet activated. A new activation email has" +" been sent." +msgstr "" +"Account already registered but not yet activated. A new activation email has" +" been sent." + +#: engine/vibes_auth/viewsets.py:179 msgid "account already activated!" msgstr "You have already activated the account..." diff --git a/engine/vibes_auth/locale/en_US/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/en_US/LC_MESSAGES/django.mo index 2bf3c191..842b611c 100644 Binary files a/engine/vibes_auth/locale/en_US/LC_MESSAGES/django.mo and b/engine/vibes_auth/locale/en_US/LC_MESSAGES/django.mo differ diff --git a/engine/vibes_auth/locale/en_US/LC_MESSAGES/django.po b/engine/vibes_auth/locale/en_US/LC_MESSAGES/django.po index 752056d7..b713f472 100644 --- a/engine/vibes_auth/locale/en_US/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/en_US/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 03:06+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,32 +13,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:65 engine/vibes_auth/admin.py:66 +#: engine/vibes_auth/admin.py:64 engine/vibes_auth/admin.py:65 #: engine/vibes_auth/graphene/object_types.py:54 msgid "balance" msgstr "Balance" -#: engine/vibes_auth/admin.py:74 +#: engine/vibes_auth/admin.py:73 msgid "order" msgstr "Order" -#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:51 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:51 msgid "orders" msgstr "Orders" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:84 msgid "personal info" msgstr "Personal Info" -#: engine/vibes_auth/admin.py:89 engine/vibes_auth/graphene/object_types.py:50 +#: engine/vibes_auth/admin.py:88 engine/vibes_auth/graphene/object_types.py:50 msgid "permissions" msgstr "Permissions" -#: engine/vibes_auth/admin.py:102 +#: engine/vibes_auth/admin.py:101 msgid "important dates" msgstr "Important dates" -#: engine/vibes_auth/admin.py:103 +#: engine/vibes_auth/admin.py:102 msgid "additional info" msgstr "Additional Info" @@ -54,79 +54,83 @@ msgstr "Close selected threads" msgid "Open selected threads" msgstr "Open selected threads" -#: engine/vibes_auth/admin.py:208 -msgid "Preview" -msgstr "Preview" - -#: engine/vibes_auth/admin.py:209 engine/vibes_auth/admin.py:249 -#: engine/vibes_auth/admin.py:326 -msgid "Metadata" -msgstr "Metadata" - -#: engine/vibes_auth/admin.py:212 -msgid "preview" -msgstr "preview" - -#: engine/vibes_auth/admin.py:221 -msgid "image preview" -msgstr "image preview" - -#: engine/vibes_auth/admin.py:241 +#: engine/vibes_auth/admin.py:209 msgid "Content" msgstr "Content" -#: engine/vibes_auth/admin.py:243 +#: engine/vibes_auth/admin.py:211 msgid "Documentation" msgstr "Documentation" -#: engine/vibes_auth/admin.py:313 +#: engine/vibes_auth/admin.py:217 engine/vibes_auth/admin.py:294 +msgid "Metadata" +msgstr "Metadata" + +#: engine/vibes_auth/admin.py:281 msgid "Scheduling" msgstr "Scheduling" -#: engine/vibes_auth/admin.py:315 +#: engine/vibes_auth/admin.py:283 msgid "Statistics" msgstr "Statistics" -#: engine/vibes_auth/admin.py:329 +#: engine/vibes_auth/admin.py:297 msgid "stats" msgstr "state" -#: engine/vibes_auth/admin.py:335 +#: engine/vibes_auth/admin.py:303 msgid "Prepare recipients (subscribed users)" msgstr "Prepare recipients (subscribed users)" -#: engine/vibes_auth/admin.py:343 +#: engine/vibes_auth/admin.py:311 msgid "Campaign '{}' is not in draft status." msgstr "Campaign '{}' is not in draft status." -#: engine/vibes_auth/admin.py:350 +#: engine/vibes_auth/admin.py:318 msgid "Preparing recipients for campaign '{}'." msgstr "Preparing recipients for campaign '{}'." -#: engine/vibes_auth/admin.py:354 +#: engine/vibes_auth/admin.py:322 msgid "Send campaign now" msgstr "Send campaign now" -#: engine/vibes_auth/admin.py:362 +#: engine/vibes_auth/admin.py:330 msgid "Campaign '{}' cannot be sent (status: {})." msgstr "Campaign '{}' cannot be sent (status: {})." -#: engine/vibes_auth/admin.py:372 +#: engine/vibes_auth/admin.py:340 msgid "Campaign '{}' has no recipients. Prepare recipients first." msgstr "Campaign '{}' has no recipients. Prepare recipients first." -#: engine/vibes_auth/admin.py:383 +#: engine/vibes_auth/admin.py:351 msgid "Started sending campaign '{}'." msgstr "Started sending campaign '{}'." -#: engine/vibes_auth/admin.py:387 +#: engine/vibes_auth/admin.py:355 msgid "Cancel campaign" msgstr "Cancel campaign" -#: engine/vibes_auth/admin.py:396 +#: engine/vibes_auth/admin.py:364 msgid "{} campaign(s) cancelled." msgstr "{} campaign(s) cancelled." +#: engine/vibes_auth/admin_site.py:24 +msgid "Verification code" +msgstr "Verification code" + +#: engine/vibes_auth/admin_site.py:62 +msgid "A verification code has been sent to your email." +msgstr "A verification code has been sent to your email." + +#: engine/vibes_auth/admin_site.py:118 +msgid "Invalid or expired code. Please try again." +msgstr "Invalid or expired code. Please try again." + +#: engine/vibes_auth/admin_site.py:124 +#: engine/vibes_auth/templates/admin/verify_otp.html:10 +msgid "Two-factor authentication" +msgstr "Two-factor authentication" + #: engine/vibes_auth/apps.py:8 msgid "Accounting" msgstr "Accounting" @@ -151,6 +155,143 @@ msgstr "Staff" msgid "System" msgstr "System" +#: engine/vibes_auth/docs/drf/emailing.py:18 +msgid "" +"UUID token for unsubscribing. This token is unique per user and is included " +"in the unsubscribe link of every campaign email. The token remains constant " +"for each user unless regenerated." +msgstr "" +"UUID token for unsubscribing. This token is unique per user and is included " +"in the unsubscribe link of every campaign email. The token remains constant " +"for each user unless regenerated." + +#: engine/vibes_auth/docs/drf/emailing.py:37 +#: engine/vibes_auth/emailing/views.py:69 +msgid "You have been successfully unsubscribed from our emails." +msgstr "You have been successfully unsubscribed from our emails." + +#: engine/vibes_auth/docs/drf/emailing.py:45 +#: engine/vibes_auth/emailing/views.py:61 +msgid "You are already unsubscribed." +msgstr "You are already unsubscribed." + +#: engine/vibes_auth/docs/drf/emailing.py:52 +msgid "Unsubscribe from email campaigns" +msgstr "Unsubscribe from email campaigns" + +#: engine/vibes_auth/docs/drf/emailing.py:54 +msgid "" +"Unsubscribe a user from all marketing email campaigns using their unique unsubscribe token.\n" +"\n" +"This endpoint is designed for email client compatibility where clicking a link triggers a GET request. The user will no longer receive promotional emails after successful unsubscription.\n" +"\n" +"**Note:** Transactional emails (order confirmations, password resets, etc.) are not affected by this setting." +msgstr "" +"Unsubscribe a user from all marketing email campaigns using their unique " +"unsubscribe token. This endpoint is designed for email client compatibility " +"where clicking a link triggers a GET request. The user will no longer " +"receive promotional emails after successful unsubscription. **Note:** " +"Transactional emails (order confirmations, password resets, etc.) are not " +"affected by this setting." + +#: engine/vibes_auth/docs/drf/emailing.py:66 +#: engine/vibes_auth/docs/drf/emailing.py:146 +msgid "Successfully unsubscribed from email campaigns." +msgstr "Successfully unsubscribed from email campaigns." + +#: engine/vibes_auth/docs/drf/emailing.py:82 +#: engine/vibes_auth/docs/drf/emailing.py:162 +msgid "Invalid or missing unsubscribe token." +msgstr "Invalid or missing unsubscribe token." + +#: engine/vibes_auth/docs/drf/emailing.py:96 +#: engine/vibes_auth/docs/drf/emailing.py:176 +msgid "User associated with the token was not found." +msgstr "User associated with the token was not found." + +#: engine/vibes_auth/docs/drf/emailing.py:118 +msgid "One-Click Unsubscribe (RFC 8058)" +msgstr "One-Click Unsubscribe (RFC 8058)" + +#: engine/vibes_auth/docs/drf/emailing.py:120 +msgid "" +"RFC 8058 compliant one-click unsubscribe endpoint for email campaigns.\n" +"\n" +"This endpoint supports the List-Unsubscribe-Post header mechanism defined in RFC 8058, which allows email clients to unsubscribe users with a single click without leaving the email application.\n" +"\n" +"The token can be provided either as a query parameter or in the request body.\n" +"\n" +"**Standards Compliance:**\n" +"- RFC 8058: Signaling One-Click Functionality for List Email Headers\n" +"- RFC 2369: The Use of URLs as Meta-Syntax for Core Mail List Commands\n" +"\n" +"**Note:** Transactional emails are not affected by this setting." +msgstr "" +"RFC 8058 compliant one-click unsubscribe endpoint for email campaigns. This endpoint supports the List-Unsubscribe-Post header mechanism defined in RFC 8058, which allows email clients to unsubscribe users with a single click without leaving the email application. The token can be provided either as a query parameter or in the request body.\n" +"\n" +"**Standards Compliance:** - RFC 8058: Signaling One-Click Functionality for List Email Headers - RFC 2369: The Use of URLs as Meta-Syntax for Core Mail List Commands **Note:** Transactional emails are not affected by this setting." + +#: engine/vibes_auth/docs/drf/emailing.py:137 +msgid "" +"Unsubscribe token (alternative to query parameter). Can be omitted if token " +"is provided in URL." +msgstr "" +"Unsubscribe token (alternative to query parameter). Can be omitted if token " +"is provided in URL." + +#: engine/vibes_auth/docs/drf/emailing.py:200 +msgid "Track email open event" +msgstr "Track email open event" + +#: engine/vibes_auth/docs/drf/emailing.py:202 +msgid "" +"Records when a campaign email is opened by the recipient.\n" +"\n" +"This endpoint is called automatically when the tracking pixel (1x1 transparent GIF) embedded in the email is loaded by the recipient's email client.\n" +"\n" +"**How it works:**\n" +"1. Each campaign email contains a unique tracking pixel URL with a `tid` parameter\n" +"2. When the email is opened and images are loaded, this endpoint is called\n" +"3. The recipient's status is updated to 'opened' and the timestamp is recorded\n" +"4. The campaign's aggregate opened count is updated\n" +"\n" +"**Privacy considerations:**\n" +"- Only the first open is recorded (subsequent opens are ignored)\n" +"- No personal information beyond the tracking ID is logged\n" +"- Users who disable image loading will not trigger this event\n" +"\n" +"**Response:**\n" +"Returns a 1x1 transparent GIF image regardless of whether tracking succeeded, to ensure consistent behavior and prevent information leakage." +msgstr "" +"Records when a campaign email is opened by the recipient. This endpoint is called automatically when the tracking pixel (1x1 transparent GIF) embedded in the email is loaded by the recipient's email client.\n" +"\n" +"**How it works:** 1. Each campaign email contains a unique tracking pixel URL with a `tid` parameter 2. When the email is opened and images are loaded, this endpoint is called 3. The recipient's status is updated to 'opened' and the timestamp is recorded 4. The campaign's aggregate opened count is updated **Privacy considerations:**\n" +"- Only the first open is recorded (subsequent opens are ignored) - No personal information beyond the tracking ID is logged - Users who disable image loading will not trigger this event **Response:** Returns a 1x1 transparent GIF image regardless of whether tracking succeeded, to ensure consistent behavior and prevent information leakage." + +#: engine/vibes_auth/docs/drf/emailing.py:223 +msgid "" +"Tracking ID (UUID) unique to each campaign-recipient combination. This ID " +"links the open event to a specific recipient and campaign." +msgstr "" +"Tracking ID (UUID) unique to each campaign-recipient combination. This ID " +"links the open event to a specific recipient and campaign." + +#: engine/vibes_auth/docs/drf/emailing.py:241 +msgid "" +"1x1 transparent GIF image. Always returned regardless of tracking status to " +"maintain consistent behavior." +msgstr "" +"1x1 transparent GIF image. Always returned regardless of tracking status to " +"maintain consistent behavior." + +#: engine/vibes_auth/docs/drf/emailing.py:247 +msgid "" +"Returned when no tracking ID is provided. Note: Invalid tracking IDs still " +"return 200 with the GIF to prevent enumeration attacks." +msgstr "" +"Returned when no tracking ID is provided. Note: Invalid tracking IDs still " +"return 200 with the GIF to prevent enumeration attacks." + #: engine/vibes_auth/docs/drf/messaging.py:17 msgid "User messages entrypoint" msgstr "User messages entrypoint" @@ -244,9 +385,9 @@ msgid "confirm a user's password reset" msgstr "Confirm a user's password reset" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:351 +#: engine/vibes_auth/graphene/mutations.py:358 #: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107 -#: engine/vibes_auth/viewsets.py:94 +#: engine/vibes_auth/viewsets.py:97 msgid "passwords do not match" msgstr "Passwords do not match" @@ -299,195 +440,166 @@ msgstr "Opened" msgid "Clicked" msgstr "Clicked" -#: engine/vibes_auth/emailing/models.py:35 -#: engine/vibes_auth/emailing/models.py:71 -#: engine/vibes_auth/emailing/models.py:121 +#: engine/vibes_auth/emailing/models.py:38 +#: engine/vibes_auth/emailing/models.py:88 msgid "name" msgstr "name" -#: engine/vibes_auth/emailing/models.py:36 -msgid "descriptive name for the image" -msgstr "descriptive name for the image" - -#: engine/vibes_auth/emailing/models.py:40 -msgid "image" -msgstr "image" - -#: engine/vibes_auth/emailing/models.py:41 -msgid "image file to use in email templates" -msgstr "image file to use in email templates" - -#: engine/vibes_auth/emailing/models.py:47 -msgid "alt text" -msgstr "other text" - -#: engine/vibes_auth/emailing/models.py:48 -msgid "alternative text for accessibility" -msgstr "alternative text for accessibility" - -#: engine/vibes_auth/emailing/models.py:52 -msgid "email image" -msgstr "email image" - -#: engine/vibes_auth/emailing/models.py:53 -msgid "email images" -msgstr "email images" - -#: engine/vibes_auth/emailing/models.py:72 +#: engine/vibes_auth/emailing/models.py:39 msgid "internal name for the template" msgstr "internal name for the template" -#: engine/vibes_auth/emailing/models.py:76 +#: engine/vibes_auth/emailing/models.py:43 msgid "slug" msgstr "servants" -#: engine/vibes_auth/emailing/models.py:77 +#: engine/vibes_auth/emailing/models.py:44 msgid "unique identifier for the template" msgstr "unique identifier for the template" -#: engine/vibes_auth/emailing/models.py:81 +#: engine/vibes_auth/emailing/models.py:48 msgid "subject" msgstr "subject" -#: engine/vibes_auth/emailing/models.py:82 +#: engine/vibes_auth/emailing/models.py:49 msgid "email subject line - supports {{ variables }}" msgstr "email subject line - supports {{ variables }}" -#: engine/vibes_auth/emailing/models.py:85 -msgid "HTML content" -msgstr "HTML content" +#: engine/vibes_auth/emailing/models.py:52 +msgid "content" +msgstr "content" -#: engine/vibes_auth/emailing/models.py:87 +#: engine/vibes_auth/emailing/models.py:54 msgid "" -"email body content - supports {{ user.first_name }}, {{ user.email }}, {{ " -"project_name }}, {{ unsubscribe_url }}" +"email body in markdown - supports {{ user.first_name }}, {{ user.email }}, " +"{{ project_name }}, {{ unsubscribe_url }}" msgstr "" "email body content - supports {{ user.first_name }}, {{ user.email }}, {{ " "project_name }}, {{ unsubscribe_url }}" -#: engine/vibes_auth/emailing/models.py:94 +#: engine/vibes_auth/emailing/models.py:61 msgid "plain text content" msgstr "plain text content" -#: engine/vibes_auth/emailing/models.py:95 +#: engine/vibes_auth/emailing/models.py:62 msgid "plain text fallback (auto-generated if empty)" msgstr "plain text fallback (auto-generated if empty)" -#: engine/vibes_auth/emailing/models.py:100 +#: engine/vibes_auth/emailing/models.py:67 msgid "available variables" msgstr "available variables" -#: engine/vibes_auth/emailing/models.py:101 +#: engine/vibes_auth/emailing/models.py:68 msgid "documentation of available template variables" msgstr "documentation of available template variables" -#: engine/vibes_auth/emailing/models.py:105 +#: engine/vibes_auth/emailing/models.py:72 msgid "email template" msgstr "email template" -#: engine/vibes_auth/emailing/models.py:106 +#: engine/vibes_auth/emailing/models.py:73 msgid "email templates" msgstr "email templates" -#: engine/vibes_auth/emailing/models.py:122 +#: engine/vibes_auth/emailing/models.py:89 msgid "internal name for the campaign" msgstr "internal name for the campaign" -#: engine/vibes_auth/emailing/models.py:129 +#: engine/vibes_auth/emailing/models.py:96 msgid "template" msgstr "template" -#: engine/vibes_auth/emailing/models.py:130 +#: engine/vibes_auth/emailing/models.py:97 msgid "email template to use for this campaign" msgstr "email template to use for this campaign" -#: engine/vibes_auth/emailing/models.py:136 -#: engine/vibes_auth/emailing/models.py:206 +#: engine/vibes_auth/emailing/models.py:103 +#: engine/vibes_auth/emailing/models.py:173 msgid "status" msgstr "status" -#: engine/vibes_auth/emailing/models.py:141 +#: engine/vibes_auth/emailing/models.py:108 msgid "scheduled at" msgstr "scheduled at" -#: engine/vibes_auth/emailing/models.py:142 +#: engine/vibes_auth/emailing/models.py:109 msgid "when to send the campaign (leave empty for manual send)" msgstr "when to send the campaign (leave empty for manual send)" -#: engine/vibes_auth/emailing/models.py:147 -#: engine/vibes_auth/emailing/models.py:211 +#: engine/vibes_auth/emailing/models.py:114 +#: engine/vibes_auth/emailing/models.py:178 msgid "sent at" msgstr "late that" -#: engine/vibes_auth/emailing/models.py:148 +#: engine/vibes_auth/emailing/models.py:115 msgid "when the campaign was actually sent" msgstr "when the campaign was actually sent" -#: engine/vibes_auth/emailing/models.py:153 +#: engine/vibes_auth/emailing/models.py:120 msgid "total recipients" msgstr "total recipients" -#: engine/vibes_auth/emailing/models.py:157 +#: engine/vibes_auth/emailing/models.py:124 msgid "sent count" msgstr "sent count" -#: engine/vibes_auth/emailing/models.py:161 +#: engine/vibes_auth/emailing/models.py:128 msgid "failed count" msgstr "failed count" -#: engine/vibes_auth/emailing/models.py:165 +#: engine/vibes_auth/emailing/models.py:132 msgid "opened count" msgstr "opened count" -#: engine/vibes_auth/emailing/models.py:169 +#: engine/vibes_auth/emailing/models.py:136 msgid "clicked count" msgstr "clicked count" -#: engine/vibes_auth/emailing/models.py:173 +#: engine/vibes_auth/emailing/models.py:140 msgid "email campaign" msgstr "email campaign" -#: engine/vibes_auth/emailing/models.py:174 +#: engine/vibes_auth/emailing/models.py:141 msgid "email campaigns" msgstr "email campaigns" -#: engine/vibes_auth/emailing/models.py:194 +#: engine/vibes_auth/emailing/models.py:161 msgid "campaign" msgstr "campaign" -#: engine/vibes_auth/emailing/models.py:200 engine/vibes_auth/models.py:146 +#: engine/vibes_auth/emailing/models.py:167 engine/vibes_auth/models.py:183 msgid "user" msgstr "User" -#: engine/vibes_auth/emailing/models.py:216 +#: engine/vibes_auth/emailing/models.py:183 msgid "opened at" msgstr "opened at" -#: engine/vibes_auth/emailing/models.py:221 +#: engine/vibes_auth/emailing/models.py:188 msgid "clicked at" msgstr "clicked at" -#: engine/vibes_auth/emailing/models.py:227 +#: engine/vibes_auth/emailing/models.py:194 msgid "tracking ID" msgstr "tracking ID" -#: engine/vibes_auth/emailing/models.py:228 +#: engine/vibes_auth/emailing/models.py:195 msgid "unique ID for tracking opens and clicks" msgstr "unique ID for tracking opens and clicks" -#: engine/vibes_auth/emailing/models.py:233 +#: engine/vibes_auth/emailing/models.py:200 msgid "error message" msgstr "error message" -#: engine/vibes_auth/emailing/models.py:234 +#: engine/vibes_auth/emailing/models.py:201 msgid "error details if sending failed" msgstr "error details if sending failed" -#: engine/vibes_auth/emailing/models.py:238 +#: engine/vibes_auth/emailing/models.py:205 msgid "campaign recipient" msgstr "campaign recipient" -#: engine/vibes_auth/emailing/models.py:239 +#: engine/vibes_auth/emailing/models.py:206 msgid "campaign recipients" msgstr "campaign recipients" @@ -503,73 +615,73 @@ msgstr "You received this email because you subscribed to our newsletter." msgid "Unsubscribe" msgstr "Unsubscribe" -#: engine/vibes_auth/emailing/views.py:71 +#: engine/vibes_auth/emailing/views.py:39 msgid "Unsubscribe token is required." msgstr "Unsubscribe token is required." -#: engine/vibes_auth/emailing/views.py:79 +#: engine/vibes_auth/emailing/views.py:47 msgid "Invalid unsubscribe token format." msgstr "Invalid unsubscribe token format." -#: engine/vibes_auth/emailing/views.py:87 +#: engine/vibes_auth/emailing/views.py:55 msgid "User not found." msgstr "User not found." -#: engine/vibes_auth/emailing/views.py:93 -msgid "You are already unsubscribed." -msgstr "You are already unsubscribed." - -#: engine/vibes_auth/emailing/views.py:101 -msgid "You have been successfully unsubscribed from our emails." -msgstr "You have been successfully unsubscribed from our emails." - -#: engine/vibes_auth/graphene/mutations.py:46 +#: engine/vibes_auth/graphene/mutations.py:47 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "The user's b64-encoded uuid who referred the new user to us." -#: engine/vibes_auth/graphene/mutations.py:68 +#: engine/vibes_auth/graphene/mutations.py:70 msgid "password too weak" msgstr "The password is too weak" -#: engine/vibes_auth/graphene/mutations.py:128 +#: engine/vibes_auth/graphene/mutations.py:130 msgid "malformed email" msgstr "Malformed email" -#: engine/vibes_auth/graphene/mutations.py:140 +#: engine/vibes_auth/graphene/mutations.py:142 #: engine/vibes_auth/serializers.py:117 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Malformed phone number: {phone_number}!" -#: engine/vibes_auth/graphene/mutations.py:165 +#: engine/vibes_auth/graphene/mutations.py:167 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Invalid attribute format: {attribute_pair}!" -#: engine/vibes_auth/graphene/mutations.py:182 +#: engine/vibes_auth/graphene/mutations.py:184 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} does not exist: {uuid}!" -#: engine/vibes_auth/graphene/mutations.py:304 -#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180 +#: engine/vibes_auth/graphene/mutations.py:309 +#: engine/vibes_auth/viewsets.py:174 engine/vibes_auth/viewsets.py:198 msgid "activation link is invalid!" msgstr "Activation link is invalid!" -#: engine/vibes_auth/graphene/mutations.py:307 +#: engine/vibes_auth/graphene/mutations.py:312 msgid "account already activated..." msgstr "Account has been already activated..." -#: engine/vibes_auth/graphene/mutations.py:314 -#: engine/vibes_auth/graphene/mutations.py:376 +#: engine/vibes_auth/graphene/mutations.py:319 +#: engine/vibes_auth/graphene/mutations.py:383 msgid "something went wrong: {e!s}" msgstr "Something went wrong: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:358 -#: engine/vibes_auth/viewsets.py:106 +#: engine/vibes_auth/graphene/mutations.py:365 +#: engine/vibes_auth/viewsets.py:109 msgid "token is invalid!" msgstr "Token is invalid!" +#: engine/vibes_auth/graphene/mutations.py:403 +msgid "only image files are allowed (jpg, png, gif, webp)" +msgstr "Only image files are allowed (jpg, png, gif, webp)" + +#: engine/vibes_auth/graphene/mutations.py:406 +msgid "file size must not exceed 5 MB" +msgstr "File size must not exceed 5 MB" + #: engine/vibes_auth/graphene/object_types.py:46 msgid "" "the products this user has viewed most recently (max 48), in " @@ -579,7 +691,7 @@ msgstr "" "chronological order." #: engine/vibes_auth/graphene/object_types.py:49 -#: engine/vibes_auth/models.py:214 +#: engine/vibes_auth/models.py:270 msgid "groups" msgstr "Groups" @@ -588,7 +700,7 @@ msgid "wishlist" msgstr "Wishlist" #: engine/vibes_auth/graphene/object_types.py:56 -#: engine/vibes_auth/models.py:70 +#: engine/vibes_auth/models.py:75 msgid "avatar" msgstr "Avatar" @@ -625,7 +737,7 @@ msgstr "We're searching for the operator to answer you already, hold by!" msgid "Assignee must be a staff user." msgstr "Assignee must be a staff user." -#: engine/vibes_auth/models.py:42 +#: engine/vibes_auth/models.py:44 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -643,123 +755,135 @@ msgstr "" "verifying accounts. The User model is designed to handle specific use cases " "for enhanced user management." -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "email" msgstr "Email" -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "user email address" msgstr "User's email address" -#: engine/vibes_auth/models.py:55 +#: engine/vibes_auth/models.py:57 msgid "phone_number" msgstr "Phone Number" -#: engine/vibes_auth/models.py:60 +#: engine/vibes_auth/models.py:61 msgid "user phone number" msgstr "User phone number" -#: engine/vibes_auth/models.py:66 +#: engine/vibes_auth/models.py:68 msgid "first_name" msgstr "First name" -#: engine/vibes_auth/models.py:67 +#: engine/vibes_auth/models.py:71 msgid "last_name" msgstr "Last name" -#: engine/vibes_auth/models.py:73 +#: engine/vibes_auth/models.py:78 msgid "user profile image" msgstr "User profile image" -#: engine/vibes_auth/models.py:78 +#: engine/vibes_auth/models.py:83 msgid "is verified" msgstr "Is verified" -#: engine/vibes_auth/models.py:79 +#: engine/vibes_auth/models.py:84 msgid "user verification status" msgstr "User's verification status" -#: engine/vibes_auth/models.py:82 +#: engine/vibes_auth/models.py:87 msgid "is_active" msgstr "Is active" -#: engine/vibes_auth/models.py:84 +#: engine/vibes_auth/models.py:89 msgid "unselect this instead of deleting accounts" msgstr "Unselect this instead of deleting accounts" -#: engine/vibes_auth/models.py:87 +#: engine/vibes_auth/models.py:92 msgid "is_subscribed" msgstr "Is subscribed" -#: engine/vibes_auth/models.py:88 +#: engine/vibes_auth/models.py:93 msgid "user's newsletter subscription status" msgstr "User's newsletter subscription status" -#: engine/vibes_auth/models.py:92 +#: engine/vibes_auth/models.py:98 msgid "activation token" msgstr "Activation token" -#: engine/vibes_auth/models.py:95 +#: engine/vibes_auth/models.py:103 +msgid "activation token created" +msgstr "Activation token created" + +#: engine/vibes_auth/models.py:107 msgid "unsubscribe token" msgstr "unsubscribe token" -#: engine/vibes_auth/models.py:96 +#: engine/vibes_auth/models.py:108 msgid "token for secure one-click unsubscribe from campaigns" msgstr "token for secure one-click unsubscribe from campaigns" -#: engine/vibes_auth/models.py:106 +#: engine/vibes_auth/models.py:118 msgid "attributes" msgstr "Attributes" -#: engine/vibes_auth/models.py:147 +#: engine/vibes_auth/models.py:184 msgid "users" msgstr "Users" -#: engine/vibes_auth/models.py:154 +#: engine/vibes_auth/models.py:202 +msgid "admin OTP code" +msgstr "Admin OTP code" + +#: engine/vibes_auth/models.py:203 +msgid "admin OTP codes" +msgstr "Admin OTP codes" + +#: engine/vibes_auth/models.py:210 msgid "For anonymous threads" msgstr "For anonymous threads" -#: engine/vibes_auth/models.py:178 +#: engine/vibes_auth/models.py:234 msgid "Chat thread" msgstr "Chat thread" -#: engine/vibes_auth/models.py:179 +#: engine/vibes_auth/models.py:235 msgid "Chat threads" msgstr "Chat threads" -#: engine/vibes_auth/models.py:185 +#: engine/vibes_auth/models.py:241 msgid "provide user or email for anonymous thread." msgstr "provide user or email for anonymous thread." -#: engine/vibes_auth/models.py:188 +#: engine/vibes_auth/models.py:244 msgid "assignee must be a staff user." msgstr "assignee must be a staff user." -#: engine/vibes_auth/models.py:206 +#: engine/vibes_auth/models.py:262 msgid "Chat message" msgstr "Chat message" -#: engine/vibes_auth/models.py:207 +#: engine/vibes_auth/models.py:263 msgid "Chat messages" msgstr "Chat messages" -#: engine/vibes_auth/models.py:213 +#: engine/vibes_auth/models.py:269 msgid "group" msgstr "Group" -#: engine/vibes_auth/models.py:220 +#: engine/vibes_auth/models.py:276 msgid "outstanding token" msgstr "Outstanding token" -#: engine/vibes_auth/models.py:221 +#: engine/vibes_auth/models.py:277 msgid "outstanding tokens" msgstr "Outstanding tokens" -#: engine/vibes_auth/models.py:227 +#: engine/vibes_auth/models.py:283 msgid "blacklisted token" msgstr "Blacklisted token" -#: engine/vibes_auth/models.py:228 +#: engine/vibes_auth/models.py:284 msgid "blacklisted tokens" msgstr "Blacklisted tokens" @@ -801,6 +925,10 @@ msgstr "No user uuid claim present in token" msgid "user does not exist" msgstr "User does not exist" +#: engine/vibes_auth/templates/admin/verify_otp.html:27 +msgid "Verify" +msgstr "Verify" + #: engine/vibes_auth/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "Reset your password" @@ -886,12 +1014,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "Best regards,
the %(project_name)s team" -#: engine/vibes_auth/utils/emailing.py:24 +#: engine/vibes_auth/utils/emailing.py:27 #, python-brace-format msgid "{settings.PROJECT_NAME} | Activate Account" msgstr "{settings.PROJECT_NAME} | Activate Account" -#: engine/vibes_auth/utils/emailing.py:63 +#: engine/vibes_auth/utils/emailing.py:66 #, python-brace-format msgid "{settings.PROJECT_NAME} | Reset Password" msgstr "{settings.PROJECT_NAME} | Reset Password" @@ -944,7 +1072,7 @@ msgstr "" msgid "the token is invalid" msgstr "The token is invalid" -#: engine/vibes_auth/viewsets.py:44 +#: engine/vibes_auth/viewsets.py:47 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." @@ -952,10 +1080,18 @@ 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." -#: engine/vibes_auth/viewsets.py:113 +#: engine/vibes_auth/viewsets.py:116 msgid "password reset successfully" msgstr "Password has been reset successfully!" -#: engine/vibes_auth/viewsets.py:161 +#: engine/vibes_auth/viewsets.py:146 +msgid "" +"Account already registered but not yet activated. A new activation email has" +" been sent." +msgstr "" +"Account already registered but not yet activated. A new activation email has" +" been sent." + +#: engine/vibes_auth/viewsets.py:179 msgid "account already activated!" msgstr "You have already activated the account..." diff --git a/engine/vibes_auth/locale/es_ES/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/es_ES/LC_MESSAGES/django.mo index 529f100a..78cb04d8 100644 Binary files a/engine/vibes_auth/locale/es_ES/LC_MESSAGES/django.mo and b/engine/vibes_auth/locale/es_ES/LC_MESSAGES/django.mo differ diff --git a/engine/vibes_auth/locale/es_ES/LC_MESSAGES/django.po b/engine/vibes_auth/locale/es_ES/LC_MESSAGES/django.po index 9321fa5c..c662415c 100644 --- a/engine/vibes_auth/locale/es_ES/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/es_ES/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 03:06+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,32 +13,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:65 engine/vibes_auth/admin.py:66 +#: engine/vibes_auth/admin.py:64 engine/vibes_auth/admin.py:65 #: engine/vibes_auth/graphene/object_types.py:54 msgid "balance" msgstr "Saldo" -#: engine/vibes_auth/admin.py:74 +#: engine/vibes_auth/admin.py:73 msgid "order" msgstr "Pida" -#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:51 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:51 msgid "orders" msgstr "Pedidos" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:84 msgid "personal info" msgstr "Información personal" -#: engine/vibes_auth/admin.py:89 engine/vibes_auth/graphene/object_types.py:50 +#: engine/vibes_auth/admin.py:88 engine/vibes_auth/graphene/object_types.py:50 msgid "permissions" msgstr "Permisos" -#: engine/vibes_auth/admin.py:102 +#: engine/vibes_auth/admin.py:101 msgid "important dates" msgstr "Fechas importantes" -#: engine/vibes_auth/admin.py:103 +#: engine/vibes_auth/admin.py:102 msgid "additional info" msgstr "Información adicional" @@ -54,80 +54,84 @@ msgstr "Cerrar los hilos seleccionados" msgid "Open selected threads" msgstr "Abrir los hilos seleccionados" -#: engine/vibes_auth/admin.py:208 -msgid "Preview" -msgstr "Vista previa" - -#: engine/vibes_auth/admin.py:209 engine/vibes_auth/admin.py:249 -#: engine/vibes_auth/admin.py:326 -msgid "Metadata" -msgstr "Metadatos" - -#: engine/vibes_auth/admin.py:212 -msgid "preview" -msgstr "vista previa" - -#: engine/vibes_auth/admin.py:221 -msgid "image preview" -msgstr "vista previa de la imagen" - -#: engine/vibes_auth/admin.py:241 +#: engine/vibes_auth/admin.py:209 msgid "Content" msgstr "Contenido" -#: engine/vibes_auth/admin.py:243 +#: engine/vibes_auth/admin.py:211 msgid "Documentation" msgstr "Documentación" -#: engine/vibes_auth/admin.py:313 +#: engine/vibes_auth/admin.py:217 engine/vibes_auth/admin.py:294 +msgid "Metadata" +msgstr "Metadatos" + +#: engine/vibes_auth/admin.py:281 msgid "Scheduling" msgstr "Programación" -#: engine/vibes_auth/admin.py:315 +#: engine/vibes_auth/admin.py:283 msgid "Statistics" msgstr "Estadísticas" -#: engine/vibes_auth/admin.py:329 +#: engine/vibes_auth/admin.py:297 msgid "stats" msgstr "estatal" -#: engine/vibes_auth/admin.py:335 +#: engine/vibes_auth/admin.py:303 msgid "Prepare recipients (subscribed users)" msgstr "Preparar destinatarios (usuarios suscritos)" -#: engine/vibes_auth/admin.py:343 +#: engine/vibes_auth/admin.py:311 msgid "Campaign '{}' is not in draft status." msgstr "La campaña «{}» no se encuentra en estado de borrador." -#: engine/vibes_auth/admin.py:350 +#: engine/vibes_auth/admin.py:318 msgid "Preparing recipients for campaign '{}'." msgstr "Preparando destinatarios para la campaña «{}»." -#: engine/vibes_auth/admin.py:354 +#: engine/vibes_auth/admin.py:322 msgid "Send campaign now" msgstr "Enviar campaña ahora" -#: engine/vibes_auth/admin.py:362 +#: engine/vibes_auth/admin.py:330 msgid "Campaign '{}' cannot be sent (status: {})." msgstr "No se puede enviar la campaña «{}» (estado: {})." -#: engine/vibes_auth/admin.py:372 +#: engine/vibes_auth/admin.py:340 msgid "Campaign '{}' has no recipients. Prepare recipients first." msgstr "" "La campaña «{}» no tiene destinatarios. Prepare primero los destinatarios." -#: engine/vibes_auth/admin.py:383 +#: engine/vibes_auth/admin.py:351 msgid "Started sending campaign '{}'." msgstr "Se ha iniciado el envío de la campaña «{}»." -#: engine/vibes_auth/admin.py:387 +#: engine/vibes_auth/admin.py:355 msgid "Cancel campaign" msgstr "Cancelar campaña" -#: engine/vibes_auth/admin.py:396 +#: engine/vibes_auth/admin.py:364 msgid "{} campaign(s) cancelled." msgstr "Campaña(s) cancelada(s)." +#: engine/vibes_auth/admin_site.py:24 +msgid "Verification code" +msgstr "Código de verificación" + +#: engine/vibes_auth/admin_site.py:62 +msgid "A verification code has been sent to your email." +msgstr "Se ha enviado un código de verificación a tu correo electrónico." + +#: engine/vibes_auth/admin_site.py:118 +msgid "Invalid or expired code. Please try again." +msgstr "Código no válido o caducado. Inténtalo de nuevo." + +#: engine/vibes_auth/admin_site.py:124 +#: engine/vibes_auth/templates/admin/verify_otp.html:10 +msgid "Two-factor authentication" +msgstr "Autenticación de dos factores" + #: engine/vibes_auth/apps.py:8 msgid "Accounting" msgstr "Contabilidad" @@ -152,6 +156,148 @@ msgstr "Personal" msgid "System" msgstr "Sistema" +#: engine/vibes_auth/docs/drf/emailing.py:18 +msgid "" +"UUID token for unsubscribing. This token is unique per user and is included " +"in the unsubscribe link of every campaign email. The token remains constant " +"for each user unless regenerated." +msgstr "" +"Token UUID para darse de baja. Este token es único para cada usuario y se " +"incluye en el enlace para darse de baja de cada correo electrónico de " +"campaña. El token permanece constante para cada usuario a menos que se " +"regenere." + +#: engine/vibes_auth/docs/drf/emailing.py:37 +#: engine/vibes_auth/emailing/views.py:69 +msgid "You have been successfully unsubscribed from our emails." +msgstr "Te hemos dado de baja de nuestros correos electrónicos." + +#: engine/vibes_auth/docs/drf/emailing.py:45 +#: engine/vibes_auth/emailing/views.py:61 +msgid "You are already unsubscribed." +msgstr "Ya estás dado de baja." + +#: engine/vibes_auth/docs/drf/emailing.py:52 +msgid "Unsubscribe from email campaigns" +msgstr "Cancelar la suscripción a las campañas por correo electrónico" + +#: engine/vibes_auth/docs/drf/emailing.py:54 +msgid "" +"Unsubscribe a user from all marketing email campaigns using their unique unsubscribe token.\n" +"\n" +"This endpoint is designed for email client compatibility where clicking a link triggers a GET request. The user will no longer receive promotional emails after successful unsubscription.\n" +"\n" +"**Note:** Transactional emails (order confirmations, password resets, etc.) are not affected by this setting." +msgstr "" +"Dele de baja a un usuario de todas las campañas de marketing por correo " +"electrónico utilizando su token de baja único. Este punto final está " +"diseñado para la compatibilidad con clientes de correo electrónico, donde al" +" hacer clic en un enlace se activa una solicitud GET. El usuario ya no " +"recibirá correos electrónicos promocionales después de darse de baja " +"correctamente. **Nota:** Los correos electrónicos transaccionales " +"(confirmaciones de pedidos, restablecimiento de contraseñas, etc.) no se ven" +" afectados por esta configuración." + +#: engine/vibes_auth/docs/drf/emailing.py:66 +#: engine/vibes_auth/docs/drf/emailing.py:146 +msgid "Successfully unsubscribed from email campaigns." +msgstr "Te hemos dado de baja de las campañas de correo electrónico." + +#: engine/vibes_auth/docs/drf/emailing.py:82 +#: engine/vibes_auth/docs/drf/emailing.py:162 +msgid "Invalid or missing unsubscribe token." +msgstr "Token de cancelación de suscripción no válido o ausente." + +#: engine/vibes_auth/docs/drf/emailing.py:96 +#: engine/vibes_auth/docs/drf/emailing.py:176 +msgid "User associated with the token was not found." +msgstr "No se encontró el usuario asociado al token." + +#: engine/vibes_auth/docs/drf/emailing.py:118 +msgid "One-Click Unsubscribe (RFC 8058)" +msgstr "Cancelar suscripción con un solo clic (RFC 8058)" + +#: engine/vibes_auth/docs/drf/emailing.py:120 +msgid "" +"RFC 8058 compliant one-click unsubscribe endpoint for email campaigns.\n" +"\n" +"This endpoint supports the List-Unsubscribe-Post header mechanism defined in RFC 8058, which allows email clients to unsubscribe users with a single click without leaving the email application.\n" +"\n" +"The token can be provided either as a query parameter or in the request body.\n" +"\n" +"**Standards Compliance:**\n" +"- RFC 8058: Signaling One-Click Functionality for List Email Headers\n" +"- RFC 2369: The Use of URLs as Meta-Syntax for Core Mail List Commands\n" +"\n" +"**Note:** Transactional emails are not affected by this setting." +msgstr "" +"Punto final de cancelación de suscripción con un solo clic compatible con RFC 8058 para campañas de correo electrónico. Este punto final es compatible con el mecanismo de encabezado List-Unsubscribe-Post definido en RFC 8058, que permite a los clientes de correo electrónico cancelar la suscripción de los usuarios con un solo clic sin salir de la aplicación de correo electrónico. El token se puede proporcionar como parámetro de consulta o en el cuerpo de la solicitud.\n" +"\n" +"**Cumplimiento de normas:** - RFC 8058: Señalización de la funcionalidad de un solo clic para los encabezados de correo electrónico de listas - RFC 2369: El uso de URL como metasintaxis para los comandos básicos de listas de correo **Nota:** Los correos electrónicos transaccionales no se ven afectados por esta configuración." + +#: engine/vibes_auth/docs/drf/emailing.py:137 +msgid "" +"Unsubscribe token (alternative to query parameter). Can be omitted if token " +"is provided in URL." +msgstr "" +"Token para cancelar la suscripción (alternativa al parámetro de consulta). " +"Se puede omitir si el token se proporciona en la URL." + +#: engine/vibes_auth/docs/drf/emailing.py:200 +msgid "Track email open event" +msgstr "Seguir evento de apertura de correo electrónico" + +#: engine/vibes_auth/docs/drf/emailing.py:202 +msgid "" +"Records when a campaign email is opened by the recipient.\n" +"\n" +"This endpoint is called automatically when the tracking pixel (1x1 transparent GIF) embedded in the email is loaded by the recipient's email client.\n" +"\n" +"**How it works:**\n" +"1. Each campaign email contains a unique tracking pixel URL with a `tid` parameter\n" +"2. When the email is opened and images are loaded, this endpoint is called\n" +"3. The recipient's status is updated to 'opened' and the timestamp is recorded\n" +"4. The campaign's aggregate opened count is updated\n" +"\n" +"**Privacy considerations:**\n" +"- Only the first open is recorded (subsequent opens are ignored)\n" +"- No personal information beyond the tracking ID is logged\n" +"- Users who disable image loading will not trigger this event\n" +"\n" +"**Response:**\n" +"Returns a 1x1 transparent GIF image regardless of whether tracking succeeded, to ensure consistent behavior and prevent information leakage." +msgstr "" +"Registra cuándo el destinatario abre un correo electrónico de campaña. Este punto final se activa automáticamente cuando el cliente de correo electrónico del destinatario carga el píxel de seguimiento (GIF transparente de 1x1) incrustado en el correo electrónico.\n" +"\n" +"**Cómo funciona:** 1. Cada correo electrónico de campaña contiene una URL de píxel de seguimiento única con un parámetro «tid». 2. Cuando se abre el correo electrónico y se cargan las imágenes, se llama a este punto final. 3. El estado del destinatario se actualiza a «abierto» y se registra la marca de tiempo. 4. Se actualiza el recuento agregado de aperturas de la campaña. **Consideraciones de privacidad:**\n" +"- Solo se registra la primera apertura (las aperturas posteriores se ignoran). - No se registra ninguna información personal más allá del ID de seguimiento. - Los usuarios que desactivan la carga de imágenes no activarán este evento. **Respuesta:** Devuelve una imagen GIF transparente de 1x1 independientemente de si el seguimiento se ha realizado correctamente, para garantizar un comportamiento coherente y evitar la fuga de información." + +#: engine/vibes_auth/docs/drf/emailing.py:223 +msgid "" +"Tracking ID (UUID) unique to each campaign-recipient combination. This ID " +"links the open event to a specific recipient and campaign." +msgstr "" +"Identificador de seguimiento (UUID) único para cada combinación de campaña y" +" destinatario. Este identificador vincula el evento de apertura con un " +"destinatario y una campaña específicos." + +#: engine/vibes_auth/docs/drf/emailing.py:241 +msgid "" +"1x1 transparent GIF image. Always returned regardless of tracking status to " +"maintain consistent behavior." +msgstr "" +"Imagen GIF transparente 1x1. Siempre se devuelve independientemente del " +"estado de seguimiento para mantener un comportamiento coherente." + +#: engine/vibes_auth/docs/drf/emailing.py:247 +msgid "" +"Returned when no tracking ID is provided. Note: Invalid tracking IDs still " +"return 200 with the GIF to prevent enumeration attacks." +msgstr "" +"Se devuelve cuando no se proporciona ningún ID de seguimiento. Nota: Los ID " +"de seguimiento no válidos siguen devolviendo 200 con el GIF para evitar " +"ataques de enumeración." + #: engine/vibes_auth/docs/drf/messaging.py:17 msgid "User messages entrypoint" msgstr "Punto de entrada de mensajes de usuario" @@ -247,9 +393,9 @@ msgid "confirm a user's password reset" msgstr "Confirmar el restablecimiento de la contraseña de un usuario" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:351 +#: engine/vibes_auth/graphene/mutations.py:358 #: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107 -#: engine/vibes_auth/viewsets.py:94 +#: engine/vibes_auth/viewsets.py:97 msgid "passwords do not match" msgstr "Las contraseñas no coinciden" @@ -302,197 +448,168 @@ msgstr "Abierto" msgid "Clicked" msgstr "Hacido clic" -#: engine/vibes_auth/emailing/models.py:35 -#: engine/vibes_auth/emailing/models.py:71 -#: engine/vibes_auth/emailing/models.py:121 +#: engine/vibes_auth/emailing/models.py:38 +#: engine/vibes_auth/emailing/models.py:88 msgid "name" msgstr "nombre" -#: engine/vibes_auth/emailing/models.py:36 -msgid "descriptive name for the image" -msgstr "nombre descriptivo de la imagen" - -#: engine/vibes_auth/emailing/models.py:40 -msgid "image" -msgstr "imagen" - -#: engine/vibes_auth/emailing/models.py:41 -msgid "image file to use in email templates" -msgstr "archivo de imagen para usar en plantillas de correo electrónico" - -#: engine/vibes_auth/emailing/models.py:47 -msgid "alt text" -msgstr "otro texto" - -#: engine/vibes_auth/emailing/models.py:48 -msgid "alternative text for accessibility" -msgstr "texto alternativo para accesibilidad" - -#: engine/vibes_auth/emailing/models.py:52 -msgid "email image" -msgstr "imagen de correo electrónico" - -#: engine/vibes_auth/emailing/models.py:53 -msgid "email images" -msgstr "imágenes de correo electrónico" - -#: engine/vibes_auth/emailing/models.py:72 +#: engine/vibes_auth/emailing/models.py:39 msgid "internal name for the template" msgstr "nombre interno de la plantilla" -#: engine/vibes_auth/emailing/models.py:76 +#: engine/vibes_auth/emailing/models.py:43 msgid "slug" msgstr "esclavo" -#: engine/vibes_auth/emailing/models.py:77 +#: engine/vibes_auth/emailing/models.py:44 msgid "unique identifier for the template" msgstr "identificador único para la plantilla" -#: engine/vibes_auth/emailing/models.py:81 +#: engine/vibes_auth/emailing/models.py:48 msgid "subject" msgstr "asunto" -#: engine/vibes_auth/emailing/models.py:82 +#: engine/vibes_auth/emailing/models.py:49 msgid "email subject line - supports {{ variables }}" msgstr "Asunto del correo electrónico: compatible con {{ variables }}" -#: engine/vibes_auth/emailing/models.py:85 -msgid "HTML content" -msgstr "Contenido HTML" +#: engine/vibes_auth/emailing/models.py:52 +msgid "content" +msgstr "contenido" -#: engine/vibes_auth/emailing/models.py:87 +#: engine/vibes_auth/emailing/models.py:54 msgid "" -"email body content - supports {{ user.first_name }}, {{ user.email }}, {{ " -"project_name }}, {{ unsubscribe_url }}" +"email body in markdown - supports {{ user.first_name }}, {{ user.email }}, " +"{{ project_name }}, {{ unsubscribe_url }}" msgstr "" "Contenido del cuerpo del correo electrónico: admite {{ user.first_name }}, " "{{ user.email }}, {{ project_name }}, {{ unsubscribe_url }}." -#: engine/vibes_auth/emailing/models.py:94 +#: engine/vibes_auth/emailing/models.py:61 msgid "plain text content" msgstr "contenido de texto sin formato" -#: engine/vibes_auth/emailing/models.py:95 +#: engine/vibes_auth/emailing/models.py:62 msgid "plain text fallback (auto-generated if empty)" msgstr "texto sin formato de reserva (generado automáticamente si está vacío)" -#: engine/vibes_auth/emailing/models.py:100 +#: engine/vibes_auth/emailing/models.py:67 msgid "available variables" msgstr "variables disponibles" -#: engine/vibes_auth/emailing/models.py:101 +#: engine/vibes_auth/emailing/models.py:68 msgid "documentation of available template variables" msgstr "Documentación de las variables de plantilla disponibles." -#: engine/vibes_auth/emailing/models.py:105 +#: engine/vibes_auth/emailing/models.py:72 msgid "email template" msgstr "Plantilla de correo electrónico" -#: engine/vibes_auth/emailing/models.py:106 +#: engine/vibes_auth/emailing/models.py:73 msgid "email templates" msgstr "plantillas de correo electrónico" -#: engine/vibes_auth/emailing/models.py:122 +#: engine/vibes_auth/emailing/models.py:89 msgid "internal name for the campaign" msgstr "nombre interno de la campaña" -#: engine/vibes_auth/emailing/models.py:129 +#: engine/vibes_auth/emailing/models.py:96 msgid "template" msgstr "plantilla" -#: engine/vibes_auth/emailing/models.py:130 +#: engine/vibes_auth/emailing/models.py:97 msgid "email template to use for this campaign" msgstr "Plantilla de correo electrónico que se utilizará para esta campaña." -#: engine/vibes_auth/emailing/models.py:136 -#: engine/vibes_auth/emailing/models.py:206 +#: engine/vibes_auth/emailing/models.py:103 +#: engine/vibes_auth/emailing/models.py:173 msgid "status" msgstr "estado" -#: engine/vibes_auth/emailing/models.py:141 +#: engine/vibes_auth/emailing/models.py:108 msgid "scheduled at" msgstr "programado para" -#: engine/vibes_auth/emailing/models.py:142 +#: engine/vibes_auth/emailing/models.py:109 msgid "when to send the campaign (leave empty for manual send)" msgstr "Cuándo enviar la campaña (déjelo en blanco para enviarla manualmente)" -#: engine/vibes_auth/emailing/models.py:147 -#: engine/vibes_auth/emailing/models.py:211 +#: engine/vibes_auth/emailing/models.py:114 +#: engine/vibes_auth/emailing/models.py:178 msgid "sent at" msgstr "tarde que" -#: engine/vibes_auth/emailing/models.py:148 +#: engine/vibes_auth/emailing/models.py:115 msgid "when the campaign was actually sent" msgstr "cuando se envió realmente la campaña" -#: engine/vibes_auth/emailing/models.py:153 +#: engine/vibes_auth/emailing/models.py:120 msgid "total recipients" msgstr "receptores totales" -#: engine/vibes_auth/emailing/models.py:157 +#: engine/vibes_auth/emailing/models.py:124 msgid "sent count" msgstr "número de envíos" -#: engine/vibes_auth/emailing/models.py:161 +#: engine/vibes_auth/emailing/models.py:128 msgid "failed count" msgstr "recuento fallido" -#: engine/vibes_auth/emailing/models.py:165 +#: engine/vibes_auth/emailing/models.py:132 msgid "opened count" msgstr "recuento abierto" -#: engine/vibes_auth/emailing/models.py:169 +#: engine/vibes_auth/emailing/models.py:136 msgid "clicked count" msgstr "recuento de clics" -#: engine/vibes_auth/emailing/models.py:173 +#: engine/vibes_auth/emailing/models.py:140 msgid "email campaign" msgstr "campaña de correo electrónico" -#: engine/vibes_auth/emailing/models.py:174 +#: engine/vibes_auth/emailing/models.py:141 msgid "email campaigns" msgstr "campañas por correo electrónico" -#: engine/vibes_auth/emailing/models.py:194 +#: engine/vibes_auth/emailing/models.py:161 msgid "campaign" msgstr "campaña" -#: engine/vibes_auth/emailing/models.py:200 engine/vibes_auth/models.py:146 +#: engine/vibes_auth/emailing/models.py:167 engine/vibes_auth/models.py:183 msgid "user" msgstr "Usuario" -#: engine/vibes_auth/emailing/models.py:216 +#: engine/vibes_auth/emailing/models.py:183 msgid "opened at" msgstr "abierto en" -#: engine/vibes_auth/emailing/models.py:221 +#: engine/vibes_auth/emailing/models.py:188 msgid "clicked at" msgstr "hizo clic en" -#: engine/vibes_auth/emailing/models.py:227 +#: engine/vibes_auth/emailing/models.py:194 msgid "tracking ID" msgstr "ID de seguimiento" -#: engine/vibes_auth/emailing/models.py:228 +#: engine/vibes_auth/emailing/models.py:195 msgid "unique ID for tracking opens and clicks" msgstr "" "Identificador único para realizar un seguimiento de las aperturas y los " "clics." -#: engine/vibes_auth/emailing/models.py:233 +#: engine/vibes_auth/emailing/models.py:200 msgid "error message" msgstr "mensaje de error" -#: engine/vibes_auth/emailing/models.py:234 +#: engine/vibes_auth/emailing/models.py:201 msgid "error details if sending failed" msgstr "Detalles del error si el envío ha fallado" -#: engine/vibes_auth/emailing/models.py:238 +#: engine/vibes_auth/emailing/models.py:205 msgid "campaign recipient" msgstr "destinatario de la campaña" -#: engine/vibes_auth/emailing/models.py:239 +#: engine/vibes_auth/emailing/models.py:206 msgid "campaign recipients" msgstr "destinatarios de la campaña" @@ -510,74 +627,74 @@ msgstr "" msgid "Unsubscribe" msgstr "Cancelar suscripción" -#: engine/vibes_auth/emailing/views.py:71 +#: engine/vibes_auth/emailing/views.py:39 msgid "Unsubscribe token is required." msgstr "Se requiere un token de cancelación de suscripción." -#: engine/vibes_auth/emailing/views.py:79 +#: engine/vibes_auth/emailing/views.py:47 msgid "Invalid unsubscribe token format." msgstr "Formato de token de cancelación de suscripción no válido." -#: engine/vibes_auth/emailing/views.py:87 +#: engine/vibes_auth/emailing/views.py:55 msgid "User not found." msgstr "Usuario no encontrado." -#: engine/vibes_auth/emailing/views.py:93 -msgid "You are already unsubscribed." -msgstr "Ya estás dado de baja." - -#: engine/vibes_auth/emailing/views.py:101 -msgid "You have been successfully unsubscribed from our emails." -msgstr "Te hemos dado de baja de nuestros correos electrónicos." - -#: engine/vibes_auth/graphene/mutations.py:46 +#: engine/vibes_auth/graphene/mutations.py:47 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" "El uuid codificado en b64 del usuario que nos ha remitido al nuevo usuario." -#: engine/vibes_auth/graphene/mutations.py:68 +#: engine/vibes_auth/graphene/mutations.py:70 msgid "password too weak" msgstr "La contraseña es demasiado débil" -#: engine/vibes_auth/graphene/mutations.py:128 +#: engine/vibes_auth/graphene/mutations.py:130 msgid "malformed email" msgstr "Correo electrónico malformado" -#: engine/vibes_auth/graphene/mutations.py:140 +#: engine/vibes_auth/graphene/mutations.py:142 #: engine/vibes_auth/serializers.py:117 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Número de teléfono malformado: ¡{phone_number}!" -#: engine/vibes_auth/graphene/mutations.py:165 +#: engine/vibes_auth/graphene/mutations.py:167 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Formato de atributo no válido: ¡{attribute_pair}!" -#: engine/vibes_auth/graphene/mutations.py:182 +#: engine/vibes_auth/graphene/mutations.py:184 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} no existe: ¡{uuid}!" -#: engine/vibes_auth/graphene/mutations.py:304 -#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180 +#: engine/vibes_auth/graphene/mutations.py:309 +#: engine/vibes_auth/viewsets.py:174 engine/vibes_auth/viewsets.py:198 msgid "activation link is invalid!" msgstr "El enlace de activación no es válido." -#: engine/vibes_auth/graphene/mutations.py:307 +#: engine/vibes_auth/graphene/mutations.py:312 msgid "account already activated..." msgstr "La cuenta ya ha sido activada..." -#: engine/vibes_auth/graphene/mutations.py:314 -#: engine/vibes_auth/graphene/mutations.py:376 +#: engine/vibes_auth/graphene/mutations.py:319 +#: engine/vibes_auth/graphene/mutations.py:383 msgid "something went wrong: {e!s}" msgstr "Algo salió mal: {e!s}." -#: engine/vibes_auth/graphene/mutations.py:358 -#: engine/vibes_auth/viewsets.py:106 +#: engine/vibes_auth/graphene/mutations.py:365 +#: engine/vibes_auth/viewsets.py:109 msgid "token is invalid!" msgstr "¡La ficha no es válida!" +#: engine/vibes_auth/graphene/mutations.py:403 +msgid "only image files are allowed (jpg, png, gif, webp)" +msgstr "Solo se permiten archivos de imagen (jpg, png, gif, webp)." + +#: engine/vibes_auth/graphene/mutations.py:406 +msgid "file size must not exceed 5 MB" +msgstr "El tamaño del archivo no debe superar los 5 MB." + #: engine/vibes_auth/graphene/object_types.py:46 msgid "" "the products this user has viewed most recently (max 48), in " @@ -587,7 +704,7 @@ msgstr "" "orden cronológico inverso." #: engine/vibes_auth/graphene/object_types.py:49 -#: engine/vibes_auth/models.py:214 +#: engine/vibes_auth/models.py:270 msgid "groups" msgstr "Grupos" @@ -596,7 +713,7 @@ msgid "wishlist" msgstr "Lista de deseos" #: engine/vibes_auth/graphene/object_types.py:56 -#: engine/vibes_auth/models.py:70 +#: engine/vibes_auth/models.py:75 msgid "avatar" msgstr "Avatar" @@ -633,7 +750,7 @@ msgstr "Ya estamos buscando al operador que le responda, ¡espera!" msgid "Assignee must be a staff user." msgstr "El cesionario debe ser un usuario del personal." -#: engine/vibes_auth/models.py:42 +#: engine/vibes_auth/models.py:44 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -652,124 +769,136 @@ msgstr "" "verificar las cuentas. El modelo User está diseñado para manejar casos de " "uso específicos para una gestión de usuarios mejorada." -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "email" msgstr "Correo electrónico" -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "user email address" msgstr "Dirección de correo electrónico del usuario" -#: engine/vibes_auth/models.py:55 +#: engine/vibes_auth/models.py:57 msgid "phone_number" msgstr "Número de teléfono" -#: engine/vibes_auth/models.py:60 +#: engine/vibes_auth/models.py:61 msgid "user phone number" msgstr "Número de teléfono del usuario" -#: engine/vibes_auth/models.py:66 +#: engine/vibes_auth/models.py:68 msgid "first_name" msgstr "Nombre" -#: engine/vibes_auth/models.py:67 +#: engine/vibes_auth/models.py:71 msgid "last_name" msgstr "Apellido" -#: engine/vibes_auth/models.py:73 +#: engine/vibes_auth/models.py:78 msgid "user profile image" msgstr "Imagen del perfil del usuario" -#: engine/vibes_auth/models.py:78 +#: engine/vibes_auth/models.py:83 msgid "is verified" msgstr "Se verifica" -#: engine/vibes_auth/models.py:79 +#: engine/vibes_auth/models.py:84 msgid "user verification status" msgstr "Estado de verificación del usuario" -#: engine/vibes_auth/models.py:82 +#: engine/vibes_auth/models.py:87 msgid "is_active" msgstr "Está activo" -#: engine/vibes_auth/models.py:84 +#: engine/vibes_auth/models.py:89 msgid "unselect this instead of deleting accounts" msgstr "Deseleccione esta opción en lugar de eliminar cuentas" -#: engine/vibes_auth/models.py:87 +#: engine/vibes_auth/models.py:92 msgid "is_subscribed" msgstr "Está suscrito" -#: engine/vibes_auth/models.py:88 +#: engine/vibes_auth/models.py:93 msgid "user's newsletter subscription status" msgstr "Estado de suscripción del usuario al boletín" -#: engine/vibes_auth/models.py:92 +#: engine/vibes_auth/models.py:98 msgid "activation token" msgstr "Ficha de activación" -#: engine/vibes_auth/models.py:95 +#: engine/vibes_auth/models.py:103 +msgid "activation token created" +msgstr "Token de activación creado" + +#: engine/vibes_auth/models.py:107 msgid "unsubscribe token" msgstr "Token para cancelar suscripción" -#: engine/vibes_auth/models.py:96 +#: engine/vibes_auth/models.py:108 msgid "token for secure one-click unsubscribe from campaigns" msgstr "" "Token para darse de baja de forma segura con un solo clic de las campañas." -#: engine/vibes_auth/models.py:106 +#: engine/vibes_auth/models.py:118 msgid "attributes" msgstr "Atributos" -#: engine/vibes_auth/models.py:147 +#: engine/vibes_auth/models.py:184 msgid "users" msgstr "Usuarios" -#: engine/vibes_auth/models.py:154 +#: engine/vibes_auth/models.py:202 +msgid "admin OTP code" +msgstr "Código OTP de administrador" + +#: engine/vibes_auth/models.py:203 +msgid "admin OTP codes" +msgstr "Códigos OTP de administrador" + +#: engine/vibes_auth/models.py:210 msgid "For anonymous threads" msgstr "Para hilos anónimos" -#: engine/vibes_auth/models.py:178 +#: engine/vibes_auth/models.py:234 msgid "Chat thread" msgstr "Hilo de conversación" -#: engine/vibes_auth/models.py:179 +#: engine/vibes_auth/models.py:235 msgid "Chat threads" msgstr "Hilos de chat" -#: engine/vibes_auth/models.py:185 +#: engine/vibes_auth/models.py:241 msgid "provide user or email for anonymous thread." msgstr "proporcionar usuario o email para hilo anónimo." -#: engine/vibes_auth/models.py:188 +#: engine/vibes_auth/models.py:244 msgid "assignee must be a staff user." msgstr "El cesionario debe ser un usuario del personal." -#: engine/vibes_auth/models.py:206 +#: engine/vibes_auth/models.py:262 msgid "Chat message" msgstr "Mensaje de chat" -#: engine/vibes_auth/models.py:207 +#: engine/vibes_auth/models.py:263 msgid "Chat messages" msgstr "Mensajes de chat" -#: engine/vibes_auth/models.py:213 +#: engine/vibes_auth/models.py:269 msgid "group" msgstr "Grupo" -#: engine/vibes_auth/models.py:220 +#: engine/vibes_auth/models.py:276 msgid "outstanding token" msgstr "Ficha pendiente" -#: engine/vibes_auth/models.py:221 +#: engine/vibes_auth/models.py:277 msgid "outstanding tokens" msgstr "Fichas pendientes" -#: engine/vibes_auth/models.py:227 +#: engine/vibes_auth/models.py:283 msgid "blacklisted token" msgstr "Ficha en la lista negra" -#: engine/vibes_auth/models.py:228 +#: engine/vibes_auth/models.py:284 msgid "blacklisted tokens" msgstr "Fichas en la lista negra" @@ -812,6 +941,10 @@ msgstr "No user uuid claim present in token" msgid "user does not exist" msgstr "El usuario no existe" +#: engine/vibes_auth/templates/admin/verify_otp.html:27 +msgid "Verify" +msgstr "Verificar" + #: engine/vibes_auth/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "Restablecer contraseña" @@ -897,12 +1030,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "Saludos cordiales,
el equipo %(project_name)s" -#: engine/vibes_auth/utils/emailing.py:24 +#: engine/vibes_auth/utils/emailing.py:27 #, python-brace-format msgid "{settings.PROJECT_NAME} | Activate Account" msgstr "{settings.PROJECT_NAME} | Activar cuenta" -#: engine/vibes_auth/utils/emailing.py:63 +#: engine/vibes_auth/utils/emailing.py:66 #, python-brace-format msgid "{settings.PROJECT_NAME} | Reset Password" msgstr "{settings.PROJECT_NAME} | Restablecer contraseña" @@ -957,7 +1090,7 @@ msgstr "" msgid "the token is invalid" msgstr "El token no es válido" -#: engine/vibes_auth/viewsets.py:44 +#: engine/vibes_auth/viewsets.py:47 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." @@ -965,10 +1098,18 @@ 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." -#: engine/vibes_auth/viewsets.py:113 +#: engine/vibes_auth/viewsets.py:116 msgid "password reset successfully" msgstr "La contraseña se ha restablecido correctamente." -#: engine/vibes_auth/viewsets.py:161 +#: engine/vibes_auth/viewsets.py:146 +msgid "" +"Account already registered but not yet activated. A new activation email has" +" been sent." +msgstr "" +"Cuenta ya registrada pero aún no activada. Se ha enviado un nuevo correo " +"electrónico de activación." + +#: engine/vibes_auth/viewsets.py:179 msgid "account already activated!" msgstr "Ya ha activado la cuenta..." diff --git a/engine/vibes_auth/locale/fa_IR/LC_MESSAGES/django.po b/engine/vibes_auth/locale/fa_IR/LC_MESSAGES/django.po index f8c18374..d44eb085 100644 --- a/engine/vibes_auth/locale/fa_IR/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/fa_IR/LC_MESSAGES/django.po @@ -2,12 +2,12 @@ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. -# +# msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 03:06+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,32 +16,32 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: engine/vibes_auth/admin.py:65 engine/vibes_auth/admin.py:66 +#: engine/vibes_auth/admin.py:64 engine/vibes_auth/admin.py:65 #: engine/vibes_auth/graphene/object_types.py:54 msgid "balance" msgstr "" -#: engine/vibes_auth/admin.py:74 +#: engine/vibes_auth/admin.py:73 msgid "order" msgstr "" -#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:51 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:51 msgid "orders" msgstr "" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:84 msgid "personal info" msgstr "" -#: engine/vibes_auth/admin.py:89 engine/vibes_auth/graphene/object_types.py:50 +#: engine/vibes_auth/admin.py:88 engine/vibes_auth/graphene/object_types.py:50 msgid "permissions" msgstr "" -#: engine/vibes_auth/admin.py:102 +#: engine/vibes_auth/admin.py:101 msgid "important dates" msgstr "" -#: engine/vibes_auth/admin.py:103 +#: engine/vibes_auth/admin.py:102 msgid "additional info" msgstr "" @@ -57,79 +57,83 @@ msgstr "" msgid "Open selected threads" msgstr "" -#: engine/vibes_auth/admin.py:208 -msgid "Preview" -msgstr "" - -#: engine/vibes_auth/admin.py:209 engine/vibes_auth/admin.py:249 -#: engine/vibes_auth/admin.py:326 -msgid "Metadata" -msgstr "" - -#: engine/vibes_auth/admin.py:212 -msgid "preview" -msgstr "" - -#: engine/vibes_auth/admin.py:221 -msgid "image preview" -msgstr "" - -#: engine/vibes_auth/admin.py:241 +#: engine/vibes_auth/admin.py:209 msgid "Content" msgstr "" -#: engine/vibes_auth/admin.py:243 +#: engine/vibes_auth/admin.py:211 msgid "Documentation" msgstr "" -#: engine/vibes_auth/admin.py:313 +#: engine/vibes_auth/admin.py:217 engine/vibes_auth/admin.py:294 +msgid "Metadata" +msgstr "" + +#: engine/vibes_auth/admin.py:281 msgid "Scheduling" msgstr "" -#: engine/vibes_auth/admin.py:315 +#: engine/vibes_auth/admin.py:283 msgid "Statistics" msgstr "" -#: engine/vibes_auth/admin.py:329 +#: engine/vibes_auth/admin.py:297 msgid "stats" msgstr "" -#: engine/vibes_auth/admin.py:335 +#: engine/vibes_auth/admin.py:303 msgid "Prepare recipients (subscribed users)" msgstr "" -#: engine/vibes_auth/admin.py:343 +#: engine/vibes_auth/admin.py:311 msgid "Campaign '{}' is not in draft status." msgstr "" -#: engine/vibes_auth/admin.py:350 +#: engine/vibes_auth/admin.py:318 msgid "Preparing recipients for campaign '{}'." msgstr "" -#: engine/vibes_auth/admin.py:354 +#: engine/vibes_auth/admin.py:322 msgid "Send campaign now" msgstr "" -#: engine/vibes_auth/admin.py:362 +#: engine/vibes_auth/admin.py:330 msgid "Campaign '{}' cannot be sent (status: {})." msgstr "" -#: engine/vibes_auth/admin.py:372 +#: engine/vibes_auth/admin.py:340 msgid "Campaign '{}' has no recipients. Prepare recipients first." msgstr "" -#: engine/vibes_auth/admin.py:383 +#: engine/vibes_auth/admin.py:351 msgid "Started sending campaign '{}'." msgstr "" -#: engine/vibes_auth/admin.py:387 +#: engine/vibes_auth/admin.py:355 msgid "Cancel campaign" msgstr "" -#: engine/vibes_auth/admin.py:396 +#: engine/vibes_auth/admin.py:364 msgid "{} campaign(s) cancelled." msgstr "" +#: engine/vibes_auth/admin_site.py:24 +msgid "Verification code" +msgstr "" + +#: engine/vibes_auth/admin_site.py:62 +msgid "A verification code has been sent to your email." +msgstr "" + +#: engine/vibes_auth/admin_site.py:118 +msgid "Invalid or expired code. Please try again." +msgstr "" + +#: engine/vibes_auth/admin_site.py:124 +#: engine/vibes_auth/templates/admin/verify_otp.html:10 +msgid "Two-factor authentication" +msgstr "" + #: engine/vibes_auth/apps.py:8 msgid "Accounting" msgstr "" @@ -154,6 +158,131 @@ msgstr "" msgid "System" msgstr "" +#: engine/vibes_auth/docs/drf/emailing.py:18 +msgid "" +"UUID token for unsubscribing. This token is unique per user and is included " +"in the unsubscribe link of every campaign email. The token remains constant " +"for each user unless regenerated." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:37 +#: engine/vibes_auth/emailing/views.py:69 +msgid "You have been successfully unsubscribed from our emails." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:45 +#: engine/vibes_auth/emailing/views.py:61 +msgid "You are already unsubscribed." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:52 +msgid "Unsubscribe from email campaigns" +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:54 +msgid "" +"Unsubscribe a user from all marketing email campaigns using their unique " +"unsubscribe token.\n" +"\n" +"This endpoint is designed for email client compatibility where clicking a " +"link triggers a GET request. The user will no longer receive promotional " +"emails after successful unsubscription.\n" +"\n" +"**Note:** Transactional emails (order confirmations, password resets, etc.) " +"are not affected by this setting." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:66 +#: engine/vibes_auth/docs/drf/emailing.py:146 +msgid "Successfully unsubscribed from email campaigns." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:82 +#: engine/vibes_auth/docs/drf/emailing.py:162 +msgid "Invalid or missing unsubscribe token." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:96 +#: engine/vibes_auth/docs/drf/emailing.py:176 +msgid "User associated with the token was not found." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:118 +msgid "One-Click Unsubscribe (RFC 8058)" +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:120 +msgid "" +"RFC 8058 compliant one-click unsubscribe endpoint for email campaigns.\n" +"\n" +"This endpoint supports the List-Unsubscribe-Post header mechanism defined in " +"RFC 8058, which allows email clients to unsubscribe users with a single " +"click without leaving the email application.\n" +"\n" +"The token can be provided either as a query parameter or in the request " +"body.\n" +"\n" +"**Standards Compliance:**\n" +"- RFC 8058: Signaling One-Click Functionality for List Email Headers\n" +"- RFC 2369: The Use of URLs as Meta-Syntax for Core Mail List Commands\n" +"\n" +"**Note:** Transactional emails are not affected by this setting." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:137 +msgid "" +"Unsubscribe token (alternative to query parameter). Can be omitted if token " +"is provided in URL." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:200 +msgid "Track email open event" +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:202 +msgid "" +"Records when a campaign email is opened by the recipient.\n" +"\n" +"This endpoint is called automatically when the tracking pixel (1x1 " +"transparent GIF) embedded in the email is loaded by the recipient's email " +"client.\n" +"\n" +"**How it works:**\n" +"1. Each campaign email contains a unique tracking pixel URL with a `tid` " +"parameter\n" +"2. When the email is opened and images are loaded, this endpoint is called\n" +"3. The recipient's status is updated to 'opened' and the timestamp is " +"recorded\n" +"4. The campaign's aggregate opened count is updated\n" +"\n" +"**Privacy considerations:**\n" +"- Only the first open is recorded (subsequent opens are ignored)\n" +"- No personal information beyond the tracking ID is logged\n" +"- Users who disable image loading will not trigger this event\n" +"\n" +"**Response:**\n" +"Returns a 1x1 transparent GIF image regardless of whether tracking " +"succeeded, to ensure consistent behavior and prevent information leakage." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:223 +msgid "" +"Tracking ID (UUID) unique to each campaign-recipient combination. This ID " +"links the open event to a specific recipient and campaign." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:241 +msgid "" +"1x1 transparent GIF image. Always returned regardless of tracking status to " +"maintain consistent behavior." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:247 +msgid "" +"Returned when no tracking ID is provided. Note: Invalid tracking IDs still " +"return 200 with the GIF to prevent enumeration attacks." +msgstr "" + #: engine/vibes_auth/docs/drf/messaging.py:17 msgid "User messages entrypoint" msgstr "" @@ -243,9 +372,9 @@ msgid "confirm a user's password reset" msgstr "" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:351 +#: engine/vibes_auth/graphene/mutations.py:358 #: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107 -#: engine/vibes_auth/viewsets.py:94 +#: engine/vibes_auth/viewsets.py:97 msgid "passwords do not match" msgstr "" @@ -298,193 +427,164 @@ msgstr "" msgid "Clicked" msgstr "" -#: engine/vibes_auth/emailing/models.py:35 -#: engine/vibes_auth/emailing/models.py:71 -#: engine/vibes_auth/emailing/models.py:121 +#: engine/vibes_auth/emailing/models.py:38 +#: engine/vibes_auth/emailing/models.py:88 msgid "name" msgstr "" -#: engine/vibes_auth/emailing/models.py:36 -msgid "descriptive name for the image" -msgstr "" - -#: engine/vibes_auth/emailing/models.py:40 -msgid "image" -msgstr "" - -#: engine/vibes_auth/emailing/models.py:41 -msgid "image file to use in email templates" -msgstr "" - -#: engine/vibes_auth/emailing/models.py:47 -msgid "alt text" -msgstr "" - -#: engine/vibes_auth/emailing/models.py:48 -msgid "alternative text for accessibility" -msgstr "" - -#: engine/vibes_auth/emailing/models.py:52 -msgid "email image" -msgstr "" - -#: engine/vibes_auth/emailing/models.py:53 -msgid "email images" -msgstr "" - -#: engine/vibes_auth/emailing/models.py:72 +#: engine/vibes_auth/emailing/models.py:39 msgid "internal name for the template" msgstr "" -#: engine/vibes_auth/emailing/models.py:76 +#: engine/vibes_auth/emailing/models.py:43 msgid "slug" msgstr "" -#: engine/vibes_auth/emailing/models.py:77 +#: engine/vibes_auth/emailing/models.py:44 msgid "unique identifier for the template" msgstr "" -#: engine/vibes_auth/emailing/models.py:81 +#: engine/vibes_auth/emailing/models.py:48 msgid "subject" msgstr "" -#: engine/vibes_auth/emailing/models.py:82 +#: engine/vibes_auth/emailing/models.py:49 msgid "email subject line - supports {{ variables }}" msgstr "" -#: engine/vibes_auth/emailing/models.py:85 -msgid "HTML content" +#: engine/vibes_auth/emailing/models.py:52 +msgid "content" msgstr "" -#: engine/vibes_auth/emailing/models.py:87 +#: engine/vibes_auth/emailing/models.py:54 msgid "" -"email body content - supports {{ user.first_name }}, {{ user.email }}, " +"email body in markdown - supports {{ user.first_name }}, {{ user.email }}, " "{{ project_name }}, {{ unsubscribe_url }}" msgstr "" -#: engine/vibes_auth/emailing/models.py:94 +#: engine/vibes_auth/emailing/models.py:61 msgid "plain text content" msgstr "" -#: engine/vibes_auth/emailing/models.py:95 +#: engine/vibes_auth/emailing/models.py:62 msgid "plain text fallback (auto-generated if empty)" msgstr "" -#: engine/vibes_auth/emailing/models.py:100 +#: engine/vibes_auth/emailing/models.py:67 msgid "available variables" msgstr "" -#: engine/vibes_auth/emailing/models.py:101 +#: engine/vibes_auth/emailing/models.py:68 msgid "documentation of available template variables" msgstr "" -#: engine/vibes_auth/emailing/models.py:105 +#: engine/vibes_auth/emailing/models.py:72 msgid "email template" msgstr "" -#: engine/vibes_auth/emailing/models.py:106 +#: engine/vibes_auth/emailing/models.py:73 msgid "email templates" msgstr "" -#: engine/vibes_auth/emailing/models.py:122 +#: engine/vibes_auth/emailing/models.py:89 msgid "internal name for the campaign" msgstr "" -#: engine/vibes_auth/emailing/models.py:129 +#: engine/vibes_auth/emailing/models.py:96 msgid "template" msgstr "" -#: engine/vibes_auth/emailing/models.py:130 +#: engine/vibes_auth/emailing/models.py:97 msgid "email template to use for this campaign" msgstr "" -#: engine/vibes_auth/emailing/models.py:136 -#: engine/vibes_auth/emailing/models.py:206 +#: engine/vibes_auth/emailing/models.py:103 +#: engine/vibes_auth/emailing/models.py:173 msgid "status" msgstr "" -#: engine/vibes_auth/emailing/models.py:141 +#: engine/vibes_auth/emailing/models.py:108 msgid "scheduled at" msgstr "" -#: engine/vibes_auth/emailing/models.py:142 +#: engine/vibes_auth/emailing/models.py:109 msgid "when to send the campaign (leave empty for manual send)" msgstr "" -#: engine/vibes_auth/emailing/models.py:147 -#: engine/vibes_auth/emailing/models.py:211 +#: engine/vibes_auth/emailing/models.py:114 +#: engine/vibes_auth/emailing/models.py:178 msgid "sent at" msgstr "" -#: engine/vibes_auth/emailing/models.py:148 +#: engine/vibes_auth/emailing/models.py:115 msgid "when the campaign was actually sent" msgstr "" -#: engine/vibes_auth/emailing/models.py:153 +#: engine/vibes_auth/emailing/models.py:120 msgid "total recipients" msgstr "" -#: engine/vibes_auth/emailing/models.py:157 +#: engine/vibes_auth/emailing/models.py:124 msgid "sent count" msgstr "" -#: engine/vibes_auth/emailing/models.py:161 +#: engine/vibes_auth/emailing/models.py:128 msgid "failed count" msgstr "" -#: engine/vibes_auth/emailing/models.py:165 +#: engine/vibes_auth/emailing/models.py:132 msgid "opened count" msgstr "" -#: engine/vibes_auth/emailing/models.py:169 +#: engine/vibes_auth/emailing/models.py:136 msgid "clicked count" msgstr "" -#: engine/vibes_auth/emailing/models.py:173 +#: engine/vibes_auth/emailing/models.py:140 msgid "email campaign" msgstr "" -#: engine/vibes_auth/emailing/models.py:174 +#: engine/vibes_auth/emailing/models.py:141 msgid "email campaigns" msgstr "" -#: engine/vibes_auth/emailing/models.py:194 +#: engine/vibes_auth/emailing/models.py:161 msgid "campaign" msgstr "" -#: engine/vibes_auth/emailing/models.py:200 engine/vibes_auth/models.py:146 +#: engine/vibes_auth/emailing/models.py:167 engine/vibes_auth/models.py:183 msgid "user" msgstr "" -#: engine/vibes_auth/emailing/models.py:216 +#: engine/vibes_auth/emailing/models.py:183 msgid "opened at" msgstr "" -#: engine/vibes_auth/emailing/models.py:221 +#: engine/vibes_auth/emailing/models.py:188 msgid "clicked at" msgstr "" -#: engine/vibes_auth/emailing/models.py:227 +#: engine/vibes_auth/emailing/models.py:194 msgid "tracking ID" msgstr "" -#: engine/vibes_auth/emailing/models.py:228 +#: engine/vibes_auth/emailing/models.py:195 msgid "unique ID for tracking opens and clicks" msgstr "" -#: engine/vibes_auth/emailing/models.py:233 +#: engine/vibes_auth/emailing/models.py:200 msgid "error message" msgstr "" -#: engine/vibes_auth/emailing/models.py:234 +#: engine/vibes_auth/emailing/models.py:201 msgid "error details if sending failed" msgstr "" -#: engine/vibes_auth/emailing/models.py:238 +#: engine/vibes_auth/emailing/models.py:205 msgid "campaign recipient" msgstr "" -#: engine/vibes_auth/emailing/models.py:239 +#: engine/vibes_auth/emailing/models.py:206 msgid "campaign recipients" msgstr "" @@ -500,73 +600,73 @@ msgstr "" msgid "Unsubscribe" msgstr "" -#: engine/vibes_auth/emailing/views.py:71 +#: engine/vibes_auth/emailing/views.py:39 msgid "Unsubscribe token is required." msgstr "" -#: engine/vibes_auth/emailing/views.py:79 +#: engine/vibes_auth/emailing/views.py:47 msgid "Invalid unsubscribe token format." msgstr "" -#: engine/vibes_auth/emailing/views.py:87 +#: engine/vibes_auth/emailing/views.py:55 msgid "User not found." msgstr "" -#: engine/vibes_auth/emailing/views.py:93 -msgid "You are already unsubscribed." -msgstr "" - -#: engine/vibes_auth/emailing/views.py:101 -msgid "You have been successfully unsubscribed from our emails." -msgstr "" - -#: engine/vibes_auth/graphene/mutations.py:46 +#: engine/vibes_auth/graphene/mutations.py:47 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" -#: engine/vibes_auth/graphene/mutations.py:68 +#: engine/vibes_auth/graphene/mutations.py:70 msgid "password too weak" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:128 +#: engine/vibes_auth/graphene/mutations.py:130 msgid "malformed email" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:140 +#: engine/vibes_auth/graphene/mutations.py:142 #: engine/vibes_auth/serializers.py:117 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:165 +#: engine/vibes_auth/graphene/mutations.py:167 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:182 +#: engine/vibes_auth/graphene/mutations.py:184 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:304 -#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180 +#: engine/vibes_auth/graphene/mutations.py:309 +#: engine/vibes_auth/viewsets.py:174 engine/vibes_auth/viewsets.py:198 msgid "activation link is invalid!" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:307 +#: engine/vibes_auth/graphene/mutations.py:312 msgid "account already activated..." msgstr "" -#: engine/vibes_auth/graphene/mutations.py:314 -#: engine/vibes_auth/graphene/mutations.py:376 +#: engine/vibes_auth/graphene/mutations.py:319 +#: engine/vibes_auth/graphene/mutations.py:383 msgid "something went wrong: {e!s}" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:358 -#: engine/vibes_auth/viewsets.py:106 +#: engine/vibes_auth/graphene/mutations.py:365 +#: engine/vibes_auth/viewsets.py:109 msgid "token is invalid!" msgstr "" +#: engine/vibes_auth/graphene/mutations.py:403 +msgid "only image files are allowed (jpg, png, gif, webp)" +msgstr "" + +#: engine/vibes_auth/graphene/mutations.py:406 +msgid "file size must not exceed 5 MB" +msgstr "" + #: engine/vibes_auth/graphene/object_types.py:46 msgid "" "the products this user has viewed most recently (max 48), in reverse‐" @@ -574,7 +674,7 @@ msgid "" msgstr "" #: engine/vibes_auth/graphene/object_types.py:49 -#: engine/vibes_auth/models.py:214 +#: engine/vibes_auth/models.py:270 msgid "groups" msgstr "" @@ -582,7 +682,7 @@ msgstr "" msgid "wishlist" msgstr "" -#: engine/vibes_auth/graphene/object_types.py:56 engine/vibes_auth/models.py:70 +#: engine/vibes_auth/graphene/object_types.py:56 engine/vibes_auth/models.py:75 msgid "avatar" msgstr "" @@ -617,7 +717,7 @@ msgstr "" msgid "Assignee must be a staff user." msgstr "" -#: engine/vibes_auth/models.py:42 +#: engine/vibes_auth/models.py:44 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -628,123 +728,135 @@ msgid "" "for enhanced user management." msgstr "" -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "email" msgstr "" -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "user email address" msgstr "" -#: engine/vibes_auth/models.py:55 +#: engine/vibes_auth/models.py:57 msgid "phone_number" msgstr "" -#: engine/vibes_auth/models.py:60 +#: engine/vibes_auth/models.py:61 msgid "user phone number" msgstr "" -#: engine/vibes_auth/models.py:66 +#: engine/vibes_auth/models.py:68 msgid "first_name" msgstr "" -#: engine/vibes_auth/models.py:67 +#: engine/vibes_auth/models.py:71 msgid "last_name" msgstr "" -#: engine/vibes_auth/models.py:73 +#: engine/vibes_auth/models.py:78 msgid "user profile image" msgstr "" -#: engine/vibes_auth/models.py:78 +#: engine/vibes_auth/models.py:83 msgid "is verified" msgstr "" -#: engine/vibes_auth/models.py:79 +#: engine/vibes_auth/models.py:84 msgid "user verification status" msgstr "" -#: engine/vibes_auth/models.py:82 +#: engine/vibes_auth/models.py:87 msgid "is_active" msgstr "" -#: engine/vibes_auth/models.py:84 +#: engine/vibes_auth/models.py:89 msgid "unselect this instead of deleting accounts" msgstr "" -#: engine/vibes_auth/models.py:87 +#: engine/vibes_auth/models.py:92 msgid "is_subscribed" msgstr "" -#: engine/vibes_auth/models.py:88 +#: engine/vibes_auth/models.py:93 msgid "user's newsletter subscription status" msgstr "" -#: engine/vibes_auth/models.py:92 +#: engine/vibes_auth/models.py:98 msgid "activation token" msgstr "" -#: engine/vibes_auth/models.py:95 +#: engine/vibes_auth/models.py:103 +msgid "activation token created" +msgstr "" + +#: engine/vibes_auth/models.py:107 msgid "unsubscribe token" msgstr "" -#: engine/vibes_auth/models.py:96 +#: engine/vibes_auth/models.py:108 msgid "token for secure one-click unsubscribe from campaigns" msgstr "" -#: engine/vibes_auth/models.py:106 +#: engine/vibes_auth/models.py:118 msgid "attributes" msgstr "" -#: engine/vibes_auth/models.py:147 +#: engine/vibes_auth/models.py:184 msgid "users" msgstr "" -#: engine/vibes_auth/models.py:154 +#: engine/vibes_auth/models.py:202 +msgid "admin OTP code" +msgstr "" + +#: engine/vibes_auth/models.py:203 +msgid "admin OTP codes" +msgstr "" + +#: engine/vibes_auth/models.py:210 msgid "For anonymous threads" msgstr "" -#: engine/vibes_auth/models.py:178 +#: engine/vibes_auth/models.py:234 msgid "Chat thread" msgstr "" -#: engine/vibes_auth/models.py:179 +#: engine/vibes_auth/models.py:235 msgid "Chat threads" msgstr "" -#: engine/vibes_auth/models.py:185 +#: engine/vibes_auth/models.py:241 msgid "provide user or email for anonymous thread." msgstr "" -#: engine/vibes_auth/models.py:188 +#: engine/vibes_auth/models.py:244 msgid "assignee must be a staff user." msgstr "" -#: engine/vibes_auth/models.py:206 +#: engine/vibes_auth/models.py:262 msgid "Chat message" msgstr "" -#: engine/vibes_auth/models.py:207 +#: engine/vibes_auth/models.py:263 msgid "Chat messages" msgstr "" -#: engine/vibes_auth/models.py:213 +#: engine/vibes_auth/models.py:269 msgid "group" msgstr "" -#: engine/vibes_auth/models.py:220 +#: engine/vibes_auth/models.py:276 msgid "outstanding token" msgstr "" -#: engine/vibes_auth/models.py:221 +#: engine/vibes_auth/models.py:277 msgid "outstanding tokens" msgstr "" -#: engine/vibes_auth/models.py:227 +#: engine/vibes_auth/models.py:283 msgid "blacklisted token" msgstr "" -#: engine/vibes_auth/models.py:228 +#: engine/vibes_auth/models.py:284 msgid "blacklisted tokens" msgstr "" @@ -786,6 +898,10 @@ msgstr "" msgid "user does not exist" msgstr "" +#: engine/vibes_auth/templates/admin/verify_otp.html:27 +msgid "Verify" +msgstr "" + #: engine/vibes_auth/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "" @@ -862,12 +978,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "" -#: engine/vibes_auth/utils/emailing.py:24 +#: engine/vibes_auth/utils/emailing.py:27 #, python-brace-format msgid "{settings.PROJECT_NAME} | Activate Account" msgstr "" -#: engine/vibes_auth/utils/emailing.py:63 +#: engine/vibes_auth/utils/emailing.py:66 #, python-brace-format msgid "{settings.PROJECT_NAME} | Reset Password" msgstr "" @@ -906,7 +1022,7 @@ msgstr "" msgid "the token is invalid" msgstr "" -#: engine/vibes_auth/viewsets.py:44 +#: engine/vibes_auth/viewsets.py:47 msgid "" "User view set implementation.\n" "Provides a set of actions that manage user-related data such as creation, " @@ -915,10 +1031,16 @@ msgid "" "class extends the mixins and GenericViewSet for robust API handling." msgstr "" -#: engine/vibes_auth/viewsets.py:113 +#: engine/vibes_auth/viewsets.py:116 msgid "password reset successfully" msgstr "" -#: engine/vibes_auth/viewsets.py:161 +#: engine/vibes_auth/viewsets.py:146 +msgid "" +"Account already registered but not yet activated. A new activation email has " +"been sent." +msgstr "" + +#: engine/vibes_auth/viewsets.py:179 msgid "account already activated!" msgstr "" diff --git a/engine/vibes_auth/locale/fr_FR/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/fr_FR/LC_MESSAGES/django.mo index 412f3fc0..05357d0e 100644 Binary files a/engine/vibes_auth/locale/fr_FR/LC_MESSAGES/django.mo and b/engine/vibes_auth/locale/fr_FR/LC_MESSAGES/django.mo differ diff --git a/engine/vibes_auth/locale/fr_FR/LC_MESSAGES/django.po b/engine/vibes_auth/locale/fr_FR/LC_MESSAGES/django.po index 71839586..90139a32 100644 --- a/engine/vibes_auth/locale/fr_FR/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/fr_FR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 03:06+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,32 +13,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:65 engine/vibes_auth/admin.py:66 +#: engine/vibes_auth/admin.py:64 engine/vibes_auth/admin.py:65 #: engine/vibes_auth/graphene/object_types.py:54 msgid "balance" msgstr "Balance" -#: engine/vibes_auth/admin.py:74 +#: engine/vibes_auth/admin.py:73 msgid "order" msgstr "Commande" -#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:51 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:51 msgid "orders" msgstr "Commandes" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:84 msgid "personal info" msgstr "Informations personnelles" -#: engine/vibes_auth/admin.py:89 engine/vibes_auth/graphene/object_types.py:50 +#: engine/vibes_auth/admin.py:88 engine/vibes_auth/graphene/object_types.py:50 msgid "permissions" msgstr "Permissions" -#: engine/vibes_auth/admin.py:102 +#: engine/vibes_auth/admin.py:101 msgid "important dates" msgstr "Important dates" -#: engine/vibes_auth/admin.py:103 +#: engine/vibes_auth/admin.py:102 msgid "additional info" msgstr "Informations complémentaires" @@ -54,81 +54,85 @@ msgstr "Fermer les fils sélectionnés" msgid "Open selected threads" msgstr "Ouvrir les fils sélectionnés" -#: engine/vibes_auth/admin.py:208 -msgid "Preview" -msgstr "Aperçu" - -#: engine/vibes_auth/admin.py:209 engine/vibes_auth/admin.py:249 -#: engine/vibes_auth/admin.py:326 -msgid "Metadata" -msgstr "Métadonnées" - -#: engine/vibes_auth/admin.py:212 -msgid "preview" -msgstr "aperçu" - -#: engine/vibes_auth/admin.py:221 -msgid "image preview" -msgstr "aperçu de l'image" - -#: engine/vibes_auth/admin.py:241 +#: engine/vibes_auth/admin.py:209 msgid "Content" msgstr "Contenu" -#: engine/vibes_auth/admin.py:243 +#: engine/vibes_auth/admin.py:211 msgid "Documentation" msgstr "Documentation" -#: engine/vibes_auth/admin.py:313 +#: engine/vibes_auth/admin.py:217 engine/vibes_auth/admin.py:294 +msgid "Metadata" +msgstr "Métadonnées" + +#: engine/vibes_auth/admin.py:281 msgid "Scheduling" msgstr "Planification" -#: engine/vibes_auth/admin.py:315 +#: engine/vibes_auth/admin.py:283 msgid "Statistics" msgstr "Statistiques" -#: engine/vibes_auth/admin.py:329 +#: engine/vibes_auth/admin.py:297 msgid "stats" msgstr "étatique" -#: engine/vibes_auth/admin.py:335 +#: engine/vibes_auth/admin.py:303 msgid "Prepare recipients (subscribed users)" msgstr "Préparez les destinataires (utilisateurs abonnés)" -#: engine/vibes_auth/admin.py:343 +#: engine/vibes_auth/admin.py:311 msgid "Campaign '{}' is not in draft status." msgstr "La campagne « {} » n'est pas en statut brouillon." -#: engine/vibes_auth/admin.py:350 +#: engine/vibes_auth/admin.py:318 msgid "Preparing recipients for campaign '{}'." msgstr "Préparation des destinataires pour la campagne « {} »." -#: engine/vibes_auth/admin.py:354 +#: engine/vibes_auth/admin.py:322 msgid "Send campaign now" msgstr "Envoyer la campagne maintenant" -#: engine/vibes_auth/admin.py:362 +#: engine/vibes_auth/admin.py:330 msgid "Campaign '{}' cannot be sent (status: {})." msgstr "La campagne « {} » ne peut pas être envoyée (statut : {})." -#: engine/vibes_auth/admin.py:372 +#: engine/vibes_auth/admin.py:340 msgid "Campaign '{}' has no recipients. Prepare recipients first." msgstr "" "La campagne « {} » n'a pas de destinataires. Préparez d'abord les " "destinataires." -#: engine/vibes_auth/admin.py:383 +#: engine/vibes_auth/admin.py:351 msgid "Started sending campaign '{}'." msgstr "Début de l'envoi de la campagne « {} »." -#: engine/vibes_auth/admin.py:387 +#: engine/vibes_auth/admin.py:355 msgid "Cancel campaign" msgstr "Annuler la campagne" -#: engine/vibes_auth/admin.py:396 +#: engine/vibes_auth/admin.py:364 msgid "{} campaign(s) cancelled." msgstr "Campagne(s) annulée(s)." +#: engine/vibes_auth/admin_site.py:24 +msgid "Verification code" +msgstr "Code de vérification" + +#: engine/vibes_auth/admin_site.py:62 +msgid "A verification code has been sent to your email." +msgstr "Un code de vérification a été envoyé à votre adresse e-mail." + +#: engine/vibes_auth/admin_site.py:118 +msgid "Invalid or expired code. Please try again." +msgstr "Code invalide ou expiré. Veuillez réessayer." + +#: engine/vibes_auth/admin_site.py:124 +#: engine/vibes_auth/templates/admin/verify_otp.html:10 +msgid "Two-factor authentication" +msgstr "Authentification à deux facteurs" + #: engine/vibes_auth/apps.py:8 msgid "Accounting" msgstr "Comptabilité" @@ -153,6 +157,147 @@ msgstr "Personnel" msgid "System" msgstr "Système" +#: engine/vibes_auth/docs/drf/emailing.py:18 +msgid "" +"UUID token for unsubscribing. This token is unique per user and is included " +"in the unsubscribe link of every campaign email. The token remains constant " +"for each user unless regenerated." +msgstr "" +"Jeton UUID pour se désabonner. Ce jeton est unique pour chaque utilisateur " +"et est inclus dans le lien de désabonnement de chaque e-mail de campagne. Le" +" jeton reste constant pour chaque utilisateur, sauf s'il est régénéré." + +#: engine/vibes_auth/docs/drf/emailing.py:37 +#: engine/vibes_auth/emailing/views.py:69 +msgid "You have been successfully unsubscribed from our emails." +msgstr "Vous êtes désormais désabonné de nos e-mails." + +#: engine/vibes_auth/docs/drf/emailing.py:45 +#: engine/vibes_auth/emailing/views.py:61 +msgid "You are already unsubscribed." +msgstr "Vous êtes déjà désabonné." + +#: engine/vibes_auth/docs/drf/emailing.py:52 +msgid "Unsubscribe from email campaigns" +msgstr "Se désabonner des campagnes par e-mail" + +#: engine/vibes_auth/docs/drf/emailing.py:54 +msgid "" +"Unsubscribe a user from all marketing email campaigns using their unique unsubscribe token.\n" +"\n" +"This endpoint is designed for email client compatibility where clicking a link triggers a GET request. The user will no longer receive promotional emails after successful unsubscription.\n" +"\n" +"**Note:** Transactional emails (order confirmations, password resets, etc.) are not affected by this setting." +msgstr "" +"Désabonnez un utilisateur de toutes les campagnes marketing par e-mail à " +"l'aide de son jeton de désabonnement unique. Ce point de terminaison est " +"conçu pour être compatible avec les clients de messagerie électronique, où " +"le fait de cliquer sur un lien déclenche une requête GET. L'utilisateur ne " +"recevra plus d'e-mails promotionnels après s'être désabonné avec succès. " +"**Remarque :** les e-mails transactionnels (confirmations de commande, " +"réinitialisations de mot de passe, etc.) ne sont pas affectés par ce " +"paramètre." + +#: engine/vibes_auth/docs/drf/emailing.py:66 +#: engine/vibes_auth/docs/drf/emailing.py:146 +msgid "Successfully unsubscribed from email campaigns." +msgstr "Désabonnement réussi aux campagnes par e-mail." + +#: engine/vibes_auth/docs/drf/emailing.py:82 +#: engine/vibes_auth/docs/drf/emailing.py:162 +msgid "Invalid or missing unsubscribe token." +msgstr "Jeton de désabonnement invalide ou manquant." + +#: engine/vibes_auth/docs/drf/emailing.py:96 +#: engine/vibes_auth/docs/drf/emailing.py:176 +msgid "User associated with the token was not found." +msgstr "L'utilisateur associé au jeton n'a pas été trouvé." + +#: engine/vibes_auth/docs/drf/emailing.py:118 +msgid "One-Click Unsubscribe (RFC 8058)" +msgstr "Désabonnement en un clic (RFC 8058)" + +#: engine/vibes_auth/docs/drf/emailing.py:120 +msgid "" +"RFC 8058 compliant one-click unsubscribe endpoint for email campaigns.\n" +"\n" +"This endpoint supports the List-Unsubscribe-Post header mechanism defined in RFC 8058, which allows email clients to unsubscribe users with a single click without leaving the email application.\n" +"\n" +"The token can be provided either as a query parameter or in the request body.\n" +"\n" +"**Standards Compliance:**\n" +"- RFC 8058: Signaling One-Click Functionality for List Email Headers\n" +"- RFC 2369: The Use of URLs as Meta-Syntax for Core Mail List Commands\n" +"\n" +"**Note:** Transactional emails are not affected by this setting." +msgstr "" +"Point de terminaison de désabonnement en un clic conforme à la norme RFC 8058 pour les campagnes par e-mail. Ce point de terminaison prend en charge le mécanisme d'en-tête List-Unsubscribe-Post défini dans la norme RFC 8058, qui permet aux clients de messagerie de désabonner les utilisateurs en un seul clic sans quitter l'application de messagerie. Le jeton peut être fourni soit sous forme de paramètre de requête, soit dans le corps de la requête.\n" +"\n" +"**Conformité aux normes :** - RFC 8058 : Signalisation de la fonctionnalité en un clic pour les en-têtes de liste d'e-mails - RFC 2369 : Utilisation des URL comme méta-syntaxe pour les commandes de liste de messagerie de base **Remarque :** les e-mails transactionnels ne sont pas concernés par ce paramètre." + +#: engine/vibes_auth/docs/drf/emailing.py:137 +msgid "" +"Unsubscribe token (alternative to query parameter). Can be omitted if token " +"is provided in URL." +msgstr "" +"Jeton de désabonnement (alternative au paramètre de requête). Peut être omis" +" si le jeton est fourni dans l'URL." + +#: engine/vibes_auth/docs/drf/emailing.py:200 +msgid "Track email open event" +msgstr "Suivre l'ouverture d'un e-mail" + +#: engine/vibes_auth/docs/drf/emailing.py:202 +msgid "" +"Records when a campaign email is opened by the recipient.\n" +"\n" +"This endpoint is called automatically when the tracking pixel (1x1 transparent GIF) embedded in the email is loaded by the recipient's email client.\n" +"\n" +"**How it works:**\n" +"1. Each campaign email contains a unique tracking pixel URL with a `tid` parameter\n" +"2. When the email is opened and images are loaded, this endpoint is called\n" +"3. The recipient's status is updated to 'opened' and the timestamp is recorded\n" +"4. The campaign's aggregate opened count is updated\n" +"\n" +"**Privacy considerations:**\n" +"- Only the first open is recorded (subsequent opens are ignored)\n" +"- No personal information beyond the tracking ID is logged\n" +"- Users who disable image loading will not trigger this event\n" +"\n" +"**Response:**\n" +"Returns a 1x1 transparent GIF image regardless of whether tracking succeeded, to ensure consistent behavior and prevent information leakage." +msgstr "" +"Enregistre l'ouverture d'un e-mail de campagne par le destinataire. Ce point de terminaison est appelé automatiquement lorsque le pixel de suivi (GIF transparent 1x1) intégré à l'e-mail est chargé par le client de messagerie du destinataire.\n" +"\n" +"**Fonctionnement :** 1. Chaque e-mail de campagne contient une URL de pixel de suivi unique avec un paramètre « tid ». 2. Lorsque l'e-mail est ouvert et que les images sont chargées, ce point de terminaison est appelé. 3. Le statut du destinataire est mis à jour sur « ouvert » et l'horodatage est enregistré. 4. Le nombre total d'ouvertures de la campagne est mis à jour. **Considérations relatives à la confidentialité :**\n" +"- Seule la première ouverture est enregistrée (les ouvertures suivantes sont ignorées). - Aucune information personnelle autre que l'ID de suivi n'est enregistrée. - Les utilisateurs qui désactivent le chargement des images ne déclencheront pas cet événement. **Réponse :** renvoie une image GIF transparente 1x1, que le suivi ait réussi ou non, afin de garantir un comportement cohérent et d'éviter toute fuite d'informations." + +#: engine/vibes_auth/docs/drf/emailing.py:223 +msgid "" +"Tracking ID (UUID) unique to each campaign-recipient combination. This ID " +"links the open event to a specific recipient and campaign." +msgstr "" +"Identifiant de suivi (UUID) unique pour chaque combinaison campagne-" +"destinataire. Cet identifiant relie l'événement d'ouverture à un " +"destinataire et à une campagne spécifiques." + +#: engine/vibes_auth/docs/drf/emailing.py:241 +msgid "" +"1x1 transparent GIF image. Always returned regardless of tracking status to " +"maintain consistent behavior." +msgstr "" +"Image GIF transparente 1x1. Toujours renvoyée, quel que soit le statut du " +"suivi, afin de garantir un comportement cohérent." + +#: engine/vibes_auth/docs/drf/emailing.py:247 +msgid "" +"Returned when no tracking ID is provided. Note: Invalid tracking IDs still " +"return 200 with the GIF to prevent enumeration attacks." +msgstr "" +"Renvoyé lorsqu'aucun identifiant de suivi n'est fourni. Remarque : les " +"identifiants de suivi non valides renvoient toujours 200 avec le GIF afin " +"d'empêcher les attaques par énumération." + #: engine/vibes_auth/docs/drf/messaging.py:17 msgid "User messages entrypoint" msgstr "User messages entrypoint" @@ -251,9 +396,9 @@ msgid "confirm a user's password reset" msgstr "Confirmer la réinitialisation du mot de passe d'un utilisateur" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:351 +#: engine/vibes_auth/graphene/mutations.py:358 #: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107 -#: engine/vibes_auth/viewsets.py:94 +#: engine/vibes_auth/viewsets.py:97 msgid "passwords do not match" msgstr "Les mots de passe ne correspondent pas" @@ -306,195 +451,166 @@ msgstr "Ouvert" msgid "Clicked" msgstr "Clic" -#: engine/vibes_auth/emailing/models.py:35 -#: engine/vibes_auth/emailing/models.py:71 -#: engine/vibes_auth/emailing/models.py:121 +#: engine/vibes_auth/emailing/models.py:38 +#: engine/vibes_auth/emailing/models.py:88 msgid "name" msgstr "nom" -#: engine/vibes_auth/emailing/models.py:36 -msgid "descriptive name for the image" -msgstr "nom descriptif de l'image" - -#: engine/vibes_auth/emailing/models.py:40 -msgid "image" -msgstr "image" - -#: engine/vibes_auth/emailing/models.py:41 -msgid "image file to use in email templates" -msgstr "fichier image à utiliser dans les modèles d'e-mails" - -#: engine/vibes_auth/emailing/models.py:47 -msgid "alt text" -msgstr "autre texte" - -#: engine/vibes_auth/emailing/models.py:48 -msgid "alternative text for accessibility" -msgstr "texte alternatif pour l'accessibilité" - -#: engine/vibes_auth/emailing/models.py:52 -msgid "email image" -msgstr "image de courriel" - -#: engine/vibes_auth/emailing/models.py:53 -msgid "email images" -msgstr "images par e-mail" - -#: engine/vibes_auth/emailing/models.py:72 +#: engine/vibes_auth/emailing/models.py:39 msgid "internal name for the template" msgstr "nom interne du modèle" -#: engine/vibes_auth/emailing/models.py:76 +#: engine/vibes_auth/emailing/models.py:43 msgid "slug" msgstr "serviteurs" -#: engine/vibes_auth/emailing/models.py:77 +#: engine/vibes_auth/emailing/models.py:44 msgid "unique identifier for the template" msgstr "identifiant unique pour le modèle" -#: engine/vibes_auth/emailing/models.py:81 +#: engine/vibes_auth/emailing/models.py:48 msgid "subject" msgstr "sujet" -#: engine/vibes_auth/emailing/models.py:82 +#: engine/vibes_auth/emailing/models.py:49 msgid "email subject line - supports {{ variables }}" msgstr "Objet de l'e-mail - prend en charge {{ variables }}" -#: engine/vibes_auth/emailing/models.py:85 -msgid "HTML content" -msgstr "Contenu HTML" +#: engine/vibes_auth/emailing/models.py:52 +msgid "content" +msgstr "contenu" -#: engine/vibes_auth/emailing/models.py:87 +#: engine/vibes_auth/emailing/models.py:54 msgid "" -"email body content - supports {{ user.first_name }}, {{ user.email }}, {{ " -"project_name }}, {{ unsubscribe_url }}" +"email body in markdown - supports {{ user.first_name }}, {{ user.email }}, " +"{{ project_name }}, {{ unsubscribe_url }}" msgstr "" "Contenu du corps de l'e-mail - prend en charge {{ user.first_name }}, {{ " "user.email }}, {{ project_name }}, {{ unsubscribe_url }}" -#: engine/vibes_auth/emailing/models.py:94 +#: engine/vibes_auth/emailing/models.py:61 msgid "plain text content" msgstr "contenu en texte brut" -#: engine/vibes_auth/emailing/models.py:95 +#: engine/vibes_auth/emailing/models.py:62 msgid "plain text fallback (auto-generated if empty)" msgstr "texte brut de secours (généré automatiquement s'il est vide)" -#: engine/vibes_auth/emailing/models.py:100 +#: engine/vibes_auth/emailing/models.py:67 msgid "available variables" msgstr "variables disponibles" -#: engine/vibes_auth/emailing/models.py:101 +#: engine/vibes_auth/emailing/models.py:68 msgid "documentation of available template variables" msgstr "documentation des variables de modèle disponibles" -#: engine/vibes_auth/emailing/models.py:105 +#: engine/vibes_auth/emailing/models.py:72 msgid "email template" msgstr "modèle d'e-mail" -#: engine/vibes_auth/emailing/models.py:106 +#: engine/vibes_auth/emailing/models.py:73 msgid "email templates" msgstr "modèles d'e-mails" -#: engine/vibes_auth/emailing/models.py:122 +#: engine/vibes_auth/emailing/models.py:89 msgid "internal name for the campaign" msgstr "nom interne de la campagne" -#: engine/vibes_auth/emailing/models.py:129 +#: engine/vibes_auth/emailing/models.py:96 msgid "template" msgstr "modèle" -#: engine/vibes_auth/emailing/models.py:130 +#: engine/vibes_auth/emailing/models.py:97 msgid "email template to use for this campaign" msgstr "Modèle d'e-mail à utiliser pour cette campagne" -#: engine/vibes_auth/emailing/models.py:136 -#: engine/vibes_auth/emailing/models.py:206 +#: engine/vibes_auth/emailing/models.py:103 +#: engine/vibes_auth/emailing/models.py:173 msgid "status" msgstr "statut" -#: engine/vibes_auth/emailing/models.py:141 +#: engine/vibes_auth/emailing/models.py:108 msgid "scheduled at" msgstr "prévu à" -#: engine/vibes_auth/emailing/models.py:142 +#: engine/vibes_auth/emailing/models.py:109 msgid "when to send the campaign (leave empty for manual send)" msgstr "Quand envoyer la campagne (laisser vide pour un envoi manuel)" -#: engine/vibes_auth/emailing/models.py:147 -#: engine/vibes_auth/emailing/models.py:211 +#: engine/vibes_auth/emailing/models.py:114 +#: engine/vibes_auth/emailing/models.py:178 msgid "sent at" msgstr "tard que" -#: engine/vibes_auth/emailing/models.py:148 +#: engine/vibes_auth/emailing/models.py:115 msgid "when the campaign was actually sent" msgstr "lorsque la campagne a été effectivement envoyée" -#: engine/vibes_auth/emailing/models.py:153 +#: engine/vibes_auth/emailing/models.py:120 msgid "total recipients" msgstr "nombre total de destinataires" -#: engine/vibes_auth/emailing/models.py:157 +#: engine/vibes_auth/emailing/models.py:124 msgid "sent count" msgstr "nombre envoyé" -#: engine/vibes_auth/emailing/models.py:161 +#: engine/vibes_auth/emailing/models.py:128 msgid "failed count" msgstr "nombre d'échecs" -#: engine/vibes_auth/emailing/models.py:165 +#: engine/vibes_auth/emailing/models.py:132 msgid "opened count" msgstr "nombre ouvert" -#: engine/vibes_auth/emailing/models.py:169 +#: engine/vibes_auth/emailing/models.py:136 msgid "clicked count" msgstr "nombre de clics" -#: engine/vibes_auth/emailing/models.py:173 +#: engine/vibes_auth/emailing/models.py:140 msgid "email campaign" msgstr "campagne par e-mail" -#: engine/vibes_auth/emailing/models.py:174 +#: engine/vibes_auth/emailing/models.py:141 msgid "email campaigns" msgstr "campagnes par e-mail" -#: engine/vibes_auth/emailing/models.py:194 +#: engine/vibes_auth/emailing/models.py:161 msgid "campaign" msgstr "campagne" -#: engine/vibes_auth/emailing/models.py:200 engine/vibes_auth/models.py:146 +#: engine/vibes_auth/emailing/models.py:167 engine/vibes_auth/models.py:183 msgid "user" msgstr "Utilisateur" -#: engine/vibes_auth/emailing/models.py:216 +#: engine/vibes_auth/emailing/models.py:183 msgid "opened at" msgstr "ouvert à" -#: engine/vibes_auth/emailing/models.py:221 +#: engine/vibes_auth/emailing/models.py:188 msgid "clicked at" msgstr "cliqué sur" -#: engine/vibes_auth/emailing/models.py:227 +#: engine/vibes_auth/emailing/models.py:194 msgid "tracking ID" msgstr "identifiant de suivi" -#: engine/vibes_auth/emailing/models.py:228 +#: engine/vibes_auth/emailing/models.py:195 msgid "unique ID for tracking opens and clicks" msgstr "identifiant unique pour suivre les ouvertures et les clics" -#: engine/vibes_auth/emailing/models.py:233 +#: engine/vibes_auth/emailing/models.py:200 msgid "error message" msgstr "message d'erreur" -#: engine/vibes_auth/emailing/models.py:234 +#: engine/vibes_auth/emailing/models.py:201 msgid "error details if sending failed" msgstr "détails de l'erreur si l'envoi a échoué" -#: engine/vibes_auth/emailing/models.py:238 +#: engine/vibes_auth/emailing/models.py:205 msgid "campaign recipient" msgstr "destinataire de la campagne" -#: engine/vibes_auth/emailing/models.py:239 +#: engine/vibes_auth/emailing/models.py:206 msgid "campaign recipients" msgstr "destinataires de la campagne" @@ -512,75 +628,75 @@ msgstr "" msgid "Unsubscribe" msgstr "Se désabonner" -#: engine/vibes_auth/emailing/views.py:71 +#: engine/vibes_auth/emailing/views.py:39 msgid "Unsubscribe token is required." msgstr "Le jeton de désabonnement est requis." -#: engine/vibes_auth/emailing/views.py:79 +#: engine/vibes_auth/emailing/views.py:47 msgid "Invalid unsubscribe token format." msgstr "Format du jeton de désabonnement non valide." -#: engine/vibes_auth/emailing/views.py:87 +#: engine/vibes_auth/emailing/views.py:55 msgid "User not found." msgstr "Utilisateur introuvable." -#: engine/vibes_auth/emailing/views.py:93 -msgid "You are already unsubscribed." -msgstr "Vous êtes déjà désabonné." - -#: engine/vibes_auth/emailing/views.py:101 -msgid "You have been successfully unsubscribed from our emails." -msgstr "Vous êtes désormais désabonné de nos e-mails." - -#: engine/vibes_auth/graphene/mutations.py:46 +#: engine/vibes_auth/graphene/mutations.py:47 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" "L'uuid b64-encodé de l'utilisateur qui nous a recommandé le nouvel " "utilisateur." -#: engine/vibes_auth/graphene/mutations.py:68 +#: engine/vibes_auth/graphene/mutations.py:70 msgid "password too weak" msgstr "Le mot de passe est trop faible" -#: engine/vibes_auth/graphene/mutations.py:128 +#: engine/vibes_auth/graphene/mutations.py:130 msgid "malformed email" msgstr "Courriel malformé" -#: engine/vibes_auth/graphene/mutations.py:140 +#: engine/vibes_auth/graphene/mutations.py:142 #: engine/vibes_auth/serializers.py:117 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Numéro de téléphone malformé : {phone_number} !" -#: engine/vibes_auth/graphene/mutations.py:165 +#: engine/vibes_auth/graphene/mutations.py:167 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Format d'attribut non valide : {attribute_pair} !" -#: engine/vibes_auth/graphene/mutations.py:182 +#: engine/vibes_auth/graphene/mutations.py:184 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} n'existe pas : {uuid} !" -#: engine/vibes_auth/graphene/mutations.py:304 -#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180 +#: engine/vibes_auth/graphene/mutations.py:309 +#: engine/vibes_auth/viewsets.py:174 engine/vibes_auth/viewsets.py:198 msgid "activation link is invalid!" msgstr "Le lien d'activation n'est pas valide !" -#: engine/vibes_auth/graphene/mutations.py:307 +#: engine/vibes_auth/graphene/mutations.py:312 msgid "account already activated..." msgstr "Le compte a déjà été activé..." -#: engine/vibes_auth/graphene/mutations.py:314 -#: engine/vibes_auth/graphene/mutations.py:376 +#: engine/vibes_auth/graphene/mutations.py:319 +#: engine/vibes_auth/graphene/mutations.py:383 msgid "something went wrong: {e!s}" msgstr "Quelque chose a mal tourné : {e!s}" -#: engine/vibes_auth/graphene/mutations.py:358 -#: engine/vibes_auth/viewsets.py:106 +#: engine/vibes_auth/graphene/mutations.py:365 +#: engine/vibes_auth/viewsets.py:109 msgid "token is invalid!" msgstr "Le jeton n'est pas valide !" +#: engine/vibes_auth/graphene/mutations.py:403 +msgid "only image files are allowed (jpg, png, gif, webp)" +msgstr "Seuls les fichiers image sont autorisés (jpg, png, gif, webp)" + +#: engine/vibes_auth/graphene/mutations.py:406 +msgid "file size must not exceed 5 MB" +msgstr "La taille du fichier ne doit pas dépasser 5 Mo." + #: engine/vibes_auth/graphene/object_types.py:46 msgid "" "the products this user has viewed most recently (max 48), in " @@ -590,7 +706,7 @@ msgstr "" " ordre chronologique inverse." #: engine/vibes_auth/graphene/object_types.py:49 -#: engine/vibes_auth/models.py:214 +#: engine/vibes_auth/models.py:270 msgid "groups" msgstr "Groupes" @@ -599,7 +715,7 @@ msgid "wishlist" msgstr "Liste de souhaits" #: engine/vibes_auth/graphene/object_types.py:56 -#: engine/vibes_auth/models.py:70 +#: engine/vibes_auth/models.py:75 msgid "avatar" msgstr "Avatar" @@ -638,7 +754,7 @@ msgstr "" msgid "Assignee must be a staff user." msgstr "Le destinataire doit être un utilisateur du personnel." -#: engine/vibes_auth/models.py:42 +#: engine/vibes_auth/models.py:44 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -658,127 +774,139 @@ msgstr "" "modèle User est conçu pour gérer des cas d'utilisation spécifiques en vue " "d'une gestion améliorée des utilisateurs." -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "email" msgstr "Courriel" -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "user email address" msgstr "Adresse électronique de l'utilisateur" -#: engine/vibes_auth/models.py:55 +#: engine/vibes_auth/models.py:57 msgid "phone_number" msgstr "Numéro de téléphone" -#: engine/vibes_auth/models.py:60 +#: engine/vibes_auth/models.py:61 msgid "user phone number" msgstr "Numéro de téléphone de l'utilisateur" -#: engine/vibes_auth/models.py:66 +#: engine/vibes_auth/models.py:68 msgid "first_name" msgstr "Prénom" -#: engine/vibes_auth/models.py:67 +#: engine/vibes_auth/models.py:71 msgid "last_name" msgstr "Nom de famille" -#: engine/vibes_auth/models.py:73 +#: engine/vibes_auth/models.py:78 msgid "user profile image" msgstr "Image du profil de l'utilisateur" -#: engine/vibes_auth/models.py:78 +#: engine/vibes_auth/models.py:83 msgid "is verified" msgstr "Est vérifié" -#: engine/vibes_auth/models.py:79 +#: engine/vibes_auth/models.py:84 msgid "user verification status" msgstr "Statut de vérification de l'utilisateur" -#: engine/vibes_auth/models.py:82 +#: engine/vibes_auth/models.py:87 msgid "is_active" msgstr "Est actif" -#: engine/vibes_auth/models.py:84 +#: engine/vibes_auth/models.py:89 msgid "unselect this instead of deleting accounts" msgstr "Désélectionner cette option au lieu de supprimer des comptes" -#: engine/vibes_auth/models.py:87 +#: engine/vibes_auth/models.py:92 msgid "is_subscribed" msgstr "Est abonné" -#: engine/vibes_auth/models.py:88 +#: engine/vibes_auth/models.py:93 msgid "user's newsletter subscription status" msgstr "Statut de l'abonnement à la lettre d'information de l'utilisateur" -#: engine/vibes_auth/models.py:92 +#: engine/vibes_auth/models.py:98 msgid "activation token" msgstr "Jeton d'activation" -#: engine/vibes_auth/models.py:95 +#: engine/vibes_auth/models.py:103 +msgid "activation token created" +msgstr "Jeton d'activation créé" + +#: engine/vibes_auth/models.py:107 msgid "unsubscribe token" msgstr "jeton de désabonnement" -#: engine/vibes_auth/models.py:96 +#: engine/vibes_auth/models.py:108 msgid "token for secure one-click unsubscribe from campaigns" msgstr "" "jeton permettant de se désabonner en toute sécurité d'une campagne en un " "seul clic" -#: engine/vibes_auth/models.py:106 +#: engine/vibes_auth/models.py:118 msgid "attributes" msgstr "Attributs" -#: engine/vibes_auth/models.py:147 +#: engine/vibes_auth/models.py:184 msgid "users" msgstr "Utilisateurs" -#: engine/vibes_auth/models.py:154 +#: engine/vibes_auth/models.py:202 +msgid "admin OTP code" +msgstr "Code OTP administrateur" + +#: engine/vibes_auth/models.py:203 +msgid "admin OTP codes" +msgstr "Codes OTP administrateur" + +#: engine/vibes_auth/models.py:210 msgid "For anonymous threads" msgstr "Pour les fils de discussion anonymes" -#: engine/vibes_auth/models.py:178 +#: engine/vibes_auth/models.py:234 msgid "Chat thread" msgstr "Fil de discussion" -#: engine/vibes_auth/models.py:179 +#: engine/vibes_auth/models.py:235 msgid "Chat threads" msgstr "Fils de discussion" -#: engine/vibes_auth/models.py:185 +#: engine/vibes_auth/models.py:241 msgid "provide user or email for anonymous thread." msgstr "" "Indiquer l'utilisateur ou l'adresse électronique pour le fil de discussion " "anonyme." -#: engine/vibes_auth/models.py:188 +#: engine/vibes_auth/models.py:244 msgid "assignee must be a staff user." msgstr "L'attributaire doit être un utilisateur du personnel." -#: engine/vibes_auth/models.py:206 +#: engine/vibes_auth/models.py:262 msgid "Chat message" msgstr "Message de chat" -#: engine/vibes_auth/models.py:207 +#: engine/vibes_auth/models.py:263 msgid "Chat messages" msgstr "Messages de chat" -#: engine/vibes_auth/models.py:213 +#: engine/vibes_auth/models.py:269 msgid "group" msgstr "Groupe" -#: engine/vibes_auth/models.py:220 +#: engine/vibes_auth/models.py:276 msgid "outstanding token" msgstr "Jeton exceptionnel" -#: engine/vibes_auth/models.py:221 +#: engine/vibes_auth/models.py:277 msgid "outstanding tokens" msgstr "Jetons en circulation" -#: engine/vibes_auth/models.py:227 +#: engine/vibes_auth/models.py:283 msgid "blacklisted token" msgstr "Jeton sur liste noire" -#: engine/vibes_auth/models.py:228 +#: engine/vibes_auth/models.py:284 msgid "blacklisted tokens" msgstr "Jetons sur liste noire" @@ -823,6 +951,10 @@ msgstr "" msgid "user does not exist" msgstr "L'utilisateur n'existe pas" +#: engine/vibes_auth/templates/admin/verify_otp.html:27 +msgid "Verify" +msgstr "Vérifier" + #: engine/vibes_auth/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "Réinitialiser votre mot de passe" @@ -909,12 +1041,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "Meilleures salutations,
l'équipe %(project_name)s" -#: engine/vibes_auth/utils/emailing.py:24 +#: engine/vibes_auth/utils/emailing.py:27 #, python-brace-format msgid "{settings.PROJECT_NAME} | Activate Account" msgstr "{settings.PROJECT_NAME} | Activer le compte" -#: engine/vibes_auth/utils/emailing.py:63 +#: engine/vibes_auth/utils/emailing.py:66 #, python-brace-format msgid "{settings.PROJECT_NAME} | Reset Password" msgstr "{settings.PROJECT_NAME} | Réinitialiser le mot de passe" @@ -971,7 +1103,7 @@ msgstr "" msgid "the token is invalid" msgstr "Le jeton n'est pas valide" -#: engine/vibes_auth/viewsets.py:44 +#: engine/vibes_auth/viewsets.py:47 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." @@ -979,10 +1111,18 @@ 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." -#: engine/vibes_auth/viewsets.py:113 +#: engine/vibes_auth/viewsets.py:116 msgid "password reset successfully" msgstr "Le mot de passe a été réinitialisé avec succès !" -#: engine/vibes_auth/viewsets.py:161 +#: engine/vibes_auth/viewsets.py:146 +msgid "" +"Account already registered but not yet activated. A new activation email has" +" been sent." +msgstr "" +"Compte déjà enregistré mais pas encore activé. Un nouvel e-mail d'activation" +" a été envoyé." + +#: engine/vibes_auth/viewsets.py:179 msgid "account already activated!" msgstr "Vous avez déjà activé le compte..." diff --git a/engine/vibes_auth/locale/he_IL/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/he_IL/LC_MESSAGES/django.mo index b74dcc46..f79e3a4a 100644 Binary files a/engine/vibes_auth/locale/he_IL/LC_MESSAGES/django.mo and b/engine/vibes_auth/locale/he_IL/LC_MESSAGES/django.mo differ diff --git a/engine/vibes_auth/locale/he_IL/LC_MESSAGES/django.po b/engine/vibes_auth/locale/he_IL/LC_MESSAGES/django.po index eef0d07b..7fe6fb49 100644 --- a/engine/vibes_auth/locale/he_IL/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/he_IL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 03:06+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,32 +13,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:65 engine/vibes_auth/admin.py:66 +#: engine/vibes_auth/admin.py:64 engine/vibes_auth/admin.py:65 #: engine/vibes_auth/graphene/object_types.py:54 msgid "balance" msgstr "מאזניים" -#: engine/vibes_auth/admin.py:74 +#: engine/vibes_auth/admin.py:73 msgid "order" msgstr "הזמנה" -#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:51 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:51 msgid "orders" msgstr "הזמנות" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:84 msgid "personal info" msgstr "מידע אישי" -#: engine/vibes_auth/admin.py:89 engine/vibes_auth/graphene/object_types.py:50 +#: engine/vibes_auth/admin.py:88 engine/vibes_auth/graphene/object_types.py:50 msgid "permissions" msgstr "הרשאות" -#: engine/vibes_auth/admin.py:102 +#: engine/vibes_auth/admin.py:101 msgid "important dates" msgstr "תאריכים חשובים" -#: engine/vibes_auth/admin.py:103 +#: engine/vibes_auth/admin.py:102 msgid "additional info" msgstr "מידע נוסף" @@ -54,79 +54,83 @@ msgstr "סגור את השרשורים הנבחרים" msgid "Open selected threads" msgstr "פתח את השרשורים הנבחרים" -#: engine/vibes_auth/admin.py:208 -msgid "Preview" -msgstr "תצוגה מקדימה" - -#: engine/vibes_auth/admin.py:209 engine/vibes_auth/admin.py:249 -#: engine/vibes_auth/admin.py:326 -msgid "Metadata" -msgstr "מטא-נתונים" - -#: engine/vibes_auth/admin.py:212 -msgid "preview" -msgstr "תצוגה מקדימה" - -#: engine/vibes_auth/admin.py:221 -msgid "image preview" -msgstr "תצוגה מקדימה של תמונה" - -#: engine/vibes_auth/admin.py:241 +#: engine/vibes_auth/admin.py:209 msgid "Content" msgstr "תוכן" -#: engine/vibes_auth/admin.py:243 +#: engine/vibes_auth/admin.py:211 msgid "Documentation" msgstr "תיעוד" -#: engine/vibes_auth/admin.py:313 +#: engine/vibes_auth/admin.py:217 engine/vibes_auth/admin.py:294 +msgid "Metadata" +msgstr "מטא-נתונים" + +#: engine/vibes_auth/admin.py:281 msgid "Scheduling" msgstr "תזמון" -#: engine/vibes_auth/admin.py:315 +#: engine/vibes_auth/admin.py:283 msgid "Statistics" msgstr "סטטיסטיקה" -#: engine/vibes_auth/admin.py:329 +#: engine/vibes_auth/admin.py:297 msgid "stats" msgstr "מדינה" -#: engine/vibes_auth/admin.py:335 +#: engine/vibes_auth/admin.py:303 msgid "Prepare recipients (subscribed users)" msgstr "הכן את הנמענים (משתמשים מנויים)" -#: engine/vibes_auth/admin.py:343 +#: engine/vibes_auth/admin.py:311 msgid "Campaign '{}' is not in draft status." msgstr "הקמפיין '{}' אינו במצב טיוטה." -#: engine/vibes_auth/admin.py:350 +#: engine/vibes_auth/admin.py:318 msgid "Preparing recipients for campaign '{}'." msgstr "הכנת הנמענים לקמפיין '{}'." -#: engine/vibes_auth/admin.py:354 +#: engine/vibes_auth/admin.py:322 msgid "Send campaign now" msgstr "שלח קמפיין עכשיו" -#: engine/vibes_auth/admin.py:362 +#: engine/vibes_auth/admin.py:330 msgid "Campaign '{}' cannot be sent (status: {})." msgstr "לא ניתן לשלוח את הקמפיין '{}' (סטטוס: {})." -#: engine/vibes_auth/admin.py:372 +#: engine/vibes_auth/admin.py:340 msgid "Campaign '{}' has no recipients. Prepare recipients first." msgstr "לקמפיין '{}' אין נמענים. הכן תחילה את הנמענים." -#: engine/vibes_auth/admin.py:383 +#: engine/vibes_auth/admin.py:351 msgid "Started sending campaign '{}'." msgstr "התחלתי לשלוח את הקמפיין '{}'." -#: engine/vibes_auth/admin.py:387 +#: engine/vibes_auth/admin.py:355 msgid "Cancel campaign" msgstr "בטל קמפיין" -#: engine/vibes_auth/admin.py:396 +#: engine/vibes_auth/admin.py:364 msgid "{} campaign(s) cancelled." msgstr "{} קמפיין/קמפיינים בוטלו." +#: engine/vibes_auth/admin_site.py:24 +msgid "Verification code" +msgstr "קוד אימות" + +#: engine/vibes_auth/admin_site.py:62 +msgid "A verification code has been sent to your email." +msgstr "קוד אימות נשלח לכתובת הדוא\"ל שלך." + +#: engine/vibes_auth/admin_site.py:118 +msgid "Invalid or expired code. Please try again." +msgstr "קוד לא חוקי או פג תוקף. אנא נסה שוב." + +#: engine/vibes_auth/admin_site.py:124 +#: engine/vibes_auth/templates/admin/verify_otp.html:10 +msgid "Two-factor authentication" +msgstr "אימות דו-שלבי" + #: engine/vibes_auth/apps.py:8 msgid "Accounting" msgstr "חשבונאות" @@ -151,6 +155,142 @@ msgstr "צוות" msgid "System" msgstr "מערכת" +#: engine/vibes_auth/docs/drf/emailing.py:18 +msgid "" +"UUID token for unsubscribing. This token is unique per user and is included " +"in the unsubscribe link of every campaign email. The token remains constant " +"for each user unless regenerated." +msgstr "" +"אסימון UUID לביטול המנוי. אסימון זה הוא ייחודי לכל משתמש והוא כלול בקישור " +"לביטול המנוי בכל דוא\"ל של קמפיין. האסימון נשאר קבוע עבור כל משתמש, אלא אם " +"נוצר מחדש." + +#: engine/vibes_auth/docs/drf/emailing.py:37 +#: engine/vibes_auth/emailing/views.py:69 +msgid "You have been successfully unsubscribed from our emails." +msgstr "ההרשמה שלך לדיוור שלנו בוטלה בהצלחה." + +#: engine/vibes_auth/docs/drf/emailing.py:45 +#: engine/vibes_auth/emailing/views.py:61 +msgid "You are already unsubscribed." +msgstr "ההרשמה שלך כבר בוטלה." + +#: engine/vibes_auth/docs/drf/emailing.py:52 +msgid "Unsubscribe from email campaigns" +msgstr "ביטול מנוי מקמפיינים בדוא\"ל" + +#: engine/vibes_auth/docs/drf/emailing.py:54 +msgid "" +"Unsubscribe a user from all marketing email campaigns using their unique unsubscribe token.\n" +"\n" +"This endpoint is designed for email client compatibility where clicking a link triggers a GET request. The user will no longer receive promotional emails after successful unsubscription.\n" +"\n" +"**Note:** Transactional emails (order confirmations, password resets, etc.) are not affected by this setting." +msgstr "" +"בטל את הרישום של משתמש מכל קמפייני הדוא\"ל השיווקיים באמצעות אסימון הביטול " +"הייחודי שלו. נקודת קצה זו תוכננה לתאימות עם לקוחות דוא\"ל, שבה לחיצה על " +"קישור מפעילה בקשת GET. לאחר ביטול הרישום, המשתמש לא יקבל עוד דוא\"ל פרסומי. " +"**הערה:** דוא\"ל תפעולי (אישורי הזמנות, איפוס סיסמאות וכו') אינו מושפע " +"מהגדרה זו." + +#: engine/vibes_auth/docs/drf/emailing.py:66 +#: engine/vibes_auth/docs/drf/emailing.py:146 +msgid "Successfully unsubscribed from email campaigns." +msgstr "ההרשמה לקמפיינים בדוא\"ל בוטלה בהצלחה." + +#: engine/vibes_auth/docs/drf/emailing.py:82 +#: engine/vibes_auth/docs/drf/emailing.py:162 +msgid "Invalid or missing unsubscribe token." +msgstr "אסימון ביטול מנוי לא חוקי או חסר." + +#: engine/vibes_auth/docs/drf/emailing.py:96 +#: engine/vibes_auth/docs/drf/emailing.py:176 +msgid "User associated with the token was not found." +msgstr "לא נמצא משתמש הקשור לאסימון." + +#: engine/vibes_auth/docs/drf/emailing.py:118 +msgid "One-Click Unsubscribe (RFC 8058)" +msgstr "ביטול מנוי בלחיצה אחת (RFC 8058)" + +#: engine/vibes_auth/docs/drf/emailing.py:120 +msgid "" +"RFC 8058 compliant one-click unsubscribe endpoint for email campaigns.\n" +"\n" +"This endpoint supports the List-Unsubscribe-Post header mechanism defined in RFC 8058, which allows email clients to unsubscribe users with a single click without leaving the email application.\n" +"\n" +"The token can be provided either as a query parameter or in the request body.\n" +"\n" +"**Standards Compliance:**\n" +"- RFC 8058: Signaling One-Click Functionality for List Email Headers\n" +"- RFC 2369: The Use of URLs as Meta-Syntax for Core Mail List Commands\n" +"\n" +"**Note:** Transactional emails are not affected by this setting." +msgstr "" +"נקודת קצה להסרה בלחיצה אחת התואמת ל-RFC 8058 עבור קמפיינים בדוא\"ל. נקודת קצה זו תומכת במנגנון הכותרת List-Unsubscribe-Post המוגדר ב-RFC 8058, המאפשר ללקוחות דוא\"ל להסיר משתמשים בלחיצה אחת מבלי לעזוב את יישום הדוא\"ל. האסימון יכול להיות מסופק כפרמטר שאילתה או בגוף הבקשה.\n" +"\n" +"**תאימות לתקנים:** - RFC 8058: איתות פונקציונליות בלחיצה אחת עבור כותרות דוא\"ל ברשימה - RFC 2369: השימוש בכתובות URL כסינטקס מטא עבור פקודות רשימת דוא\"ל מרכזיות **הערה:** דוא\"ל תפעולי אינו מושפע מהגדרה זו." + +#: engine/vibes_auth/docs/drf/emailing.py:137 +msgid "" +"Unsubscribe token (alternative to query parameter). Can be omitted if token " +"is provided in URL." +msgstr "" +"אסימון ביטול מנוי (חלופה לפרמטר שאילתה). ניתן להשמיט אם האסימון מופיע בכתובת" +" ה-URL." + +#: engine/vibes_auth/docs/drf/emailing.py:200 +msgid "Track email open event" +msgstr "מעקב אחר פתיחת דוא\"ל" + +#: engine/vibes_auth/docs/drf/emailing.py:202 +msgid "" +"Records when a campaign email is opened by the recipient.\n" +"\n" +"This endpoint is called automatically when the tracking pixel (1x1 transparent GIF) embedded in the email is loaded by the recipient's email client.\n" +"\n" +"**How it works:**\n" +"1. Each campaign email contains a unique tracking pixel URL with a `tid` parameter\n" +"2. When the email is opened and images are loaded, this endpoint is called\n" +"3. The recipient's status is updated to 'opened' and the timestamp is recorded\n" +"4. The campaign's aggregate opened count is updated\n" +"\n" +"**Privacy considerations:**\n" +"- Only the first open is recorded (subsequent opens are ignored)\n" +"- No personal information beyond the tracking ID is logged\n" +"- Users who disable image loading will not trigger this event\n" +"\n" +"**Response:**\n" +"Returns a 1x1 transparent GIF image regardless of whether tracking succeeded, to ensure consistent behavior and prevent information leakage." +msgstr "" +"מתעד מתי נפתחת הודעת דוא\"ל של קמפיין על ידי הנמען. נקודת קצה זו נקראת באופן אוטומטי כאשר פיקסל המעקב (GIF שקוף בגודל 1x1) המוטמע בהודעת הדוא\"ל נטען על ידי תוכנת הדוא\"ל של הנמען.\n" +"\n" +"**איך זה עובד:** 1. כל דוא\"ל בקמפיין מכיל URL ייחודי של פיקסל מעקב עם פרמטר `tid`. 2. כאשר הדוא\"ל נפתח והתמונות נטענות, נקודת קצה זו נקראת. 3. הסטטוס של הנמען מתעדכן ל'נפתח' וחותמת הזמן נרשמת. 4. הספירה הכוללת של פתיחות בקמפיין מתעדכנת. **שיקולי פרטיות:**\n" +"- רק הפתיחה הראשונה נרשמת (פתיחות נוספות מתעלמות) - לא נרשמת מידע אישי מעבר למזהה המעקב - משתמשים שמבטלים טעינת תמונות לא יפעילו אירוע זה **תגובה:** מחזיר תמונה GIF שקופה בגודל 1x1, ללא תלות בהצלחת המעקב, כדי להבטיח התנהגות עקבית ולמנוע דליפת מידע." + +#: engine/vibes_auth/docs/drf/emailing.py:223 +msgid "" +"Tracking ID (UUID) unique to each campaign-recipient combination. This ID " +"links the open event to a specific recipient and campaign." +msgstr "" +"מזהה מעקב (UUID) ייחודי לכל שילוב של קמפיין ומקבל. מזהה זה מקשר את אירוע " +"הפתיחה למקבל ולמסע פרסום ספציפיים." + +#: engine/vibes_auth/docs/drf/emailing.py:241 +msgid "" +"1x1 transparent GIF image. Always returned regardless of tracking status to " +"maintain consistent behavior." +msgstr "" +"תמונה GIF שקופה בגודל 1x1. תמיד מוחזרת ללא תלות במצב המעקב, כדי לשמור על " +"התנהגות עקבית." + +#: engine/vibes_auth/docs/drf/emailing.py:247 +msgid "" +"Returned when no tracking ID is provided. Note: Invalid tracking IDs still " +"return 200 with the GIF to prevent enumeration attacks." +msgstr "" +"מוחזר כאשר לא מסופק מזהה מעקב. הערה: מזהי מעקב לא חוקיים עדיין מחזירים 200 " +"עם ה-GIF כדי למנוע התקפות ספירה." + #: engine/vibes_auth/docs/drf/messaging.py:17 msgid "User messages entrypoint" msgstr "נקודת כניסה להודעות משתמשים" @@ -244,9 +384,9 @@ msgid "confirm a user's password reset" msgstr "אשר את איפוס הסיסמה של המשתמש" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:351 +#: engine/vibes_auth/graphene/mutations.py:358 #: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107 -#: engine/vibes_auth/viewsets.py:94 +#: engine/vibes_auth/viewsets.py:97 msgid "passwords do not match" msgstr "הסיסמאות אינן תואמות" @@ -299,195 +439,166 @@ msgstr "נפתח" msgid "Clicked" msgstr "לחיצה" -#: engine/vibes_auth/emailing/models.py:35 -#: engine/vibes_auth/emailing/models.py:71 -#: engine/vibes_auth/emailing/models.py:121 +#: engine/vibes_auth/emailing/models.py:38 +#: engine/vibes_auth/emailing/models.py:88 msgid "name" msgstr "שם" -#: engine/vibes_auth/emailing/models.py:36 -msgid "descriptive name for the image" -msgstr "שם תיאורי לתמונה" - -#: engine/vibes_auth/emailing/models.py:40 -msgid "image" -msgstr "תמונה" - -#: engine/vibes_auth/emailing/models.py:41 -msgid "image file to use in email templates" -msgstr "קובץ תמונה לשימוש בתבניות דוא\"ל" - -#: engine/vibes_auth/emailing/models.py:47 -msgid "alt text" -msgstr "טקסט אחר" - -#: engine/vibes_auth/emailing/models.py:48 -msgid "alternative text for accessibility" -msgstr "טקסט חלופי לנגישות" - -#: engine/vibes_auth/emailing/models.py:52 -msgid "email image" -msgstr "תמונה בדוא\"ל" - -#: engine/vibes_auth/emailing/models.py:53 -msgid "email images" -msgstr "תמונות דוא\"ל" - -#: engine/vibes_auth/emailing/models.py:72 +#: engine/vibes_auth/emailing/models.py:39 msgid "internal name for the template" msgstr "שם פנימי לתבנית" -#: engine/vibes_auth/emailing/models.py:76 +#: engine/vibes_auth/emailing/models.py:43 msgid "slug" msgstr "משרתים" -#: engine/vibes_auth/emailing/models.py:77 +#: engine/vibes_auth/emailing/models.py:44 msgid "unique identifier for the template" msgstr "מזהה ייחודי לתבנית" -#: engine/vibes_auth/emailing/models.py:81 +#: engine/vibes_auth/emailing/models.py:48 msgid "subject" msgstr "נושא" -#: engine/vibes_auth/emailing/models.py:82 +#: engine/vibes_auth/emailing/models.py:49 msgid "email subject line - supports {{ variables }}" msgstr "שורת הנושא של הדוא\"ל - תומך ב-{{ variables }}" -#: engine/vibes_auth/emailing/models.py:85 -msgid "HTML content" -msgstr "תוכן HTML" +#: engine/vibes_auth/emailing/models.py:52 +msgid "content" +msgstr "תוכן" -#: engine/vibes_auth/emailing/models.py:87 +#: engine/vibes_auth/emailing/models.py:54 msgid "" -"email body content - supports {{ user.first_name }}, {{ user.email }}, {{ " -"project_name }}, {{ unsubscribe_url }}" +"email body in markdown - supports {{ user.first_name }}, {{ user.email }}, " +"{{ project_name }}, {{ unsubscribe_url }}" msgstr "" "תוכן גוף הדוא\"ל - תומך ב-{{ user.first_name }}, {{ user.email }}, {{ " "project_name }}, {{ unsubscribe_url }}" -#: engine/vibes_auth/emailing/models.py:94 +#: engine/vibes_auth/emailing/models.py:61 msgid "plain text content" msgstr "תוכן טקסט רגיל" -#: engine/vibes_auth/emailing/models.py:95 +#: engine/vibes_auth/emailing/models.py:62 msgid "plain text fallback (auto-generated if empty)" msgstr "טקסט רגיל חלופי (נוצר אוטומטית אם ריק)" -#: engine/vibes_auth/emailing/models.py:100 +#: engine/vibes_auth/emailing/models.py:67 msgid "available variables" msgstr "משתנים זמינים" -#: engine/vibes_auth/emailing/models.py:101 +#: engine/vibes_auth/emailing/models.py:68 msgid "documentation of available template variables" msgstr "תיעוד של משתני תבנית זמינים" -#: engine/vibes_auth/emailing/models.py:105 +#: engine/vibes_auth/emailing/models.py:72 msgid "email template" msgstr "תבנית דוא\"ל" -#: engine/vibes_auth/emailing/models.py:106 +#: engine/vibes_auth/emailing/models.py:73 msgid "email templates" msgstr "תבניות דוא\"ל" -#: engine/vibes_auth/emailing/models.py:122 +#: engine/vibes_auth/emailing/models.py:89 msgid "internal name for the campaign" msgstr "שם פנימי לקמפיין" -#: engine/vibes_auth/emailing/models.py:129 +#: engine/vibes_auth/emailing/models.py:96 msgid "template" msgstr "תבנית" -#: engine/vibes_auth/emailing/models.py:130 +#: engine/vibes_auth/emailing/models.py:97 msgid "email template to use for this campaign" msgstr "תבנית דוא\"ל לשימוש בקמפיין זה" -#: engine/vibes_auth/emailing/models.py:136 -#: engine/vibes_auth/emailing/models.py:206 +#: engine/vibes_auth/emailing/models.py:103 +#: engine/vibes_auth/emailing/models.py:173 msgid "status" msgstr "סטטוס" -#: engine/vibes_auth/emailing/models.py:141 +#: engine/vibes_auth/emailing/models.py:108 msgid "scheduled at" msgstr "מתוכנן ב" -#: engine/vibes_auth/emailing/models.py:142 +#: engine/vibes_auth/emailing/models.py:109 msgid "when to send the campaign (leave empty for manual send)" msgstr "מתי לשלוח את הקמפיין (השאר ריק לשליחה ידנית)" -#: engine/vibes_auth/emailing/models.py:147 -#: engine/vibes_auth/emailing/models.py:211 +#: engine/vibes_auth/emailing/models.py:114 +#: engine/vibes_auth/emailing/models.py:178 msgid "sent at" msgstr "מאוחר יותר" -#: engine/vibes_auth/emailing/models.py:148 +#: engine/vibes_auth/emailing/models.py:115 msgid "when the campaign was actually sent" msgstr "כאשר הקמפיין נשלח בפועל" -#: engine/vibes_auth/emailing/models.py:153 +#: engine/vibes_auth/emailing/models.py:120 msgid "total recipients" msgstr "סך כל הנמענים" -#: engine/vibes_auth/emailing/models.py:157 +#: engine/vibes_auth/emailing/models.py:124 msgid "sent count" msgstr "מספר נשלח" -#: engine/vibes_auth/emailing/models.py:161 +#: engine/vibes_auth/emailing/models.py:128 msgid "failed count" msgstr "ספירה כושלת" -#: engine/vibes_auth/emailing/models.py:165 +#: engine/vibes_auth/emailing/models.py:132 msgid "opened count" msgstr "נפתח ספירה" -#: engine/vibes_auth/emailing/models.py:169 +#: engine/vibes_auth/emailing/models.py:136 msgid "clicked count" msgstr "מספר הקליקים" -#: engine/vibes_auth/emailing/models.py:173 +#: engine/vibes_auth/emailing/models.py:140 msgid "email campaign" msgstr "קמפיין דוא\"ל" -#: engine/vibes_auth/emailing/models.py:174 +#: engine/vibes_auth/emailing/models.py:141 msgid "email campaigns" msgstr "קמפיינים בדוא\"ל" -#: engine/vibes_auth/emailing/models.py:194 +#: engine/vibes_auth/emailing/models.py:161 msgid "campaign" msgstr "קמפיין" -#: engine/vibes_auth/emailing/models.py:200 engine/vibes_auth/models.py:146 +#: engine/vibes_auth/emailing/models.py:167 engine/vibes_auth/models.py:183 msgid "user" msgstr "משתמש" -#: engine/vibes_auth/emailing/models.py:216 +#: engine/vibes_auth/emailing/models.py:183 msgid "opened at" msgstr "נפתח ב" -#: engine/vibes_auth/emailing/models.py:221 +#: engine/vibes_auth/emailing/models.py:188 msgid "clicked at" msgstr "לחץ על" -#: engine/vibes_auth/emailing/models.py:227 +#: engine/vibes_auth/emailing/models.py:194 msgid "tracking ID" msgstr "מספר מעקב" -#: engine/vibes_auth/emailing/models.py:228 +#: engine/vibes_auth/emailing/models.py:195 msgid "unique ID for tracking opens and clicks" msgstr "מזהה ייחודי למעקב אחר פתיחות ולחיצות" -#: engine/vibes_auth/emailing/models.py:233 +#: engine/vibes_auth/emailing/models.py:200 msgid "error message" msgstr "הודעת שגיאה" -#: engine/vibes_auth/emailing/models.py:234 +#: engine/vibes_auth/emailing/models.py:201 msgid "error details if sending failed" msgstr "פרטי השגיאה אם השליחה נכשלה" -#: engine/vibes_auth/emailing/models.py:238 +#: engine/vibes_auth/emailing/models.py:205 msgid "campaign recipient" msgstr "מקבל הקמפיין" -#: engine/vibes_auth/emailing/models.py:239 +#: engine/vibes_auth/emailing/models.py:206 msgid "campaign recipients" msgstr "נמעני הקמפיין" @@ -503,73 +614,73 @@ msgstr "קיבלת דוא\"ל זה מכיוון שנרשמת לניוזלטר ש msgid "Unsubscribe" msgstr "ביטול מנוי" -#: engine/vibes_auth/emailing/views.py:71 +#: engine/vibes_auth/emailing/views.py:39 msgid "Unsubscribe token is required." msgstr "נדרש אסימון ביטול מנוי." -#: engine/vibes_auth/emailing/views.py:79 +#: engine/vibes_auth/emailing/views.py:47 msgid "Invalid unsubscribe token format." msgstr "פורמט אסימון ביטול המנוי אינו חוקי." -#: engine/vibes_auth/emailing/views.py:87 +#: engine/vibes_auth/emailing/views.py:55 msgid "User not found." msgstr "המשתמש לא נמצא." -#: engine/vibes_auth/emailing/views.py:93 -msgid "You are already unsubscribed." -msgstr "ההרשמה שלך כבר בוטלה." - -#: engine/vibes_auth/emailing/views.py:101 -msgid "You have been successfully unsubscribed from our emails." -msgstr "ההרשמה שלך לדיוור שלנו בוטלה בהצלחה." - -#: engine/vibes_auth/graphene/mutations.py:46 +#: engine/vibes_auth/graphene/mutations.py:47 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "ה-uuid המקודד ב-b64 של המשתמש שהפנה אלינו את המשתמש החדש." -#: engine/vibes_auth/graphene/mutations.py:68 +#: engine/vibes_auth/graphene/mutations.py:70 msgid "password too weak" msgstr "הסיסמה חלשה מדי" -#: engine/vibes_auth/graphene/mutations.py:128 +#: engine/vibes_auth/graphene/mutations.py:130 msgid "malformed email" msgstr "דוא\"ל פגום" -#: engine/vibes_auth/graphene/mutations.py:140 +#: engine/vibes_auth/graphene/mutations.py:142 #: engine/vibes_auth/serializers.py:117 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "מספר טלפון שגוי: {phone_number}!" -#: engine/vibes_auth/graphene/mutations.py:165 +#: engine/vibes_auth/graphene/mutations.py:167 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "פורמט תכונה לא חוקי: {attribute_pair}!" -#: engine/vibes_auth/graphene/mutations.py:182 +#: engine/vibes_auth/graphene/mutations.py:184 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} אינו קיים: {uuid}!" -#: engine/vibes_auth/graphene/mutations.py:304 -#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180 +#: engine/vibes_auth/graphene/mutations.py:309 +#: engine/vibes_auth/viewsets.py:174 engine/vibes_auth/viewsets.py:198 msgid "activation link is invalid!" msgstr "קישור ההפעלה אינו תקף!" -#: engine/vibes_auth/graphene/mutations.py:307 +#: engine/vibes_auth/graphene/mutations.py:312 msgid "account already activated..." msgstr "החשבון כבר הופעל..." -#: engine/vibes_auth/graphene/mutations.py:314 -#: engine/vibes_auth/graphene/mutations.py:376 +#: engine/vibes_auth/graphene/mutations.py:319 +#: engine/vibes_auth/graphene/mutations.py:383 msgid "something went wrong: {e!s}" msgstr "משהו השתבש: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:358 -#: engine/vibes_auth/viewsets.py:106 +#: engine/vibes_auth/graphene/mutations.py:365 +#: engine/vibes_auth/viewsets.py:109 msgid "token is invalid!" msgstr "האסימון אינו חוקי!" +#: engine/vibes_auth/graphene/mutations.py:403 +msgid "only image files are allowed (jpg, png, gif, webp)" +msgstr "רק קבצי תמונה מותרים (jpg, png, gif, webp)" + +#: engine/vibes_auth/graphene/mutations.py:406 +msgid "file size must not exceed 5 MB" +msgstr "גודל הקובץ לא יעלה על 5 מגה-בייט" + #: engine/vibes_auth/graphene/object_types.py:46 msgid "" "the products this user has viewed most recently (max 48), in " @@ -577,7 +688,7 @@ msgid "" msgstr "המוצרים שהמשתמש צפה בהם לאחרונה (מקסימום 48), בסדר כרונולוגי הפוך." #: engine/vibes_auth/graphene/object_types.py:49 -#: engine/vibes_auth/models.py:214 +#: engine/vibes_auth/models.py:270 msgid "groups" msgstr "קבוצות" @@ -586,7 +697,7 @@ msgid "wishlist" msgstr "רשימת משאלות" #: engine/vibes_auth/graphene/object_types.py:56 -#: engine/vibes_auth/models.py:70 +#: engine/vibes_auth/models.py:75 msgid "avatar" msgstr "אוואטר" @@ -622,7 +733,7 @@ msgstr "אנו מחפשים את המפעיל שיענה לך, אנא המתן!" msgid "Assignee must be a staff user." msgstr "המקבל חייב להיות משתמש צוות." -#: engine/vibes_auth/models.py:42 +#: engine/vibes_auth/models.py:44 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -638,123 +749,135 @@ msgstr "" " עזר לניהול פריטים שנצפו לאחרונה והפעלה מבוססת אסימון לאימות חשבונות. המודל " "User נועד לטפל במקרי שימוש ספציפיים לניהול משתמשים משופר." -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "email" msgstr "דוא\"ל" -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "user email address" msgstr "כתובת הדוא\"ל של המשתמש" -#: engine/vibes_auth/models.py:55 +#: engine/vibes_auth/models.py:57 msgid "phone_number" msgstr "מספר טלפון" -#: engine/vibes_auth/models.py:60 +#: engine/vibes_auth/models.py:61 msgid "user phone number" msgstr "מספר הטלפון של המשתמש" -#: engine/vibes_auth/models.py:66 +#: engine/vibes_auth/models.py:68 msgid "first_name" msgstr "שם פרטי" -#: engine/vibes_auth/models.py:67 +#: engine/vibes_auth/models.py:71 msgid "last_name" msgstr "שם משפחה" -#: engine/vibes_auth/models.py:73 +#: engine/vibes_auth/models.py:78 msgid "user profile image" msgstr "תמונת פרופיל המשתמש" -#: engine/vibes_auth/models.py:78 +#: engine/vibes_auth/models.py:83 msgid "is verified" msgstr "מאומת" -#: engine/vibes_auth/models.py:79 +#: engine/vibes_auth/models.py:84 msgid "user verification status" msgstr "סטטוס אימות המשתמש" -#: engine/vibes_auth/models.py:82 +#: engine/vibes_auth/models.py:87 msgid "is_active" msgstr "פעיל" -#: engine/vibes_auth/models.py:84 +#: engine/vibes_auth/models.py:89 msgid "unselect this instead of deleting accounts" msgstr "בטל את הבחירה במקום למחוק חשבונות" -#: engine/vibes_auth/models.py:87 +#: engine/vibes_auth/models.py:92 msgid "is_subscribed" msgstr "מנוי" -#: engine/vibes_auth/models.py:88 +#: engine/vibes_auth/models.py:93 msgid "user's newsletter subscription status" msgstr "סטטוס המנוי לניוזלטר של המשתמש" -#: engine/vibes_auth/models.py:92 +#: engine/vibes_auth/models.py:98 msgid "activation token" msgstr "אסימון הפעלה" -#: engine/vibes_auth/models.py:95 +#: engine/vibes_auth/models.py:103 +msgid "activation token created" +msgstr "אסימון הפעלה נוצר" + +#: engine/vibes_auth/models.py:107 msgid "unsubscribe token" msgstr "אסימון ביטול מנוי" -#: engine/vibes_auth/models.py:96 +#: engine/vibes_auth/models.py:108 msgid "token for secure one-click unsubscribe from campaigns" msgstr "אסימון לביטול מנוי מאובטח בלחיצה אחת מקמפיינים" -#: engine/vibes_auth/models.py:106 +#: engine/vibes_auth/models.py:118 msgid "attributes" msgstr "תכונות" -#: engine/vibes_auth/models.py:147 +#: engine/vibes_auth/models.py:184 msgid "users" msgstr "משתמשים" -#: engine/vibes_auth/models.py:154 +#: engine/vibes_auth/models.py:202 +msgid "admin OTP code" +msgstr "קוד OTP של מנהל המערכת" + +#: engine/vibes_auth/models.py:203 +msgid "admin OTP codes" +msgstr "קודי OTP של מנהל המערכת" + +#: engine/vibes_auth/models.py:210 msgid "For anonymous threads" msgstr "לשרשורים אנונימיים" -#: engine/vibes_auth/models.py:178 +#: engine/vibes_auth/models.py:234 msgid "Chat thread" msgstr "שרשור צ'אט" -#: engine/vibes_auth/models.py:179 +#: engine/vibes_auth/models.py:235 msgid "Chat threads" msgstr "שרשורי צ'אט" -#: engine/vibes_auth/models.py:185 +#: engine/vibes_auth/models.py:241 msgid "provide user or email for anonymous thread." msgstr "ציין משתמש או דוא\"ל עבור שרשור אנונימי." -#: engine/vibes_auth/models.py:188 +#: engine/vibes_auth/models.py:244 msgid "assignee must be a staff user." msgstr "המקבל חייב להיות משתמש צוות." -#: engine/vibes_auth/models.py:206 +#: engine/vibes_auth/models.py:262 msgid "Chat message" msgstr "הודעת צ'אט" -#: engine/vibes_auth/models.py:207 +#: engine/vibes_auth/models.py:263 msgid "Chat messages" msgstr "הודעות צ'אט" -#: engine/vibes_auth/models.py:213 +#: engine/vibes_auth/models.py:269 msgid "group" msgstr "קבוצה" -#: engine/vibes_auth/models.py:220 +#: engine/vibes_auth/models.py:276 msgid "outstanding token" msgstr "אסימון יוצא מן הכלל" -#: engine/vibes_auth/models.py:221 +#: engine/vibes_auth/models.py:277 msgid "outstanding tokens" msgstr "אסימונים מצטיינים" -#: engine/vibes_auth/models.py:227 +#: engine/vibes_auth/models.py:283 msgid "blacklisted token" msgstr "אסימון ברשימה השחורה" -#: engine/vibes_auth/models.py:228 +#: engine/vibes_auth/models.py:284 msgid "blacklisted tokens" msgstr "אסימונים ברשימה השחורה" @@ -796,6 +919,10 @@ msgstr "אין תביעה uuid של משתמש נוכחת באסימון" msgid "user does not exist" msgstr "המשתמש אינו קיים" +#: engine/vibes_auth/templates/admin/verify_otp.html:27 +msgid "Verify" +msgstr "אמת" + #: engine/vibes_auth/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "אפס את הסיסמה שלך" @@ -877,12 +1004,12 @@ msgstr "הפעל חשבון" msgid "best regards,
the %(project_name)s team" msgstr "בברכה,
צוות %(project_name)s" -#: engine/vibes_auth/utils/emailing.py:24 +#: engine/vibes_auth/utils/emailing.py:27 #, python-brace-format msgid "{settings.PROJECT_NAME} | Activate Account" msgstr "{settings.PROJECT_NAME} | הפעל חשבון" -#: engine/vibes_auth/utils/emailing.py:63 +#: engine/vibes_auth/utils/emailing.py:66 #, python-brace-format msgid "{settings.PROJECT_NAME} | Reset Password" msgstr "{settings.PROJECT_NAME} | איפוס סיסמה" @@ -933,7 +1060,7 @@ msgstr "" msgid "the token is invalid" msgstr "האסימון אינו חוקי" -#: engine/vibes_auth/viewsets.py:44 +#: engine/vibes_auth/viewsets.py:47 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." @@ -943,10 +1070,16 @@ msgstr "" "אווטאר, הפעלת חשבון ומיזוג פריטים שנצפו לאחרונה. מחלקה זו מרחיבה את mixins " "ו-GenericViewSet לטיפול חזק ב-API." -#: engine/vibes_auth/viewsets.py:113 +#: engine/vibes_auth/viewsets.py:116 msgid "password reset successfully" msgstr "הסיסמה אופסה בהצלחה!" -#: engine/vibes_auth/viewsets.py:161 +#: engine/vibes_auth/viewsets.py:146 +msgid "" +"Account already registered but not yet activated. A new activation email has" +" been sent." +msgstr "החשבון כבר נרשם אך טרם הופעל. נשלחה הודעת דוא\"ל חדשה להפעלת החשבון." + +#: engine/vibes_auth/viewsets.py:179 msgid "account already activated!" msgstr "כבר הפעלת את החשבון..." diff --git a/engine/vibes_auth/locale/hi_IN/LC_MESSAGES/django.po b/engine/vibes_auth/locale/hi_IN/LC_MESSAGES/django.po index bff3415f..d0f08ea1 100644 --- a/engine/vibes_auth/locale/hi_IN/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/hi_IN/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 03:06+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -12,32 +12,32 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: engine/vibes_auth/admin.py:65 engine/vibes_auth/admin.py:66 +#: engine/vibes_auth/admin.py:64 engine/vibes_auth/admin.py:65 #: engine/vibes_auth/graphene/object_types.py:54 msgid "balance" msgstr "" -#: engine/vibes_auth/admin.py:74 +#: engine/vibes_auth/admin.py:73 msgid "order" msgstr "" -#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:51 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:51 msgid "orders" msgstr "" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:84 msgid "personal info" msgstr "" -#: engine/vibes_auth/admin.py:89 engine/vibes_auth/graphene/object_types.py:50 +#: engine/vibes_auth/admin.py:88 engine/vibes_auth/graphene/object_types.py:50 msgid "permissions" msgstr "" -#: engine/vibes_auth/admin.py:102 +#: engine/vibes_auth/admin.py:101 msgid "important dates" msgstr "" -#: engine/vibes_auth/admin.py:103 +#: engine/vibes_auth/admin.py:102 msgid "additional info" msgstr "" @@ -53,79 +53,83 @@ msgstr "" msgid "Open selected threads" msgstr "" -#: engine/vibes_auth/admin.py:208 -msgid "Preview" -msgstr "" - -#: engine/vibes_auth/admin.py:209 engine/vibes_auth/admin.py:249 -#: engine/vibes_auth/admin.py:326 -msgid "Metadata" -msgstr "" - -#: engine/vibes_auth/admin.py:212 -msgid "preview" -msgstr "" - -#: engine/vibes_auth/admin.py:221 -msgid "image preview" -msgstr "" - -#: engine/vibes_auth/admin.py:241 +#: engine/vibes_auth/admin.py:209 msgid "Content" msgstr "" -#: engine/vibes_auth/admin.py:243 +#: engine/vibes_auth/admin.py:211 msgid "Documentation" msgstr "" -#: engine/vibes_auth/admin.py:313 +#: engine/vibes_auth/admin.py:217 engine/vibes_auth/admin.py:294 +msgid "Metadata" +msgstr "" + +#: engine/vibes_auth/admin.py:281 msgid "Scheduling" msgstr "" -#: engine/vibes_auth/admin.py:315 +#: engine/vibes_auth/admin.py:283 msgid "Statistics" msgstr "" -#: engine/vibes_auth/admin.py:329 +#: engine/vibes_auth/admin.py:297 msgid "stats" msgstr "" -#: engine/vibes_auth/admin.py:335 +#: engine/vibes_auth/admin.py:303 msgid "Prepare recipients (subscribed users)" msgstr "" -#: engine/vibes_auth/admin.py:343 +#: engine/vibes_auth/admin.py:311 msgid "Campaign '{}' is not in draft status." msgstr "" -#: engine/vibes_auth/admin.py:350 +#: engine/vibes_auth/admin.py:318 msgid "Preparing recipients for campaign '{}'." msgstr "" -#: engine/vibes_auth/admin.py:354 +#: engine/vibes_auth/admin.py:322 msgid "Send campaign now" msgstr "" -#: engine/vibes_auth/admin.py:362 +#: engine/vibes_auth/admin.py:330 msgid "Campaign '{}' cannot be sent (status: {})." msgstr "" -#: engine/vibes_auth/admin.py:372 +#: engine/vibes_auth/admin.py:340 msgid "Campaign '{}' has no recipients. Prepare recipients first." msgstr "" -#: engine/vibes_auth/admin.py:383 +#: engine/vibes_auth/admin.py:351 msgid "Started sending campaign '{}'." msgstr "" -#: engine/vibes_auth/admin.py:387 +#: engine/vibes_auth/admin.py:355 msgid "Cancel campaign" msgstr "" -#: engine/vibes_auth/admin.py:396 +#: engine/vibes_auth/admin.py:364 msgid "{} campaign(s) cancelled." msgstr "" +#: engine/vibes_auth/admin_site.py:24 +msgid "Verification code" +msgstr "" + +#: engine/vibes_auth/admin_site.py:62 +msgid "A verification code has been sent to your email." +msgstr "" + +#: engine/vibes_auth/admin_site.py:118 +msgid "Invalid or expired code. Please try again." +msgstr "" + +#: engine/vibes_auth/admin_site.py:124 +#: engine/vibes_auth/templates/admin/verify_otp.html:10 +msgid "Two-factor authentication" +msgstr "" + #: engine/vibes_auth/apps.py:8 msgid "Accounting" msgstr "" @@ -150,6 +154,131 @@ msgstr "" msgid "System" msgstr "" +#: engine/vibes_auth/docs/drf/emailing.py:18 +msgid "" +"UUID token for unsubscribing. This token is unique per user and is included " +"in the unsubscribe link of every campaign email. The token remains constant " +"for each user unless regenerated." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:37 +#: engine/vibes_auth/emailing/views.py:69 +msgid "You have been successfully unsubscribed from our emails." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:45 +#: engine/vibes_auth/emailing/views.py:61 +msgid "You are already unsubscribed." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:52 +msgid "Unsubscribe from email campaigns" +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:54 +msgid "" +"Unsubscribe a user from all marketing email campaigns using their unique " +"unsubscribe token.\n" +"\n" +"This endpoint is designed for email client compatibility where clicking a " +"link triggers a GET request. The user will no longer receive promotional " +"emails after successful unsubscription.\n" +"\n" +"**Note:** Transactional emails (order confirmations, password resets, etc.) " +"are not affected by this setting." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:66 +#: engine/vibes_auth/docs/drf/emailing.py:146 +msgid "Successfully unsubscribed from email campaigns." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:82 +#: engine/vibes_auth/docs/drf/emailing.py:162 +msgid "Invalid or missing unsubscribe token." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:96 +#: engine/vibes_auth/docs/drf/emailing.py:176 +msgid "User associated with the token was not found." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:118 +msgid "One-Click Unsubscribe (RFC 8058)" +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:120 +msgid "" +"RFC 8058 compliant one-click unsubscribe endpoint for email campaigns.\n" +"\n" +"This endpoint supports the List-Unsubscribe-Post header mechanism defined in " +"RFC 8058, which allows email clients to unsubscribe users with a single " +"click without leaving the email application.\n" +"\n" +"The token can be provided either as a query parameter or in the request " +"body.\n" +"\n" +"**Standards Compliance:**\n" +"- RFC 8058: Signaling One-Click Functionality for List Email Headers\n" +"- RFC 2369: The Use of URLs as Meta-Syntax for Core Mail List Commands\n" +"\n" +"**Note:** Transactional emails are not affected by this setting." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:137 +msgid "" +"Unsubscribe token (alternative to query parameter). Can be omitted if token " +"is provided in URL." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:200 +msgid "Track email open event" +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:202 +msgid "" +"Records when a campaign email is opened by the recipient.\n" +"\n" +"This endpoint is called automatically when the tracking pixel (1x1 " +"transparent GIF) embedded in the email is loaded by the recipient's email " +"client.\n" +"\n" +"**How it works:**\n" +"1. Each campaign email contains a unique tracking pixel URL with a `tid` " +"parameter\n" +"2. When the email is opened and images are loaded, this endpoint is called\n" +"3. The recipient's status is updated to 'opened' and the timestamp is " +"recorded\n" +"4. The campaign's aggregate opened count is updated\n" +"\n" +"**Privacy considerations:**\n" +"- Only the first open is recorded (subsequent opens are ignored)\n" +"- No personal information beyond the tracking ID is logged\n" +"- Users who disable image loading will not trigger this event\n" +"\n" +"**Response:**\n" +"Returns a 1x1 transparent GIF image regardless of whether tracking " +"succeeded, to ensure consistent behavior and prevent information leakage." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:223 +msgid "" +"Tracking ID (UUID) unique to each campaign-recipient combination. This ID " +"links the open event to a specific recipient and campaign." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:241 +msgid "" +"1x1 transparent GIF image. Always returned regardless of tracking status to " +"maintain consistent behavior." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:247 +msgid "" +"Returned when no tracking ID is provided. Note: Invalid tracking IDs still " +"return 200 with the GIF to prevent enumeration attacks." +msgstr "" + #: engine/vibes_auth/docs/drf/messaging.py:17 msgid "User messages entrypoint" msgstr "" @@ -239,9 +368,9 @@ msgid "confirm a user's password reset" msgstr "" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:351 +#: engine/vibes_auth/graphene/mutations.py:358 #: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107 -#: engine/vibes_auth/viewsets.py:94 +#: engine/vibes_auth/viewsets.py:97 msgid "passwords do not match" msgstr "" @@ -294,193 +423,164 @@ msgstr "" msgid "Clicked" msgstr "" -#: engine/vibes_auth/emailing/models.py:35 -#: engine/vibes_auth/emailing/models.py:71 -#: engine/vibes_auth/emailing/models.py:121 +#: engine/vibes_auth/emailing/models.py:38 +#: engine/vibes_auth/emailing/models.py:88 msgid "name" msgstr "" -#: engine/vibes_auth/emailing/models.py:36 -msgid "descriptive name for the image" -msgstr "" - -#: engine/vibes_auth/emailing/models.py:40 -msgid "image" -msgstr "" - -#: engine/vibes_auth/emailing/models.py:41 -msgid "image file to use in email templates" -msgstr "" - -#: engine/vibes_auth/emailing/models.py:47 -msgid "alt text" -msgstr "" - -#: engine/vibes_auth/emailing/models.py:48 -msgid "alternative text for accessibility" -msgstr "" - -#: engine/vibes_auth/emailing/models.py:52 -msgid "email image" -msgstr "" - -#: engine/vibes_auth/emailing/models.py:53 -msgid "email images" -msgstr "" - -#: engine/vibes_auth/emailing/models.py:72 +#: engine/vibes_auth/emailing/models.py:39 msgid "internal name for the template" msgstr "" -#: engine/vibes_auth/emailing/models.py:76 +#: engine/vibes_auth/emailing/models.py:43 msgid "slug" msgstr "" -#: engine/vibes_auth/emailing/models.py:77 +#: engine/vibes_auth/emailing/models.py:44 msgid "unique identifier for the template" msgstr "" -#: engine/vibes_auth/emailing/models.py:81 +#: engine/vibes_auth/emailing/models.py:48 msgid "subject" msgstr "" -#: engine/vibes_auth/emailing/models.py:82 +#: engine/vibes_auth/emailing/models.py:49 msgid "email subject line - supports {{ variables }}" msgstr "" -#: engine/vibes_auth/emailing/models.py:85 -msgid "HTML content" +#: engine/vibes_auth/emailing/models.py:52 +msgid "content" msgstr "" -#: engine/vibes_auth/emailing/models.py:87 +#: engine/vibes_auth/emailing/models.py:54 msgid "" -"email body content - supports {{ user.first_name }}, {{ user.email }}, " +"email body in markdown - supports {{ user.first_name }}, {{ user.email }}, " "{{ project_name }}, {{ unsubscribe_url }}" msgstr "" -#: engine/vibes_auth/emailing/models.py:94 +#: engine/vibes_auth/emailing/models.py:61 msgid "plain text content" msgstr "" -#: engine/vibes_auth/emailing/models.py:95 +#: engine/vibes_auth/emailing/models.py:62 msgid "plain text fallback (auto-generated if empty)" msgstr "" -#: engine/vibes_auth/emailing/models.py:100 +#: engine/vibes_auth/emailing/models.py:67 msgid "available variables" msgstr "" -#: engine/vibes_auth/emailing/models.py:101 +#: engine/vibes_auth/emailing/models.py:68 msgid "documentation of available template variables" msgstr "" -#: engine/vibes_auth/emailing/models.py:105 +#: engine/vibes_auth/emailing/models.py:72 msgid "email template" msgstr "" -#: engine/vibes_auth/emailing/models.py:106 +#: engine/vibes_auth/emailing/models.py:73 msgid "email templates" msgstr "" -#: engine/vibes_auth/emailing/models.py:122 +#: engine/vibes_auth/emailing/models.py:89 msgid "internal name for the campaign" msgstr "" -#: engine/vibes_auth/emailing/models.py:129 +#: engine/vibes_auth/emailing/models.py:96 msgid "template" msgstr "" -#: engine/vibes_auth/emailing/models.py:130 +#: engine/vibes_auth/emailing/models.py:97 msgid "email template to use for this campaign" msgstr "" -#: engine/vibes_auth/emailing/models.py:136 -#: engine/vibes_auth/emailing/models.py:206 +#: engine/vibes_auth/emailing/models.py:103 +#: engine/vibes_auth/emailing/models.py:173 msgid "status" msgstr "" -#: engine/vibes_auth/emailing/models.py:141 +#: engine/vibes_auth/emailing/models.py:108 msgid "scheduled at" msgstr "" -#: engine/vibes_auth/emailing/models.py:142 +#: engine/vibes_auth/emailing/models.py:109 msgid "when to send the campaign (leave empty for manual send)" msgstr "" -#: engine/vibes_auth/emailing/models.py:147 -#: engine/vibes_auth/emailing/models.py:211 +#: engine/vibes_auth/emailing/models.py:114 +#: engine/vibes_auth/emailing/models.py:178 msgid "sent at" msgstr "" -#: engine/vibes_auth/emailing/models.py:148 +#: engine/vibes_auth/emailing/models.py:115 msgid "when the campaign was actually sent" msgstr "" -#: engine/vibes_auth/emailing/models.py:153 +#: engine/vibes_auth/emailing/models.py:120 msgid "total recipients" msgstr "" -#: engine/vibes_auth/emailing/models.py:157 +#: engine/vibes_auth/emailing/models.py:124 msgid "sent count" msgstr "" -#: engine/vibes_auth/emailing/models.py:161 +#: engine/vibes_auth/emailing/models.py:128 msgid "failed count" msgstr "" -#: engine/vibes_auth/emailing/models.py:165 +#: engine/vibes_auth/emailing/models.py:132 msgid "opened count" msgstr "" -#: engine/vibes_auth/emailing/models.py:169 +#: engine/vibes_auth/emailing/models.py:136 msgid "clicked count" msgstr "" -#: engine/vibes_auth/emailing/models.py:173 +#: engine/vibes_auth/emailing/models.py:140 msgid "email campaign" msgstr "" -#: engine/vibes_auth/emailing/models.py:174 +#: engine/vibes_auth/emailing/models.py:141 msgid "email campaigns" msgstr "" -#: engine/vibes_auth/emailing/models.py:194 +#: engine/vibes_auth/emailing/models.py:161 msgid "campaign" msgstr "" -#: engine/vibes_auth/emailing/models.py:200 engine/vibes_auth/models.py:146 +#: engine/vibes_auth/emailing/models.py:167 engine/vibes_auth/models.py:183 msgid "user" msgstr "" -#: engine/vibes_auth/emailing/models.py:216 +#: engine/vibes_auth/emailing/models.py:183 msgid "opened at" msgstr "" -#: engine/vibes_auth/emailing/models.py:221 +#: engine/vibes_auth/emailing/models.py:188 msgid "clicked at" msgstr "" -#: engine/vibes_auth/emailing/models.py:227 +#: engine/vibes_auth/emailing/models.py:194 msgid "tracking ID" msgstr "" -#: engine/vibes_auth/emailing/models.py:228 +#: engine/vibes_auth/emailing/models.py:195 msgid "unique ID for tracking opens and clicks" msgstr "" -#: engine/vibes_auth/emailing/models.py:233 +#: engine/vibes_auth/emailing/models.py:200 msgid "error message" msgstr "" -#: engine/vibes_auth/emailing/models.py:234 +#: engine/vibes_auth/emailing/models.py:201 msgid "error details if sending failed" msgstr "" -#: engine/vibes_auth/emailing/models.py:238 +#: engine/vibes_auth/emailing/models.py:205 msgid "campaign recipient" msgstr "" -#: engine/vibes_auth/emailing/models.py:239 +#: engine/vibes_auth/emailing/models.py:206 msgid "campaign recipients" msgstr "" @@ -496,73 +596,73 @@ msgstr "" msgid "Unsubscribe" msgstr "" -#: engine/vibes_auth/emailing/views.py:71 +#: engine/vibes_auth/emailing/views.py:39 msgid "Unsubscribe token is required." msgstr "" -#: engine/vibes_auth/emailing/views.py:79 +#: engine/vibes_auth/emailing/views.py:47 msgid "Invalid unsubscribe token format." msgstr "" -#: engine/vibes_auth/emailing/views.py:87 +#: engine/vibes_auth/emailing/views.py:55 msgid "User not found." msgstr "" -#: engine/vibes_auth/emailing/views.py:93 -msgid "You are already unsubscribed." -msgstr "" - -#: engine/vibes_auth/emailing/views.py:101 -msgid "You have been successfully unsubscribed from our emails." -msgstr "" - -#: engine/vibes_auth/graphene/mutations.py:46 +#: engine/vibes_auth/graphene/mutations.py:47 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" -#: engine/vibes_auth/graphene/mutations.py:68 +#: engine/vibes_auth/graphene/mutations.py:70 msgid "password too weak" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:128 +#: engine/vibes_auth/graphene/mutations.py:130 msgid "malformed email" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:140 +#: engine/vibes_auth/graphene/mutations.py:142 #: engine/vibes_auth/serializers.py:117 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:165 +#: engine/vibes_auth/graphene/mutations.py:167 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:182 +#: engine/vibes_auth/graphene/mutations.py:184 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:304 -#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180 +#: engine/vibes_auth/graphene/mutations.py:309 +#: engine/vibes_auth/viewsets.py:174 engine/vibes_auth/viewsets.py:198 msgid "activation link is invalid!" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:307 +#: engine/vibes_auth/graphene/mutations.py:312 msgid "account already activated..." msgstr "" -#: engine/vibes_auth/graphene/mutations.py:314 -#: engine/vibes_auth/graphene/mutations.py:376 +#: engine/vibes_auth/graphene/mutations.py:319 +#: engine/vibes_auth/graphene/mutations.py:383 msgid "something went wrong: {e!s}" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:358 -#: engine/vibes_auth/viewsets.py:106 +#: engine/vibes_auth/graphene/mutations.py:365 +#: engine/vibes_auth/viewsets.py:109 msgid "token is invalid!" msgstr "" +#: engine/vibes_auth/graphene/mutations.py:403 +msgid "only image files are allowed (jpg, png, gif, webp)" +msgstr "" + +#: engine/vibes_auth/graphene/mutations.py:406 +msgid "file size must not exceed 5 MB" +msgstr "" + #: engine/vibes_auth/graphene/object_types.py:46 msgid "" "the products this user has viewed most recently (max 48), in reverse‐" @@ -570,7 +670,7 @@ msgid "" msgstr "" #: engine/vibes_auth/graphene/object_types.py:49 -#: engine/vibes_auth/models.py:214 +#: engine/vibes_auth/models.py:270 msgid "groups" msgstr "" @@ -578,7 +678,7 @@ msgstr "" msgid "wishlist" msgstr "" -#: engine/vibes_auth/graphene/object_types.py:56 engine/vibes_auth/models.py:70 +#: engine/vibes_auth/graphene/object_types.py:56 engine/vibes_auth/models.py:75 msgid "avatar" msgstr "" @@ -613,7 +713,7 @@ msgstr "" msgid "Assignee must be a staff user." msgstr "" -#: engine/vibes_auth/models.py:42 +#: engine/vibes_auth/models.py:44 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -624,123 +724,135 @@ msgid "" "for enhanced user management." msgstr "" -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "email" msgstr "" -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "user email address" msgstr "" -#: engine/vibes_auth/models.py:55 +#: engine/vibes_auth/models.py:57 msgid "phone_number" msgstr "" -#: engine/vibes_auth/models.py:60 +#: engine/vibes_auth/models.py:61 msgid "user phone number" msgstr "" -#: engine/vibes_auth/models.py:66 +#: engine/vibes_auth/models.py:68 msgid "first_name" msgstr "" -#: engine/vibes_auth/models.py:67 +#: engine/vibes_auth/models.py:71 msgid "last_name" msgstr "" -#: engine/vibes_auth/models.py:73 +#: engine/vibes_auth/models.py:78 msgid "user profile image" msgstr "" -#: engine/vibes_auth/models.py:78 +#: engine/vibes_auth/models.py:83 msgid "is verified" msgstr "" -#: engine/vibes_auth/models.py:79 +#: engine/vibes_auth/models.py:84 msgid "user verification status" msgstr "" -#: engine/vibes_auth/models.py:82 +#: engine/vibes_auth/models.py:87 msgid "is_active" msgstr "" -#: engine/vibes_auth/models.py:84 +#: engine/vibes_auth/models.py:89 msgid "unselect this instead of deleting accounts" msgstr "" -#: engine/vibes_auth/models.py:87 +#: engine/vibes_auth/models.py:92 msgid "is_subscribed" msgstr "" -#: engine/vibes_auth/models.py:88 +#: engine/vibes_auth/models.py:93 msgid "user's newsletter subscription status" msgstr "" -#: engine/vibes_auth/models.py:92 +#: engine/vibes_auth/models.py:98 msgid "activation token" msgstr "" -#: engine/vibes_auth/models.py:95 +#: engine/vibes_auth/models.py:103 +msgid "activation token created" +msgstr "" + +#: engine/vibes_auth/models.py:107 msgid "unsubscribe token" msgstr "" -#: engine/vibes_auth/models.py:96 +#: engine/vibes_auth/models.py:108 msgid "token for secure one-click unsubscribe from campaigns" msgstr "" -#: engine/vibes_auth/models.py:106 +#: engine/vibes_auth/models.py:118 msgid "attributes" msgstr "" -#: engine/vibes_auth/models.py:147 +#: engine/vibes_auth/models.py:184 msgid "users" msgstr "" -#: engine/vibes_auth/models.py:154 +#: engine/vibes_auth/models.py:202 +msgid "admin OTP code" +msgstr "" + +#: engine/vibes_auth/models.py:203 +msgid "admin OTP codes" +msgstr "" + +#: engine/vibes_auth/models.py:210 msgid "For anonymous threads" msgstr "" -#: engine/vibes_auth/models.py:178 +#: engine/vibes_auth/models.py:234 msgid "Chat thread" msgstr "" -#: engine/vibes_auth/models.py:179 +#: engine/vibes_auth/models.py:235 msgid "Chat threads" msgstr "" -#: engine/vibes_auth/models.py:185 +#: engine/vibes_auth/models.py:241 msgid "provide user or email for anonymous thread." msgstr "" -#: engine/vibes_auth/models.py:188 +#: engine/vibes_auth/models.py:244 msgid "assignee must be a staff user." msgstr "" -#: engine/vibes_auth/models.py:206 +#: engine/vibes_auth/models.py:262 msgid "Chat message" msgstr "" -#: engine/vibes_auth/models.py:207 +#: engine/vibes_auth/models.py:263 msgid "Chat messages" msgstr "" -#: engine/vibes_auth/models.py:213 +#: engine/vibes_auth/models.py:269 msgid "group" msgstr "" -#: engine/vibes_auth/models.py:220 +#: engine/vibes_auth/models.py:276 msgid "outstanding token" msgstr "" -#: engine/vibes_auth/models.py:221 +#: engine/vibes_auth/models.py:277 msgid "outstanding tokens" msgstr "" -#: engine/vibes_auth/models.py:227 +#: engine/vibes_auth/models.py:283 msgid "blacklisted token" msgstr "" -#: engine/vibes_auth/models.py:228 +#: engine/vibes_auth/models.py:284 msgid "blacklisted tokens" msgstr "" @@ -782,6 +894,10 @@ msgstr "" msgid "user does not exist" msgstr "" +#: engine/vibes_auth/templates/admin/verify_otp.html:27 +msgid "Verify" +msgstr "" + #: engine/vibes_auth/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "" @@ -858,12 +974,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "" -#: engine/vibes_auth/utils/emailing.py:24 +#: engine/vibes_auth/utils/emailing.py:27 #, python-brace-format msgid "{settings.PROJECT_NAME} | Activate Account" msgstr "" -#: engine/vibes_auth/utils/emailing.py:63 +#: engine/vibes_auth/utils/emailing.py:66 #, python-brace-format msgid "{settings.PROJECT_NAME} | Reset Password" msgstr "" @@ -902,7 +1018,7 @@ msgstr "" msgid "the token is invalid" msgstr "" -#: engine/vibes_auth/viewsets.py:44 +#: engine/vibes_auth/viewsets.py:47 msgid "" "User view set implementation.\n" "Provides a set of actions that manage user-related data such as creation, " @@ -911,10 +1027,16 @@ msgid "" "class extends the mixins and GenericViewSet for robust API handling." msgstr "" -#: engine/vibes_auth/viewsets.py:113 +#: engine/vibes_auth/viewsets.py:116 msgid "password reset successfully" msgstr "" -#: engine/vibes_auth/viewsets.py:161 +#: engine/vibes_auth/viewsets.py:146 +msgid "" +"Account already registered but not yet activated. A new activation email has " +"been sent." +msgstr "" + +#: engine/vibes_auth/viewsets.py:179 msgid "account already activated!" msgstr "" diff --git a/engine/vibes_auth/locale/hr_HR/LC_MESSAGES/django.po b/engine/vibes_auth/locale/hr_HR/LC_MESSAGES/django.po index f8c18374..d44eb085 100644 --- a/engine/vibes_auth/locale/hr_HR/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/hr_HR/LC_MESSAGES/django.po @@ -2,12 +2,12 @@ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. -# +# msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 03:06+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,32 +16,32 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: engine/vibes_auth/admin.py:65 engine/vibes_auth/admin.py:66 +#: engine/vibes_auth/admin.py:64 engine/vibes_auth/admin.py:65 #: engine/vibes_auth/graphene/object_types.py:54 msgid "balance" msgstr "" -#: engine/vibes_auth/admin.py:74 +#: engine/vibes_auth/admin.py:73 msgid "order" msgstr "" -#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:51 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:51 msgid "orders" msgstr "" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:84 msgid "personal info" msgstr "" -#: engine/vibes_auth/admin.py:89 engine/vibes_auth/graphene/object_types.py:50 +#: engine/vibes_auth/admin.py:88 engine/vibes_auth/graphene/object_types.py:50 msgid "permissions" msgstr "" -#: engine/vibes_auth/admin.py:102 +#: engine/vibes_auth/admin.py:101 msgid "important dates" msgstr "" -#: engine/vibes_auth/admin.py:103 +#: engine/vibes_auth/admin.py:102 msgid "additional info" msgstr "" @@ -57,79 +57,83 @@ msgstr "" msgid "Open selected threads" msgstr "" -#: engine/vibes_auth/admin.py:208 -msgid "Preview" -msgstr "" - -#: engine/vibes_auth/admin.py:209 engine/vibes_auth/admin.py:249 -#: engine/vibes_auth/admin.py:326 -msgid "Metadata" -msgstr "" - -#: engine/vibes_auth/admin.py:212 -msgid "preview" -msgstr "" - -#: engine/vibes_auth/admin.py:221 -msgid "image preview" -msgstr "" - -#: engine/vibes_auth/admin.py:241 +#: engine/vibes_auth/admin.py:209 msgid "Content" msgstr "" -#: engine/vibes_auth/admin.py:243 +#: engine/vibes_auth/admin.py:211 msgid "Documentation" msgstr "" -#: engine/vibes_auth/admin.py:313 +#: engine/vibes_auth/admin.py:217 engine/vibes_auth/admin.py:294 +msgid "Metadata" +msgstr "" + +#: engine/vibes_auth/admin.py:281 msgid "Scheduling" msgstr "" -#: engine/vibes_auth/admin.py:315 +#: engine/vibes_auth/admin.py:283 msgid "Statistics" msgstr "" -#: engine/vibes_auth/admin.py:329 +#: engine/vibes_auth/admin.py:297 msgid "stats" msgstr "" -#: engine/vibes_auth/admin.py:335 +#: engine/vibes_auth/admin.py:303 msgid "Prepare recipients (subscribed users)" msgstr "" -#: engine/vibes_auth/admin.py:343 +#: engine/vibes_auth/admin.py:311 msgid "Campaign '{}' is not in draft status." msgstr "" -#: engine/vibes_auth/admin.py:350 +#: engine/vibes_auth/admin.py:318 msgid "Preparing recipients for campaign '{}'." msgstr "" -#: engine/vibes_auth/admin.py:354 +#: engine/vibes_auth/admin.py:322 msgid "Send campaign now" msgstr "" -#: engine/vibes_auth/admin.py:362 +#: engine/vibes_auth/admin.py:330 msgid "Campaign '{}' cannot be sent (status: {})." msgstr "" -#: engine/vibes_auth/admin.py:372 +#: engine/vibes_auth/admin.py:340 msgid "Campaign '{}' has no recipients. Prepare recipients first." msgstr "" -#: engine/vibes_auth/admin.py:383 +#: engine/vibes_auth/admin.py:351 msgid "Started sending campaign '{}'." msgstr "" -#: engine/vibes_auth/admin.py:387 +#: engine/vibes_auth/admin.py:355 msgid "Cancel campaign" msgstr "" -#: engine/vibes_auth/admin.py:396 +#: engine/vibes_auth/admin.py:364 msgid "{} campaign(s) cancelled." msgstr "" +#: engine/vibes_auth/admin_site.py:24 +msgid "Verification code" +msgstr "" + +#: engine/vibes_auth/admin_site.py:62 +msgid "A verification code has been sent to your email." +msgstr "" + +#: engine/vibes_auth/admin_site.py:118 +msgid "Invalid or expired code. Please try again." +msgstr "" + +#: engine/vibes_auth/admin_site.py:124 +#: engine/vibes_auth/templates/admin/verify_otp.html:10 +msgid "Two-factor authentication" +msgstr "" + #: engine/vibes_auth/apps.py:8 msgid "Accounting" msgstr "" @@ -154,6 +158,131 @@ msgstr "" msgid "System" msgstr "" +#: engine/vibes_auth/docs/drf/emailing.py:18 +msgid "" +"UUID token for unsubscribing. This token is unique per user and is included " +"in the unsubscribe link of every campaign email. The token remains constant " +"for each user unless regenerated." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:37 +#: engine/vibes_auth/emailing/views.py:69 +msgid "You have been successfully unsubscribed from our emails." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:45 +#: engine/vibes_auth/emailing/views.py:61 +msgid "You are already unsubscribed." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:52 +msgid "Unsubscribe from email campaigns" +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:54 +msgid "" +"Unsubscribe a user from all marketing email campaigns using their unique " +"unsubscribe token.\n" +"\n" +"This endpoint is designed for email client compatibility where clicking a " +"link triggers a GET request. The user will no longer receive promotional " +"emails after successful unsubscription.\n" +"\n" +"**Note:** Transactional emails (order confirmations, password resets, etc.) " +"are not affected by this setting." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:66 +#: engine/vibes_auth/docs/drf/emailing.py:146 +msgid "Successfully unsubscribed from email campaigns." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:82 +#: engine/vibes_auth/docs/drf/emailing.py:162 +msgid "Invalid or missing unsubscribe token." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:96 +#: engine/vibes_auth/docs/drf/emailing.py:176 +msgid "User associated with the token was not found." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:118 +msgid "One-Click Unsubscribe (RFC 8058)" +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:120 +msgid "" +"RFC 8058 compliant one-click unsubscribe endpoint for email campaigns.\n" +"\n" +"This endpoint supports the List-Unsubscribe-Post header mechanism defined in " +"RFC 8058, which allows email clients to unsubscribe users with a single " +"click without leaving the email application.\n" +"\n" +"The token can be provided either as a query parameter or in the request " +"body.\n" +"\n" +"**Standards Compliance:**\n" +"- RFC 8058: Signaling One-Click Functionality for List Email Headers\n" +"- RFC 2369: The Use of URLs as Meta-Syntax for Core Mail List Commands\n" +"\n" +"**Note:** Transactional emails are not affected by this setting." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:137 +msgid "" +"Unsubscribe token (alternative to query parameter). Can be omitted if token " +"is provided in URL." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:200 +msgid "Track email open event" +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:202 +msgid "" +"Records when a campaign email is opened by the recipient.\n" +"\n" +"This endpoint is called automatically when the tracking pixel (1x1 " +"transparent GIF) embedded in the email is loaded by the recipient's email " +"client.\n" +"\n" +"**How it works:**\n" +"1. Each campaign email contains a unique tracking pixel URL with a `tid` " +"parameter\n" +"2. When the email is opened and images are loaded, this endpoint is called\n" +"3. The recipient's status is updated to 'opened' and the timestamp is " +"recorded\n" +"4. The campaign's aggregate opened count is updated\n" +"\n" +"**Privacy considerations:**\n" +"- Only the first open is recorded (subsequent opens are ignored)\n" +"- No personal information beyond the tracking ID is logged\n" +"- Users who disable image loading will not trigger this event\n" +"\n" +"**Response:**\n" +"Returns a 1x1 transparent GIF image regardless of whether tracking " +"succeeded, to ensure consistent behavior and prevent information leakage." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:223 +msgid "" +"Tracking ID (UUID) unique to each campaign-recipient combination. This ID " +"links the open event to a specific recipient and campaign." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:241 +msgid "" +"1x1 transparent GIF image. Always returned regardless of tracking status to " +"maintain consistent behavior." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:247 +msgid "" +"Returned when no tracking ID is provided. Note: Invalid tracking IDs still " +"return 200 with the GIF to prevent enumeration attacks." +msgstr "" + #: engine/vibes_auth/docs/drf/messaging.py:17 msgid "User messages entrypoint" msgstr "" @@ -243,9 +372,9 @@ msgid "confirm a user's password reset" msgstr "" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:351 +#: engine/vibes_auth/graphene/mutations.py:358 #: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107 -#: engine/vibes_auth/viewsets.py:94 +#: engine/vibes_auth/viewsets.py:97 msgid "passwords do not match" msgstr "" @@ -298,193 +427,164 @@ msgstr "" msgid "Clicked" msgstr "" -#: engine/vibes_auth/emailing/models.py:35 -#: engine/vibes_auth/emailing/models.py:71 -#: engine/vibes_auth/emailing/models.py:121 +#: engine/vibes_auth/emailing/models.py:38 +#: engine/vibes_auth/emailing/models.py:88 msgid "name" msgstr "" -#: engine/vibes_auth/emailing/models.py:36 -msgid "descriptive name for the image" -msgstr "" - -#: engine/vibes_auth/emailing/models.py:40 -msgid "image" -msgstr "" - -#: engine/vibes_auth/emailing/models.py:41 -msgid "image file to use in email templates" -msgstr "" - -#: engine/vibes_auth/emailing/models.py:47 -msgid "alt text" -msgstr "" - -#: engine/vibes_auth/emailing/models.py:48 -msgid "alternative text for accessibility" -msgstr "" - -#: engine/vibes_auth/emailing/models.py:52 -msgid "email image" -msgstr "" - -#: engine/vibes_auth/emailing/models.py:53 -msgid "email images" -msgstr "" - -#: engine/vibes_auth/emailing/models.py:72 +#: engine/vibes_auth/emailing/models.py:39 msgid "internal name for the template" msgstr "" -#: engine/vibes_auth/emailing/models.py:76 +#: engine/vibes_auth/emailing/models.py:43 msgid "slug" msgstr "" -#: engine/vibes_auth/emailing/models.py:77 +#: engine/vibes_auth/emailing/models.py:44 msgid "unique identifier for the template" msgstr "" -#: engine/vibes_auth/emailing/models.py:81 +#: engine/vibes_auth/emailing/models.py:48 msgid "subject" msgstr "" -#: engine/vibes_auth/emailing/models.py:82 +#: engine/vibes_auth/emailing/models.py:49 msgid "email subject line - supports {{ variables }}" msgstr "" -#: engine/vibes_auth/emailing/models.py:85 -msgid "HTML content" +#: engine/vibes_auth/emailing/models.py:52 +msgid "content" msgstr "" -#: engine/vibes_auth/emailing/models.py:87 +#: engine/vibes_auth/emailing/models.py:54 msgid "" -"email body content - supports {{ user.first_name }}, {{ user.email }}, " +"email body in markdown - supports {{ user.first_name }}, {{ user.email }}, " "{{ project_name }}, {{ unsubscribe_url }}" msgstr "" -#: engine/vibes_auth/emailing/models.py:94 +#: engine/vibes_auth/emailing/models.py:61 msgid "plain text content" msgstr "" -#: engine/vibes_auth/emailing/models.py:95 +#: engine/vibes_auth/emailing/models.py:62 msgid "plain text fallback (auto-generated if empty)" msgstr "" -#: engine/vibes_auth/emailing/models.py:100 +#: engine/vibes_auth/emailing/models.py:67 msgid "available variables" msgstr "" -#: engine/vibes_auth/emailing/models.py:101 +#: engine/vibes_auth/emailing/models.py:68 msgid "documentation of available template variables" msgstr "" -#: engine/vibes_auth/emailing/models.py:105 +#: engine/vibes_auth/emailing/models.py:72 msgid "email template" msgstr "" -#: engine/vibes_auth/emailing/models.py:106 +#: engine/vibes_auth/emailing/models.py:73 msgid "email templates" msgstr "" -#: engine/vibes_auth/emailing/models.py:122 +#: engine/vibes_auth/emailing/models.py:89 msgid "internal name for the campaign" msgstr "" -#: engine/vibes_auth/emailing/models.py:129 +#: engine/vibes_auth/emailing/models.py:96 msgid "template" msgstr "" -#: engine/vibes_auth/emailing/models.py:130 +#: engine/vibes_auth/emailing/models.py:97 msgid "email template to use for this campaign" msgstr "" -#: engine/vibes_auth/emailing/models.py:136 -#: engine/vibes_auth/emailing/models.py:206 +#: engine/vibes_auth/emailing/models.py:103 +#: engine/vibes_auth/emailing/models.py:173 msgid "status" msgstr "" -#: engine/vibes_auth/emailing/models.py:141 +#: engine/vibes_auth/emailing/models.py:108 msgid "scheduled at" msgstr "" -#: engine/vibes_auth/emailing/models.py:142 +#: engine/vibes_auth/emailing/models.py:109 msgid "when to send the campaign (leave empty for manual send)" msgstr "" -#: engine/vibes_auth/emailing/models.py:147 -#: engine/vibes_auth/emailing/models.py:211 +#: engine/vibes_auth/emailing/models.py:114 +#: engine/vibes_auth/emailing/models.py:178 msgid "sent at" msgstr "" -#: engine/vibes_auth/emailing/models.py:148 +#: engine/vibes_auth/emailing/models.py:115 msgid "when the campaign was actually sent" msgstr "" -#: engine/vibes_auth/emailing/models.py:153 +#: engine/vibes_auth/emailing/models.py:120 msgid "total recipients" msgstr "" -#: engine/vibes_auth/emailing/models.py:157 +#: engine/vibes_auth/emailing/models.py:124 msgid "sent count" msgstr "" -#: engine/vibes_auth/emailing/models.py:161 +#: engine/vibes_auth/emailing/models.py:128 msgid "failed count" msgstr "" -#: engine/vibes_auth/emailing/models.py:165 +#: engine/vibes_auth/emailing/models.py:132 msgid "opened count" msgstr "" -#: engine/vibes_auth/emailing/models.py:169 +#: engine/vibes_auth/emailing/models.py:136 msgid "clicked count" msgstr "" -#: engine/vibes_auth/emailing/models.py:173 +#: engine/vibes_auth/emailing/models.py:140 msgid "email campaign" msgstr "" -#: engine/vibes_auth/emailing/models.py:174 +#: engine/vibes_auth/emailing/models.py:141 msgid "email campaigns" msgstr "" -#: engine/vibes_auth/emailing/models.py:194 +#: engine/vibes_auth/emailing/models.py:161 msgid "campaign" msgstr "" -#: engine/vibes_auth/emailing/models.py:200 engine/vibes_auth/models.py:146 +#: engine/vibes_auth/emailing/models.py:167 engine/vibes_auth/models.py:183 msgid "user" msgstr "" -#: engine/vibes_auth/emailing/models.py:216 +#: engine/vibes_auth/emailing/models.py:183 msgid "opened at" msgstr "" -#: engine/vibes_auth/emailing/models.py:221 +#: engine/vibes_auth/emailing/models.py:188 msgid "clicked at" msgstr "" -#: engine/vibes_auth/emailing/models.py:227 +#: engine/vibes_auth/emailing/models.py:194 msgid "tracking ID" msgstr "" -#: engine/vibes_auth/emailing/models.py:228 +#: engine/vibes_auth/emailing/models.py:195 msgid "unique ID for tracking opens and clicks" msgstr "" -#: engine/vibes_auth/emailing/models.py:233 +#: engine/vibes_auth/emailing/models.py:200 msgid "error message" msgstr "" -#: engine/vibes_auth/emailing/models.py:234 +#: engine/vibes_auth/emailing/models.py:201 msgid "error details if sending failed" msgstr "" -#: engine/vibes_auth/emailing/models.py:238 +#: engine/vibes_auth/emailing/models.py:205 msgid "campaign recipient" msgstr "" -#: engine/vibes_auth/emailing/models.py:239 +#: engine/vibes_auth/emailing/models.py:206 msgid "campaign recipients" msgstr "" @@ -500,73 +600,73 @@ msgstr "" msgid "Unsubscribe" msgstr "" -#: engine/vibes_auth/emailing/views.py:71 +#: engine/vibes_auth/emailing/views.py:39 msgid "Unsubscribe token is required." msgstr "" -#: engine/vibes_auth/emailing/views.py:79 +#: engine/vibes_auth/emailing/views.py:47 msgid "Invalid unsubscribe token format." msgstr "" -#: engine/vibes_auth/emailing/views.py:87 +#: engine/vibes_auth/emailing/views.py:55 msgid "User not found." msgstr "" -#: engine/vibes_auth/emailing/views.py:93 -msgid "You are already unsubscribed." -msgstr "" - -#: engine/vibes_auth/emailing/views.py:101 -msgid "You have been successfully unsubscribed from our emails." -msgstr "" - -#: engine/vibes_auth/graphene/mutations.py:46 +#: engine/vibes_auth/graphene/mutations.py:47 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" -#: engine/vibes_auth/graphene/mutations.py:68 +#: engine/vibes_auth/graphene/mutations.py:70 msgid "password too weak" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:128 +#: engine/vibes_auth/graphene/mutations.py:130 msgid "malformed email" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:140 +#: engine/vibes_auth/graphene/mutations.py:142 #: engine/vibes_auth/serializers.py:117 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:165 +#: engine/vibes_auth/graphene/mutations.py:167 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:182 +#: engine/vibes_auth/graphene/mutations.py:184 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:304 -#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180 +#: engine/vibes_auth/graphene/mutations.py:309 +#: engine/vibes_auth/viewsets.py:174 engine/vibes_auth/viewsets.py:198 msgid "activation link is invalid!" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:307 +#: engine/vibes_auth/graphene/mutations.py:312 msgid "account already activated..." msgstr "" -#: engine/vibes_auth/graphene/mutations.py:314 -#: engine/vibes_auth/graphene/mutations.py:376 +#: engine/vibes_auth/graphene/mutations.py:319 +#: engine/vibes_auth/graphene/mutations.py:383 msgid "something went wrong: {e!s}" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:358 -#: engine/vibes_auth/viewsets.py:106 +#: engine/vibes_auth/graphene/mutations.py:365 +#: engine/vibes_auth/viewsets.py:109 msgid "token is invalid!" msgstr "" +#: engine/vibes_auth/graphene/mutations.py:403 +msgid "only image files are allowed (jpg, png, gif, webp)" +msgstr "" + +#: engine/vibes_auth/graphene/mutations.py:406 +msgid "file size must not exceed 5 MB" +msgstr "" + #: engine/vibes_auth/graphene/object_types.py:46 msgid "" "the products this user has viewed most recently (max 48), in reverse‐" @@ -574,7 +674,7 @@ msgid "" msgstr "" #: engine/vibes_auth/graphene/object_types.py:49 -#: engine/vibes_auth/models.py:214 +#: engine/vibes_auth/models.py:270 msgid "groups" msgstr "" @@ -582,7 +682,7 @@ msgstr "" msgid "wishlist" msgstr "" -#: engine/vibes_auth/graphene/object_types.py:56 engine/vibes_auth/models.py:70 +#: engine/vibes_auth/graphene/object_types.py:56 engine/vibes_auth/models.py:75 msgid "avatar" msgstr "" @@ -617,7 +717,7 @@ msgstr "" msgid "Assignee must be a staff user." msgstr "" -#: engine/vibes_auth/models.py:42 +#: engine/vibes_auth/models.py:44 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -628,123 +728,135 @@ msgid "" "for enhanced user management." msgstr "" -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "email" msgstr "" -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "user email address" msgstr "" -#: engine/vibes_auth/models.py:55 +#: engine/vibes_auth/models.py:57 msgid "phone_number" msgstr "" -#: engine/vibes_auth/models.py:60 +#: engine/vibes_auth/models.py:61 msgid "user phone number" msgstr "" -#: engine/vibes_auth/models.py:66 +#: engine/vibes_auth/models.py:68 msgid "first_name" msgstr "" -#: engine/vibes_auth/models.py:67 +#: engine/vibes_auth/models.py:71 msgid "last_name" msgstr "" -#: engine/vibes_auth/models.py:73 +#: engine/vibes_auth/models.py:78 msgid "user profile image" msgstr "" -#: engine/vibes_auth/models.py:78 +#: engine/vibes_auth/models.py:83 msgid "is verified" msgstr "" -#: engine/vibes_auth/models.py:79 +#: engine/vibes_auth/models.py:84 msgid "user verification status" msgstr "" -#: engine/vibes_auth/models.py:82 +#: engine/vibes_auth/models.py:87 msgid "is_active" msgstr "" -#: engine/vibes_auth/models.py:84 +#: engine/vibes_auth/models.py:89 msgid "unselect this instead of deleting accounts" msgstr "" -#: engine/vibes_auth/models.py:87 +#: engine/vibes_auth/models.py:92 msgid "is_subscribed" msgstr "" -#: engine/vibes_auth/models.py:88 +#: engine/vibes_auth/models.py:93 msgid "user's newsletter subscription status" msgstr "" -#: engine/vibes_auth/models.py:92 +#: engine/vibes_auth/models.py:98 msgid "activation token" msgstr "" -#: engine/vibes_auth/models.py:95 +#: engine/vibes_auth/models.py:103 +msgid "activation token created" +msgstr "" + +#: engine/vibes_auth/models.py:107 msgid "unsubscribe token" msgstr "" -#: engine/vibes_auth/models.py:96 +#: engine/vibes_auth/models.py:108 msgid "token for secure one-click unsubscribe from campaigns" msgstr "" -#: engine/vibes_auth/models.py:106 +#: engine/vibes_auth/models.py:118 msgid "attributes" msgstr "" -#: engine/vibes_auth/models.py:147 +#: engine/vibes_auth/models.py:184 msgid "users" msgstr "" -#: engine/vibes_auth/models.py:154 +#: engine/vibes_auth/models.py:202 +msgid "admin OTP code" +msgstr "" + +#: engine/vibes_auth/models.py:203 +msgid "admin OTP codes" +msgstr "" + +#: engine/vibes_auth/models.py:210 msgid "For anonymous threads" msgstr "" -#: engine/vibes_auth/models.py:178 +#: engine/vibes_auth/models.py:234 msgid "Chat thread" msgstr "" -#: engine/vibes_auth/models.py:179 +#: engine/vibes_auth/models.py:235 msgid "Chat threads" msgstr "" -#: engine/vibes_auth/models.py:185 +#: engine/vibes_auth/models.py:241 msgid "provide user or email for anonymous thread." msgstr "" -#: engine/vibes_auth/models.py:188 +#: engine/vibes_auth/models.py:244 msgid "assignee must be a staff user." msgstr "" -#: engine/vibes_auth/models.py:206 +#: engine/vibes_auth/models.py:262 msgid "Chat message" msgstr "" -#: engine/vibes_auth/models.py:207 +#: engine/vibes_auth/models.py:263 msgid "Chat messages" msgstr "" -#: engine/vibes_auth/models.py:213 +#: engine/vibes_auth/models.py:269 msgid "group" msgstr "" -#: engine/vibes_auth/models.py:220 +#: engine/vibes_auth/models.py:276 msgid "outstanding token" msgstr "" -#: engine/vibes_auth/models.py:221 +#: engine/vibes_auth/models.py:277 msgid "outstanding tokens" msgstr "" -#: engine/vibes_auth/models.py:227 +#: engine/vibes_auth/models.py:283 msgid "blacklisted token" msgstr "" -#: engine/vibes_auth/models.py:228 +#: engine/vibes_auth/models.py:284 msgid "blacklisted tokens" msgstr "" @@ -786,6 +898,10 @@ msgstr "" msgid "user does not exist" msgstr "" +#: engine/vibes_auth/templates/admin/verify_otp.html:27 +msgid "Verify" +msgstr "" + #: engine/vibes_auth/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "" @@ -862,12 +978,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "" -#: engine/vibes_auth/utils/emailing.py:24 +#: engine/vibes_auth/utils/emailing.py:27 #, python-brace-format msgid "{settings.PROJECT_NAME} | Activate Account" msgstr "" -#: engine/vibes_auth/utils/emailing.py:63 +#: engine/vibes_auth/utils/emailing.py:66 #, python-brace-format msgid "{settings.PROJECT_NAME} | Reset Password" msgstr "" @@ -906,7 +1022,7 @@ msgstr "" msgid "the token is invalid" msgstr "" -#: engine/vibes_auth/viewsets.py:44 +#: engine/vibes_auth/viewsets.py:47 msgid "" "User view set implementation.\n" "Provides a set of actions that manage user-related data such as creation, " @@ -915,10 +1031,16 @@ msgid "" "class extends the mixins and GenericViewSet for robust API handling." msgstr "" -#: engine/vibes_auth/viewsets.py:113 +#: engine/vibes_auth/viewsets.py:116 msgid "password reset successfully" msgstr "" -#: engine/vibes_auth/viewsets.py:161 +#: engine/vibes_auth/viewsets.py:146 +msgid "" +"Account already registered but not yet activated. A new activation email has " +"been sent." +msgstr "" + +#: engine/vibes_auth/viewsets.py:179 msgid "account already activated!" msgstr "" diff --git a/engine/vibes_auth/locale/id_ID/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/id_ID/LC_MESSAGES/django.mo index e43d894b..294b0dbf 100644 Binary files a/engine/vibes_auth/locale/id_ID/LC_MESSAGES/django.mo and b/engine/vibes_auth/locale/id_ID/LC_MESSAGES/django.mo differ diff --git a/engine/vibes_auth/locale/id_ID/LC_MESSAGES/django.po b/engine/vibes_auth/locale/id_ID/LC_MESSAGES/django.po index c70a924b..f92a3a35 100644 --- a/engine/vibes_auth/locale/id_ID/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/id_ID/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 03:06+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,32 +13,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:65 engine/vibes_auth/admin.py:66 +#: engine/vibes_auth/admin.py:64 engine/vibes_auth/admin.py:65 #: engine/vibes_auth/graphene/object_types.py:54 msgid "balance" msgstr "Keseimbangan" -#: engine/vibes_auth/admin.py:74 +#: engine/vibes_auth/admin.py:73 msgid "order" msgstr "Pesan" -#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:51 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:51 msgid "orders" msgstr "Pesanan" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:84 msgid "personal info" msgstr "Informasi Pribadi" -#: engine/vibes_auth/admin.py:89 engine/vibes_auth/graphene/object_types.py:50 +#: engine/vibes_auth/admin.py:88 engine/vibes_auth/graphene/object_types.py:50 msgid "permissions" msgstr "Izin" -#: engine/vibes_auth/admin.py:102 +#: engine/vibes_auth/admin.py:101 msgid "important dates" msgstr "Tanggal-tanggal penting" -#: engine/vibes_auth/admin.py:103 +#: engine/vibes_auth/admin.py:102 msgid "additional info" msgstr "Informasi Tambahan" @@ -54,80 +54,84 @@ msgstr "Menutup utas yang dipilih" msgid "Open selected threads" msgstr "Buka utas yang dipilih" -#: engine/vibes_auth/admin.py:208 -msgid "Preview" -msgstr "Pratinjau" - -#: engine/vibes_auth/admin.py:209 engine/vibes_auth/admin.py:249 -#: engine/vibes_auth/admin.py:326 -msgid "Metadata" -msgstr "Metadata" - -#: engine/vibes_auth/admin.py:212 -msgid "preview" -msgstr "pratinjau" - -#: engine/vibes_auth/admin.py:221 -msgid "image preview" -msgstr "pratinjau gambar" - -#: engine/vibes_auth/admin.py:241 +#: engine/vibes_auth/admin.py:209 msgid "Content" msgstr "Konten" -#: engine/vibes_auth/admin.py:243 +#: engine/vibes_auth/admin.py:211 msgid "Documentation" msgstr "Dokumentasi" -#: engine/vibes_auth/admin.py:313 +#: engine/vibes_auth/admin.py:217 engine/vibes_auth/admin.py:294 +msgid "Metadata" +msgstr "Metadata" + +#: engine/vibes_auth/admin.py:281 msgid "Scheduling" msgstr "Penjadwalan" -#: engine/vibes_auth/admin.py:315 +#: engine/vibes_auth/admin.py:283 msgid "Statistics" msgstr "Statistik" -#: engine/vibes_auth/admin.py:329 +#: engine/vibes_auth/admin.py:297 msgid "stats" msgstr "negara" -#: engine/vibes_auth/admin.py:335 +#: engine/vibes_auth/admin.py:303 msgid "Prepare recipients (subscribed users)" msgstr "Siapkan penerima (pengguna yang berlangganan)" -#: engine/vibes_auth/admin.py:343 +#: engine/vibes_auth/admin.py:311 msgid "Campaign '{}' is not in draft status." msgstr "Kampanye '{}' tidak dalam status draf." -#: engine/vibes_auth/admin.py:350 +#: engine/vibes_auth/admin.py:318 msgid "Preparing recipients for campaign '{}'." msgstr "Mempersiapkan penerima untuk kampanye '{}'." -#: engine/vibes_auth/admin.py:354 +#: engine/vibes_auth/admin.py:322 msgid "Send campaign now" msgstr "Kirim kampanye sekarang" -#: engine/vibes_auth/admin.py:362 +#: engine/vibes_auth/admin.py:330 msgid "Campaign '{}' cannot be sent (status: {})." msgstr "Kampanye '{}' tidak dapat dikirim (status: {})." -#: engine/vibes_auth/admin.py:372 +#: engine/vibes_auth/admin.py:340 msgid "Campaign '{}' has no recipients. Prepare recipients first." msgstr "" "Kampanye '{}' tidak memiliki penerima. Siapkan penerima terlebih dahulu." -#: engine/vibes_auth/admin.py:383 +#: engine/vibes_auth/admin.py:351 msgid "Started sending campaign '{}'." msgstr "Mulai mengirim kampanye '{}'." -#: engine/vibes_auth/admin.py:387 +#: engine/vibes_auth/admin.py:355 msgid "Cancel campaign" msgstr "Batalkan kampanye" -#: engine/vibes_auth/admin.py:396 +#: engine/vibes_auth/admin.py:364 msgid "{} campaign(s) cancelled." msgstr "{} kampanye(s) dibatalkan." +#: engine/vibes_auth/admin_site.py:24 +msgid "Verification code" +msgstr "Kode verifikasi" + +#: engine/vibes_auth/admin_site.py:62 +msgid "A verification code has been sent to your email." +msgstr "Kode verifikasi telah dikirimkan ke email Anda." + +#: engine/vibes_auth/admin_site.py:118 +msgid "Invalid or expired code. Please try again." +msgstr "Kode tidak valid atau telah kadaluwarsa. Silakan coba lagi." + +#: engine/vibes_auth/admin_site.py:124 +#: engine/vibes_auth/templates/admin/verify_otp.html:10 +msgid "Two-factor authentication" +msgstr "Otentikasi dua faktor" + #: engine/vibes_auth/apps.py:8 msgid "Accounting" msgstr "Akuntansi" @@ -152,6 +156,146 @@ msgstr "Staf" msgid "System" msgstr "Sistem" +#: engine/vibes_auth/docs/drf/emailing.py:18 +msgid "" +"UUID token for unsubscribing. This token is unique per user and is included " +"in the unsubscribe link of every campaign email. The token remains constant " +"for each user unless regenerated." +msgstr "" +"Token UUID untuk berhenti berlangganan. Token ini unik untuk setiap pengguna" +" dan disertakan dalam tautan berhenti berlangganan pada setiap email " +"kampanye. Token ini tetap konstan untuk setiap pengguna kecuali jika " +"dihasilkan ulang." + +#: engine/vibes_auth/docs/drf/emailing.py:37 +#: engine/vibes_auth/emailing/views.py:69 +msgid "You have been successfully unsubscribed from our emails." +msgstr "Anda telah berhasil unsubscribe dari email kami." + +#: engine/vibes_auth/docs/drf/emailing.py:45 +#: engine/vibes_auth/emailing/views.py:61 +msgid "You are already unsubscribed." +msgstr "Anda sudah berhenti berlangganan." + +#: engine/vibes_auth/docs/drf/emailing.py:52 +msgid "Unsubscribe from email campaigns" +msgstr "Berhenti berlangganan dari kampanye email" + +#: engine/vibes_auth/docs/drf/emailing.py:54 +msgid "" +"Unsubscribe a user from all marketing email campaigns using their unique unsubscribe token.\n" +"\n" +"This endpoint is designed for email client compatibility where clicking a link triggers a GET request. The user will no longer receive promotional emails after successful unsubscription.\n" +"\n" +"**Note:** Transactional emails (order confirmations, password resets, etc.) are not affected by this setting." +msgstr "" +"Berhenti berlangganan pengguna dari semua kampanye email pemasaran " +"menggunakan token berhenti berlangganan unik mereka. Endpoint ini dirancang " +"untuk kompatibilitas klien email, di mana mengklik tautan memicu permintaan " +"GET. Pengguna tidak akan lagi menerima email promosi setelah berhenti " +"berlangganan berhasil. **Catatan:** Email transaksional (konfirmasi pesanan," +" reset kata sandi, dll.) tidak terpengaruh oleh pengaturan ini." + +#: engine/vibes_auth/docs/drf/emailing.py:66 +#: engine/vibes_auth/docs/drf/emailing.py:146 +msgid "Successfully unsubscribed from email campaigns." +msgstr "Berhasil berhenti berlangganan dari kampanye email." + +#: engine/vibes_auth/docs/drf/emailing.py:82 +#: engine/vibes_auth/docs/drf/emailing.py:162 +msgid "Invalid or missing unsubscribe token." +msgstr "Token unsubscribe tidak valid atau hilang." + +#: engine/vibes_auth/docs/drf/emailing.py:96 +#: engine/vibes_auth/docs/drf/emailing.py:176 +msgid "User associated with the token was not found." +msgstr "Pengguna yang terkait dengan token tidak ditemukan." + +#: engine/vibes_auth/docs/drf/emailing.py:118 +msgid "One-Click Unsubscribe (RFC 8058)" +msgstr "Berhenti Berlangganan dengan Satu Klik (RFC 8058)" + +#: engine/vibes_auth/docs/drf/emailing.py:120 +msgid "" +"RFC 8058 compliant one-click unsubscribe endpoint for email campaigns.\n" +"\n" +"This endpoint supports the List-Unsubscribe-Post header mechanism defined in RFC 8058, which allows email clients to unsubscribe users with a single click without leaving the email application.\n" +"\n" +"The token can be provided either as a query parameter or in the request body.\n" +"\n" +"**Standards Compliance:**\n" +"- RFC 8058: Signaling One-Click Functionality for List Email Headers\n" +"- RFC 2369: The Use of URLs as Meta-Syntax for Core Mail List Commands\n" +"\n" +"**Note:** Transactional emails are not affected by this setting." +msgstr "" +"Titik akhir (endpoint) unsubscribe satu klik yang sesuai dengan RFC 8058 untuk kampanye email. Titik akhir ini mendukung mekanisme header List-Unsubscribe-Post yang didefinisikan dalam RFC 8058, yang memungkinkan klien email untuk unsubscribe pengguna dengan satu klik tanpa meninggalkan aplikasi email. Token dapat disediakan sebagai parameter kueri atau dalam badan permintaan.\n" +"\n" +"**Kepatuhan Standar:** - RFC 8058: Penandaan Fungsi Satu Klik untuk Header Email Daftar - RFC 2369: Penggunaan URL sebagai Sintaks Meta untuk Perintah Daftar Email Utama **Catatan:** Email transaksional tidak terpengaruh oleh pengaturan ini." + +#: engine/vibes_auth/docs/drf/emailing.py:137 +msgid "" +"Unsubscribe token (alternative to query parameter). Can be omitted if token " +"is provided in URL." +msgstr "" +"Token unsubscribe (alternatif untuk parameter kueri). Dapat diabaikan jika " +"token disertakan dalam URL." + +#: engine/vibes_auth/docs/drf/emailing.py:200 +msgid "Track email open event" +msgstr "Lacak peristiwa pembukaan email" + +#: engine/vibes_auth/docs/drf/emailing.py:202 +msgid "" +"Records when a campaign email is opened by the recipient.\n" +"\n" +"This endpoint is called automatically when the tracking pixel (1x1 transparent GIF) embedded in the email is loaded by the recipient's email client.\n" +"\n" +"**How it works:**\n" +"1. Each campaign email contains a unique tracking pixel URL with a `tid` parameter\n" +"2. When the email is opened and images are loaded, this endpoint is called\n" +"3. The recipient's status is updated to 'opened' and the timestamp is recorded\n" +"4. The campaign's aggregate opened count is updated\n" +"\n" +"**Privacy considerations:**\n" +"- Only the first open is recorded (subsequent opens are ignored)\n" +"- No personal information beyond the tracking ID is logged\n" +"- Users who disable image loading will not trigger this event\n" +"\n" +"**Response:**\n" +"Returns a 1x1 transparent GIF image regardless of whether tracking succeeded, to ensure consistent behavior and prevent information leakage." +msgstr "" +"Mencatat saat email kampanye dibuka oleh penerima. Endpoint ini dipanggil secara otomatis saat pixel pelacakan (GIF transparan 1x1) yang tertanam dalam email dimuat oleh klien email penerima.\n" +"\n" +"**Cara kerjanya:** 1. Setiap email kampanye mengandung URL piksel pelacakan unik dengan parameter `tid` 2. Saat email dibuka dan gambar dimuat, endpoint ini dipanggil 3. Status penerima diperbarui menjadi 'dibuka' dan cap waktu dicatat 4. Jumlah pembukaan agregat kampanye diperbarui **Pertimbangan privasi:**\n" +"- Hanya pembukaan pertama yang dicatat (pembukaan selanjutnya diabaikan) - Tidak ada informasi pribadi selain ID pelacakan yang direkam - Pengguna yang menonaktifkan pemuatan gambar tidak akan memicu peristiwa ini **Respons:** Mengembalikan gambar GIF transparan 1x1 terlepas dari apakah pelacakan berhasil, untuk memastikan perilaku konsisten dan mencegah kebocoran informasi." + +#: engine/vibes_auth/docs/drf/emailing.py:223 +msgid "" +"Tracking ID (UUID) unique to each campaign-recipient combination. This ID " +"links the open event to a specific recipient and campaign." +msgstr "" +"ID Pelacakan (UUID) yang unik untuk setiap kombinasi kampanye dan penerima. " +"ID ini menghubungkan peristiwa pembukaan dengan penerima dan kampanye " +"tertentu." + +#: engine/vibes_auth/docs/drf/emailing.py:241 +msgid "" +"1x1 transparent GIF image. Always returned regardless of tracking status to " +"maintain consistent behavior." +msgstr "" +"Gambar GIF transparan berukuran 1x1. Selalu dikembalikan terlepas dari " +"status pelacakan untuk menjaga konsistensi perilaku." + +#: engine/vibes_auth/docs/drf/emailing.py:247 +msgid "" +"Returned when no tracking ID is provided. Note: Invalid tracking IDs still " +"return 200 with the GIF to prevent enumeration attacks." +msgstr "" +"Dikirim kembali jika tidak ada ID pelacakan yang disediakan. Catatan: ID " +"pelacakan yang tidak valid tetap mengembalikan respons 200 dengan GIF untuk " +"mencegah serangan enumerasi." + #: engine/vibes_auth/docs/drf/messaging.py:17 msgid "User messages entrypoint" msgstr "Titik masuk pesan pengguna" @@ -247,9 +391,9 @@ msgid "confirm a user's password reset" msgstr "Mengonfirmasi pengaturan ulang kata sandi pengguna" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:351 +#: engine/vibes_auth/graphene/mutations.py:358 #: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107 -#: engine/vibes_auth/viewsets.py:94 +#: engine/vibes_auth/viewsets.py:97 msgid "passwords do not match" msgstr "Kata sandi tidak cocok" @@ -302,195 +446,166 @@ msgstr "Dibuka" msgid "Clicked" msgstr "Diklik" -#: engine/vibes_auth/emailing/models.py:35 -#: engine/vibes_auth/emailing/models.py:71 -#: engine/vibes_auth/emailing/models.py:121 +#: engine/vibes_auth/emailing/models.py:38 +#: engine/vibes_auth/emailing/models.py:88 msgid "name" msgstr "nama" -#: engine/vibes_auth/emailing/models.py:36 -msgid "descriptive name for the image" -msgstr "Nama deskriptif untuk gambar" - -#: engine/vibes_auth/emailing/models.py:40 -msgid "image" -msgstr "gambar" - -#: engine/vibes_auth/emailing/models.py:41 -msgid "image file to use in email templates" -msgstr "Berkas gambar yang akan digunakan dalam templat email" - -#: engine/vibes_auth/emailing/models.py:47 -msgid "alt text" -msgstr "teks alternatif" - -#: engine/vibes_auth/emailing/models.py:48 -msgid "alternative text for accessibility" -msgstr "Teks alternatif untuk aksesibilitas" - -#: engine/vibes_auth/emailing/models.py:52 -msgid "email image" -msgstr "gambar email" - -#: engine/vibes_auth/emailing/models.py:53 -msgid "email images" -msgstr "gambar email" - -#: engine/vibes_auth/emailing/models.py:72 +#: engine/vibes_auth/emailing/models.py:39 msgid "internal name for the template" msgstr "Nama internal untuk templat" -#: engine/vibes_auth/emailing/models.py:76 +#: engine/vibes_auth/emailing/models.py:43 msgid "slug" msgstr "pelayan" -#: engine/vibes_auth/emailing/models.py:77 +#: engine/vibes_auth/emailing/models.py:44 msgid "unique identifier for the template" msgstr "pengidentifikasi unik untuk templat" -#: engine/vibes_auth/emailing/models.py:81 +#: engine/vibes_auth/emailing/models.py:48 msgid "subject" msgstr "subjek" -#: engine/vibes_auth/emailing/models.py:82 +#: engine/vibes_auth/emailing/models.py:49 msgid "email subject line - supports {{ variables }}" msgstr "Baris subjek email - mendukung {{ variables }}" -#: engine/vibes_auth/emailing/models.py:85 -msgid "HTML content" -msgstr "Konten HTML" +#: engine/vibes_auth/emailing/models.py:52 +msgid "content" +msgstr "konten" -#: engine/vibes_auth/emailing/models.py:87 +#: engine/vibes_auth/emailing/models.py:54 msgid "" -"email body content - supports {{ user.first_name }}, {{ user.email }}, {{ " -"project_name }}, {{ unsubscribe_url }}" +"email body in markdown - supports {{ user.first_name }}, {{ user.email }}, " +"{{ project_name }}, {{ unsubscribe_url }}" msgstr "" "Isi badan email - mendukung {{ user.first_name }}, {{ user.email }}, {{ " "project_name }}, {{ unsubscribe_url }}" -#: engine/vibes_auth/emailing/models.py:94 +#: engine/vibes_auth/emailing/models.py:61 msgid "plain text content" msgstr "konten teks biasa" -#: engine/vibes_auth/emailing/models.py:95 +#: engine/vibes_auth/emailing/models.py:62 msgid "plain text fallback (auto-generated if empty)" msgstr "Teks biasa sebagai cadangan (dibuat secara otomatis jika kosong)" -#: engine/vibes_auth/emailing/models.py:100 +#: engine/vibes_auth/emailing/models.py:67 msgid "available variables" msgstr "variabel yang tersedia" -#: engine/vibes_auth/emailing/models.py:101 +#: engine/vibes_auth/emailing/models.py:68 msgid "documentation of available template variables" msgstr "Dokumentasi variabel template yang tersedia" -#: engine/vibes_auth/emailing/models.py:105 +#: engine/vibes_auth/emailing/models.py:72 msgid "email template" msgstr "email template" -#: engine/vibes_auth/emailing/models.py:106 +#: engine/vibes_auth/emailing/models.py:73 msgid "email templates" msgstr "templat email" -#: engine/vibes_auth/emailing/models.py:122 +#: engine/vibes_auth/emailing/models.py:89 msgid "internal name for the campaign" msgstr "Nama internal untuk kampanye" -#: engine/vibes_auth/emailing/models.py:129 +#: engine/vibes_auth/emailing/models.py:96 msgid "template" msgstr "templat" -#: engine/vibes_auth/emailing/models.py:130 +#: engine/vibes_auth/emailing/models.py:97 msgid "email template to use for this campaign" msgstr "Template email yang akan digunakan untuk kampanye ini" -#: engine/vibes_auth/emailing/models.py:136 -#: engine/vibes_auth/emailing/models.py:206 +#: engine/vibes_auth/emailing/models.py:103 +#: engine/vibes_auth/emailing/models.py:173 msgid "status" msgstr "status" -#: engine/vibes_auth/emailing/models.py:141 +#: engine/vibes_auth/emailing/models.py:108 msgid "scheduled at" msgstr "direncanakan pada" -#: engine/vibes_auth/emailing/models.py:142 +#: engine/vibes_auth/emailing/models.py:109 msgid "when to send the campaign (leave empty for manual send)" msgstr "Kapan mengirim kampanye (biarkan kosong untuk pengiriman manual)" -#: engine/vibes_auth/emailing/models.py:147 -#: engine/vibes_auth/emailing/models.py:211 +#: engine/vibes_auth/emailing/models.py:114 +#: engine/vibes_auth/emailing/models.py:178 msgid "sent at" msgstr "terlambat" -#: engine/vibes_auth/emailing/models.py:148 +#: engine/vibes_auth/emailing/models.py:115 msgid "when the campaign was actually sent" msgstr "ketika kampanye tersebut benar-benar dikirimkan" -#: engine/vibes_auth/emailing/models.py:153 +#: engine/vibes_auth/emailing/models.py:120 msgid "total recipients" msgstr "jumlah penerima" -#: engine/vibes_auth/emailing/models.py:157 +#: engine/vibes_auth/emailing/models.py:124 msgid "sent count" msgstr "jumlah pesan yang dikirim" -#: engine/vibes_auth/emailing/models.py:161 +#: engine/vibes_auth/emailing/models.py:128 msgid "failed count" msgstr "penghitungan yang gagal" -#: engine/vibes_auth/emailing/models.py:165 +#: engine/vibes_auth/emailing/models.py:132 msgid "opened count" msgstr "jumlah yang dibuka" -#: engine/vibes_auth/emailing/models.py:169 +#: engine/vibes_auth/emailing/models.py:136 msgid "clicked count" msgstr "jumlah klik" -#: engine/vibes_auth/emailing/models.py:173 +#: engine/vibes_auth/emailing/models.py:140 msgid "email campaign" msgstr "kampanye email" -#: engine/vibes_auth/emailing/models.py:174 +#: engine/vibes_auth/emailing/models.py:141 msgid "email campaigns" msgstr "kampanye email" -#: engine/vibes_auth/emailing/models.py:194 +#: engine/vibes_auth/emailing/models.py:161 msgid "campaign" msgstr "kampanye" -#: engine/vibes_auth/emailing/models.py:200 engine/vibes_auth/models.py:146 +#: engine/vibes_auth/emailing/models.py:167 engine/vibes_auth/models.py:183 msgid "user" msgstr "Pengguna" -#: engine/vibes_auth/emailing/models.py:216 +#: engine/vibes_auth/emailing/models.py:183 msgid "opened at" msgstr "dibuka pada" -#: engine/vibes_auth/emailing/models.py:221 +#: engine/vibes_auth/emailing/models.py:188 msgid "clicked at" msgstr "diklik pada" -#: engine/vibes_auth/emailing/models.py:227 +#: engine/vibes_auth/emailing/models.py:194 msgid "tracking ID" msgstr "ID pelacakan" -#: engine/vibes_auth/emailing/models.py:228 +#: engine/vibes_auth/emailing/models.py:195 msgid "unique ID for tracking opens and clicks" msgstr "ID unik untuk melacak pembukaan dan klik" -#: engine/vibes_auth/emailing/models.py:233 +#: engine/vibes_auth/emailing/models.py:200 msgid "error message" msgstr "pesan kesalahan" -#: engine/vibes_auth/emailing/models.py:234 +#: engine/vibes_auth/emailing/models.py:201 msgid "error details if sending failed" msgstr "Rincian kesalahan jika pengiriman gagal" -#: engine/vibes_auth/emailing/models.py:238 +#: engine/vibes_auth/emailing/models.py:205 msgid "campaign recipient" msgstr "penerima kampanye" -#: engine/vibes_auth/emailing/models.py:239 +#: engine/vibes_auth/emailing/models.py:206 msgid "campaign recipients" msgstr "penerima kampanye" @@ -506,74 +621,74 @@ msgstr "Anda menerima email ini karena Anda telah berlangganan buletin kami." msgid "Unsubscribe" msgstr "Berhenti berlangganan" -#: engine/vibes_auth/emailing/views.py:71 +#: engine/vibes_auth/emailing/views.py:39 msgid "Unsubscribe token is required." msgstr "Token unsubscribe diperlukan." -#: engine/vibes_auth/emailing/views.py:79 +#: engine/vibes_auth/emailing/views.py:47 msgid "Invalid unsubscribe token format." msgstr "Format token unsubscribe tidak valid." -#: engine/vibes_auth/emailing/views.py:87 +#: engine/vibes_auth/emailing/views.py:55 msgid "User not found." msgstr "Pengguna tidak ditemukan." -#: engine/vibes_auth/emailing/views.py:93 -msgid "You are already unsubscribed." -msgstr "Anda sudah berhenti berlangganan." - -#: engine/vibes_auth/emailing/views.py:101 -msgid "You have been successfully unsubscribed from our emails." -msgstr "Anda telah berhasil unsubscribe dari email kami." - -#: engine/vibes_auth/graphene/mutations.py:46 +#: engine/vibes_auth/graphene/mutations.py:47 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" "UID pengguna yang dikodekan b64 yang merujuk pengguna baru kepada kami." -#: engine/vibes_auth/graphene/mutations.py:68 +#: engine/vibes_auth/graphene/mutations.py:70 msgid "password too weak" msgstr "Kata sandi terlalu lemah" -#: engine/vibes_auth/graphene/mutations.py:128 +#: engine/vibes_auth/graphene/mutations.py:130 msgid "malformed email" msgstr "Email yang salah" -#: engine/vibes_auth/graphene/mutations.py:140 +#: engine/vibes_auth/graphene/mutations.py:142 #: engine/vibes_auth/serializers.py:117 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Nomor telepon rusak: {phone_number}!" -#: engine/vibes_auth/graphene/mutations.py:165 +#: engine/vibes_auth/graphene/mutations.py:167 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Format atribut tidak valid: {attribute_pair}!" -#: engine/vibes_auth/graphene/mutations.py:182 +#: engine/vibes_auth/graphene/mutations.py:184 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} tidak ada: {uuid}!" -#: engine/vibes_auth/graphene/mutations.py:304 -#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180 +#: engine/vibes_auth/graphene/mutations.py:309 +#: engine/vibes_auth/viewsets.py:174 engine/vibes_auth/viewsets.py:198 msgid "activation link is invalid!" msgstr "Tautan aktivasi tidak valid!" -#: engine/vibes_auth/graphene/mutations.py:307 +#: engine/vibes_auth/graphene/mutations.py:312 msgid "account already activated..." msgstr "Akun sudah diaktifkan..." -#: engine/vibes_auth/graphene/mutations.py:314 -#: engine/vibes_auth/graphene/mutations.py:376 +#: engine/vibes_auth/graphene/mutations.py:319 +#: engine/vibes_auth/graphene/mutations.py:383 msgid "something went wrong: {e!s}" msgstr "Ada yang tidak beres: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:358 -#: engine/vibes_auth/viewsets.py:106 +#: engine/vibes_auth/graphene/mutations.py:365 +#: engine/vibes_auth/viewsets.py:109 msgid "token is invalid!" msgstr "Token tidak valid!" +#: engine/vibes_auth/graphene/mutations.py:403 +msgid "only image files are allowed (jpg, png, gif, webp)" +msgstr "Hanya file gambar yang diizinkan (jpg, png, gif, webp)" + +#: engine/vibes_auth/graphene/mutations.py:406 +msgid "file size must not exceed 5 MB" +msgstr "Ukuran file tidak boleh melebihi 5 MB." + #: engine/vibes_auth/graphene/object_types.py:46 msgid "" "the products this user has viewed most recently (max 48), in " @@ -583,7 +698,7 @@ msgstr "" "kronologis terbalik." #: engine/vibes_auth/graphene/object_types.py:49 -#: engine/vibes_auth/models.py:214 +#: engine/vibes_auth/models.py:270 msgid "groups" msgstr "Grup" @@ -592,7 +707,7 @@ msgid "wishlist" msgstr "Daftar keinginan" #: engine/vibes_auth/graphene/object_types.py:56 -#: engine/vibes_auth/models.py:70 +#: engine/vibes_auth/models.py:75 msgid "avatar" msgstr "Avatar" @@ -629,7 +744,7 @@ msgstr "Kami sedang mencari operator untuk menjawab Anda, tunggu sebentar!" msgid "Assignee must be a staff user." msgstr "Penerima tugas haruslah seorang staf pengguna." -#: engine/vibes_auth/models.py:42 +#: engine/vibes_auth/models.py:44 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -648,124 +763,136 @@ msgstr "" "untuk menangani kasus penggunaan tertentu untuk meningkatkan manajemen " "pengguna." -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "email" msgstr "Email" -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "user email address" msgstr "Alamat email pengguna" -#: engine/vibes_auth/models.py:55 +#: engine/vibes_auth/models.py:57 msgid "phone_number" msgstr "Nomor Telepon" -#: engine/vibes_auth/models.py:60 +#: engine/vibes_auth/models.py:61 msgid "user phone number" msgstr "Nomor telepon pengguna" -#: engine/vibes_auth/models.py:66 +#: engine/vibes_auth/models.py:68 msgid "first_name" msgstr "Nama depan" -#: engine/vibes_auth/models.py:67 +#: engine/vibes_auth/models.py:71 msgid "last_name" msgstr "Nama belakang" -#: engine/vibes_auth/models.py:73 +#: engine/vibes_auth/models.py:78 msgid "user profile image" msgstr "Gambar profil pengguna" -#: engine/vibes_auth/models.py:78 +#: engine/vibes_auth/models.py:83 msgid "is verified" msgstr "Sudah diverifikasi" -#: engine/vibes_auth/models.py:79 +#: engine/vibes_auth/models.py:84 msgid "user verification status" msgstr "Status verifikasi pengguna" -#: engine/vibes_auth/models.py:82 +#: engine/vibes_auth/models.py:87 msgid "is_active" msgstr "Aktif" -#: engine/vibes_auth/models.py:84 +#: engine/vibes_auth/models.py:89 msgid "unselect this instead of deleting accounts" msgstr "Batalkan pilihan ini alih-alih menghapus akun" -#: engine/vibes_auth/models.py:87 +#: engine/vibes_auth/models.py:92 msgid "is_subscribed" msgstr "Sudah berlangganan" -#: engine/vibes_auth/models.py:88 +#: engine/vibes_auth/models.py:93 msgid "user's newsletter subscription status" msgstr "Status berlangganan buletin pengguna" -#: engine/vibes_auth/models.py:92 +#: engine/vibes_auth/models.py:98 msgid "activation token" msgstr "Token aktivasi" -#: engine/vibes_auth/models.py:95 +#: engine/vibes_auth/models.py:103 +msgid "activation token created" +msgstr "Token aktivasi telah dibuat" + +#: engine/vibes_auth/models.py:107 msgid "unsubscribe token" msgstr "Token unsubscribe" -#: engine/vibes_auth/models.py:96 +#: engine/vibes_auth/models.py:108 msgid "token for secure one-click unsubscribe from campaigns" msgstr "" "Token untuk unsubscribe dengan aman hanya dengan satu klik dari kampanye." -#: engine/vibes_auth/models.py:106 +#: engine/vibes_auth/models.py:118 msgid "attributes" msgstr "Atribut" -#: engine/vibes_auth/models.py:147 +#: engine/vibes_auth/models.py:184 msgid "users" msgstr "Pengguna" -#: engine/vibes_auth/models.py:154 +#: engine/vibes_auth/models.py:202 +msgid "admin OTP code" +msgstr "Kode OTP Admin" + +#: engine/vibes_auth/models.py:203 +msgid "admin OTP codes" +msgstr "Kode OTP Admin" + +#: engine/vibes_auth/models.py:210 msgid "For anonymous threads" msgstr "Untuk utas anonim" -#: engine/vibes_auth/models.py:178 +#: engine/vibes_auth/models.py:234 msgid "Chat thread" msgstr "Utas obrolan" -#: engine/vibes_auth/models.py:179 +#: engine/vibes_auth/models.py:235 msgid "Chat threads" msgstr "Utas obrolan" -#: engine/vibes_auth/models.py:185 +#: engine/vibes_auth/models.py:241 msgid "provide user or email for anonymous thread." msgstr "menyediakan pengguna atau email untuk utas anonim." -#: engine/vibes_auth/models.py:188 +#: engine/vibes_auth/models.py:244 msgid "assignee must be a staff user." msgstr "Penerima tugas haruslah seorang staf pengguna." -#: engine/vibes_auth/models.py:206 +#: engine/vibes_auth/models.py:262 msgid "Chat message" msgstr "Pesan obrolan" -#: engine/vibes_auth/models.py:207 +#: engine/vibes_auth/models.py:263 msgid "Chat messages" msgstr "Pesan obrolan" -#: engine/vibes_auth/models.py:213 +#: engine/vibes_auth/models.py:269 msgid "group" msgstr "Kelompok" -#: engine/vibes_auth/models.py:220 +#: engine/vibes_auth/models.py:276 msgid "outstanding token" msgstr "Token yang luar biasa" -#: engine/vibes_auth/models.py:221 +#: engine/vibes_auth/models.py:277 msgid "outstanding tokens" msgstr "Token yang beredar" -#: engine/vibes_auth/models.py:227 +#: engine/vibes_auth/models.py:283 msgid "blacklisted token" msgstr "Token yang masuk daftar hitam" -#: engine/vibes_auth/models.py:228 +#: engine/vibes_auth/models.py:284 msgid "blacklisted tokens" msgstr "Token yang masuk daftar hitam" @@ -807,6 +934,10 @@ msgstr "Tidak ada klaim uuid pengguna yang ada dalam token" msgid "user does not exist" msgstr "Pengguna tidak ada" +#: engine/vibes_auth/templates/admin/verify_otp.html:27 +msgid "Verify" +msgstr "Verifikasi" + #: engine/vibes_auth/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "Atur ulang kata sandi Anda" @@ -892,12 +1023,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "Salam hormat, tim %(project_name)s" -#: engine/vibes_auth/utils/emailing.py:24 +#: engine/vibes_auth/utils/emailing.py:27 #, python-brace-format msgid "{settings.PROJECT_NAME} | Activate Account" msgstr "{settings.PROJECT_NAME} | Aktifkan Akun" -#: engine/vibes_auth/utils/emailing.py:63 +#: engine/vibes_auth/utils/emailing.py:66 #, python-brace-format msgid "{settings.PROJECT_NAME} | Reset Password" msgstr "{settings.PROJECT_NAME} | Atur Ulang Kata Sandi" @@ -952,7 +1083,7 @@ msgstr "" msgid "the token is invalid" msgstr "Token tidak valid" -#: engine/vibes_auth/viewsets.py:44 +#: engine/vibes_auth/viewsets.py:47 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." @@ -960,10 +1091,18 @@ 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." -#: engine/vibes_auth/viewsets.py:113 +#: engine/vibes_auth/viewsets.py:116 msgid "password reset successfully" msgstr "Kata sandi telah berhasil diatur ulang!" -#: engine/vibes_auth/viewsets.py:161 +#: engine/vibes_auth/viewsets.py:146 +msgid "" +"Account already registered but not yet activated. A new activation email has" +" been sent." +msgstr "" +"Akun sudah terdaftar tetapi belum diaktifkan. Email aktivasi baru telah " +"dikirim." + +#: engine/vibes_auth/viewsets.py:179 msgid "account already activated!" msgstr "Anda telah mengaktifkan akun..." diff --git a/engine/vibes_auth/locale/it_IT/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/it_IT/LC_MESSAGES/django.mo index 73ae85d2..96af672d 100644 Binary files a/engine/vibes_auth/locale/it_IT/LC_MESSAGES/django.mo and b/engine/vibes_auth/locale/it_IT/LC_MESSAGES/django.mo differ diff --git a/engine/vibes_auth/locale/it_IT/LC_MESSAGES/django.po b/engine/vibes_auth/locale/it_IT/LC_MESSAGES/django.po index e48286a3..2ee7b387 100644 --- a/engine/vibes_auth/locale/it_IT/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/it_IT/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 03:06+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,32 +13,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:65 engine/vibes_auth/admin.py:66 +#: engine/vibes_auth/admin.py:64 engine/vibes_auth/admin.py:65 #: engine/vibes_auth/graphene/object_types.py:54 msgid "balance" msgstr "Equilibrio" -#: engine/vibes_auth/admin.py:74 +#: engine/vibes_auth/admin.py:73 msgid "order" msgstr "Ordine" -#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:51 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:51 msgid "orders" msgstr "Ordini" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:84 msgid "personal info" msgstr "Informazioni personali" -#: engine/vibes_auth/admin.py:89 engine/vibes_auth/graphene/object_types.py:50 +#: engine/vibes_auth/admin.py:88 engine/vibes_auth/graphene/object_types.py:50 msgid "permissions" msgstr "Permessi" -#: engine/vibes_auth/admin.py:102 +#: engine/vibes_auth/admin.py:101 msgid "important dates" msgstr "Date importanti" -#: engine/vibes_auth/admin.py:103 +#: engine/vibes_auth/admin.py:102 msgid "additional info" msgstr "Ulteriori informazioni" @@ -54,79 +54,83 @@ msgstr "Chiudere le filettature selezionate" msgid "Open selected threads" msgstr "Aprire le discussioni selezionate" -#: engine/vibes_auth/admin.py:208 -msgid "Preview" -msgstr "Anteprima" - -#: engine/vibes_auth/admin.py:209 engine/vibes_auth/admin.py:249 -#: engine/vibes_auth/admin.py:326 -msgid "Metadata" -msgstr "Metadati" - -#: engine/vibes_auth/admin.py:212 -msgid "preview" -msgstr "anteprima" - -#: engine/vibes_auth/admin.py:221 -msgid "image preview" -msgstr "anteprima immagine" - -#: engine/vibes_auth/admin.py:241 +#: engine/vibes_auth/admin.py:209 msgid "Content" msgstr "Contenuto" -#: engine/vibes_auth/admin.py:243 +#: engine/vibes_auth/admin.py:211 msgid "Documentation" msgstr "Documentazione" -#: engine/vibes_auth/admin.py:313 +#: engine/vibes_auth/admin.py:217 engine/vibes_auth/admin.py:294 +msgid "Metadata" +msgstr "Metadati" + +#: engine/vibes_auth/admin.py:281 msgid "Scheduling" msgstr "Pianificazione" -#: engine/vibes_auth/admin.py:315 +#: engine/vibes_auth/admin.py:283 msgid "Statistics" msgstr "Statistiche" -#: engine/vibes_auth/admin.py:329 +#: engine/vibes_auth/admin.py:297 msgid "stats" msgstr "statale" -#: engine/vibes_auth/admin.py:335 +#: engine/vibes_auth/admin.py:303 msgid "Prepare recipients (subscribed users)" msgstr "Preparare i destinatari (utenti iscritti)" -#: engine/vibes_auth/admin.py:343 +#: engine/vibes_auth/admin.py:311 msgid "Campaign '{}' is not in draft status." msgstr "La campagna \"{}\" non è in stato di bozza." -#: engine/vibes_auth/admin.py:350 +#: engine/vibes_auth/admin.py:318 msgid "Preparing recipients for campaign '{}'." msgstr "Preparazione dei destinatari per la campagna \"{}\"." -#: engine/vibes_auth/admin.py:354 +#: engine/vibes_auth/admin.py:322 msgid "Send campaign now" msgstr "Invia campagna ora" -#: engine/vibes_auth/admin.py:362 +#: engine/vibes_auth/admin.py:330 msgid "Campaign '{}' cannot be sent (status: {})." msgstr "La campagna '{}' non può essere inviata (stato: {})." -#: engine/vibes_auth/admin.py:372 +#: engine/vibes_auth/admin.py:340 msgid "Campaign '{}' has no recipients. Prepare recipients first." msgstr "La campagna \"{}\" non ha destinatari. Preparare prima i destinatari." -#: engine/vibes_auth/admin.py:383 +#: engine/vibes_auth/admin.py:351 msgid "Started sending campaign '{}'." msgstr "Avviata l'invio della campagna '{}'." -#: engine/vibes_auth/admin.py:387 +#: engine/vibes_auth/admin.py:355 msgid "Cancel campaign" msgstr "Annulla campagna" -#: engine/vibes_auth/admin.py:396 +#: engine/vibes_auth/admin.py:364 msgid "{} campaign(s) cancelled." msgstr "Campagna/e annullata/e." +#: engine/vibes_auth/admin_site.py:24 +msgid "Verification code" +msgstr "Codice di verifica" + +#: engine/vibes_auth/admin_site.py:62 +msgid "A verification code has been sent to your email." +msgstr "Un codice di verifica è stato inviato alla tua email." + +#: engine/vibes_auth/admin_site.py:118 +msgid "Invalid or expired code. Please try again." +msgstr "Codice non valido o scaduto. Riprova." + +#: engine/vibes_auth/admin_site.py:124 +#: engine/vibes_auth/templates/admin/verify_otp.html:10 +msgid "Two-factor authentication" +msgstr "Autenticazione a due fattori" + #: engine/vibes_auth/apps.py:8 msgid "Accounting" msgstr "Contabilità" @@ -151,6 +155,150 @@ msgstr "Personale" msgid "System" msgstr "Sistema" +#: engine/vibes_auth/docs/drf/emailing.py:18 +msgid "" +"UUID token for unsubscribing. This token is unique per user and is included " +"in the unsubscribe link of every campaign email. The token remains constant " +"for each user unless regenerated." +msgstr "" +"Token UUID per annullare l'iscrizione. Questo token è unico per ogni utente " +"ed è incluso nel link di annullamento dell'iscrizione presente in ogni email" +" della campagna. Il token rimane costante per ogni utente a meno che non " +"venga rigenerato." + +#: engine/vibes_auth/docs/drf/emailing.py:37 +#: engine/vibes_auth/emailing/views.py:69 +msgid "You have been successfully unsubscribed from our emails." +msgstr "" +"La tua iscrizione alla nostra mailing list è stata cancellata con successo." + +#: engine/vibes_auth/docs/drf/emailing.py:45 +#: engine/vibes_auth/emailing/views.py:61 +msgid "You are already unsubscribed." +msgstr "Ti sei già cancellato." + +#: engine/vibes_auth/docs/drf/emailing.py:52 +msgid "Unsubscribe from email campaigns" +msgstr "Annulla l'iscrizione alle campagne e-mail" + +#: engine/vibes_auth/docs/drf/emailing.py:54 +msgid "" +"Unsubscribe a user from all marketing email campaigns using their unique unsubscribe token.\n" +"\n" +"This endpoint is designed for email client compatibility where clicking a link triggers a GET request. The user will no longer receive promotional emails after successful unsubscription.\n" +"\n" +"**Note:** Transactional emails (order confirmations, password resets, etc.) are not affected by this setting." +msgstr "" +"Annulla l'iscrizione di un utente a tutte le campagne di email marketing " +"utilizzando il suo token di annullamento dell'iscrizione univoco. Questo " +"endpoint è progettato per la compatibilità con i client di posta elettronica" +" in cui cliccando su un link si attiva una richiesta GET. L'utente non " +"riceverà più email promozionali dopo aver annullato con successo " +"l'iscrizione. **Nota:** le email transazionali (conferme d'ordine, " +"reimpostazioni della password, ecc.) non sono interessate da questa " +"impostazione." + +#: engine/vibes_auth/docs/drf/emailing.py:66 +#: engine/vibes_auth/docs/drf/emailing.py:146 +msgid "Successfully unsubscribed from email campaigns." +msgstr "" +"La tua iscrizione alla nostra mailing list è stata cancellata con successo." + +#: engine/vibes_auth/docs/drf/emailing.py:82 +#: engine/vibes_auth/docs/drf/emailing.py:162 +msgid "Invalid or missing unsubscribe token." +msgstr "Token di cancellazione non valido o mancante." + +#: engine/vibes_auth/docs/drf/emailing.py:96 +#: engine/vibes_auth/docs/drf/emailing.py:176 +msgid "User associated with the token was not found." +msgstr "Utente associato al token non trovato." + +#: engine/vibes_auth/docs/drf/emailing.py:118 +msgid "One-Click Unsubscribe (RFC 8058)" +msgstr "Annullamento dell'iscrizione con un clic (RFC 8058)" + +#: engine/vibes_auth/docs/drf/emailing.py:120 +msgid "" +"RFC 8058 compliant one-click unsubscribe endpoint for email campaigns.\n" +"\n" +"This endpoint supports the List-Unsubscribe-Post header mechanism defined in RFC 8058, which allows email clients to unsubscribe users with a single click without leaving the email application.\n" +"\n" +"The token can be provided either as a query parameter or in the request body.\n" +"\n" +"**Standards Compliance:**\n" +"- RFC 8058: Signaling One-Click Functionality for List Email Headers\n" +"- RFC 2369: The Use of URLs as Meta-Syntax for Core Mail List Commands\n" +"\n" +"**Note:** Transactional emails are not affected by this setting." +msgstr "" +"Endpoint di cancellazione con un clic conforme allo standard RFC 8058 per campagne e-mail. Questo endpoint supporta il meccanismo dell'intestazione List-Unsubscribe-Post definito nello standard RFC 8058, che consente ai client di posta elettronica di cancellare gli utenti con un solo clic senza uscire dall'applicazione di posta elettronica. Il token può essere fornito come parametro di query o nel corpo della richiesta.\n" +"\n" +"**Conformità agli standard:** - RFC 8058: Segnalazione della funzionalità con un solo clic per le intestazioni delle e-mail di lista - RFC 2369: L'uso degli URL come meta-sintassi per i comandi di base delle liste di posta **Nota:** le e-mail transazionali non sono interessate da questa impostazione." + +#: engine/vibes_auth/docs/drf/emailing.py:137 +msgid "" +"Unsubscribe token (alternative to query parameter). Can be omitted if token " +"is provided in URL." +msgstr "" +"Token di annullamento dell'iscrizione (alternativa al parametro di query). " +"Può essere omesso se il token è fornito nell'URL." + +#: engine/vibes_auth/docs/drf/emailing.py:200 +msgid "Track email open event" +msgstr "Traccia l'evento di apertura dell'e-mail" + +#: engine/vibes_auth/docs/drf/emailing.py:202 +msgid "" +"Records when a campaign email is opened by the recipient.\n" +"\n" +"This endpoint is called automatically when the tracking pixel (1x1 transparent GIF) embedded in the email is loaded by the recipient's email client.\n" +"\n" +"**How it works:**\n" +"1. Each campaign email contains a unique tracking pixel URL with a `tid` parameter\n" +"2. When the email is opened and images are loaded, this endpoint is called\n" +"3. The recipient's status is updated to 'opened' and the timestamp is recorded\n" +"4. The campaign's aggregate opened count is updated\n" +"\n" +"**Privacy considerations:**\n" +"- Only the first open is recorded (subsequent opens are ignored)\n" +"- No personal information beyond the tracking ID is logged\n" +"- Users who disable image loading will not trigger this event\n" +"\n" +"**Response:**\n" +"Returns a 1x1 transparent GIF image regardless of whether tracking succeeded, to ensure consistent behavior and prevent information leakage." +msgstr "" +"Registra quando un'e-mail di campagna viene aperta dal destinatario. Questo endpoint viene chiamato automaticamente quando il pixel di tracciamento (GIF trasparente 1x1) incorporato nell'e-mail viene caricato dal client di posta elettronica del destinatario.\n" +"\n" +"**Come funziona:** 1. Ogni email della campagna contiene un URL pixel di tracciamento univoco con un parametro `tid` 2. Quando l'email viene aperta e le immagini vengono caricate, questo endpoint viene richiamato 3. Lo stato del destinatario viene aggiornato a \"aperto\" e viene registrato il timestamp 4. Il conteggio aggregato delle aperture della campagna viene aggiornato **Considerazioni sulla privacy:**\n" +"- Viene registrata solo la prima apertura (le aperture successive vengono ignorate) - Non vengono registrate informazioni personali oltre all'ID di tracciamento - Gli utenti che disabilitano il caricamento delle immagini non attiveranno questo evento **Risposta:** Restituisce un'immagine GIF trasparente 1x1 indipendentemente dal successo del tracciamento, per garantire un comportamento coerente e prevenire la fuga di informazioni." + +#: engine/vibes_auth/docs/drf/emailing.py:223 +msgid "" +"Tracking ID (UUID) unique to each campaign-recipient combination. This ID " +"links the open event to a specific recipient and campaign." +msgstr "" +"ID di tracciamento (UUID) unico per ogni combinazione campagna-destinatario." +" Questo ID collega l'evento di apertura a un destinatario e a una campagna " +"specifici." + +#: engine/vibes_auth/docs/drf/emailing.py:241 +msgid "" +"1x1 transparent GIF image. Always returned regardless of tracking status to " +"maintain consistent behavior." +msgstr "" +"Immagine GIF trasparente 1x1. Restituita sempre indipendentemente dallo " +"stato di tracciamento per mantenere un comportamento coerente." + +#: engine/vibes_auth/docs/drf/emailing.py:247 +msgid "" +"Returned when no tracking ID is provided. Note: Invalid tracking IDs still " +"return 200 with the GIF to prevent enumeration attacks." +msgstr "" +"Restituito quando non viene fornito alcun ID di tracciamento. Nota: gli ID " +"di tracciamento non validi restituiscono comunque 200 con il GIF per " +"impedire attacchi di enumerazione." + #: engine/vibes_auth/docs/drf/messaging.py:17 msgid "User messages entrypoint" msgstr "Punto di ingresso dei messaggi dell'utente" @@ -249,9 +397,9 @@ msgid "confirm a user's password reset" msgstr "Confermare la reimpostazione della password di un utente" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:351 +#: engine/vibes_auth/graphene/mutations.py:358 #: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107 -#: engine/vibes_auth/viewsets.py:94 +#: engine/vibes_auth/viewsets.py:97 msgid "passwords do not match" msgstr "Le password non corrispondono" @@ -304,195 +452,166 @@ msgstr "Aperto" msgid "Clicked" msgstr "Cliccato" -#: engine/vibes_auth/emailing/models.py:35 -#: engine/vibes_auth/emailing/models.py:71 -#: engine/vibes_auth/emailing/models.py:121 +#: engine/vibes_auth/emailing/models.py:38 +#: engine/vibes_auth/emailing/models.py:88 msgid "name" msgstr "nome" -#: engine/vibes_auth/emailing/models.py:36 -msgid "descriptive name for the image" -msgstr "nome descrittivo dell'immagine" - -#: engine/vibes_auth/emailing/models.py:40 -msgid "image" -msgstr "immagine" - -#: engine/vibes_auth/emailing/models.py:41 -msgid "image file to use in email templates" -msgstr "file immagine da utilizzare nei modelli di email" - -#: engine/vibes_auth/emailing/models.py:47 -msgid "alt text" -msgstr "altro testo" - -#: engine/vibes_auth/emailing/models.py:48 -msgid "alternative text for accessibility" -msgstr "testo alternativo per l'accessibilità" - -#: engine/vibes_auth/emailing/models.py:52 -msgid "email image" -msgstr "immagine e-mail" - -#: engine/vibes_auth/emailing/models.py:53 -msgid "email images" -msgstr "immagini e-mail" - -#: engine/vibes_auth/emailing/models.py:72 +#: engine/vibes_auth/emailing/models.py:39 msgid "internal name for the template" msgstr "nome interno del modello" -#: engine/vibes_auth/emailing/models.py:76 +#: engine/vibes_auth/emailing/models.py:43 msgid "slug" msgstr "servitori" -#: engine/vibes_auth/emailing/models.py:77 +#: engine/vibes_auth/emailing/models.py:44 msgid "unique identifier for the template" msgstr "identificatore univoco per il modello" -#: engine/vibes_auth/emailing/models.py:81 +#: engine/vibes_auth/emailing/models.py:48 msgid "subject" msgstr "oggetto" -#: engine/vibes_auth/emailing/models.py:82 +#: engine/vibes_auth/emailing/models.py:49 msgid "email subject line - supports {{ variables }}" msgstr "Oggetto dell'e-mail - supporta {{ variables }}" -#: engine/vibes_auth/emailing/models.py:85 -msgid "HTML content" -msgstr "Contenuto HTML" +#: engine/vibes_auth/emailing/models.py:52 +msgid "content" +msgstr "contenuto" -#: engine/vibes_auth/emailing/models.py:87 +#: engine/vibes_auth/emailing/models.py:54 msgid "" -"email body content - supports {{ user.first_name }}, {{ user.email }}, {{ " -"project_name }}, {{ unsubscribe_url }}" +"email body in markdown - supports {{ user.first_name }}, {{ user.email }}, " +"{{ project_name }}, {{ unsubscribe_url }}" msgstr "" "contenuto del corpo dell'e-mail - supporta {{ user.first_name }}, {{ " "user.email }}, {{ project_name }}, {{ unsubscribe_url }}" -#: engine/vibes_auth/emailing/models.py:94 +#: engine/vibes_auth/emailing/models.py:61 msgid "plain text content" msgstr "contenuto in testo semplice" -#: engine/vibes_auth/emailing/models.py:95 +#: engine/vibes_auth/emailing/models.py:62 msgid "plain text fallback (auto-generated if empty)" msgstr "fallback in testo semplice (generato automaticamente se vuoto)" -#: engine/vibes_auth/emailing/models.py:100 +#: engine/vibes_auth/emailing/models.py:67 msgid "available variables" msgstr "variabili disponibili" -#: engine/vibes_auth/emailing/models.py:101 +#: engine/vibes_auth/emailing/models.py:68 msgid "documentation of available template variables" msgstr "documentazione delle variabili dei modelli disponibili" -#: engine/vibes_auth/emailing/models.py:105 +#: engine/vibes_auth/emailing/models.py:72 msgid "email template" msgstr "modello di email" -#: engine/vibes_auth/emailing/models.py:106 +#: engine/vibes_auth/emailing/models.py:73 msgid "email templates" msgstr "modelli di email" -#: engine/vibes_auth/emailing/models.py:122 +#: engine/vibes_auth/emailing/models.py:89 msgid "internal name for the campaign" msgstr "nome interno della campagna" -#: engine/vibes_auth/emailing/models.py:129 +#: engine/vibes_auth/emailing/models.py:96 msgid "template" msgstr "modello" -#: engine/vibes_auth/emailing/models.py:130 +#: engine/vibes_auth/emailing/models.py:97 msgid "email template to use for this campaign" msgstr "modello di email da utilizzare per questa campagna" -#: engine/vibes_auth/emailing/models.py:136 -#: engine/vibes_auth/emailing/models.py:206 +#: engine/vibes_auth/emailing/models.py:103 +#: engine/vibes_auth/emailing/models.py:173 msgid "status" msgstr "stato" -#: engine/vibes_auth/emailing/models.py:141 +#: engine/vibes_auth/emailing/models.py:108 msgid "scheduled at" msgstr "in programma alle" -#: engine/vibes_auth/emailing/models.py:142 +#: engine/vibes_auth/emailing/models.py:109 msgid "when to send the campaign (leave empty for manual send)" msgstr "quando inviare la campagna (lasciare vuoto per l'invio manuale)" -#: engine/vibes_auth/emailing/models.py:147 -#: engine/vibes_auth/emailing/models.py:211 +#: engine/vibes_auth/emailing/models.py:114 +#: engine/vibes_auth/emailing/models.py:178 msgid "sent at" msgstr "tardi che" -#: engine/vibes_auth/emailing/models.py:148 +#: engine/vibes_auth/emailing/models.py:115 msgid "when the campaign was actually sent" msgstr "quando la campagna è stata effettivamente inviata" -#: engine/vibes_auth/emailing/models.py:153 +#: engine/vibes_auth/emailing/models.py:120 msgid "total recipients" msgstr "destinatari totali" -#: engine/vibes_auth/emailing/models.py:157 +#: engine/vibes_auth/emailing/models.py:124 msgid "sent count" msgstr "numero inviato" -#: engine/vibes_auth/emailing/models.py:161 +#: engine/vibes_auth/emailing/models.py:128 msgid "failed count" msgstr "conteggio fallito" -#: engine/vibes_auth/emailing/models.py:165 +#: engine/vibes_auth/emailing/models.py:132 msgid "opened count" msgstr "conteggio aperto" -#: engine/vibes_auth/emailing/models.py:169 +#: engine/vibes_auth/emailing/models.py:136 msgid "clicked count" msgstr "numero di clic" -#: engine/vibes_auth/emailing/models.py:173 +#: engine/vibes_auth/emailing/models.py:140 msgid "email campaign" msgstr "campagna e-mail" -#: engine/vibes_auth/emailing/models.py:174 +#: engine/vibes_auth/emailing/models.py:141 msgid "email campaigns" msgstr "campagne e-mail" -#: engine/vibes_auth/emailing/models.py:194 +#: engine/vibes_auth/emailing/models.py:161 msgid "campaign" msgstr "campagna" -#: engine/vibes_auth/emailing/models.py:200 engine/vibes_auth/models.py:146 +#: engine/vibes_auth/emailing/models.py:167 engine/vibes_auth/models.py:183 msgid "user" msgstr "Utente" -#: engine/vibes_auth/emailing/models.py:216 +#: engine/vibes_auth/emailing/models.py:183 msgid "opened at" msgstr "aperto a" -#: engine/vibes_auth/emailing/models.py:221 +#: engine/vibes_auth/emailing/models.py:188 msgid "clicked at" msgstr "cliccato su" -#: engine/vibes_auth/emailing/models.py:227 +#: engine/vibes_auth/emailing/models.py:194 msgid "tracking ID" msgstr "ID di tracciamento" -#: engine/vibes_auth/emailing/models.py:228 +#: engine/vibes_auth/emailing/models.py:195 msgid "unique ID for tracking opens and clicks" msgstr "ID univoco per tracciare aperture e clic" -#: engine/vibes_auth/emailing/models.py:233 +#: engine/vibes_auth/emailing/models.py:200 msgid "error message" msgstr "messaggio di errore" -#: engine/vibes_auth/emailing/models.py:234 +#: engine/vibes_auth/emailing/models.py:201 msgid "error details if sending failed" msgstr "dettagli dell'errore se l'invio non è andato a buon fine" -#: engine/vibes_auth/emailing/models.py:238 +#: engine/vibes_auth/emailing/models.py:205 msgid "campaign recipient" msgstr "destinatario della campagna" -#: engine/vibes_auth/emailing/models.py:239 +#: engine/vibes_auth/emailing/models.py:206 msgid "campaign recipients" msgstr "destinatari della campagna" @@ -509,74 +628,73 @@ msgstr "" msgid "Unsubscribe" msgstr "Annulla iscrizione" -#: engine/vibes_auth/emailing/views.py:71 +#: engine/vibes_auth/emailing/views.py:39 msgid "Unsubscribe token is required." msgstr "È necessario il token di cancellazione dell'iscrizione." -#: engine/vibes_auth/emailing/views.py:79 +#: engine/vibes_auth/emailing/views.py:47 msgid "Invalid unsubscribe token format." msgstr "Formato token di cancellazione non valido." -#: engine/vibes_auth/emailing/views.py:87 +#: engine/vibes_auth/emailing/views.py:55 msgid "User not found." msgstr "Utente non trovato." -#: engine/vibes_auth/emailing/views.py:93 -msgid "You are already unsubscribed." -msgstr "Ti sei già cancellato." - -#: engine/vibes_auth/emailing/views.py:101 -msgid "You have been successfully unsubscribed from our emails." -msgstr "" -"La tua iscrizione alla nostra mailing list è stata cancellata con successo." - -#: engine/vibes_auth/graphene/mutations.py:46 +#: engine/vibes_auth/graphene/mutations.py:47 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "L'uuid b64-encoded dell'utente che ci ha segnalato il nuovo utente." -#: engine/vibes_auth/graphene/mutations.py:68 +#: engine/vibes_auth/graphene/mutations.py:70 msgid "password too weak" msgstr "La password è troppo debole" -#: engine/vibes_auth/graphene/mutations.py:128 +#: engine/vibes_auth/graphene/mutations.py:130 msgid "malformed email" msgstr "Email malformata" -#: engine/vibes_auth/graphene/mutations.py:140 +#: engine/vibes_auth/graphene/mutations.py:142 #: engine/vibes_auth/serializers.py:117 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Numero di telefono malformato: {phone_number}!" -#: engine/vibes_auth/graphene/mutations.py:165 +#: engine/vibes_auth/graphene/mutations.py:167 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Formato attributo non valido: {attribute_pair}!" -#: engine/vibes_auth/graphene/mutations.py:182 +#: engine/vibes_auth/graphene/mutations.py:184 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} non esiste: {uuid}!" -#: engine/vibes_auth/graphene/mutations.py:304 -#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180 +#: engine/vibes_auth/graphene/mutations.py:309 +#: engine/vibes_auth/viewsets.py:174 engine/vibes_auth/viewsets.py:198 msgid "activation link is invalid!" msgstr "Il link di attivazione non è valido!" -#: engine/vibes_auth/graphene/mutations.py:307 +#: engine/vibes_auth/graphene/mutations.py:312 msgid "account already activated..." msgstr "L'account è già stato attivato..." -#: engine/vibes_auth/graphene/mutations.py:314 -#: engine/vibes_auth/graphene/mutations.py:376 +#: engine/vibes_auth/graphene/mutations.py:319 +#: engine/vibes_auth/graphene/mutations.py:383 msgid "something went wrong: {e!s}" msgstr "Qualcosa è andato storto: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:358 -#: engine/vibes_auth/viewsets.py:106 +#: engine/vibes_auth/graphene/mutations.py:365 +#: engine/vibes_auth/viewsets.py:109 msgid "token is invalid!" msgstr "Il gettone non è valido!" +#: engine/vibes_auth/graphene/mutations.py:403 +msgid "only image files are allowed (jpg, png, gif, webp)" +msgstr "Sono consentiti solo file immagine (jpg, png, gif, webp)" + +#: engine/vibes_auth/graphene/mutations.py:406 +msgid "file size must not exceed 5 MB" +msgstr "La dimensione del file non deve superare i 5 MB." + #: engine/vibes_auth/graphene/object_types.py:46 msgid "" "the products this user has viewed most recently (max 48), in " @@ -586,7 +704,7 @@ msgstr "" "ordine cronologico inverso." #: engine/vibes_auth/graphene/object_types.py:49 -#: engine/vibes_auth/models.py:214 +#: engine/vibes_auth/models.py:270 msgid "groups" msgstr "Gruppi" @@ -595,7 +713,7 @@ msgid "wishlist" msgstr "Lista dei desideri" #: engine/vibes_auth/graphene/object_types.py:56 -#: engine/vibes_auth/models.py:70 +#: engine/vibes_auth/models.py:75 msgid "avatar" msgstr "Avatar" @@ -633,7 +751,7 @@ msgstr "Stiamo già cercando l'operatore per rispondervi, restate in attesa!" msgid "Assignee must be a staff user." msgstr "Il destinatario deve essere un utente del personale." -#: engine/vibes_auth/models.py:42 +#: engine/vibes_auth/models.py:44 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -652,123 +770,135 @@ msgstr "" "degli account. Il modello User è progettato per gestire casi d'uso specifici" " per una migliore gestione degli utenti." -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "email" msgstr "Email" -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "user email address" msgstr "Indirizzo e-mail dell'utente" -#: engine/vibes_auth/models.py:55 +#: engine/vibes_auth/models.py:57 msgid "phone_number" msgstr "Numero di telefono" -#: engine/vibes_auth/models.py:60 +#: engine/vibes_auth/models.py:61 msgid "user phone number" msgstr "Numero di telefono dell'utente" -#: engine/vibes_auth/models.py:66 +#: engine/vibes_auth/models.py:68 msgid "first_name" msgstr "Nome" -#: engine/vibes_auth/models.py:67 +#: engine/vibes_auth/models.py:71 msgid "last_name" msgstr "Cognome" -#: engine/vibes_auth/models.py:73 +#: engine/vibes_auth/models.py:78 msgid "user profile image" msgstr "Immagine del profilo utente" -#: engine/vibes_auth/models.py:78 +#: engine/vibes_auth/models.py:83 msgid "is verified" msgstr "È verificato" -#: engine/vibes_auth/models.py:79 +#: engine/vibes_auth/models.py:84 msgid "user verification status" msgstr "Stato di verifica dell'utente" -#: engine/vibes_auth/models.py:82 +#: engine/vibes_auth/models.py:87 msgid "is_active" msgstr "È attivo" -#: engine/vibes_auth/models.py:84 +#: engine/vibes_auth/models.py:89 msgid "unselect this instead of deleting accounts" msgstr "Deselezionare questa opzione invece di eliminare gli account" -#: engine/vibes_auth/models.py:87 +#: engine/vibes_auth/models.py:92 msgid "is_subscribed" msgstr "È iscritto" -#: engine/vibes_auth/models.py:88 +#: engine/vibes_auth/models.py:93 msgid "user's newsletter subscription status" msgstr "Stato di iscrizione alla newsletter dell'utente" -#: engine/vibes_auth/models.py:92 +#: engine/vibes_auth/models.py:98 msgid "activation token" msgstr "Token di attivazione" -#: engine/vibes_auth/models.py:95 +#: engine/vibes_auth/models.py:103 +msgid "activation token created" +msgstr "Token di attivazione creato" + +#: engine/vibes_auth/models.py:107 msgid "unsubscribe token" msgstr "Token di cancellazione" -#: engine/vibes_auth/models.py:96 +#: engine/vibes_auth/models.py:108 msgid "token for secure one-click unsubscribe from campaigns" msgstr "token per la cancellazione sicura con un solo clic dalle campagne" -#: engine/vibes_auth/models.py:106 +#: engine/vibes_auth/models.py:118 msgid "attributes" msgstr "Attributi" -#: engine/vibes_auth/models.py:147 +#: engine/vibes_auth/models.py:184 msgid "users" msgstr "Utenti" -#: engine/vibes_auth/models.py:154 +#: engine/vibes_auth/models.py:202 +msgid "admin OTP code" +msgstr "Codice OTP amministratore" + +#: engine/vibes_auth/models.py:203 +msgid "admin OTP codes" +msgstr "Codici OTP amministratore" + +#: engine/vibes_auth/models.py:210 msgid "For anonymous threads" msgstr "Per le discussioni anonime" -#: engine/vibes_auth/models.py:178 +#: engine/vibes_auth/models.py:234 msgid "Chat thread" msgstr "Filo della chat" -#: engine/vibes_auth/models.py:179 +#: engine/vibes_auth/models.py:235 msgid "Chat threads" msgstr "Filo conduttore della chat" -#: engine/vibes_auth/models.py:185 +#: engine/vibes_auth/models.py:241 msgid "provide user or email for anonymous thread." msgstr "fornire l'utente o l'e-mail per il thread anonimo." -#: engine/vibes_auth/models.py:188 +#: engine/vibes_auth/models.py:244 msgid "assignee must be a staff user." msgstr "L'assegnatario deve essere un utente del personale." -#: engine/vibes_auth/models.py:206 +#: engine/vibes_auth/models.py:262 msgid "Chat message" msgstr "Messaggio di chat" -#: engine/vibes_auth/models.py:207 +#: engine/vibes_auth/models.py:263 msgid "Chat messages" msgstr "Messaggi di chat" -#: engine/vibes_auth/models.py:213 +#: engine/vibes_auth/models.py:269 msgid "group" msgstr "Gruppo" -#: engine/vibes_auth/models.py:220 +#: engine/vibes_auth/models.py:276 msgid "outstanding token" msgstr "Gettone eccezionale" -#: engine/vibes_auth/models.py:221 +#: engine/vibes_auth/models.py:277 msgid "outstanding tokens" msgstr "Gettoni in sospeso" -#: engine/vibes_auth/models.py:227 +#: engine/vibes_auth/models.py:283 msgid "blacklisted token" msgstr "Token in lista nera" -#: engine/vibes_auth/models.py:228 +#: engine/vibes_auth/models.py:284 msgid "blacklisted tokens" msgstr "Gettoni nella lista nera" @@ -812,6 +942,10 @@ msgstr "Nessuna richiesta di uuid utente presente nel token" msgid "user does not exist" msgstr "L'utente non esiste" +#: engine/vibes_auth/templates/admin/verify_otp.html:27 +msgid "Verify" +msgstr "Verifica" + #: engine/vibes_auth/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "Reimpostare la password" @@ -897,12 +1031,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "Cordiali saluti,
il team %(project_name)s" -#: engine/vibes_auth/utils/emailing.py:24 +#: engine/vibes_auth/utils/emailing.py:27 #, python-brace-format msgid "{settings.PROJECT_NAME} | Activate Account" msgstr "{settings.PROJECT_NAME} | Attiva l'account" -#: engine/vibes_auth/utils/emailing.py:63 +#: engine/vibes_auth/utils/emailing.py:66 #, python-brace-format msgid "{settings.PROJECT_NAME} | Reset Password" msgstr "{settings.PROJECT_NAME} | Reimpostare la password" @@ -958,7 +1092,7 @@ msgstr "" msgid "the token is invalid" msgstr "Il token non è valido" -#: engine/vibes_auth/viewsets.py:44 +#: engine/vibes_auth/viewsets.py:47 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." @@ -966,10 +1100,18 @@ 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." -#: engine/vibes_auth/viewsets.py:113 +#: engine/vibes_auth/viewsets.py:116 msgid "password reset successfully" msgstr "La password è stata reimpostata con successo!" -#: engine/vibes_auth/viewsets.py:161 +#: engine/vibes_auth/viewsets.py:146 +msgid "" +"Account already registered but not yet activated. A new activation email has" +" been sent." +msgstr "" +"Account già registrato ma non ancora attivato. È stata inviata una nuova " +"email di attivazione." + +#: engine/vibes_auth/viewsets.py:179 msgid "account already activated!" msgstr "Avete già attivato l'account..." diff --git a/engine/vibes_auth/locale/ja_JP/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/ja_JP/LC_MESSAGES/django.mo index 1e1967fc..6723c949 100644 Binary files a/engine/vibes_auth/locale/ja_JP/LC_MESSAGES/django.mo and b/engine/vibes_auth/locale/ja_JP/LC_MESSAGES/django.mo differ diff --git a/engine/vibes_auth/locale/ja_JP/LC_MESSAGES/django.po b/engine/vibes_auth/locale/ja_JP/LC_MESSAGES/django.po index fe4d9564..b33b3a8c 100644 --- a/engine/vibes_auth/locale/ja_JP/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/ja_JP/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 03:06+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,32 +13,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:65 engine/vibes_auth/admin.py:66 +#: engine/vibes_auth/admin.py:64 engine/vibes_auth/admin.py:65 #: engine/vibes_auth/graphene/object_types.py:54 msgid "balance" msgstr "バランス" -#: engine/vibes_auth/admin.py:74 +#: engine/vibes_auth/admin.py:73 msgid "order" msgstr "オーダー" -#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:51 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:51 msgid "orders" msgstr "受注状況" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:84 msgid "personal info" msgstr "個人情報" -#: engine/vibes_auth/admin.py:89 engine/vibes_auth/graphene/object_types.py:50 +#: engine/vibes_auth/admin.py:88 engine/vibes_auth/graphene/object_types.py:50 msgid "permissions" msgstr "アクセス許可" -#: engine/vibes_auth/admin.py:102 +#: engine/vibes_auth/admin.py:101 msgid "important dates" msgstr "重要な日程" -#: engine/vibes_auth/admin.py:103 +#: engine/vibes_auth/admin.py:102 msgid "additional info" msgstr "追加情報" @@ -54,79 +54,83 @@ msgstr "選択したスレッドを閉じる" msgid "Open selected threads" msgstr "選択したスレッドを開く" -#: engine/vibes_auth/admin.py:208 -msgid "Preview" -msgstr "プレビュー" - -#: engine/vibes_auth/admin.py:209 engine/vibes_auth/admin.py:249 -#: engine/vibes_auth/admin.py:326 -msgid "Metadata" -msgstr "メタデータ" - -#: engine/vibes_auth/admin.py:212 -msgid "preview" -msgstr "プレビュー" - -#: engine/vibes_auth/admin.py:221 -msgid "image preview" -msgstr "画像プレビュー" - -#: engine/vibes_auth/admin.py:241 +#: engine/vibes_auth/admin.py:209 msgid "Content" msgstr "コンテンツ" -#: engine/vibes_auth/admin.py:243 +#: engine/vibes_auth/admin.py:211 msgid "Documentation" msgstr "ドキュメント" -#: engine/vibes_auth/admin.py:313 +#: engine/vibes_auth/admin.py:217 engine/vibes_auth/admin.py:294 +msgid "Metadata" +msgstr "メタデータ" + +#: engine/vibes_auth/admin.py:281 msgid "Scheduling" msgstr "スケジュール設定" -#: engine/vibes_auth/admin.py:315 +#: engine/vibes_auth/admin.py:283 msgid "Statistics" msgstr "統計" -#: engine/vibes_auth/admin.py:329 +#: engine/vibes_auth/admin.py:297 msgid "stats" msgstr "国家" -#: engine/vibes_auth/admin.py:335 +#: engine/vibes_auth/admin.py:303 msgid "Prepare recipients (subscribed users)" msgstr "受信者(登録ユーザー)の準備" -#: engine/vibes_auth/admin.py:343 +#: engine/vibes_auth/admin.py:311 msgid "Campaign '{}' is not in draft status." msgstr "キャンペーン「{}」は下書き状態ではありません。" -#: engine/vibes_auth/admin.py:350 +#: engine/vibes_auth/admin.py:318 msgid "Preparing recipients for campaign '{}'." msgstr "キャンペーン「{}」の受信者準備中" -#: engine/vibes_auth/admin.py:354 +#: engine/vibes_auth/admin.py:322 msgid "Send campaign now" msgstr "今すぐキャンペーンを送信" -#: engine/vibes_auth/admin.py:362 +#: engine/vibes_auth/admin.py:330 msgid "Campaign '{}' cannot be sent (status: {})." msgstr "キャンペーン '{}' を送信できません(ステータス: {})。" -#: engine/vibes_auth/admin.py:372 +#: engine/vibes_auth/admin.py:340 msgid "Campaign '{}' has no recipients. Prepare recipients first." msgstr "キャンペーン「{}」には受信者がいません。まず受信者を準備してください。" -#: engine/vibes_auth/admin.py:383 +#: engine/vibes_auth/admin.py:351 msgid "Started sending campaign '{}'." msgstr "キャンペーン '{}' の送信を開始しました。" -#: engine/vibes_auth/admin.py:387 +#: engine/vibes_auth/admin.py:355 msgid "Cancel campaign" msgstr "キャンペーンをキャンセルする" -#: engine/vibes_auth/admin.py:396 +#: engine/vibes_auth/admin.py:364 msgid "{} campaign(s) cancelled." msgstr "キャンペーンがキャンセルされました。" +#: engine/vibes_auth/admin_site.py:24 +msgid "Verification code" +msgstr "認証コード" + +#: engine/vibes_auth/admin_site.py:62 +msgid "A verification code has been sent to your email." +msgstr "確認コードがメールアドレスに送信されました。" + +#: engine/vibes_auth/admin_site.py:118 +msgid "Invalid or expired code. Please try again." +msgstr "無効または期限切れのコードです。もう一度お試しください。" + +#: engine/vibes_auth/admin_site.py:124 +#: engine/vibes_auth/templates/admin/verify_otp.html:10 +msgid "Two-factor authentication" +msgstr "二要素認証" + #: engine/vibes_auth/apps.py:8 msgid "Accounting" msgstr "会計" @@ -151,6 +155,128 @@ msgstr "スタッフ" msgid "System" msgstr "システム" +#: engine/vibes_auth/docs/drf/emailing.py:18 +msgid "" +"UUID token for unsubscribing. This token is unique per user and is included " +"in the unsubscribe link of every campaign email. The token remains constant " +"for each user unless regenerated." +msgstr "" +"登録解除用UUIDトークン。このトークンはユーザーごとに一意であり、すべてのキャンペーンメールの登録解除リンクに含まれます。トークンは再生成されない限り、各ユーザーで不変です。" + +#: engine/vibes_auth/docs/drf/emailing.py:37 +#: engine/vibes_auth/emailing/views.py:69 +msgid "You have been successfully unsubscribed from our emails." +msgstr "メール配信の登録解除が完了しました。" + +#: engine/vibes_auth/docs/drf/emailing.py:45 +#: engine/vibes_auth/emailing/views.py:61 +msgid "You are already unsubscribed." +msgstr "あなたは既に購読を解除されています。" + +#: engine/vibes_auth/docs/drf/emailing.py:52 +msgid "Unsubscribe from email campaigns" +msgstr "メール配信の登録解除" + +#: engine/vibes_auth/docs/drf/emailing.py:54 +msgid "" +"Unsubscribe a user from all marketing email campaigns using their unique unsubscribe token.\n" +"\n" +"This endpoint is designed for email client compatibility where clicking a link triggers a GET request. The user will no longer receive promotional emails after successful unsubscription.\n" +"\n" +"**Note:** Transactional emails (order confirmations, password resets, etc.) are not affected by this setting." +msgstr "" +"ユーザー固有の配信停止トークンを使用して、すべてのマーケティングメールキャンペーンからユーザーを配信停止します。このエンドポイントは、リンククリックがGETリクエストをトリガーするメールクライアントの互換性を考慮して設計されています。配信停止が正常に完了すると、ユーザーはプロモーションメールを受信しなくなります。**注:**トランザクションメール(注文確認、パスワードリセットなど)はこの設定の影響を受けません。" + +#: engine/vibes_auth/docs/drf/emailing.py:66 +#: engine/vibes_auth/docs/drf/emailing.py:146 +msgid "Successfully unsubscribed from email campaigns." +msgstr "メール配信リストからの登録解除が完了しました。" + +#: engine/vibes_auth/docs/drf/emailing.py:82 +#: engine/vibes_auth/docs/drf/emailing.py:162 +msgid "Invalid or missing unsubscribe token." +msgstr "無効または欠落している購読解除トークン。" + +#: engine/vibes_auth/docs/drf/emailing.py:96 +#: engine/vibes_auth/docs/drf/emailing.py:176 +msgid "User associated with the token was not found." +msgstr "トークンに関連付けられたユーザーが見つかりませんでした。" + +#: engine/vibes_auth/docs/drf/emailing.py:118 +msgid "One-Click Unsubscribe (RFC 8058)" +msgstr "ワンクリック配信停止 (RFC 8058)" + +#: engine/vibes_auth/docs/drf/emailing.py:120 +msgid "" +"RFC 8058 compliant one-click unsubscribe endpoint for email campaigns.\n" +"\n" +"This endpoint supports the List-Unsubscribe-Post header mechanism defined in RFC 8058, which allows email clients to unsubscribe users with a single click without leaving the email application.\n" +"\n" +"The token can be provided either as a query parameter or in the request body.\n" +"\n" +"**Standards Compliance:**\n" +"- RFC 8058: Signaling One-Click Functionality for List Email Headers\n" +"- RFC 2369: The Use of URLs as Meta-Syntax for Core Mail List Commands\n" +"\n" +"**Note:** Transactional emails are not affected by this setting." +msgstr "" +"RFC 8058準拠のメールキャンペーン向けワンクリック購読解除エンドポイント。このエンドポイントはRFC 8058で定義されたList-Unsubscribe-Postヘッダー機構をサポートし、メールクライアントがメールアプリケーションを離れることなくワンクリックでユーザーの購読解除を可能にします。トークンはクエリパラメータまたはリクエストボディのいずれかで提供可能です。\n" +"\n" +"**標準準拠:**- RFC 8058: メーリングリストヘッダー向けワンクリック機能のシグナリング- RFC 2369: コアメーリングリストコマンドのメタ構文としてのURLの使用**注:** トランザクションメールはこの設定の影響を受けません。" + +#: engine/vibes_auth/docs/drf/emailing.py:137 +msgid "" +"Unsubscribe token (alternative to query parameter). Can be omitted if token " +"is provided in URL." +msgstr "購読解除トークン(クエリパラメータの代替)。URLにトークンが指定されている場合は省略可能。" + +#: engine/vibes_auth/docs/drf/emailing.py:200 +msgid "Track email open event" +msgstr "メール開封イベントを追跡する" + +#: engine/vibes_auth/docs/drf/emailing.py:202 +msgid "" +"Records when a campaign email is opened by the recipient.\n" +"\n" +"This endpoint is called automatically when the tracking pixel (1x1 transparent GIF) embedded in the email is loaded by the recipient's email client.\n" +"\n" +"**How it works:**\n" +"1. Each campaign email contains a unique tracking pixel URL with a `tid` parameter\n" +"2. When the email is opened and images are loaded, this endpoint is called\n" +"3. The recipient's status is updated to 'opened' and the timestamp is recorded\n" +"4. The campaign's aggregate opened count is updated\n" +"\n" +"**Privacy considerations:**\n" +"- Only the first open is recorded (subsequent opens are ignored)\n" +"- No personal information beyond the tracking ID is logged\n" +"- Users who disable image loading will not trigger this event\n" +"\n" +"**Response:**\n" +"Returns a 1x1 transparent GIF image regardless of whether tracking succeeded, to ensure consistent behavior and prevent information leakage." +msgstr "" +"キャンペーンメールが受信者によって開封されたことを記録します。このエンドポイントは、メールに埋め込まれたトラッキングピクセル(1x1透明GIF)が受信者のメールクライアントによって読み込まれた際に自動的に呼び出されます。\n" +"\n" +"**動作原理:**1. 各キャンペーンメールには`tid`パラメータ付きの一意のトラッキングピクセルURLが含まれる2. メールが開封され画像が読み込まれると、このエンドポイントが呼び出される3. 受信者のステータスが「開封済み」に更新され、タイムスタンプが記録される4. キャンペーンの総開封数が更新される**プライバシーに関する考慮事項:**\n" +"- 最初の開封のみ記録(以降の開封は無視)- トラッキングID以外の個人情報はログに記録されない- 画像読み込みを無効化したユーザーは本イベントをトリガーしない**レスポンス:** トラッキングの成功可否に関わらず、一貫した動作と情報漏洩防止のため、1x1透明GIF画像を返却します。" + +#: engine/vibes_auth/docs/drf/emailing.py:223 +msgid "" +"Tracking ID (UUID) unique to each campaign-recipient combination. This ID " +"links the open event to a specific recipient and campaign." +msgstr "各キャンペーンと受信者の組み合わせに固有のトラッキングID(UUID)。このIDは開封イベントを特定の受信者とキャンペーンに関連付けます。" + +#: engine/vibes_auth/docs/drf/emailing.py:241 +msgid "" +"1x1 transparent GIF image. Always returned regardless of tracking status to " +"maintain consistent behavior." +msgstr "1x1透明GIF画像。動作の一貫性を保つため、トラッキング状態に関わらず常に返される。" + +#: engine/vibes_auth/docs/drf/emailing.py:247 +msgid "" +"Returned when no tracking ID is provided. Note: Invalid tracking IDs still " +"return 200 with the GIF to prevent enumeration attacks." +msgstr "追跡IDが提供されない場合に返されます。注記:無効な追跡IDでも、列挙攻撃を防ぐため、GIFと共に200を返します。" + #: engine/vibes_auth/docs/drf/messaging.py:17 msgid "User messages entrypoint" msgstr "ユーザーメッセージのエントリーポイント" @@ -241,9 +367,9 @@ msgid "confirm a user's password reset" msgstr "ユーザーのパスワード・リセットを確認する" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:351 +#: engine/vibes_auth/graphene/mutations.py:358 #: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107 -#: engine/vibes_auth/viewsets.py:94 +#: engine/vibes_auth/viewsets.py:97 msgid "passwords do not match" msgstr "パスワードが一致しない" @@ -296,195 +422,166 @@ msgstr "開店" msgid "Clicked" msgstr "クリックされた" -#: engine/vibes_auth/emailing/models.py:35 -#: engine/vibes_auth/emailing/models.py:71 -#: engine/vibes_auth/emailing/models.py:121 +#: engine/vibes_auth/emailing/models.py:38 +#: engine/vibes_auth/emailing/models.py:88 msgid "name" msgstr "名前" -#: engine/vibes_auth/emailing/models.py:36 -msgid "descriptive name for the image" -msgstr "画像の説明名" - -#: engine/vibes_auth/emailing/models.py:40 -msgid "image" -msgstr "画像" - -#: engine/vibes_auth/emailing/models.py:41 -msgid "image file to use in email templates" -msgstr "メールテンプレートで使用する画像ファイル" - -#: engine/vibes_auth/emailing/models.py:47 -msgid "alt text" -msgstr "別のテキスト" - -#: engine/vibes_auth/emailing/models.py:48 -msgid "alternative text for accessibility" -msgstr "アクセシビリティのための代替テキスト" - -#: engine/vibes_auth/emailing/models.py:52 -msgid "email image" -msgstr "メール画像" - -#: engine/vibes_auth/emailing/models.py:53 -msgid "email images" -msgstr "メール画像" - -#: engine/vibes_auth/emailing/models.py:72 +#: engine/vibes_auth/emailing/models.py:39 msgid "internal name for the template" msgstr "テンプレートの内部名" -#: engine/vibes_auth/emailing/models.py:76 +#: engine/vibes_auth/emailing/models.py:43 msgid "slug" msgstr "slug" -#: engine/vibes_auth/emailing/models.py:77 +#: engine/vibes_auth/emailing/models.py:44 msgid "unique identifier for the template" msgstr "テンプレート固有識別子" -#: engine/vibes_auth/emailing/models.py:81 +#: engine/vibes_auth/emailing/models.py:48 msgid "subject" msgstr "件名" -#: engine/vibes_auth/emailing/models.py:82 +#: engine/vibes_auth/emailing/models.py:49 msgid "email subject line - supports {{ variables }}" msgstr "メール件名 - {{ variables }} をサポートします" -#: engine/vibes_auth/emailing/models.py:85 -msgid "HTML content" -msgstr "HTMLコンテンツ" +#: engine/vibes_auth/emailing/models.py:52 +msgid "content" +msgstr "内容" -#: engine/vibes_auth/emailing/models.py:87 +#: engine/vibes_auth/emailing/models.py:54 msgid "" -"email body content - supports {{ user.first_name }}, {{ user.email }}, {{ " -"project_name }}, {{ unsubscribe_url }}" +"email body in markdown - supports {{ user.first_name }}, {{ user.email }}, " +"{{ project_name }}, {{ unsubscribe_url }}" msgstr "" "メール本文の内容 - {{ user.first_name }}をサポートします、{{ user.email }}をサポートします、{{ " "project_name }} をサポートします、{{ unsubscribe_url }}をサポートします" -#: engine/vibes_auth/emailing/models.py:94 +#: engine/vibes_auth/emailing/models.py:61 msgid "plain text content" msgstr "プレーンテキストコンテンツ" -#: engine/vibes_auth/emailing/models.py:95 +#: engine/vibes_auth/emailing/models.py:62 msgid "plain text fallback (auto-generated if empty)" msgstr "プレーンテキストのフォールバック(空の場合自動生成)" -#: engine/vibes_auth/emailing/models.py:100 +#: engine/vibes_auth/emailing/models.py:67 msgid "available variables" msgstr "利用可能な変数" -#: engine/vibes_auth/emailing/models.py:101 +#: engine/vibes_auth/emailing/models.py:68 msgid "documentation of available template variables" msgstr "利用可能なテンプレート変数のドキュメント" -#: engine/vibes_auth/emailing/models.py:105 +#: engine/vibes_auth/emailing/models.py:72 msgid "email template" msgstr "メールテンプレート" -#: engine/vibes_auth/emailing/models.py:106 +#: engine/vibes_auth/emailing/models.py:73 msgid "email templates" msgstr "メールテンプレート" -#: engine/vibes_auth/emailing/models.py:122 +#: engine/vibes_auth/emailing/models.py:89 msgid "internal name for the campaign" msgstr "キャンペーンの内部名称" -#: engine/vibes_auth/emailing/models.py:129 +#: engine/vibes_auth/emailing/models.py:96 msgid "template" msgstr "テンプレート" -#: engine/vibes_auth/emailing/models.py:130 +#: engine/vibes_auth/emailing/models.py:97 msgid "email template to use for this campaign" msgstr "このキャンペーンで使用するメールテンプレート" -#: engine/vibes_auth/emailing/models.py:136 -#: engine/vibes_auth/emailing/models.py:206 +#: engine/vibes_auth/emailing/models.py:103 +#: engine/vibes_auth/emailing/models.py:173 msgid "status" msgstr "ステータス" -#: engine/vibes_auth/emailing/models.py:141 +#: engine/vibes_auth/emailing/models.py:108 msgid "scheduled at" msgstr "予定されている" -#: engine/vibes_auth/emailing/models.py:142 +#: engine/vibes_auth/emailing/models.py:109 msgid "when to send the campaign (leave empty for manual send)" msgstr "キャンペーン送信日時(手動送信の場合は空欄のまま)" -#: engine/vibes_auth/emailing/models.py:147 -#: engine/vibes_auth/emailing/models.py:211 +#: engine/vibes_auth/emailing/models.py:114 +#: engine/vibes_auth/emailing/models.py:178 msgid "sent at" msgstr "遅れて" -#: engine/vibes_auth/emailing/models.py:148 +#: engine/vibes_auth/emailing/models.py:115 msgid "when the campaign was actually sent" msgstr "キャンペーンが実際に送信されたとき" -#: engine/vibes_auth/emailing/models.py:153 +#: engine/vibes_auth/emailing/models.py:120 msgid "total recipients" msgstr "総受取人数" -#: engine/vibes_auth/emailing/models.py:157 +#: engine/vibes_auth/emailing/models.py:124 msgid "sent count" msgstr "送信数" -#: engine/vibes_auth/emailing/models.py:161 +#: engine/vibes_auth/emailing/models.py:128 msgid "failed count" msgstr "失敗したカウント" -#: engine/vibes_auth/emailing/models.py:165 +#: engine/vibes_auth/emailing/models.py:132 msgid "opened count" msgstr "開封済みカウント" -#: engine/vibes_auth/emailing/models.py:169 +#: engine/vibes_auth/emailing/models.py:136 msgid "clicked count" msgstr "クリック数" -#: engine/vibes_auth/emailing/models.py:173 +#: engine/vibes_auth/emailing/models.py:140 msgid "email campaign" msgstr "メールキャンペーン" -#: engine/vibes_auth/emailing/models.py:174 +#: engine/vibes_auth/emailing/models.py:141 msgid "email campaigns" msgstr "メールキャンペーン" -#: engine/vibes_auth/emailing/models.py:194 +#: engine/vibes_auth/emailing/models.py:161 msgid "campaign" msgstr "キャンペーン" -#: engine/vibes_auth/emailing/models.py:200 engine/vibes_auth/models.py:146 +#: engine/vibes_auth/emailing/models.py:167 engine/vibes_auth/models.py:183 msgid "user" msgstr "ユーザー" -#: engine/vibes_auth/emailing/models.py:216 +#: engine/vibes_auth/emailing/models.py:183 msgid "opened at" msgstr "開店" -#: engine/vibes_auth/emailing/models.py:221 +#: engine/vibes_auth/emailing/models.py:188 msgid "clicked at" msgstr "クリックされた" -#: engine/vibes_auth/emailing/models.py:227 +#: engine/vibes_auth/emailing/models.py:194 msgid "tracking ID" msgstr "追跡ID" -#: engine/vibes_auth/emailing/models.py:228 +#: engine/vibes_auth/emailing/models.py:195 msgid "unique ID for tracking opens and clicks" msgstr "開封とクリックを追跡するための固有ID" -#: engine/vibes_auth/emailing/models.py:233 +#: engine/vibes_auth/emailing/models.py:200 msgid "error message" msgstr "エラーメッセージ" -#: engine/vibes_auth/emailing/models.py:234 +#: engine/vibes_auth/emailing/models.py:201 msgid "error details if sending failed" msgstr "送信に失敗した場合のエラー詳細" -#: engine/vibes_auth/emailing/models.py:238 +#: engine/vibes_auth/emailing/models.py:205 msgid "campaign recipient" msgstr "キャンペーンの受取人" -#: engine/vibes_auth/emailing/models.py:239 +#: engine/vibes_auth/emailing/models.py:206 msgid "campaign recipients" msgstr "キャンペーンの受信者" @@ -500,73 +597,73 @@ msgstr "このメールは、ニュースレターに登録されたためにお msgid "Unsubscribe" msgstr "配信停止" -#: engine/vibes_auth/emailing/views.py:71 +#: engine/vibes_auth/emailing/views.py:39 msgid "Unsubscribe token is required." msgstr "購読解除トークンが必要です。" -#: engine/vibes_auth/emailing/views.py:79 +#: engine/vibes_auth/emailing/views.py:47 msgid "Invalid unsubscribe token format." msgstr "無効な登録解除トークン形式です。" -#: engine/vibes_auth/emailing/views.py:87 +#: engine/vibes_auth/emailing/views.py:55 msgid "User not found." msgstr "ユーザーが見つかりません。" -#: engine/vibes_auth/emailing/views.py:93 -msgid "You are already unsubscribed." -msgstr "あなたは既に購読を解除されています。" - -#: engine/vibes_auth/emailing/views.py:101 -msgid "You have been successfully unsubscribed from our emails." -msgstr "メール配信の登録解除が完了しました。" - -#: engine/vibes_auth/graphene/mutations.py:46 +#: engine/vibes_auth/graphene/mutations.py:47 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "新規ユーザーを紹介したユーザーのb64エンコードされたuuid。" -#: engine/vibes_auth/graphene/mutations.py:68 +#: engine/vibes_auth/graphene/mutations.py:70 msgid "password too weak" msgstr "パスワードが弱すぎる" -#: engine/vibes_auth/graphene/mutations.py:128 +#: engine/vibes_auth/graphene/mutations.py:130 msgid "malformed email" msgstr "不正な電子メール" -#: engine/vibes_auth/graphene/mutations.py:140 +#: engine/vibes_auth/graphene/mutations.py:142 #: engine/vibes_auth/serializers.py:117 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "電話番号が不正です:{phone_number}!" -#: engine/vibes_auth/graphene/mutations.py:165 +#: engine/vibes_auth/graphene/mutations.py:167 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "無効な属性形式です:{attribute_pair}です!" -#: engine/vibes_auth/graphene/mutations.py:182 +#: engine/vibes_auth/graphene/mutations.py:184 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name}は存在しません:{uuid}が存在しません!" -#: engine/vibes_auth/graphene/mutations.py:304 -#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180 +#: engine/vibes_auth/graphene/mutations.py:309 +#: engine/vibes_auth/viewsets.py:174 engine/vibes_auth/viewsets.py:198 msgid "activation link is invalid!" msgstr "アクティベーションリンクが無効です!" -#: engine/vibes_auth/graphene/mutations.py:307 +#: engine/vibes_auth/graphene/mutations.py:312 msgid "account already activated..." msgstr "アカウントはすでに有効になっています..." -#: engine/vibes_auth/graphene/mutations.py:314 -#: engine/vibes_auth/graphene/mutations.py:376 +#: engine/vibes_auth/graphene/mutations.py:319 +#: engine/vibes_auth/graphene/mutations.py:383 msgid "something went wrong: {e!s}" msgstr "何かが間違っていた:{e!s}" -#: engine/vibes_auth/graphene/mutations.py:358 -#: engine/vibes_auth/viewsets.py:106 +#: engine/vibes_auth/graphene/mutations.py:365 +#: engine/vibes_auth/viewsets.py:109 msgid "token is invalid!" msgstr "トークンが無効です!" +#: engine/vibes_auth/graphene/mutations.py:403 +msgid "only image files are allowed (jpg, png, gif, webp)" +msgstr "画像ファイルのみ許可されます(jpg、png、gif、webp)" + +#: engine/vibes_auth/graphene/mutations.py:406 +msgid "file size must not exceed 5 MB" +msgstr "ファイルサイズは5MBを超えてはなりません" + #: engine/vibes_auth/graphene/object_types.py:46 msgid "" "the products this user has viewed most recently (max 48), in " @@ -574,7 +671,7 @@ msgid "" msgstr "このユーザーが最近閲覧した商品(最大48件)を逆順に表示します。" #: engine/vibes_auth/graphene/object_types.py:49 -#: engine/vibes_auth/models.py:214 +#: engine/vibes_auth/models.py:270 msgid "groups" msgstr "グループ" @@ -583,7 +680,7 @@ msgid "wishlist" msgstr "ウィッシュリスト" #: engine/vibes_auth/graphene/object_types.py:56 -#: engine/vibes_auth/models.py:70 +#: engine/vibes_auth/models.py:75 msgid "avatar" msgstr "アバター" @@ -618,7 +715,7 @@ msgstr "今、オペレーターを探しているところです!" msgid "Assignee must be a staff user." msgstr "担当者はスタッフユーザーでなければなりません。" -#: engine/vibes_auth/models.py:42 +#: engine/vibes_auth/models.py:44 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -631,123 +728,135 @@ msgstr "" "拡張機能のためにカスタマイズされたフィールドとメソッドを持つ User エンティティを表します。このクラスは AbstractUser " "モデルを拡張し、カスタムメールログイン、検証メソッド、購読ステータス、検証、属性保存などの追加機能を統合しています。また、最近閲覧したアイテムを管理するユーティリティや、アカウントを検証するためのトークンベースのアクティベーションも提供します。Userモデルは、ユーザ管理を強化するための特定のユースケースを扱うように設計されています。" -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "email" msgstr "電子メール" -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "user email address" msgstr "ユーザーのメールアドレス" -#: engine/vibes_auth/models.py:55 +#: engine/vibes_auth/models.py:57 msgid "phone_number" msgstr "電話番号" -#: engine/vibes_auth/models.py:60 +#: engine/vibes_auth/models.py:61 msgid "user phone number" msgstr "ユーザー電話番号" -#: engine/vibes_auth/models.py:66 +#: engine/vibes_auth/models.py:68 msgid "first_name" msgstr "名前" -#: engine/vibes_auth/models.py:67 +#: engine/vibes_auth/models.py:71 msgid "last_name" msgstr "姓" -#: engine/vibes_auth/models.py:73 +#: engine/vibes_auth/models.py:78 msgid "user profile image" msgstr "ユーザープロフィール画像" -#: engine/vibes_auth/models.py:78 +#: engine/vibes_auth/models.py:83 msgid "is verified" msgstr "確認済み" -#: engine/vibes_auth/models.py:79 +#: engine/vibes_auth/models.py:84 msgid "user verification status" msgstr "ユーザーの認証状況" -#: engine/vibes_auth/models.py:82 +#: engine/vibes_auth/models.py:87 msgid "is_active" msgstr "アクティブ" -#: engine/vibes_auth/models.py:84 +#: engine/vibes_auth/models.py:89 msgid "unselect this instead of deleting accounts" msgstr "アカウントを削除する代わりに、この選択を解除する" -#: engine/vibes_auth/models.py:87 +#: engine/vibes_auth/models.py:92 msgid "is_subscribed" msgstr "購読中" -#: engine/vibes_auth/models.py:88 +#: engine/vibes_auth/models.py:93 msgid "user's newsletter subscription status" msgstr "ユーザーのニュースレター購読状況" -#: engine/vibes_auth/models.py:92 +#: engine/vibes_auth/models.py:98 msgid "activation token" msgstr "アクティベーション・トークン" -#: engine/vibes_auth/models.py:95 +#: engine/vibes_auth/models.py:103 +msgid "activation token created" +msgstr "アクティベーショントークンが作成されました" + +#: engine/vibes_auth/models.py:107 msgid "unsubscribe token" msgstr "登録解除トークン" -#: engine/vibes_auth/models.py:96 +#: engine/vibes_auth/models.py:108 msgid "token for secure one-click unsubscribe from campaigns" msgstr "キャンペーンからの安全なワンクリック解除用トークン" -#: engine/vibes_auth/models.py:106 +#: engine/vibes_auth/models.py:118 msgid "attributes" msgstr "属性" -#: engine/vibes_auth/models.py:147 +#: engine/vibes_auth/models.py:184 msgid "users" msgstr "ユーザー" -#: engine/vibes_auth/models.py:154 +#: engine/vibes_auth/models.py:202 +msgid "admin OTP code" +msgstr "管理者用ワンタイムパスワードコード" + +#: engine/vibes_auth/models.py:203 +msgid "admin OTP codes" +msgstr "管理者用ワンタイムパスワードコード" + +#: engine/vibes_auth/models.py:210 msgid "For anonymous threads" msgstr "匿名スレッドの場合" -#: engine/vibes_auth/models.py:178 +#: engine/vibes_auth/models.py:234 msgid "Chat thread" msgstr "チャットスレッド" -#: engine/vibes_auth/models.py:179 +#: engine/vibes_auth/models.py:235 msgid "Chat threads" msgstr "チャットスレッド" -#: engine/vibes_auth/models.py:185 +#: engine/vibes_auth/models.py:241 msgid "provide user or email for anonymous thread." msgstr "匿名スレッドの場合は、ユーザーまたは電子メールを入力してください。" -#: engine/vibes_auth/models.py:188 +#: engine/vibes_auth/models.py:244 msgid "assignee must be a staff user." msgstr "担当者はスタッフユーザーでなければならない。" -#: engine/vibes_auth/models.py:206 +#: engine/vibes_auth/models.py:262 msgid "Chat message" msgstr "チャットメッセージ" -#: engine/vibes_auth/models.py:207 +#: engine/vibes_auth/models.py:263 msgid "Chat messages" msgstr "チャットメッセージ" -#: engine/vibes_auth/models.py:213 +#: engine/vibes_auth/models.py:269 msgid "group" msgstr "グループ" -#: engine/vibes_auth/models.py:220 +#: engine/vibes_auth/models.py:276 msgid "outstanding token" msgstr "卓越したトークン" -#: engine/vibes_auth/models.py:221 +#: engine/vibes_auth/models.py:277 msgid "outstanding tokens" msgstr "トークン残高" -#: engine/vibes_auth/models.py:227 +#: engine/vibes_auth/models.py:283 msgid "blacklisted token" msgstr "ブラックリストトークン" -#: engine/vibes_auth/models.py:228 +#: engine/vibes_auth/models.py:284 msgid "blacklisted tokens" msgstr "ブラックリストに載ったトークン" @@ -789,6 +898,10 @@ msgstr "トークンにユーザー uuid クレームが存在しない" msgid "user does not exist" msgstr "ユーザーが存在しない" +#: engine/vibes_auth/templates/admin/verify_otp.html:27 +msgid "Verify" +msgstr "確認する" + #: engine/vibes_auth/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "パスワードのリセット" @@ -870,12 +983,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "よろしくお願いします、
%(project_name)sチーム" -#: engine/vibes_auth/utils/emailing.py:24 +#: engine/vibes_auth/utils/emailing.py:27 #, python-brace-format msgid "{settings.PROJECT_NAME} | Activate Account" msgstr "{settings.PROJECT_NAME}| アカウントの有効化| アカウントの有効化" -#: engine/vibes_auth/utils/emailing.py:63 +#: engine/vibes_auth/utils/emailing.py:66 #, python-brace-format msgid "{settings.PROJECT_NAME} | Reset Password" msgstr "{settings.PROJECT_NAME}| パスワードのリセット" @@ -919,7 +1032,7 @@ msgstr "特定のシリアライズと検証ロジックを使用して JSON ウ msgid "the token is invalid" msgstr "トークンが無効" -#: engine/vibes_auth/viewsets.py:44 +#: engine/vibes_auth/viewsets.py:47 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." @@ -927,10 +1040,16 @@ msgstr "" "ユーザービューセットの実装。\n" "作成、取得、更新、削除、およびパスワードリセット、アバターアップロード、アカウントの有効化、最近見たアイテムのマージなどのカスタムアクションなど、ユーザ関連のデータを管理するアクションのセットを提供します。このクラスは、堅牢なAPIハンドリングのためにミキシンとGenericViewSetを拡張します。" -#: engine/vibes_auth/viewsets.py:113 +#: engine/vibes_auth/viewsets.py:116 msgid "password reset successfully" msgstr "パスワードのリセットに成功しました!" -#: engine/vibes_auth/viewsets.py:161 +#: engine/vibes_auth/viewsets.py:146 +msgid "" +"Account already registered but not yet activated. A new activation email has" +" been sent." +msgstr "アカウントは登録済みですが、まだ有効化されていません。新しい有効化メールが送信されました。" + +#: engine/vibes_auth/viewsets.py:179 msgid "account already activated!" msgstr "あなたはすでにアカウントを有効にしています..." diff --git a/engine/vibes_auth/locale/kk_KZ/LC_MESSAGES/django.po b/engine/vibes_auth/locale/kk_KZ/LC_MESSAGES/django.po index bff3415f..d0f08ea1 100644 --- a/engine/vibes_auth/locale/kk_KZ/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/kk_KZ/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 03:06+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -12,32 +12,32 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: engine/vibes_auth/admin.py:65 engine/vibes_auth/admin.py:66 +#: engine/vibes_auth/admin.py:64 engine/vibes_auth/admin.py:65 #: engine/vibes_auth/graphene/object_types.py:54 msgid "balance" msgstr "" -#: engine/vibes_auth/admin.py:74 +#: engine/vibes_auth/admin.py:73 msgid "order" msgstr "" -#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:51 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:51 msgid "orders" msgstr "" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:84 msgid "personal info" msgstr "" -#: engine/vibes_auth/admin.py:89 engine/vibes_auth/graphene/object_types.py:50 +#: engine/vibes_auth/admin.py:88 engine/vibes_auth/graphene/object_types.py:50 msgid "permissions" msgstr "" -#: engine/vibes_auth/admin.py:102 +#: engine/vibes_auth/admin.py:101 msgid "important dates" msgstr "" -#: engine/vibes_auth/admin.py:103 +#: engine/vibes_auth/admin.py:102 msgid "additional info" msgstr "" @@ -53,79 +53,83 @@ msgstr "" msgid "Open selected threads" msgstr "" -#: engine/vibes_auth/admin.py:208 -msgid "Preview" -msgstr "" - -#: engine/vibes_auth/admin.py:209 engine/vibes_auth/admin.py:249 -#: engine/vibes_auth/admin.py:326 -msgid "Metadata" -msgstr "" - -#: engine/vibes_auth/admin.py:212 -msgid "preview" -msgstr "" - -#: engine/vibes_auth/admin.py:221 -msgid "image preview" -msgstr "" - -#: engine/vibes_auth/admin.py:241 +#: engine/vibes_auth/admin.py:209 msgid "Content" msgstr "" -#: engine/vibes_auth/admin.py:243 +#: engine/vibes_auth/admin.py:211 msgid "Documentation" msgstr "" -#: engine/vibes_auth/admin.py:313 +#: engine/vibes_auth/admin.py:217 engine/vibes_auth/admin.py:294 +msgid "Metadata" +msgstr "" + +#: engine/vibes_auth/admin.py:281 msgid "Scheduling" msgstr "" -#: engine/vibes_auth/admin.py:315 +#: engine/vibes_auth/admin.py:283 msgid "Statistics" msgstr "" -#: engine/vibes_auth/admin.py:329 +#: engine/vibes_auth/admin.py:297 msgid "stats" msgstr "" -#: engine/vibes_auth/admin.py:335 +#: engine/vibes_auth/admin.py:303 msgid "Prepare recipients (subscribed users)" msgstr "" -#: engine/vibes_auth/admin.py:343 +#: engine/vibes_auth/admin.py:311 msgid "Campaign '{}' is not in draft status." msgstr "" -#: engine/vibes_auth/admin.py:350 +#: engine/vibes_auth/admin.py:318 msgid "Preparing recipients for campaign '{}'." msgstr "" -#: engine/vibes_auth/admin.py:354 +#: engine/vibes_auth/admin.py:322 msgid "Send campaign now" msgstr "" -#: engine/vibes_auth/admin.py:362 +#: engine/vibes_auth/admin.py:330 msgid "Campaign '{}' cannot be sent (status: {})." msgstr "" -#: engine/vibes_auth/admin.py:372 +#: engine/vibes_auth/admin.py:340 msgid "Campaign '{}' has no recipients. Prepare recipients first." msgstr "" -#: engine/vibes_auth/admin.py:383 +#: engine/vibes_auth/admin.py:351 msgid "Started sending campaign '{}'." msgstr "" -#: engine/vibes_auth/admin.py:387 +#: engine/vibes_auth/admin.py:355 msgid "Cancel campaign" msgstr "" -#: engine/vibes_auth/admin.py:396 +#: engine/vibes_auth/admin.py:364 msgid "{} campaign(s) cancelled." msgstr "" +#: engine/vibes_auth/admin_site.py:24 +msgid "Verification code" +msgstr "" + +#: engine/vibes_auth/admin_site.py:62 +msgid "A verification code has been sent to your email." +msgstr "" + +#: engine/vibes_auth/admin_site.py:118 +msgid "Invalid or expired code. Please try again." +msgstr "" + +#: engine/vibes_auth/admin_site.py:124 +#: engine/vibes_auth/templates/admin/verify_otp.html:10 +msgid "Two-factor authentication" +msgstr "" + #: engine/vibes_auth/apps.py:8 msgid "Accounting" msgstr "" @@ -150,6 +154,131 @@ msgstr "" msgid "System" msgstr "" +#: engine/vibes_auth/docs/drf/emailing.py:18 +msgid "" +"UUID token for unsubscribing. This token is unique per user and is included " +"in the unsubscribe link of every campaign email. The token remains constant " +"for each user unless regenerated." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:37 +#: engine/vibes_auth/emailing/views.py:69 +msgid "You have been successfully unsubscribed from our emails." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:45 +#: engine/vibes_auth/emailing/views.py:61 +msgid "You are already unsubscribed." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:52 +msgid "Unsubscribe from email campaigns" +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:54 +msgid "" +"Unsubscribe a user from all marketing email campaigns using their unique " +"unsubscribe token.\n" +"\n" +"This endpoint is designed for email client compatibility where clicking a " +"link triggers a GET request. The user will no longer receive promotional " +"emails after successful unsubscription.\n" +"\n" +"**Note:** Transactional emails (order confirmations, password resets, etc.) " +"are not affected by this setting." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:66 +#: engine/vibes_auth/docs/drf/emailing.py:146 +msgid "Successfully unsubscribed from email campaigns." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:82 +#: engine/vibes_auth/docs/drf/emailing.py:162 +msgid "Invalid or missing unsubscribe token." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:96 +#: engine/vibes_auth/docs/drf/emailing.py:176 +msgid "User associated with the token was not found." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:118 +msgid "One-Click Unsubscribe (RFC 8058)" +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:120 +msgid "" +"RFC 8058 compliant one-click unsubscribe endpoint for email campaigns.\n" +"\n" +"This endpoint supports the List-Unsubscribe-Post header mechanism defined in " +"RFC 8058, which allows email clients to unsubscribe users with a single " +"click without leaving the email application.\n" +"\n" +"The token can be provided either as a query parameter or in the request " +"body.\n" +"\n" +"**Standards Compliance:**\n" +"- RFC 8058: Signaling One-Click Functionality for List Email Headers\n" +"- RFC 2369: The Use of URLs as Meta-Syntax for Core Mail List Commands\n" +"\n" +"**Note:** Transactional emails are not affected by this setting." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:137 +msgid "" +"Unsubscribe token (alternative to query parameter). Can be omitted if token " +"is provided in URL." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:200 +msgid "Track email open event" +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:202 +msgid "" +"Records when a campaign email is opened by the recipient.\n" +"\n" +"This endpoint is called automatically when the tracking pixel (1x1 " +"transparent GIF) embedded in the email is loaded by the recipient's email " +"client.\n" +"\n" +"**How it works:**\n" +"1. Each campaign email contains a unique tracking pixel URL with a `tid` " +"parameter\n" +"2. When the email is opened and images are loaded, this endpoint is called\n" +"3. The recipient's status is updated to 'opened' and the timestamp is " +"recorded\n" +"4. The campaign's aggregate opened count is updated\n" +"\n" +"**Privacy considerations:**\n" +"- Only the first open is recorded (subsequent opens are ignored)\n" +"- No personal information beyond the tracking ID is logged\n" +"- Users who disable image loading will not trigger this event\n" +"\n" +"**Response:**\n" +"Returns a 1x1 transparent GIF image regardless of whether tracking " +"succeeded, to ensure consistent behavior and prevent information leakage." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:223 +msgid "" +"Tracking ID (UUID) unique to each campaign-recipient combination. This ID " +"links the open event to a specific recipient and campaign." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:241 +msgid "" +"1x1 transparent GIF image. Always returned regardless of tracking status to " +"maintain consistent behavior." +msgstr "" + +#: engine/vibes_auth/docs/drf/emailing.py:247 +msgid "" +"Returned when no tracking ID is provided. Note: Invalid tracking IDs still " +"return 200 with the GIF to prevent enumeration attacks." +msgstr "" + #: engine/vibes_auth/docs/drf/messaging.py:17 msgid "User messages entrypoint" msgstr "" @@ -239,9 +368,9 @@ msgid "confirm a user's password reset" msgstr "" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:351 +#: engine/vibes_auth/graphene/mutations.py:358 #: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107 -#: engine/vibes_auth/viewsets.py:94 +#: engine/vibes_auth/viewsets.py:97 msgid "passwords do not match" msgstr "" @@ -294,193 +423,164 @@ msgstr "" msgid "Clicked" msgstr "" -#: engine/vibes_auth/emailing/models.py:35 -#: engine/vibes_auth/emailing/models.py:71 -#: engine/vibes_auth/emailing/models.py:121 +#: engine/vibes_auth/emailing/models.py:38 +#: engine/vibes_auth/emailing/models.py:88 msgid "name" msgstr "" -#: engine/vibes_auth/emailing/models.py:36 -msgid "descriptive name for the image" -msgstr "" - -#: engine/vibes_auth/emailing/models.py:40 -msgid "image" -msgstr "" - -#: engine/vibes_auth/emailing/models.py:41 -msgid "image file to use in email templates" -msgstr "" - -#: engine/vibes_auth/emailing/models.py:47 -msgid "alt text" -msgstr "" - -#: engine/vibes_auth/emailing/models.py:48 -msgid "alternative text for accessibility" -msgstr "" - -#: engine/vibes_auth/emailing/models.py:52 -msgid "email image" -msgstr "" - -#: engine/vibes_auth/emailing/models.py:53 -msgid "email images" -msgstr "" - -#: engine/vibes_auth/emailing/models.py:72 +#: engine/vibes_auth/emailing/models.py:39 msgid "internal name for the template" msgstr "" -#: engine/vibes_auth/emailing/models.py:76 +#: engine/vibes_auth/emailing/models.py:43 msgid "slug" msgstr "" -#: engine/vibes_auth/emailing/models.py:77 +#: engine/vibes_auth/emailing/models.py:44 msgid "unique identifier for the template" msgstr "" -#: engine/vibes_auth/emailing/models.py:81 +#: engine/vibes_auth/emailing/models.py:48 msgid "subject" msgstr "" -#: engine/vibes_auth/emailing/models.py:82 +#: engine/vibes_auth/emailing/models.py:49 msgid "email subject line - supports {{ variables }}" msgstr "" -#: engine/vibes_auth/emailing/models.py:85 -msgid "HTML content" +#: engine/vibes_auth/emailing/models.py:52 +msgid "content" msgstr "" -#: engine/vibes_auth/emailing/models.py:87 +#: engine/vibes_auth/emailing/models.py:54 msgid "" -"email body content - supports {{ user.first_name }}, {{ user.email }}, " +"email body in markdown - supports {{ user.first_name }}, {{ user.email }}, " "{{ project_name }}, {{ unsubscribe_url }}" msgstr "" -#: engine/vibes_auth/emailing/models.py:94 +#: engine/vibes_auth/emailing/models.py:61 msgid "plain text content" msgstr "" -#: engine/vibes_auth/emailing/models.py:95 +#: engine/vibes_auth/emailing/models.py:62 msgid "plain text fallback (auto-generated if empty)" msgstr "" -#: engine/vibes_auth/emailing/models.py:100 +#: engine/vibes_auth/emailing/models.py:67 msgid "available variables" msgstr "" -#: engine/vibes_auth/emailing/models.py:101 +#: engine/vibes_auth/emailing/models.py:68 msgid "documentation of available template variables" msgstr "" -#: engine/vibes_auth/emailing/models.py:105 +#: engine/vibes_auth/emailing/models.py:72 msgid "email template" msgstr "" -#: engine/vibes_auth/emailing/models.py:106 +#: engine/vibes_auth/emailing/models.py:73 msgid "email templates" msgstr "" -#: engine/vibes_auth/emailing/models.py:122 +#: engine/vibes_auth/emailing/models.py:89 msgid "internal name for the campaign" msgstr "" -#: engine/vibes_auth/emailing/models.py:129 +#: engine/vibes_auth/emailing/models.py:96 msgid "template" msgstr "" -#: engine/vibes_auth/emailing/models.py:130 +#: engine/vibes_auth/emailing/models.py:97 msgid "email template to use for this campaign" msgstr "" -#: engine/vibes_auth/emailing/models.py:136 -#: engine/vibes_auth/emailing/models.py:206 +#: engine/vibes_auth/emailing/models.py:103 +#: engine/vibes_auth/emailing/models.py:173 msgid "status" msgstr "" -#: engine/vibes_auth/emailing/models.py:141 +#: engine/vibes_auth/emailing/models.py:108 msgid "scheduled at" msgstr "" -#: engine/vibes_auth/emailing/models.py:142 +#: engine/vibes_auth/emailing/models.py:109 msgid "when to send the campaign (leave empty for manual send)" msgstr "" -#: engine/vibes_auth/emailing/models.py:147 -#: engine/vibes_auth/emailing/models.py:211 +#: engine/vibes_auth/emailing/models.py:114 +#: engine/vibes_auth/emailing/models.py:178 msgid "sent at" msgstr "" -#: engine/vibes_auth/emailing/models.py:148 +#: engine/vibes_auth/emailing/models.py:115 msgid "when the campaign was actually sent" msgstr "" -#: engine/vibes_auth/emailing/models.py:153 +#: engine/vibes_auth/emailing/models.py:120 msgid "total recipients" msgstr "" -#: engine/vibes_auth/emailing/models.py:157 +#: engine/vibes_auth/emailing/models.py:124 msgid "sent count" msgstr "" -#: engine/vibes_auth/emailing/models.py:161 +#: engine/vibes_auth/emailing/models.py:128 msgid "failed count" msgstr "" -#: engine/vibes_auth/emailing/models.py:165 +#: engine/vibes_auth/emailing/models.py:132 msgid "opened count" msgstr "" -#: engine/vibes_auth/emailing/models.py:169 +#: engine/vibes_auth/emailing/models.py:136 msgid "clicked count" msgstr "" -#: engine/vibes_auth/emailing/models.py:173 +#: engine/vibes_auth/emailing/models.py:140 msgid "email campaign" msgstr "" -#: engine/vibes_auth/emailing/models.py:174 +#: engine/vibes_auth/emailing/models.py:141 msgid "email campaigns" msgstr "" -#: engine/vibes_auth/emailing/models.py:194 +#: engine/vibes_auth/emailing/models.py:161 msgid "campaign" msgstr "" -#: engine/vibes_auth/emailing/models.py:200 engine/vibes_auth/models.py:146 +#: engine/vibes_auth/emailing/models.py:167 engine/vibes_auth/models.py:183 msgid "user" msgstr "" -#: engine/vibes_auth/emailing/models.py:216 +#: engine/vibes_auth/emailing/models.py:183 msgid "opened at" msgstr "" -#: engine/vibes_auth/emailing/models.py:221 +#: engine/vibes_auth/emailing/models.py:188 msgid "clicked at" msgstr "" -#: engine/vibes_auth/emailing/models.py:227 +#: engine/vibes_auth/emailing/models.py:194 msgid "tracking ID" msgstr "" -#: engine/vibes_auth/emailing/models.py:228 +#: engine/vibes_auth/emailing/models.py:195 msgid "unique ID for tracking opens and clicks" msgstr "" -#: engine/vibes_auth/emailing/models.py:233 +#: engine/vibes_auth/emailing/models.py:200 msgid "error message" msgstr "" -#: engine/vibes_auth/emailing/models.py:234 +#: engine/vibes_auth/emailing/models.py:201 msgid "error details if sending failed" msgstr "" -#: engine/vibes_auth/emailing/models.py:238 +#: engine/vibes_auth/emailing/models.py:205 msgid "campaign recipient" msgstr "" -#: engine/vibes_auth/emailing/models.py:239 +#: engine/vibes_auth/emailing/models.py:206 msgid "campaign recipients" msgstr "" @@ -496,73 +596,73 @@ msgstr "" msgid "Unsubscribe" msgstr "" -#: engine/vibes_auth/emailing/views.py:71 +#: engine/vibes_auth/emailing/views.py:39 msgid "Unsubscribe token is required." msgstr "" -#: engine/vibes_auth/emailing/views.py:79 +#: engine/vibes_auth/emailing/views.py:47 msgid "Invalid unsubscribe token format." msgstr "" -#: engine/vibes_auth/emailing/views.py:87 +#: engine/vibes_auth/emailing/views.py:55 msgid "User not found." msgstr "" -#: engine/vibes_auth/emailing/views.py:93 -msgid "You are already unsubscribed." -msgstr "" - -#: engine/vibes_auth/emailing/views.py:101 -msgid "You have been successfully unsubscribed from our emails." -msgstr "" - -#: engine/vibes_auth/graphene/mutations.py:46 +#: engine/vibes_auth/graphene/mutations.py:47 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" -#: engine/vibes_auth/graphene/mutations.py:68 +#: engine/vibes_auth/graphene/mutations.py:70 msgid "password too weak" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:128 +#: engine/vibes_auth/graphene/mutations.py:130 msgid "malformed email" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:140 +#: engine/vibes_auth/graphene/mutations.py:142 #: engine/vibes_auth/serializers.py:117 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:165 +#: engine/vibes_auth/graphene/mutations.py:167 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:182 +#: engine/vibes_auth/graphene/mutations.py:184 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:304 -#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180 +#: engine/vibes_auth/graphene/mutations.py:309 +#: engine/vibes_auth/viewsets.py:174 engine/vibes_auth/viewsets.py:198 msgid "activation link is invalid!" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:307 +#: engine/vibes_auth/graphene/mutations.py:312 msgid "account already activated..." msgstr "" -#: engine/vibes_auth/graphene/mutations.py:314 -#: engine/vibes_auth/graphene/mutations.py:376 +#: engine/vibes_auth/graphene/mutations.py:319 +#: engine/vibes_auth/graphene/mutations.py:383 msgid "something went wrong: {e!s}" msgstr "" -#: engine/vibes_auth/graphene/mutations.py:358 -#: engine/vibes_auth/viewsets.py:106 +#: engine/vibes_auth/graphene/mutations.py:365 +#: engine/vibes_auth/viewsets.py:109 msgid "token is invalid!" msgstr "" +#: engine/vibes_auth/graphene/mutations.py:403 +msgid "only image files are allowed (jpg, png, gif, webp)" +msgstr "" + +#: engine/vibes_auth/graphene/mutations.py:406 +msgid "file size must not exceed 5 MB" +msgstr "" + #: engine/vibes_auth/graphene/object_types.py:46 msgid "" "the products this user has viewed most recently (max 48), in reverse‐" @@ -570,7 +670,7 @@ msgid "" msgstr "" #: engine/vibes_auth/graphene/object_types.py:49 -#: engine/vibes_auth/models.py:214 +#: engine/vibes_auth/models.py:270 msgid "groups" msgstr "" @@ -578,7 +678,7 @@ msgstr "" msgid "wishlist" msgstr "" -#: engine/vibes_auth/graphene/object_types.py:56 engine/vibes_auth/models.py:70 +#: engine/vibes_auth/graphene/object_types.py:56 engine/vibes_auth/models.py:75 msgid "avatar" msgstr "" @@ -613,7 +713,7 @@ msgstr "" msgid "Assignee must be a staff user." msgstr "" -#: engine/vibes_auth/models.py:42 +#: engine/vibes_auth/models.py:44 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -624,123 +724,135 @@ msgid "" "for enhanced user management." msgstr "" -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "email" msgstr "" -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "user email address" msgstr "" -#: engine/vibes_auth/models.py:55 +#: engine/vibes_auth/models.py:57 msgid "phone_number" msgstr "" -#: engine/vibes_auth/models.py:60 +#: engine/vibes_auth/models.py:61 msgid "user phone number" msgstr "" -#: engine/vibes_auth/models.py:66 +#: engine/vibes_auth/models.py:68 msgid "first_name" msgstr "" -#: engine/vibes_auth/models.py:67 +#: engine/vibes_auth/models.py:71 msgid "last_name" msgstr "" -#: engine/vibes_auth/models.py:73 +#: engine/vibes_auth/models.py:78 msgid "user profile image" msgstr "" -#: engine/vibes_auth/models.py:78 +#: engine/vibes_auth/models.py:83 msgid "is verified" msgstr "" -#: engine/vibes_auth/models.py:79 +#: engine/vibes_auth/models.py:84 msgid "user verification status" msgstr "" -#: engine/vibes_auth/models.py:82 +#: engine/vibes_auth/models.py:87 msgid "is_active" msgstr "" -#: engine/vibes_auth/models.py:84 +#: engine/vibes_auth/models.py:89 msgid "unselect this instead of deleting accounts" msgstr "" -#: engine/vibes_auth/models.py:87 +#: engine/vibes_auth/models.py:92 msgid "is_subscribed" msgstr "" -#: engine/vibes_auth/models.py:88 +#: engine/vibes_auth/models.py:93 msgid "user's newsletter subscription status" msgstr "" -#: engine/vibes_auth/models.py:92 +#: engine/vibes_auth/models.py:98 msgid "activation token" msgstr "" -#: engine/vibes_auth/models.py:95 +#: engine/vibes_auth/models.py:103 +msgid "activation token created" +msgstr "" + +#: engine/vibes_auth/models.py:107 msgid "unsubscribe token" msgstr "" -#: engine/vibes_auth/models.py:96 +#: engine/vibes_auth/models.py:108 msgid "token for secure one-click unsubscribe from campaigns" msgstr "" -#: engine/vibes_auth/models.py:106 +#: engine/vibes_auth/models.py:118 msgid "attributes" msgstr "" -#: engine/vibes_auth/models.py:147 +#: engine/vibes_auth/models.py:184 msgid "users" msgstr "" -#: engine/vibes_auth/models.py:154 +#: engine/vibes_auth/models.py:202 +msgid "admin OTP code" +msgstr "" + +#: engine/vibes_auth/models.py:203 +msgid "admin OTP codes" +msgstr "" + +#: engine/vibes_auth/models.py:210 msgid "For anonymous threads" msgstr "" -#: engine/vibes_auth/models.py:178 +#: engine/vibes_auth/models.py:234 msgid "Chat thread" msgstr "" -#: engine/vibes_auth/models.py:179 +#: engine/vibes_auth/models.py:235 msgid "Chat threads" msgstr "" -#: engine/vibes_auth/models.py:185 +#: engine/vibes_auth/models.py:241 msgid "provide user or email for anonymous thread." msgstr "" -#: engine/vibes_auth/models.py:188 +#: engine/vibes_auth/models.py:244 msgid "assignee must be a staff user." msgstr "" -#: engine/vibes_auth/models.py:206 +#: engine/vibes_auth/models.py:262 msgid "Chat message" msgstr "" -#: engine/vibes_auth/models.py:207 +#: engine/vibes_auth/models.py:263 msgid "Chat messages" msgstr "" -#: engine/vibes_auth/models.py:213 +#: engine/vibes_auth/models.py:269 msgid "group" msgstr "" -#: engine/vibes_auth/models.py:220 +#: engine/vibes_auth/models.py:276 msgid "outstanding token" msgstr "" -#: engine/vibes_auth/models.py:221 +#: engine/vibes_auth/models.py:277 msgid "outstanding tokens" msgstr "" -#: engine/vibes_auth/models.py:227 +#: engine/vibes_auth/models.py:283 msgid "blacklisted token" msgstr "" -#: engine/vibes_auth/models.py:228 +#: engine/vibes_auth/models.py:284 msgid "blacklisted tokens" msgstr "" @@ -782,6 +894,10 @@ msgstr "" msgid "user does not exist" msgstr "" +#: engine/vibes_auth/templates/admin/verify_otp.html:27 +msgid "Verify" +msgstr "" + #: engine/vibes_auth/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "" @@ -858,12 +974,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "" -#: engine/vibes_auth/utils/emailing.py:24 +#: engine/vibes_auth/utils/emailing.py:27 #, python-brace-format msgid "{settings.PROJECT_NAME} | Activate Account" msgstr "" -#: engine/vibes_auth/utils/emailing.py:63 +#: engine/vibes_auth/utils/emailing.py:66 #, python-brace-format msgid "{settings.PROJECT_NAME} | Reset Password" msgstr "" @@ -902,7 +1018,7 @@ msgstr "" msgid "the token is invalid" msgstr "" -#: engine/vibes_auth/viewsets.py:44 +#: engine/vibes_auth/viewsets.py:47 msgid "" "User view set implementation.\n" "Provides a set of actions that manage user-related data such as creation, " @@ -911,10 +1027,16 @@ msgid "" "class extends the mixins and GenericViewSet for robust API handling." msgstr "" -#: engine/vibes_auth/viewsets.py:113 +#: engine/vibes_auth/viewsets.py:116 msgid "password reset successfully" msgstr "" -#: engine/vibes_auth/viewsets.py:161 +#: engine/vibes_auth/viewsets.py:146 +msgid "" +"Account already registered but not yet activated. A new activation email has " +"been sent." +msgstr "" + +#: engine/vibes_auth/viewsets.py:179 msgid "account already activated!" msgstr "" diff --git a/engine/vibes_auth/locale/ko_KR/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/ko_KR/LC_MESSAGES/django.mo index c6cbcf53..bd4acfbc 100644 Binary files a/engine/vibes_auth/locale/ko_KR/LC_MESSAGES/django.mo and b/engine/vibes_auth/locale/ko_KR/LC_MESSAGES/django.mo differ diff --git a/engine/vibes_auth/locale/ko_KR/LC_MESSAGES/django.po b/engine/vibes_auth/locale/ko_KR/LC_MESSAGES/django.po index ac457079..e96c4bfb 100644 --- a/engine/vibes_auth/locale/ko_KR/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/ko_KR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 03:06+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,32 +13,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:65 engine/vibes_auth/admin.py:66 +#: engine/vibes_auth/admin.py:64 engine/vibes_auth/admin.py:65 #: engine/vibes_auth/graphene/object_types.py:54 msgid "balance" msgstr "잔액" -#: engine/vibes_auth/admin.py:74 +#: engine/vibes_auth/admin.py:73 msgid "order" msgstr "주문" -#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:51 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:51 msgid "orders" msgstr "주문" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:84 msgid "personal info" msgstr "개인 정보" -#: engine/vibes_auth/admin.py:89 engine/vibes_auth/graphene/object_types.py:50 +#: engine/vibes_auth/admin.py:88 engine/vibes_auth/graphene/object_types.py:50 msgid "permissions" msgstr "권한" -#: engine/vibes_auth/admin.py:102 +#: engine/vibes_auth/admin.py:101 msgid "important dates" msgstr "중요한 날짜" -#: engine/vibes_auth/admin.py:103 +#: engine/vibes_auth/admin.py:102 msgid "additional info" msgstr "추가 정보" @@ -54,79 +54,83 @@ msgstr "선택한 스레드 닫기" msgid "Open selected threads" msgstr "선택한 스레드 열기" -#: engine/vibes_auth/admin.py:208 -msgid "Preview" -msgstr "미리 보기" - -#: engine/vibes_auth/admin.py:209 engine/vibes_auth/admin.py:249 -#: engine/vibes_auth/admin.py:326 -msgid "Metadata" -msgstr "메타데이터" - -#: engine/vibes_auth/admin.py:212 -msgid "preview" -msgstr "미리보기" - -#: engine/vibes_auth/admin.py:221 -msgid "image preview" -msgstr "이미지 미리보기" - -#: engine/vibes_auth/admin.py:241 +#: engine/vibes_auth/admin.py:209 msgid "Content" msgstr "콘텐츠" -#: engine/vibes_auth/admin.py:243 +#: engine/vibes_auth/admin.py:211 msgid "Documentation" msgstr "문서화" -#: engine/vibes_auth/admin.py:313 +#: engine/vibes_auth/admin.py:217 engine/vibes_auth/admin.py:294 +msgid "Metadata" +msgstr "메타데이터" + +#: engine/vibes_auth/admin.py:281 msgid "Scheduling" msgstr "일정 관리" -#: engine/vibes_auth/admin.py:315 +#: engine/vibes_auth/admin.py:283 msgid "Statistics" msgstr "통계" -#: engine/vibes_auth/admin.py:329 +#: engine/vibes_auth/admin.py:297 msgid "stats" msgstr "국가" -#: engine/vibes_auth/admin.py:335 +#: engine/vibes_auth/admin.py:303 msgid "Prepare recipients (subscribed users)" msgstr "수신자(구독자) 준비" -#: engine/vibes_auth/admin.py:343 +#: engine/vibes_auth/admin.py:311 msgid "Campaign '{}' is not in draft status." msgstr "캠페인 '{}'은 초안 상태가 아닙니다." -#: engine/vibes_auth/admin.py:350 +#: engine/vibes_auth/admin.py:318 msgid "Preparing recipients for campaign '{}'." msgstr "캠페인 '{}'의 수신자 준비 중" -#: engine/vibes_auth/admin.py:354 +#: engine/vibes_auth/admin.py:322 msgid "Send campaign now" msgstr "캠페인 지금 보내기" -#: engine/vibes_auth/admin.py:362 +#: engine/vibes_auth/admin.py:330 msgid "Campaign '{}' cannot be sent (status: {})." msgstr "캠페인 '{}'을(를) 보낼 수 없습니다 (상태: {})." -#: engine/vibes_auth/admin.py:372 +#: engine/vibes_auth/admin.py:340 msgid "Campaign '{}' has no recipients. Prepare recipients first." msgstr "캠페인 '{}'에는 수신자가 없습니다. 먼저 수신자를 준비하십시오." -#: engine/vibes_auth/admin.py:383 +#: engine/vibes_auth/admin.py:351 msgid "Started sending campaign '{}'." msgstr "캠페인 '{}' 발송 시작." -#: engine/vibes_auth/admin.py:387 +#: engine/vibes_auth/admin.py:355 msgid "Cancel campaign" msgstr "캠페인 취소" -#: engine/vibes_auth/admin.py:396 +#: engine/vibes_auth/admin.py:364 msgid "{} campaign(s) cancelled." msgstr "{} 캠페인(들)이 취소되었습니다." +#: engine/vibes_auth/admin_site.py:24 +msgid "Verification code" +msgstr "인증 코드" + +#: engine/vibes_auth/admin_site.py:62 +msgid "A verification code has been sent to your email." +msgstr "인증 코드가 귀하의 이메일로 발송되었습니다." + +#: engine/vibes_auth/admin_site.py:118 +msgid "Invalid or expired code. Please try again." +msgstr "무효하거나 만료된 코드입니다. 다시 시도해 주세요." + +#: engine/vibes_auth/admin_site.py:124 +#: engine/vibes_auth/templates/admin/verify_otp.html:10 +msgid "Two-factor authentication" +msgstr "2단계 인증" + #: engine/vibes_auth/apps.py:8 msgid "Accounting" msgstr "회계" @@ -151,6 +155,132 @@ msgstr "직원" msgid "System" msgstr "시스템" +#: engine/vibes_auth/docs/drf/emailing.py:18 +msgid "" +"UUID token for unsubscribing. This token is unique per user and is included " +"in the unsubscribe link of every campaign email. The token remains constant " +"for each user unless regenerated." +msgstr "" +"구독 취소용 UUID 토큰. 이 토큰은 사용자별로 고유하며 모든 캠페인 이메일의 구독 취소 링크에 포함됩니다. 토큰은 재생성되지 않는 한" +" 각 사용자에게 동일하게 유지됩니다." + +#: engine/vibes_auth/docs/drf/emailing.py:37 +#: engine/vibes_auth/emailing/views.py:69 +msgid "You have been successfully unsubscribed from our emails." +msgstr "당사 이메일 수신 거부 요청이 성공적으로 처리되었습니다." + +#: engine/vibes_auth/docs/drf/emailing.py:45 +#: engine/vibes_auth/emailing/views.py:61 +msgid "You are already unsubscribed." +msgstr "이미 구독이 취소되었습니다." + +#: engine/vibes_auth/docs/drf/emailing.py:52 +msgid "Unsubscribe from email campaigns" +msgstr "이메일 캠페인 수신 거부하기" + +#: engine/vibes_auth/docs/drf/emailing.py:54 +msgid "" +"Unsubscribe a user from all marketing email campaigns using their unique unsubscribe token.\n" +"\n" +"This endpoint is designed for email client compatibility where clicking a link triggers a GET request. The user will no longer receive promotional emails after successful unsubscription.\n" +"\n" +"**Note:** Transactional emails (order confirmations, password resets, etc.) are not affected by this setting." +msgstr "" +"사용자의 고유 수신 거부 토큰을 사용하여 모든 마케팅 이메일 캠페인에서 사용자를 수신 거부합니다. 이 엔드포인트는 링크 클릭 시 GET " +"요청이 트리거되는 이메일 클라이언트 호환성을 위해 설계되었습니다. 수신 거부가 성공적으로 완료되면 사용자는 더 이상 프로모션 이메일을 " +"수신하지 않습니다. **참고:** 거래 관련 이메일(주문 확인, 비밀번호 재설정 등)은 이 설정에 영향을 받지 않습니다." + +#: engine/vibes_auth/docs/drf/emailing.py:66 +#: engine/vibes_auth/docs/drf/emailing.py:146 +msgid "Successfully unsubscribed from email campaigns." +msgstr "이메일 캠페인 구독이 성공적으로 해지되었습니다." + +#: engine/vibes_auth/docs/drf/emailing.py:82 +#: engine/vibes_auth/docs/drf/emailing.py:162 +msgid "Invalid or missing unsubscribe token." +msgstr "구독 취소 토큰이 유효하지 않거나 누락되었습니다." + +#: engine/vibes_auth/docs/drf/emailing.py:96 +#: engine/vibes_auth/docs/drf/emailing.py:176 +msgid "User associated with the token was not found." +msgstr "토큰과 연관된 사용자를 찾을 수 없습니다." + +#: engine/vibes_auth/docs/drf/emailing.py:118 +msgid "One-Click Unsubscribe (RFC 8058)" +msgstr "원클릭 수신 거부 (RFC 8058)" + +#: engine/vibes_auth/docs/drf/emailing.py:120 +msgid "" +"RFC 8058 compliant one-click unsubscribe endpoint for email campaigns.\n" +"\n" +"This endpoint supports the List-Unsubscribe-Post header mechanism defined in RFC 8058, which allows email clients to unsubscribe users with a single click without leaving the email application.\n" +"\n" +"The token can be provided either as a query parameter or in the request body.\n" +"\n" +"**Standards Compliance:**\n" +"- RFC 8058: Signaling One-Click Functionality for List Email Headers\n" +"- RFC 2369: The Use of URLs as Meta-Syntax for Core Mail List Commands\n" +"\n" +"**Note:** Transactional emails are not affected by this setting." +msgstr "" +"이메일 캠페인을 위한 RFC 8058 준수 원클릭 구독 취소 엔드포인트. 이 엔드포인트는 RFC 8058에 정의된 List-Unsubscribe-Post 헤더 메커니즘을 지원하며, 이를 통해 이메일 클라이언트는 이메일 애플리케이션을 벗어나지 않고도 사용자를 원클릭으로 구독 취소할 수 있습니다. 토큰은 쿼리 매개변수 또는 요청 본문에 포함하여 제공할 수 있습니다.\n" +"\n" +"**표준 준수:** - RFC 8058: 메일링 리스트 헤더를 위한 원클릭 기능 신호 - RFC 2369: 핵심 메일링 리스트 명령을 위한 메타 구문으로서의 URL 사용 **참고:** 트랜잭션 이메일은 이 설정의 영향을 받지 않습니다." + +#: engine/vibes_auth/docs/drf/emailing.py:137 +msgid "" +"Unsubscribe token (alternative to query parameter). Can be omitted if token " +"is provided in URL." +msgstr "구독 취소 토큰 (쿼리 매개변수 대체). URL에 토큰이 제공된 경우 생략 가능." + +#: engine/vibes_auth/docs/drf/emailing.py:200 +msgid "Track email open event" +msgstr "이메일 열람 이벤트 추적" + +#: engine/vibes_auth/docs/drf/emailing.py:202 +msgid "" +"Records when a campaign email is opened by the recipient.\n" +"\n" +"This endpoint is called automatically when the tracking pixel (1x1 transparent GIF) embedded in the email is loaded by the recipient's email client.\n" +"\n" +"**How it works:**\n" +"1. Each campaign email contains a unique tracking pixel URL with a `tid` parameter\n" +"2. When the email is opened and images are loaded, this endpoint is called\n" +"3. The recipient's status is updated to 'opened' and the timestamp is recorded\n" +"4. The campaign's aggregate opened count is updated\n" +"\n" +"**Privacy considerations:**\n" +"- Only the first open is recorded (subsequent opens are ignored)\n" +"- No personal information beyond the tracking ID is logged\n" +"- Users who disable image loading will not trigger this event\n" +"\n" +"**Response:**\n" +"Returns a 1x1 transparent GIF image regardless of whether tracking succeeded, to ensure consistent behavior and prevent information leakage." +msgstr "" +"캠페인 이메일이 수신자에 의해 열람될 때 기록합니다. 이 엔드포인트는 수신자의 이메일 클라이언트에서 이메일에 포함된 추적 픽셀(1x1 투명 GIF)이 로드될 때 자동으로 호출됩니다.\n" +"\n" +"**작동 방식:** 1. 각 캠페인 이메일에는 `tid` 매개변수가 포함된 고유한 추적 픽셀 URL이 포함됩니다. 2. 이메일이 열리고 이미지가 로드되면 이 엔드포인트가 호출됩니다. 3. 수신자의 상태가 '열림'으로 업데이트되고 타임스탬프가 기록됩니다. 4. 캠페인의 총 열람 횟수가 업데이트됩니다. **개인정보 고려사항:**\n" +"- 첫 번째 열람만 기록됩니다(이후 열람은 무시됨) - 추적 ID 외 개인 정보는 기록되지 않습니다 - 이미지 로딩을 비활성화한 사용자는 이 이벤트를 트리거하지 않습니다 **응답:** 추적 성공 여부와 무관하게 1x1 투명 GIF 이미지를 반환하여 일관된 동작을 보장하고 정보 유출을 방지합니다." + +#: engine/vibes_auth/docs/drf/emailing.py:223 +msgid "" +"Tracking ID (UUID) unique to each campaign-recipient combination. This ID " +"links the open event to a specific recipient and campaign." +msgstr "각 캠페인-수신자 조합에 고유한 추적 ID(UUID). 이 ID는 열람 이벤트를 특정 수신자와 캠페인에 연결합니다." + +#: engine/vibes_auth/docs/drf/emailing.py:241 +msgid "" +"1x1 transparent GIF image. Always returned regardless of tracking status to " +"maintain consistent behavior." +msgstr "1x1 투명 GIF 이미지. 추적 상태와 무관하게 항상 반환되어 일관된 동작을 유지합니다." + +#: engine/vibes_auth/docs/drf/emailing.py:247 +msgid "" +"Returned when no tracking ID is provided. Note: Invalid tracking IDs still " +"return 200 with the GIF to prevent enumeration attacks." +msgstr "" +"추적 ID가 제공되지 않을 때 반환됩니다. 참고: 열거 공격을 방지하기 위해 무효한 추적 ID도 GIF와 함께 200을 반환합니다." + #: engine/vibes_auth/docs/drf/messaging.py:17 msgid "User messages entrypoint" msgstr "사용자 메시지 진입점" @@ -240,9 +370,9 @@ msgid "confirm a user's password reset" msgstr "사용자의 비밀번호 재설정 확인" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:351 +#: engine/vibes_auth/graphene/mutations.py:358 #: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107 -#: engine/vibes_auth/viewsets.py:94 +#: engine/vibes_auth/viewsets.py:97 msgid "passwords do not match" msgstr "비밀번호가 일치하지 않습니다." @@ -295,195 +425,166 @@ msgstr "개장" msgid "Clicked" msgstr "클릭됨" -#: engine/vibes_auth/emailing/models.py:35 -#: engine/vibes_auth/emailing/models.py:71 -#: engine/vibes_auth/emailing/models.py:121 +#: engine/vibes_auth/emailing/models.py:38 +#: engine/vibes_auth/emailing/models.py:88 msgid "name" msgstr "이름" -#: engine/vibes_auth/emailing/models.py:36 -msgid "descriptive name for the image" -msgstr "이미지에 대한 설명적 이름" - -#: engine/vibes_auth/emailing/models.py:40 -msgid "image" -msgstr "이미지" - -#: engine/vibes_auth/emailing/models.py:41 -msgid "image file to use in email templates" -msgstr "이메일 템플릿에 사용할 이미지 파일" - -#: engine/vibes_auth/emailing/models.py:47 -msgid "alt text" -msgstr "다른 텍스트" - -#: engine/vibes_auth/emailing/models.py:48 -msgid "alternative text for accessibility" -msgstr "접근성을 위한 대체 텍스트" - -#: engine/vibes_auth/emailing/models.py:52 -msgid "email image" -msgstr "이메일 이미지" - -#: engine/vibes_auth/emailing/models.py:53 -msgid "email images" -msgstr "이메일 이미지" - -#: engine/vibes_auth/emailing/models.py:72 +#: engine/vibes_auth/emailing/models.py:39 msgid "internal name for the template" msgstr "템플릿의 내부 명칭" -#: engine/vibes_auth/emailing/models.py:76 +#: engine/vibes_auth/emailing/models.py:43 msgid "slug" msgstr "하인" -#: engine/vibes_auth/emailing/models.py:77 +#: engine/vibes_auth/emailing/models.py:44 msgid "unique identifier for the template" msgstr "템플릿의 고유 식별자" -#: engine/vibes_auth/emailing/models.py:81 +#: engine/vibes_auth/emailing/models.py:48 msgid "subject" msgstr "주제" -#: engine/vibes_auth/emailing/models.py:82 +#: engine/vibes_auth/emailing/models.py:49 msgid "email subject line - supports {{ variables }}" msgstr "이메일 제목 - {{ variables }} 지원" -#: engine/vibes_auth/emailing/models.py:85 -msgid "HTML content" -msgstr "HTML 콘텐츠" +#: engine/vibes_auth/emailing/models.py:52 +msgid "content" +msgstr "콘텐츠" -#: engine/vibes_auth/emailing/models.py:87 +#: engine/vibes_auth/emailing/models.py:54 msgid "" -"email body content - supports {{ user.first_name }}, {{ user.email }}, {{ " -"project_name }}, {{ unsubscribe_url }}" +"email body in markdown - supports {{ user.first_name }}, {{ user.email }}, " +"{{ project_name }}, {{ unsubscribe_url }}" msgstr "" "이메일 본문 내용 - {{ user.first_name }}, {{ user.email }}, {{ project_name }}, {{ " "unsubscribe_url }} 지원" -#: engine/vibes_auth/emailing/models.py:94 +#: engine/vibes_auth/emailing/models.py:61 msgid "plain text content" msgstr "일반 텍스트 콘텐츠" -#: engine/vibes_auth/emailing/models.py:95 +#: engine/vibes_auth/emailing/models.py:62 msgid "plain text fallback (auto-generated if empty)" msgstr "일반 텍스트 대체 (비어 있을 경우 자동 생성)" -#: engine/vibes_auth/emailing/models.py:100 +#: engine/vibes_auth/emailing/models.py:67 msgid "available variables" msgstr "사용 가능한 변수" -#: engine/vibes_auth/emailing/models.py:101 +#: engine/vibes_auth/emailing/models.py:68 msgid "documentation of available template variables" msgstr "사용 가능한 템플릿 변수에 대한 문서화" -#: engine/vibes_auth/emailing/models.py:105 +#: engine/vibes_auth/emailing/models.py:72 msgid "email template" msgstr "이메일 템플릿" -#: engine/vibes_auth/emailing/models.py:106 +#: engine/vibes_auth/emailing/models.py:73 msgid "email templates" msgstr "이메일 템플릿" -#: engine/vibes_auth/emailing/models.py:122 +#: engine/vibes_auth/emailing/models.py:89 msgid "internal name for the campaign" msgstr "캠페인의 내부 명칭" -#: engine/vibes_auth/emailing/models.py:129 +#: engine/vibes_auth/emailing/models.py:96 msgid "template" msgstr "템플릿" -#: engine/vibes_auth/emailing/models.py:130 +#: engine/vibes_auth/emailing/models.py:97 msgid "email template to use for this campaign" msgstr "이 캠페인에 사용할 이메일 템플릿" -#: engine/vibes_auth/emailing/models.py:136 -#: engine/vibes_auth/emailing/models.py:206 +#: engine/vibes_auth/emailing/models.py:103 +#: engine/vibes_auth/emailing/models.py:173 msgid "status" msgstr "상태" -#: engine/vibes_auth/emailing/models.py:141 +#: engine/vibes_auth/emailing/models.py:108 msgid "scheduled at" msgstr "예정된" -#: engine/vibes_auth/emailing/models.py:142 +#: engine/vibes_auth/emailing/models.py:109 msgid "when to send the campaign (leave empty for manual send)" msgstr "캠페인 발송 시기 (수동 발송 시 비워 두기)" -#: engine/vibes_auth/emailing/models.py:147 -#: engine/vibes_auth/emailing/models.py:211 +#: engine/vibes_auth/emailing/models.py:114 +#: engine/vibes_auth/emailing/models.py:178 msgid "sent at" msgstr "늦게" -#: engine/vibes_auth/emailing/models.py:148 +#: engine/vibes_auth/emailing/models.py:115 msgid "when the campaign was actually sent" msgstr "캠페인이 실제로 발송되었을 때" -#: engine/vibes_auth/emailing/models.py:153 +#: engine/vibes_auth/emailing/models.py:120 msgid "total recipients" msgstr "총 수신자" -#: engine/vibes_auth/emailing/models.py:157 +#: engine/vibes_auth/emailing/models.py:124 msgid "sent count" msgstr "발송 횟수" -#: engine/vibes_auth/emailing/models.py:161 +#: engine/vibes_auth/emailing/models.py:128 msgid "failed count" msgstr "실패한 카운트" -#: engine/vibes_auth/emailing/models.py:165 +#: engine/vibes_auth/emailing/models.py:132 msgid "opened count" msgstr "열린 카운트" -#: engine/vibes_auth/emailing/models.py:169 +#: engine/vibes_auth/emailing/models.py:136 msgid "clicked count" msgstr "클릭 수" -#: engine/vibes_auth/emailing/models.py:173 +#: engine/vibes_auth/emailing/models.py:140 msgid "email campaign" msgstr "이메일 캠페인" -#: engine/vibes_auth/emailing/models.py:174 +#: engine/vibes_auth/emailing/models.py:141 msgid "email campaigns" msgstr "이메일 캠페인" -#: engine/vibes_auth/emailing/models.py:194 +#: engine/vibes_auth/emailing/models.py:161 msgid "campaign" msgstr "캠페인" -#: engine/vibes_auth/emailing/models.py:200 engine/vibes_auth/models.py:146 +#: engine/vibes_auth/emailing/models.py:167 engine/vibes_auth/models.py:183 msgid "user" msgstr "사용자" -#: engine/vibes_auth/emailing/models.py:216 +#: engine/vibes_auth/emailing/models.py:183 msgid "opened at" msgstr "개장" -#: engine/vibes_auth/emailing/models.py:221 +#: engine/vibes_auth/emailing/models.py:188 msgid "clicked at" msgstr "클릭했다" -#: engine/vibes_auth/emailing/models.py:227 +#: engine/vibes_auth/emailing/models.py:194 msgid "tracking ID" msgstr "추적 ID" -#: engine/vibes_auth/emailing/models.py:228 +#: engine/vibes_auth/emailing/models.py:195 msgid "unique ID for tracking opens and clicks" msgstr "열람 및 클릭 추적을 위한 고유 ID" -#: engine/vibes_auth/emailing/models.py:233 +#: engine/vibes_auth/emailing/models.py:200 msgid "error message" msgstr "오류 메시지" -#: engine/vibes_auth/emailing/models.py:234 +#: engine/vibes_auth/emailing/models.py:201 msgid "error details if sending failed" msgstr "전송 실패 시 오류 세부 정보" -#: engine/vibes_auth/emailing/models.py:238 +#: engine/vibes_auth/emailing/models.py:205 msgid "campaign recipient" msgstr "캠페인 수신자" -#: engine/vibes_auth/emailing/models.py:239 +#: engine/vibes_auth/emailing/models.py:206 msgid "campaign recipients" msgstr "캠페인 수신자" @@ -499,73 +600,73 @@ msgstr "귀하께서는 저희 뉴스레터를 구독하셨기 때문에 이 이 msgid "Unsubscribe" msgstr "구독 취소" -#: engine/vibes_auth/emailing/views.py:71 +#: engine/vibes_auth/emailing/views.py:39 msgid "Unsubscribe token is required." msgstr "구독 취소 토큰이 필요합니다." -#: engine/vibes_auth/emailing/views.py:79 +#: engine/vibes_auth/emailing/views.py:47 msgid "Invalid unsubscribe token format." msgstr "구독 취소 토큰 형식이 잘못되었습니다." -#: engine/vibes_auth/emailing/views.py:87 +#: engine/vibes_auth/emailing/views.py:55 msgid "User not found." msgstr "사용자를 찾을 수 없습니다." -#: engine/vibes_auth/emailing/views.py:93 -msgid "You are already unsubscribed." -msgstr "이미 구독이 취소되었습니다." - -#: engine/vibes_auth/emailing/views.py:101 -msgid "You have been successfully unsubscribed from our emails." -msgstr "당사 이메일 수신 거부 요청이 성공적으로 처리되었습니다." - -#: engine/vibes_auth/graphene/mutations.py:46 +#: engine/vibes_auth/graphene/mutations.py:47 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "새 사용자를 추천한 사용자의 b64로 인코딩된 UUID입니다." -#: engine/vibes_auth/graphene/mutations.py:68 +#: engine/vibes_auth/graphene/mutations.py:70 msgid "password too weak" msgstr "비밀번호가 너무 약합니다." -#: engine/vibes_auth/graphene/mutations.py:128 +#: engine/vibes_auth/graphene/mutations.py:130 msgid "malformed email" msgstr "잘못된 이메일" -#: engine/vibes_auth/graphene/mutations.py:140 +#: engine/vibes_auth/graphene/mutations.py:142 #: engine/vibes_auth/serializers.py:117 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "잘못된 전화 번호입니다: {phone_number}!" -#: engine/vibes_auth/graphene/mutations.py:165 +#: engine/vibes_auth/graphene/mutations.py:167 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "잘못된 속성 형식입니다: {attribute_pair}!" -#: engine/vibes_auth/graphene/mutations.py:182 +#: engine/vibes_auth/graphene/mutations.py:184 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name}가 존재하지 않습니다: {uuid}!" -#: engine/vibes_auth/graphene/mutations.py:304 -#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180 +#: engine/vibes_auth/graphene/mutations.py:309 +#: engine/vibes_auth/viewsets.py:174 engine/vibes_auth/viewsets.py:198 msgid "activation link is invalid!" msgstr "활성화 링크가 유효하지 않습니다!" -#: engine/vibes_auth/graphene/mutations.py:307 +#: engine/vibes_auth/graphene/mutations.py:312 msgid "account already activated..." msgstr "계정이 이미 활성화되었습니다..." -#: engine/vibes_auth/graphene/mutations.py:314 -#: engine/vibes_auth/graphene/mutations.py:376 +#: engine/vibes_auth/graphene/mutations.py:319 +#: engine/vibes_auth/graphene/mutations.py:383 msgid "something went wrong: {e!s}" msgstr "문제가 발생했습니다: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:358 -#: engine/vibes_auth/viewsets.py:106 +#: engine/vibes_auth/graphene/mutations.py:365 +#: engine/vibes_auth/viewsets.py:109 msgid "token is invalid!" msgstr "토큰이 유효하지 않습니다!" +#: engine/vibes_auth/graphene/mutations.py:403 +msgid "only image files are allowed (jpg, png, gif, webp)" +msgstr "이미지 파일만 허용됩니다 (jpg, png, gif, webp)" + +#: engine/vibes_auth/graphene/mutations.py:406 +msgid "file size must not exceed 5 MB" +msgstr "파일 크기는 5MB를 초과해서는 안 됩니다." + #: engine/vibes_auth/graphene/object_types.py:46 msgid "" "the products this user has viewed most recently (max 48), in " @@ -573,7 +674,7 @@ msgid "" msgstr "이 사용자가 가장 최근에 본 제품(최대 48개)을 시간 역순으로 표시합니다." #: engine/vibes_auth/graphene/object_types.py:49 -#: engine/vibes_auth/models.py:214 +#: engine/vibes_auth/models.py:270 msgid "groups" msgstr "그룹" @@ -582,7 +683,7 @@ msgid "wishlist" msgstr "위시리스트" #: engine/vibes_auth/graphene/object_types.py:56 -#: engine/vibes_auth/models.py:70 +#: engine/vibes_auth/models.py:75 msgid "avatar" msgstr "아바타" @@ -617,7 +718,7 @@ msgstr "이미 응답할 교환원을 찾고 있으니 잠시만 기다려주세 msgid "Assignee must be a staff user." msgstr "양수인은 직원 사용자이어야 합니다." -#: engine/vibes_auth/models.py:42 +#: engine/vibes_auth/models.py:44 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -632,123 +733,135 @@ msgstr "" "관리하기 위한 유틸리티와 계정 인증을 위한 토큰 기반 활성화도 제공합니다. 사용자 모델은 향상된 사용자 관리를 위한 특정 사용 사례를 " "처리하도록 설계되었습니다." -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "email" msgstr "이메일" -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "user email address" msgstr "사용자의 이메일 주소" -#: engine/vibes_auth/models.py:55 +#: engine/vibes_auth/models.py:57 msgid "phone_number" msgstr "전화 번호" -#: engine/vibes_auth/models.py:60 +#: engine/vibes_auth/models.py:61 msgid "user phone number" msgstr "사용자 전화번호" -#: engine/vibes_auth/models.py:66 +#: engine/vibes_auth/models.py:68 msgid "first_name" msgstr "이름" -#: engine/vibes_auth/models.py:67 +#: engine/vibes_auth/models.py:71 msgid "last_name" msgstr "성" -#: engine/vibes_auth/models.py:73 +#: engine/vibes_auth/models.py:78 msgid "user profile image" msgstr "사용자 프로필 이미지" -#: engine/vibes_auth/models.py:78 +#: engine/vibes_auth/models.py:83 msgid "is verified" msgstr "확인됨" -#: engine/vibes_auth/models.py:79 +#: engine/vibes_auth/models.py:84 msgid "user verification status" msgstr "사용자 인증 상태" -#: engine/vibes_auth/models.py:82 +#: engine/vibes_auth/models.py:87 msgid "is_active" msgstr "활성화됨" -#: engine/vibes_auth/models.py:84 +#: engine/vibes_auth/models.py:89 msgid "unselect this instead of deleting accounts" msgstr "계정을 삭제하는 대신 이 옵션을 선택 해제합니다." -#: engine/vibes_auth/models.py:87 +#: engine/vibes_auth/models.py:92 msgid "is_subscribed" msgstr "구독 중" -#: engine/vibes_auth/models.py:88 +#: engine/vibes_auth/models.py:93 msgid "user's newsletter subscription status" msgstr "사용자의 뉴스레터 구독 상태" -#: engine/vibes_auth/models.py:92 +#: engine/vibes_auth/models.py:98 msgid "activation token" msgstr "활성화 토큰" -#: engine/vibes_auth/models.py:95 +#: engine/vibes_auth/models.py:103 +msgid "activation token created" +msgstr "활성화 토큰 생성됨" + +#: engine/vibes_auth/models.py:107 msgid "unsubscribe token" msgstr "구독 취소 토큰" -#: engine/vibes_auth/models.py:96 +#: engine/vibes_auth/models.py:108 msgid "token for secure one-click unsubscribe from campaigns" msgstr "캠페인에서 안전하게 원클릭으로 구독 취소할 수 있는 토큰" -#: engine/vibes_auth/models.py:106 +#: engine/vibes_auth/models.py:118 msgid "attributes" msgstr "속성" -#: engine/vibes_auth/models.py:147 +#: engine/vibes_auth/models.py:184 msgid "users" msgstr "사용자" -#: engine/vibes_auth/models.py:154 +#: engine/vibes_auth/models.py:202 +msgid "admin OTP code" +msgstr "관리자 OTP 코드" + +#: engine/vibes_auth/models.py:203 +msgid "admin OTP codes" +msgstr "관리자 일회용 비밀번호(OTP) 코드" + +#: engine/vibes_auth/models.py:210 msgid "For anonymous threads" msgstr "익명 스레드의 경우" -#: engine/vibes_auth/models.py:178 +#: engine/vibes_auth/models.py:234 msgid "Chat thread" msgstr "채팅 스레드" -#: engine/vibes_auth/models.py:179 +#: engine/vibes_auth/models.py:235 msgid "Chat threads" msgstr "채팅 스레드" -#: engine/vibes_auth/models.py:185 +#: engine/vibes_auth/models.py:241 msgid "provide user or email for anonymous thread." msgstr "익명 스레드에 사용자 또는 이메일을 입력합니다." -#: engine/vibes_auth/models.py:188 +#: engine/vibes_auth/models.py:244 msgid "assignee must be a staff user." msgstr "양수인은 직원 사용자여야 합니다." -#: engine/vibes_auth/models.py:206 +#: engine/vibes_auth/models.py:262 msgid "Chat message" msgstr "채팅 메시지" -#: engine/vibes_auth/models.py:207 +#: engine/vibes_auth/models.py:263 msgid "Chat messages" msgstr "채팅 메시지" -#: engine/vibes_auth/models.py:213 +#: engine/vibes_auth/models.py:269 msgid "group" msgstr "그룹" -#: engine/vibes_auth/models.py:220 +#: engine/vibes_auth/models.py:276 msgid "outstanding token" msgstr "뛰어난 토큰" -#: engine/vibes_auth/models.py:221 +#: engine/vibes_auth/models.py:277 msgid "outstanding tokens" msgstr "우수 토큰" -#: engine/vibes_auth/models.py:227 +#: engine/vibes_auth/models.py:283 msgid "blacklisted token" msgstr "블랙리스트에 오른 토큰" -#: engine/vibes_auth/models.py:228 +#: engine/vibes_auth/models.py:284 msgid "blacklisted tokens" msgstr "블랙리스트에 오른 토큰" @@ -790,6 +903,10 @@ msgstr "토큰에 사용자 UUID 클레임이 없습니다." msgid "user does not exist" msgstr "사용자가 존재하지 않습니다." +#: engine/vibes_auth/templates/admin/verify_otp.html:27 +msgid "Verify" +msgstr "확인" + #: engine/vibes_auth/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "비밀번호 재설정" @@ -871,12 +988,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "감사합니다,
%(project_name)s 팀" -#: engine/vibes_auth/utils/emailing.py:24 +#: engine/vibes_auth/utils/emailing.py:27 #, python-brace-format msgid "{settings.PROJECT_NAME} | Activate Account" msgstr "{settings.PROJECT_NAME} | 계정 활성화" -#: engine/vibes_auth/utils/emailing.py:63 +#: engine/vibes_auth/utils/emailing.py:66 #, python-brace-format msgid "{settings.PROJECT_NAME} | Reset Password" msgstr "{settings.PROJECT_NAME} | 비밀번호 재설정" @@ -923,7 +1040,7 @@ msgstr "특정 직렬화 및 유효성 검사 로직을 사용하여 JSON 웹 msgid "the token is invalid" msgstr "토큰이 유효하지 않습니다." -#: engine/vibes_auth/viewsets.py:44 +#: engine/vibes_auth/viewsets.py:47 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." @@ -931,10 +1048,16 @@ msgstr "" "사용자 보기 세트 구현.\n" "생성, 검색, 업데이트, 삭제, 비밀번호 재설정, 아바타 업로드, 계정 활성화, 최근에 본 항목 병합 등의 사용자 관련 데이터와 사용자 지정 작업을 관리하는 일련의 작업을 제공합니다. 이 클래스는 강력한 API 처리를 위해 믹스인 및 GenericViewSet을 확장합니다." -#: engine/vibes_auth/viewsets.py:113 +#: engine/vibes_auth/viewsets.py:116 msgid "password reset successfully" msgstr "비밀번호가 성공적으로 재설정되었습니다!" -#: engine/vibes_auth/viewsets.py:161 +#: engine/vibes_auth/viewsets.py:146 +msgid "" +"Account already registered but not yet activated. A new activation email has" +" been sent." +msgstr "계정은 이미 등록되었으나 아직 활성화되지 않았습니다. 새로운 활성화 이메일이 발송되었습니다." + +#: engine/vibes_auth/viewsets.py:179 msgid "account already activated!" msgstr "이미 계정을 활성화하셨습니다..." diff --git a/engine/vibes_auth/locale/nl_NL/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/nl_NL/LC_MESSAGES/django.mo index 93104f6d..f4848e1f 100644 Binary files a/engine/vibes_auth/locale/nl_NL/LC_MESSAGES/django.mo and b/engine/vibes_auth/locale/nl_NL/LC_MESSAGES/django.mo differ diff --git a/engine/vibes_auth/locale/nl_NL/LC_MESSAGES/django.po b/engine/vibes_auth/locale/nl_NL/LC_MESSAGES/django.po index e6a9cd34..542587c8 100644 --- a/engine/vibes_auth/locale/nl_NL/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/nl_NL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 03:06+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,32 +13,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:65 engine/vibes_auth/admin.py:66 +#: engine/vibes_auth/admin.py:64 engine/vibes_auth/admin.py:65 #: engine/vibes_auth/graphene/object_types.py:54 msgid "balance" msgstr "Saldo" -#: engine/vibes_auth/admin.py:74 +#: engine/vibes_auth/admin.py:73 msgid "order" msgstr "Bestel" -#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:51 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:51 msgid "orders" msgstr "Bestellingen" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:84 msgid "personal info" msgstr "Persoonlijke info" -#: engine/vibes_auth/admin.py:89 engine/vibes_auth/graphene/object_types.py:50 +#: engine/vibes_auth/admin.py:88 engine/vibes_auth/graphene/object_types.py:50 msgid "permissions" msgstr "Rechten" -#: engine/vibes_auth/admin.py:102 +#: engine/vibes_auth/admin.py:101 msgid "important dates" msgstr "Belangrijke data" -#: engine/vibes_auth/admin.py:103 +#: engine/vibes_auth/admin.py:102 msgid "additional info" msgstr "Extra info" @@ -54,79 +54,83 @@ msgstr "Geselecteerde threads sluiten" msgid "Open selected threads" msgstr "Geselecteerde draden openen" -#: engine/vibes_auth/admin.py:208 -msgid "Preview" -msgstr "Voorbeeld" - -#: engine/vibes_auth/admin.py:209 engine/vibes_auth/admin.py:249 -#: engine/vibes_auth/admin.py:326 -msgid "Metadata" -msgstr "Metadata" - -#: engine/vibes_auth/admin.py:212 -msgid "preview" -msgstr "voorvertoning" - -#: engine/vibes_auth/admin.py:221 -msgid "image preview" -msgstr "afbeeldingsvoorbeeld" - -#: engine/vibes_auth/admin.py:241 +#: engine/vibes_auth/admin.py:209 msgid "Content" msgstr "Inhoud" -#: engine/vibes_auth/admin.py:243 +#: engine/vibes_auth/admin.py:211 msgid "Documentation" msgstr "Documentatie" -#: engine/vibes_auth/admin.py:313 +#: engine/vibes_auth/admin.py:217 engine/vibes_auth/admin.py:294 +msgid "Metadata" +msgstr "Metadata" + +#: engine/vibes_auth/admin.py:281 msgid "Scheduling" msgstr "Planning" -#: engine/vibes_auth/admin.py:315 +#: engine/vibes_auth/admin.py:283 msgid "Statistics" msgstr "Statistieken" -#: engine/vibes_auth/admin.py:329 +#: engine/vibes_auth/admin.py:297 msgid "stats" msgstr "staten" -#: engine/vibes_auth/admin.py:335 +#: engine/vibes_auth/admin.py:303 msgid "Prepare recipients (subscribed users)" msgstr "Ontvangers voorbereiden (aangemelde gebruikers)" -#: engine/vibes_auth/admin.py:343 +#: engine/vibes_auth/admin.py:311 msgid "Campaign '{}' is not in draft status." msgstr "Campagne '{}' bevindt zich niet in conceptstatus." -#: engine/vibes_auth/admin.py:350 +#: engine/vibes_auth/admin.py:318 msgid "Preparing recipients for campaign '{}'." msgstr "Ontvangers voorbereiden op campagne '{}'." -#: engine/vibes_auth/admin.py:354 +#: engine/vibes_auth/admin.py:322 msgid "Send campaign now" msgstr "Campagne nu verzenden" -#: engine/vibes_auth/admin.py:362 +#: engine/vibes_auth/admin.py:330 msgid "Campaign '{}' cannot be sent (status: {})." msgstr "Campagne '{}' kan niet worden verzonden (status: {})." -#: engine/vibes_auth/admin.py:372 +#: engine/vibes_auth/admin.py:340 msgid "Campaign '{}' has no recipients. Prepare recipients first." msgstr "Campagne '{}' heeft geen ontvangers. Bereid eerst de ontvangers voor." -#: engine/vibes_auth/admin.py:383 +#: engine/vibes_auth/admin.py:351 msgid "Started sending campaign '{}'." msgstr "Campagne '{}' gestart." -#: engine/vibes_auth/admin.py:387 +#: engine/vibes_auth/admin.py:355 msgid "Cancel campaign" msgstr "Campagne annuleren" -#: engine/vibes_auth/admin.py:396 +#: engine/vibes_auth/admin.py:364 msgid "{} campaign(s) cancelled." msgstr "{} campagne(s) geannuleerd." +#: engine/vibes_auth/admin_site.py:24 +msgid "Verification code" +msgstr "Verificatiecode" + +#: engine/vibes_auth/admin_site.py:62 +msgid "A verification code has been sent to your email." +msgstr "Er is een verificatiecode naar uw e-mailadres gestuurd." + +#: engine/vibes_auth/admin_site.py:118 +msgid "Invalid or expired code. Please try again." +msgstr "Ongeldige of verlopen code. Probeer het opnieuw." + +#: engine/vibes_auth/admin_site.py:124 +#: engine/vibes_auth/templates/admin/verify_otp.html:10 +msgid "Two-factor authentication" +msgstr "Tweefactorauthenticatie" + #: engine/vibes_auth/apps.py:8 msgid "Accounting" msgstr "Boekhouding" @@ -151,6 +155,146 @@ msgstr "Personeel" msgid "System" msgstr "Systeem" +#: engine/vibes_auth/docs/drf/emailing.py:18 +msgid "" +"UUID token for unsubscribing. This token is unique per user and is included " +"in the unsubscribe link of every campaign email. The token remains constant " +"for each user unless regenerated." +msgstr "" +"UUID-token voor het afmelden. Dit token is uniek per gebruiker en staat in " +"de afmeldlink van elke campagne-e-mail. Het token blijft voor elke gebruiker" +" hetzelfde, tenzij het opnieuw wordt gegenereerd." + +#: engine/vibes_auth/docs/drf/emailing.py:37 +#: engine/vibes_auth/emailing/views.py:69 +msgid "You have been successfully unsubscribed from our emails." +msgstr "Je bent nu uitgeschreven voor onze e-mails." + +#: engine/vibes_auth/docs/drf/emailing.py:45 +#: engine/vibes_auth/emailing/views.py:61 +msgid "You are already unsubscribed." +msgstr "Je bent al uitgeschreven." + +#: engine/vibes_auth/docs/drf/emailing.py:52 +msgid "Unsubscribe from email campaigns" +msgstr "Afmelden voor e-mailcampagnes" + +#: engine/vibes_auth/docs/drf/emailing.py:54 +msgid "" +"Unsubscribe a user from all marketing email campaigns using their unique unsubscribe token.\n" +"\n" +"This endpoint is designed for email client compatibility where clicking a link triggers a GET request. The user will no longer receive promotional emails after successful unsubscription.\n" +"\n" +"**Note:** Transactional emails (order confirmations, password resets, etc.) are not affected by this setting." +msgstr "" +"Een gebruiker uitschrijven voor alle marketing-e-mailcampagnes met behulp " +"van zijn unieke uitschrijvingstoken. Dit eindpunt is ontworpen voor " +"compatibiliteit met e-mailclients waarbij het klikken op een link een GET-" +"verzoek activeert. De gebruiker ontvangt na succesvolle uitschrijving geen " +"promotionele e-mails meer. **Opmerking:** transactionele e-mails " +"(orderbevestigingen, wachtwoordherstel, enz.) worden niet beïnvloed door " +"deze instelling." + +#: engine/vibes_auth/docs/drf/emailing.py:66 +#: engine/vibes_auth/docs/drf/emailing.py:146 +msgid "Successfully unsubscribed from email campaigns." +msgstr "U bent succesvol afgemeld voor e-mailcampagnes." + +#: engine/vibes_auth/docs/drf/emailing.py:82 +#: engine/vibes_auth/docs/drf/emailing.py:162 +msgid "Invalid or missing unsubscribe token." +msgstr "Ongeldige of ontbrekende afmeldtoken." + +#: engine/vibes_auth/docs/drf/emailing.py:96 +#: engine/vibes_auth/docs/drf/emailing.py:176 +msgid "User associated with the token was not found." +msgstr "De gebruiker die aan het token is gekoppeld, is niet gevonden." + +#: engine/vibes_auth/docs/drf/emailing.py:118 +msgid "One-Click Unsubscribe (RFC 8058)" +msgstr "Afmelden met één klik (RFC 8058)" + +#: engine/vibes_auth/docs/drf/emailing.py:120 +msgid "" +"RFC 8058 compliant one-click unsubscribe endpoint for email campaigns.\n" +"\n" +"This endpoint supports the List-Unsubscribe-Post header mechanism defined in RFC 8058, which allows email clients to unsubscribe users with a single click without leaving the email application.\n" +"\n" +"The token can be provided either as a query parameter or in the request body.\n" +"\n" +"**Standards Compliance:**\n" +"- RFC 8058: Signaling One-Click Functionality for List Email Headers\n" +"- RFC 2369: The Use of URLs as Meta-Syntax for Core Mail List Commands\n" +"\n" +"**Note:** Transactional emails are not affected by this setting." +msgstr "" +"RFC 8058-conforme endpoint voor uitschrijven met één klik voor e-mailcampagnes. Deze endpoint ondersteunt het List-Unsubscribe-Post-headermechanisme dat is gedefinieerd in RFC 8058, waarmee e-mailclients gebruikers met één klik kunnen uitschrijven zonder de e-mailtoepassing te verlaten. Het token kan worden verstrekt als queryparameter of in de request body.\n" +"\n" +"**Naleving van normen:** - RFC 8058: Signaling One-Click Functionality for List Email Headers - RFC 2369: The Use of URLs as Meta-Syntax for Core Mail List Commands **Opmerking:** Transactionele e-mails worden niet beïnvloed door deze instelling." + +#: engine/vibes_auth/docs/drf/emailing.py:137 +msgid "" +"Unsubscribe token (alternative to query parameter). Can be omitted if token " +"is provided in URL." +msgstr "" +"Afmeldtoken (alternatief voor queryparameter). Kan worden weggelaten als het" +" token in de URL is opgenomen." + +#: engine/vibes_auth/docs/drf/emailing.py:200 +msgid "Track email open event" +msgstr "E-mail openen bijhouden" + +#: engine/vibes_auth/docs/drf/emailing.py:202 +msgid "" +"Records when a campaign email is opened by the recipient.\n" +"\n" +"This endpoint is called automatically when the tracking pixel (1x1 transparent GIF) embedded in the email is loaded by the recipient's email client.\n" +"\n" +"**How it works:**\n" +"1. Each campaign email contains a unique tracking pixel URL with a `tid` parameter\n" +"2. When the email is opened and images are loaded, this endpoint is called\n" +"3. The recipient's status is updated to 'opened' and the timestamp is recorded\n" +"4. The campaign's aggregate opened count is updated\n" +"\n" +"**Privacy considerations:**\n" +"- Only the first open is recorded (subsequent opens are ignored)\n" +"- No personal information beyond the tracking ID is logged\n" +"- Users who disable image loading will not trigger this event\n" +"\n" +"**Response:**\n" +"Returns a 1x1 transparent GIF image regardless of whether tracking succeeded, to ensure consistent behavior and prevent information leakage." +msgstr "" +"Registreert wanneer een campagne-e-mail door de ontvanger wordt geopend. Dit eindpunt wordt automatisch aangeroepen wanneer de trackingpixel (1x1 transparante GIF) die in de e-mail is ingebed, door de e-mailclient van de ontvanger wordt geladen.\n" +"\n" +"**Hoe het werkt:** 1. Elke campagne-e-mail bevat een unieke trackingpixel-URL met een `tid`-parameter 2. Wanneer de e-mail wordt geopend en de afbeeldingen worden geladen, wordt dit eindpunt aangeroepen 3. De status van de ontvanger wordt bijgewerkt naar 'geopend' en de tijdstempel wordt geregistreerd 4. Het totale aantal geopende e-mails van de campagne wordt bijgewerkt **Privacyoverwegingen:**\n" +"- Alleen de eerste keer dat de e-mail wordt geopend, wordt geregistreerd (volgende keren worden genegeerd). - Er wordt geen andere persoonlijke informatie dan de tracking-ID geregistreerd. - Gebruikers die het laden van afbeeldingen uitschakelen, activeren deze gebeurtenis niet. **Reactie:** Geeft een 1x1 transparante GIF-afbeelding terug, ongeacht of het volgen is gelukt, om consistent gedrag te garanderen en informatielekken te voorkomen." + +#: engine/vibes_auth/docs/drf/emailing.py:223 +msgid "" +"Tracking ID (UUID) unique to each campaign-recipient combination. This ID " +"links the open event to a specific recipient and campaign." +msgstr "" +"Tracking-ID (UUID) die uniek is voor elke combinatie van campagne en " +"ontvanger. Deze ID koppelt de geopende gebeurtenis aan een specifieke " +"ontvanger en campagne." + +#: engine/vibes_auth/docs/drf/emailing.py:241 +msgid "" +"1x1 transparent GIF image. Always returned regardless of tracking status to " +"maintain consistent behavior." +msgstr "" +"1x1 transparante GIF-afbeelding. Wordt altijd geretourneerd, ongeacht de " +"trackingstatus, om consistent gedrag te behouden." + +#: engine/vibes_auth/docs/drf/emailing.py:247 +msgid "" +"Returned when no tracking ID is provided. Note: Invalid tracking IDs still " +"return 200 with the GIF to prevent enumeration attacks." +msgstr "" +"Wordt geretourneerd wanneer er geen tracking-ID is opgegeven. Opmerking: " +"Ongeldige tracking-ID's retourneren nog steeds 200 met de GIF om " +"enumeratieaanvallen te voorkomen." + #: engine/vibes_auth/docs/drf/messaging.py:17 msgid "User messages entrypoint" msgstr "Invoerpunt voor gebruikersberichten" @@ -246,9 +390,9 @@ msgid "confirm a user's password reset" msgstr "Bevestig het resetten van het wachtwoord van een gebruiker" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:351 +#: engine/vibes_auth/graphene/mutations.py:358 #: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107 -#: engine/vibes_auth/viewsets.py:94 +#: engine/vibes_auth/viewsets.py:97 msgid "passwords do not match" msgstr "Wachtwoorden komen niet overeen" @@ -301,197 +445,168 @@ msgstr "Geopend" msgid "Clicked" msgstr "Geklikt" -#: engine/vibes_auth/emailing/models.py:35 -#: engine/vibes_auth/emailing/models.py:71 -#: engine/vibes_auth/emailing/models.py:121 +#: engine/vibes_auth/emailing/models.py:38 +#: engine/vibes_auth/emailing/models.py:88 msgid "name" msgstr "naam" -#: engine/vibes_auth/emailing/models.py:36 -msgid "descriptive name for the image" -msgstr "beschrijvende naam voor de afbeelding" - -#: engine/vibes_auth/emailing/models.py:40 -msgid "image" -msgstr "afbeelding" - -#: engine/vibes_auth/emailing/models.py:41 -msgid "image file to use in email templates" -msgstr "afbeeldingsbestand voor gebruik in e-mailsjablonen" - -#: engine/vibes_auth/emailing/models.py:47 -msgid "alt text" -msgstr "ander tekst" - -#: engine/vibes_auth/emailing/models.py:48 -msgid "alternative text for accessibility" -msgstr "alternatieve tekst voor toegankelijkheid" - -#: engine/vibes_auth/emailing/models.py:52 -msgid "email image" -msgstr "e-mailafbeelding" - -#: engine/vibes_auth/emailing/models.py:53 -msgid "email images" -msgstr "e-mailafbeeldingen" - -#: engine/vibes_auth/emailing/models.py:72 +#: engine/vibes_auth/emailing/models.py:39 msgid "internal name for the template" msgstr "interne naam voor het sjabloon" -#: engine/vibes_auth/emailing/models.py:76 +#: engine/vibes_auth/emailing/models.py:43 msgid "slug" msgstr "slug" -#: engine/vibes_auth/emailing/models.py:77 +#: engine/vibes_auth/emailing/models.py:44 msgid "unique identifier for the template" msgstr "unieke identificatiecode voor de sjabloon" -#: engine/vibes_auth/emailing/models.py:81 +#: engine/vibes_auth/emailing/models.py:48 msgid "subject" msgstr "onderwerp" -#: engine/vibes_auth/emailing/models.py:82 +#: engine/vibes_auth/emailing/models.py:49 msgid "email subject line - supports {{ variables }}" msgstr "onderwerpregel van e-mail - ondersteunt {{ variables }}" -#: engine/vibes_auth/emailing/models.py:85 -msgid "HTML content" -msgstr "HTML-inhoud" +#: engine/vibes_auth/emailing/models.py:52 +msgid "content" +msgstr "inhoud" -#: engine/vibes_auth/emailing/models.py:87 +#: engine/vibes_auth/emailing/models.py:54 msgid "" -"email body content - supports {{ user.first_name }}, {{ user.email }}, {{ " -"project_name }}, {{ unsubscribe_url }}" +"email body in markdown - supports {{ user.first_name }}, {{ user.email }}, " +"{{ project_name }}, {{ unsubscribe_url }}" msgstr "" "inhoud van e-mailbericht - ondersteunt {{ user.first_name }}, {{ user.email " "}}, {{ project_name }}, {{ unsubscribe_url }}" -#: engine/vibes_auth/emailing/models.py:94 +#: engine/vibes_auth/emailing/models.py:61 msgid "plain text content" msgstr "platte tekstinhoud" -#: engine/vibes_auth/emailing/models.py:95 +#: engine/vibes_auth/emailing/models.py:62 msgid "plain text fallback (auto-generated if empty)" msgstr "fallback voor platte tekst (automatisch gegenereerd indien leeg)" -#: engine/vibes_auth/emailing/models.py:100 +#: engine/vibes_auth/emailing/models.py:67 msgid "available variables" msgstr "beschikbare variabelen" -#: engine/vibes_auth/emailing/models.py:101 +#: engine/vibes_auth/emailing/models.py:68 msgid "documentation of available template variables" msgstr "documentatie van beschikbare sjabloonvariabelen" -#: engine/vibes_auth/emailing/models.py:105 +#: engine/vibes_auth/emailing/models.py:72 msgid "email template" msgstr "e-mail sjabloon" -#: engine/vibes_auth/emailing/models.py:106 +#: engine/vibes_auth/emailing/models.py:73 msgid "email templates" msgstr "e-mailsjablonen" -#: engine/vibes_auth/emailing/models.py:122 +#: engine/vibes_auth/emailing/models.py:89 msgid "internal name for the campaign" msgstr "interne naam voor de campagne" -#: engine/vibes_auth/emailing/models.py:129 +#: engine/vibes_auth/emailing/models.py:96 msgid "template" msgstr "sjabloon" -#: engine/vibes_auth/emailing/models.py:130 +#: engine/vibes_auth/emailing/models.py:97 msgid "email template to use for this campaign" msgstr "E-mailsjabloon voor deze campagne" -#: engine/vibes_auth/emailing/models.py:136 -#: engine/vibes_auth/emailing/models.py:206 +#: engine/vibes_auth/emailing/models.py:103 +#: engine/vibes_auth/emailing/models.py:173 msgid "status" msgstr "status" -#: engine/vibes_auth/emailing/models.py:141 +#: engine/vibes_auth/emailing/models.py:108 msgid "scheduled at" msgstr "gepland om" -#: engine/vibes_auth/emailing/models.py:142 +#: engine/vibes_auth/emailing/models.py:109 msgid "when to send the campaign (leave empty for manual send)" msgstr "" "wanneer de campagne moet worden verzonden (laat leeg voor handmatige " "verzending)" -#: engine/vibes_auth/emailing/models.py:147 -#: engine/vibes_auth/emailing/models.py:211 +#: engine/vibes_auth/emailing/models.py:114 +#: engine/vibes_auth/emailing/models.py:178 msgid "sent at" msgstr "laat dat" -#: engine/vibes_auth/emailing/models.py:148 +#: engine/vibes_auth/emailing/models.py:115 msgid "when the campaign was actually sent" msgstr "wanneer de campagne daadwerkelijk werd verstuurd" -#: engine/vibes_auth/emailing/models.py:153 +#: engine/vibes_auth/emailing/models.py:120 msgid "total recipients" msgstr "totaal aantal ontvangers" -#: engine/vibes_auth/emailing/models.py:157 +#: engine/vibes_auth/emailing/models.py:124 msgid "sent count" msgstr "aantal verzonden berichten" -#: engine/vibes_auth/emailing/models.py:161 +#: engine/vibes_auth/emailing/models.py:128 msgid "failed count" msgstr "mislukte telling" -#: engine/vibes_auth/emailing/models.py:165 +#: engine/vibes_auth/emailing/models.py:132 msgid "opened count" msgstr "geopende telling" -#: engine/vibes_auth/emailing/models.py:169 +#: engine/vibes_auth/emailing/models.py:136 msgid "clicked count" msgstr "aantal klikken" -#: engine/vibes_auth/emailing/models.py:173 +#: engine/vibes_auth/emailing/models.py:140 msgid "email campaign" msgstr "e-mailcampagne" -#: engine/vibes_auth/emailing/models.py:174 +#: engine/vibes_auth/emailing/models.py:141 msgid "email campaigns" msgstr "e-mailcampagnes" -#: engine/vibes_auth/emailing/models.py:194 +#: engine/vibes_auth/emailing/models.py:161 msgid "campaign" msgstr "campagne" -#: engine/vibes_auth/emailing/models.py:200 engine/vibes_auth/models.py:146 +#: engine/vibes_auth/emailing/models.py:167 engine/vibes_auth/models.py:183 msgid "user" msgstr "Gebruiker" -#: engine/vibes_auth/emailing/models.py:216 +#: engine/vibes_auth/emailing/models.py:183 msgid "opened at" msgstr "geopend om" -#: engine/vibes_auth/emailing/models.py:221 +#: engine/vibes_auth/emailing/models.py:188 msgid "clicked at" msgstr "aangeklikt op" -#: engine/vibes_auth/emailing/models.py:227 +#: engine/vibes_auth/emailing/models.py:194 msgid "tracking ID" msgstr "tracking-ID" -#: engine/vibes_auth/emailing/models.py:228 +#: engine/vibes_auth/emailing/models.py:195 msgid "unique ID for tracking opens and clicks" msgstr "unieke ID voor het bijhouden van opens en clicks" -#: engine/vibes_auth/emailing/models.py:233 +#: engine/vibes_auth/emailing/models.py:200 msgid "error message" msgstr "foutmelding" -#: engine/vibes_auth/emailing/models.py:234 +#: engine/vibes_auth/emailing/models.py:201 msgid "error details if sending failed" msgstr "foutdetails als verzenden mislukt is" -#: engine/vibes_auth/emailing/models.py:238 +#: engine/vibes_auth/emailing/models.py:205 msgid "campaign recipient" msgstr "campagneontvanger" -#: engine/vibes_auth/emailing/models.py:239 +#: engine/vibes_auth/emailing/models.py:206 msgid "campaign recipients" msgstr "ontvangers van de campagne" @@ -509,75 +624,75 @@ msgstr "" msgid "Unsubscribe" msgstr "Afmelden" -#: engine/vibes_auth/emailing/views.py:71 +#: engine/vibes_auth/emailing/views.py:39 msgid "Unsubscribe token is required." msgstr "Afmeldtoken is vereist." -#: engine/vibes_auth/emailing/views.py:79 +#: engine/vibes_auth/emailing/views.py:47 msgid "Invalid unsubscribe token format." msgstr "Ongeldig formaat van het afmeldtoken." -#: engine/vibes_auth/emailing/views.py:87 +#: engine/vibes_auth/emailing/views.py:55 msgid "User not found." msgstr "Gebruiker niet gevonden." -#: engine/vibes_auth/emailing/views.py:93 -msgid "You are already unsubscribed." -msgstr "Je bent al uitgeschreven." - -#: engine/vibes_auth/emailing/views.py:101 -msgid "You have been successfully unsubscribed from our emails." -msgstr "Je bent nu uitgeschreven voor onze e-mails." - -#: engine/vibes_auth/graphene/mutations.py:46 +#: engine/vibes_auth/graphene/mutations.py:47 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" "De b64-gecodeerde uuid van de gebruiker die de nieuwe gebruiker naar ons " "heeft doorverwezen." -#: engine/vibes_auth/graphene/mutations.py:68 +#: engine/vibes_auth/graphene/mutations.py:70 msgid "password too weak" msgstr "Het wachtwoord is te zwak" -#: engine/vibes_auth/graphene/mutations.py:128 +#: engine/vibes_auth/graphene/mutations.py:130 msgid "malformed email" msgstr "Misvormde e-mail" -#: engine/vibes_auth/graphene/mutations.py:140 +#: engine/vibes_auth/graphene/mutations.py:142 #: engine/vibes_auth/serializers.py:117 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Misvormd telefoonnummer: {phone_number}!" -#: engine/vibes_auth/graphene/mutations.py:165 +#: engine/vibes_auth/graphene/mutations.py:167 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Ongeldig attribuutformaat: {attribute_pair}!" -#: engine/vibes_auth/graphene/mutations.py:182 +#: engine/vibes_auth/graphene/mutations.py:184 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} bestaat niet: {uuid}!" -#: engine/vibes_auth/graphene/mutations.py:304 -#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180 +#: engine/vibes_auth/graphene/mutations.py:309 +#: engine/vibes_auth/viewsets.py:174 engine/vibes_auth/viewsets.py:198 msgid "activation link is invalid!" msgstr "Activeringslink is ongeldig!" -#: engine/vibes_auth/graphene/mutations.py:307 +#: engine/vibes_auth/graphene/mutations.py:312 msgid "account already activated..." msgstr "Account is al geactiveerd..." -#: engine/vibes_auth/graphene/mutations.py:314 -#: engine/vibes_auth/graphene/mutations.py:376 +#: engine/vibes_auth/graphene/mutations.py:319 +#: engine/vibes_auth/graphene/mutations.py:383 msgid "something went wrong: {e!s}" msgstr "Er ging iets mis: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:358 -#: engine/vibes_auth/viewsets.py:106 +#: engine/vibes_auth/graphene/mutations.py:365 +#: engine/vibes_auth/viewsets.py:109 msgid "token is invalid!" msgstr "Token is invalid!" +#: engine/vibes_auth/graphene/mutations.py:403 +msgid "only image files are allowed (jpg, png, gif, webp)" +msgstr "Alleen afbeeldingsbestanden zijn toegestaan (jpg, png, gif, webp)" + +#: engine/vibes_auth/graphene/mutations.py:406 +msgid "file size must not exceed 5 MB" +msgstr "De bestandsgrootte mag niet groter zijn dan 5 MB." + #: engine/vibes_auth/graphene/object_types.py:46 msgid "" "the products this user has viewed most recently (max 48), in " @@ -587,7 +702,7 @@ msgstr "" "omgekeerd-chronologische volgorde." #: engine/vibes_auth/graphene/object_types.py:49 -#: engine/vibes_auth/models.py:214 +#: engine/vibes_auth/models.py:270 msgid "groups" msgstr "Groepen" @@ -596,7 +711,7 @@ msgid "wishlist" msgstr "Verlanglijst" #: engine/vibes_auth/graphene/object_types.py:56 -#: engine/vibes_auth/models.py:70 +#: engine/vibes_auth/models.py:75 msgid "avatar" msgstr "Avatar" @@ -634,7 +749,7 @@ msgstr "" msgid "Assignee must be a staff user." msgstr "De toegewezen gebruiker moet een personeelsgebruiker zijn." -#: engine/vibes_auth/models.py:42 +#: engine/vibes_auth/models.py:44 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -653,123 +768,135 @@ msgstr "" "model is ontworpen voor specifieke gebruikssituaties voor verbeterd " "gebruikersbeheer." -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "email" msgstr "E-mail" -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "user email address" msgstr "E-mailadres gebruiker" -#: engine/vibes_auth/models.py:55 +#: engine/vibes_auth/models.py:57 msgid "phone_number" msgstr "Telefoonnummer" -#: engine/vibes_auth/models.py:60 +#: engine/vibes_auth/models.py:61 msgid "user phone number" msgstr "Telefoonnummer gebruiker" -#: engine/vibes_auth/models.py:66 +#: engine/vibes_auth/models.py:68 msgid "first_name" msgstr "Voornaam" -#: engine/vibes_auth/models.py:67 +#: engine/vibes_auth/models.py:71 msgid "last_name" msgstr "Achternaam" -#: engine/vibes_auth/models.py:73 +#: engine/vibes_auth/models.py:78 msgid "user profile image" msgstr "Afbeelding gebruikersprofiel" -#: engine/vibes_auth/models.py:78 +#: engine/vibes_auth/models.py:83 msgid "is verified" msgstr "Is geverifieerd" -#: engine/vibes_auth/models.py:79 +#: engine/vibes_auth/models.py:84 msgid "user verification status" msgstr "Verificatiestatus van de gebruiker" -#: engine/vibes_auth/models.py:82 +#: engine/vibes_auth/models.py:87 msgid "is_active" msgstr "Is actief" -#: engine/vibes_auth/models.py:84 +#: engine/vibes_auth/models.py:89 msgid "unselect this instead of deleting accounts" msgstr "Deselecteer dit in plaats van accounts te verwijderen" -#: engine/vibes_auth/models.py:87 +#: engine/vibes_auth/models.py:92 msgid "is_subscribed" msgstr "Is geabonneerd" -#: engine/vibes_auth/models.py:88 +#: engine/vibes_auth/models.py:93 msgid "user's newsletter subscription status" msgstr "Inschrijvingsstatus nieuwsbrief gebruiker" -#: engine/vibes_auth/models.py:92 +#: engine/vibes_auth/models.py:98 msgid "activation token" msgstr "Activeringstoken" -#: engine/vibes_auth/models.py:95 +#: engine/vibes_auth/models.py:103 +msgid "activation token created" +msgstr "Activeringstoken aangemaakt" + +#: engine/vibes_auth/models.py:107 msgid "unsubscribe token" msgstr "afmeldtoken" -#: engine/vibes_auth/models.py:96 +#: engine/vibes_auth/models.py:108 msgid "token for secure one-click unsubscribe from campaigns" msgstr "token voor veilig uitschrijven uit campagnes met één klik" -#: engine/vibes_auth/models.py:106 +#: engine/vibes_auth/models.py:118 msgid "attributes" msgstr "Attributen" -#: engine/vibes_auth/models.py:147 +#: engine/vibes_auth/models.py:184 msgid "users" msgstr "Gebruikers" -#: engine/vibes_auth/models.py:154 +#: engine/vibes_auth/models.py:202 +msgid "admin OTP code" +msgstr "Beheerder OTP-code" + +#: engine/vibes_auth/models.py:203 +msgid "admin OTP codes" +msgstr "Beheer OTP-codes" + +#: engine/vibes_auth/models.py:210 msgid "For anonymous threads" msgstr "Voor anonieme threads" -#: engine/vibes_auth/models.py:178 +#: engine/vibes_auth/models.py:234 msgid "Chat thread" msgstr "Draadje chatten" -#: engine/vibes_auth/models.py:179 +#: engine/vibes_auth/models.py:235 msgid "Chat threads" msgstr "Gespreksonderwerpen" -#: engine/vibes_auth/models.py:185 +#: engine/vibes_auth/models.py:241 msgid "provide user or email for anonymous thread." msgstr "gebruiker of e-mail opgeven voor anonieme thread." -#: engine/vibes_auth/models.py:188 +#: engine/vibes_auth/models.py:244 msgid "assignee must be a staff user." msgstr "De toegewezen gebruiker moet een personeelsgebruiker zijn." -#: engine/vibes_auth/models.py:206 +#: engine/vibes_auth/models.py:262 msgid "Chat message" msgstr "Chatbericht" -#: engine/vibes_auth/models.py:207 +#: engine/vibes_auth/models.py:263 msgid "Chat messages" msgstr "Chatberichten" -#: engine/vibes_auth/models.py:213 +#: engine/vibes_auth/models.py:269 msgid "group" msgstr "Groep" -#: engine/vibes_auth/models.py:220 +#: engine/vibes_auth/models.py:276 msgid "outstanding token" msgstr "Uitstekende penning" -#: engine/vibes_auth/models.py:221 +#: engine/vibes_auth/models.py:277 msgid "outstanding tokens" msgstr "Uitstaande tokens" -#: engine/vibes_auth/models.py:227 +#: engine/vibes_auth/models.py:283 msgid "blacklisted token" msgstr "Token op zwarte lijst" -#: engine/vibes_auth/models.py:228 +#: engine/vibes_auth/models.py:284 msgid "blacklisted tokens" msgstr "Tokens op de zwarte lijst" @@ -811,6 +938,10 @@ msgstr "Geen gebruiker uuid claim aanwezig in token" msgid "user does not exist" msgstr "Gebruiker bestaat niet" +#: engine/vibes_auth/templates/admin/verify_otp.html:27 +msgid "Verify" +msgstr "Verifiëren" + #: engine/vibes_auth/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "Wachtwoord opnieuw instellen" @@ -896,12 +1027,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "Vriendelijke groeten,
het %(project_name)s team" -#: engine/vibes_auth/utils/emailing.py:24 +#: engine/vibes_auth/utils/emailing.py:27 #, python-brace-format msgid "{settings.PROJECT_NAME} | Activate Account" msgstr "{settings.PROJECT_NAME} | Account activeren" -#: engine/vibes_auth/utils/emailing.py:63 +#: engine/vibes_auth/utils/emailing.py:66 #, python-brace-format msgid "{settings.PROJECT_NAME} | Reset Password" msgstr "{settings.PROJECT_NAME} | Wachtwoord opnieuw instellen" @@ -956,7 +1087,7 @@ msgstr "" msgid "the token is invalid" msgstr "Het token is ongeldig" -#: engine/vibes_auth/viewsets.py:44 +#: engine/vibes_auth/viewsets.py:47 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." @@ -964,10 +1095,18 @@ 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." -#: engine/vibes_auth/viewsets.py:113 +#: engine/vibes_auth/viewsets.py:116 msgid "password reset successfully" msgstr "Wachtwoord is succesvol gereset!" -#: engine/vibes_auth/viewsets.py:161 +#: engine/vibes_auth/viewsets.py:146 +msgid "" +"Account already registered but not yet activated. A new activation email has" +" been sent." +msgstr "" +"Account al geregistreerd, maar nog niet geactiveerd. Er is een nieuwe " +"activeringsmail verzonden." + +#: engine/vibes_auth/viewsets.py:179 msgid "account already activated!" msgstr "Je hebt de account al geactiveerd..." diff --git a/engine/vibes_auth/locale/no_NO/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/no_NO/LC_MESSAGES/django.mo index a243b752..c1cf11ee 100644 Binary files a/engine/vibes_auth/locale/no_NO/LC_MESSAGES/django.mo and b/engine/vibes_auth/locale/no_NO/LC_MESSAGES/django.mo differ diff --git a/engine/vibes_auth/locale/no_NO/LC_MESSAGES/django.po b/engine/vibes_auth/locale/no_NO/LC_MESSAGES/django.po index fe07290e..d4a853cb 100644 --- a/engine/vibes_auth/locale/no_NO/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/no_NO/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 03:06+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,32 +13,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:65 engine/vibes_auth/admin.py:66 +#: engine/vibes_auth/admin.py:64 engine/vibes_auth/admin.py:65 #: engine/vibes_auth/graphene/object_types.py:54 msgid "balance" msgstr "Balanse" -#: engine/vibes_auth/admin.py:74 +#: engine/vibes_auth/admin.py:73 msgid "order" msgstr "Bestilling" -#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:51 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:51 msgid "orders" msgstr "Bestillinger" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:84 msgid "personal info" msgstr "Personlig informasjon" -#: engine/vibes_auth/admin.py:89 engine/vibes_auth/graphene/object_types.py:50 +#: engine/vibes_auth/admin.py:88 engine/vibes_auth/graphene/object_types.py:50 msgid "permissions" msgstr "Tillatelser" -#: engine/vibes_auth/admin.py:102 +#: engine/vibes_auth/admin.py:101 msgid "important dates" msgstr "Viktige datoer" -#: engine/vibes_auth/admin.py:103 +#: engine/vibes_auth/admin.py:102 msgid "additional info" msgstr "Ytterligere informasjon" @@ -54,79 +54,83 @@ msgstr "Lukk utvalgte tråder" msgid "Open selected threads" msgstr "Åpne utvalgte tråder" -#: engine/vibes_auth/admin.py:208 -msgid "Preview" -msgstr "Forhåndsvisning" - -#: engine/vibes_auth/admin.py:209 engine/vibes_auth/admin.py:249 -#: engine/vibes_auth/admin.py:326 -msgid "Metadata" -msgstr "Metadata" - -#: engine/vibes_auth/admin.py:212 -msgid "preview" -msgstr "forhåndsvisning" - -#: engine/vibes_auth/admin.py:221 -msgid "image preview" -msgstr "bildeforhåndsvisning" - -#: engine/vibes_auth/admin.py:241 +#: engine/vibes_auth/admin.py:209 msgid "Content" msgstr "Innhold" -#: engine/vibes_auth/admin.py:243 +#: engine/vibes_auth/admin.py:211 msgid "Documentation" msgstr "Dokumentasjon" -#: engine/vibes_auth/admin.py:313 +#: engine/vibes_auth/admin.py:217 engine/vibes_auth/admin.py:294 +msgid "Metadata" +msgstr "Metadata" + +#: engine/vibes_auth/admin.py:281 msgid "Scheduling" msgstr "Planlegging" -#: engine/vibes_auth/admin.py:315 +#: engine/vibes_auth/admin.py:283 msgid "Statistics" msgstr "Statistikk" -#: engine/vibes_auth/admin.py:329 +#: engine/vibes_auth/admin.py:297 msgid "stats" msgstr "stats" -#: engine/vibes_auth/admin.py:335 +#: engine/vibes_auth/admin.py:303 msgid "Prepare recipients (subscribed users)" msgstr "Forbered mottakere (abonnenter)" -#: engine/vibes_auth/admin.py:343 +#: engine/vibes_auth/admin.py:311 msgid "Campaign '{}' is not in draft status." msgstr "Kampanjen '{}' er ikke i utkaststatus." -#: engine/vibes_auth/admin.py:350 +#: engine/vibes_auth/admin.py:318 msgid "Preparing recipients for campaign '{}'." msgstr "Forbereder mottakere for kampanjen '{}'." -#: engine/vibes_auth/admin.py:354 +#: engine/vibes_auth/admin.py:322 msgid "Send campaign now" msgstr "Send kampanje nå" -#: engine/vibes_auth/admin.py:362 +#: engine/vibes_auth/admin.py:330 msgid "Campaign '{}' cannot be sent (status: {})." msgstr "Kampanjen '{}' kan ikke sendes (status: {})." -#: engine/vibes_auth/admin.py:372 +#: engine/vibes_auth/admin.py:340 msgid "Campaign '{}' has no recipients. Prepare recipients first." msgstr "Kampanjen '{}' har ingen mottakere. Forbered mottakere først." -#: engine/vibes_auth/admin.py:383 +#: engine/vibes_auth/admin.py:351 msgid "Started sending campaign '{}'." msgstr "Begynte å sende kampanjen '{}'." -#: engine/vibes_auth/admin.py:387 +#: engine/vibes_auth/admin.py:355 msgid "Cancel campaign" msgstr "Avbryt kampanje" -#: engine/vibes_auth/admin.py:396 +#: engine/vibes_auth/admin.py:364 msgid "{} campaign(s) cancelled." msgstr "Kampanje(r) avlyst." +#: engine/vibes_auth/admin_site.py:24 +msgid "Verification code" +msgstr "Bekreftelseskode" + +#: engine/vibes_auth/admin_site.py:62 +msgid "A verification code has been sent to your email." +msgstr "En bekreftelseskode er sendt til din e-postadresse." + +#: engine/vibes_auth/admin_site.py:118 +msgid "Invalid or expired code. Please try again." +msgstr "Ugyldig eller utløpt kode. Prøv igjen." + +#: engine/vibes_auth/admin_site.py:124 +#: engine/vibes_auth/templates/admin/verify_otp.html:10 +msgid "Two-factor authentication" +msgstr "To-faktor-autentisering" + #: engine/vibes_auth/apps.py:8 msgid "Accounting" msgstr "Regnskap" @@ -151,6 +155,143 @@ msgstr "Staben" msgid "System" msgstr "System" +#: engine/vibes_auth/docs/drf/emailing.py:18 +msgid "" +"UUID token for unsubscribing. This token is unique per user and is included " +"in the unsubscribe link of every campaign email. The token remains constant " +"for each user unless regenerated." +msgstr "" +"UUID-token for avmelding. Denne tokenen er unik for hver bruker og er " +"inkludert i avmeldingslenken i hver kampanje-e-post. Tokenen forblir " +"konstant for hver bruker med mindre den genereres på nytt." + +#: engine/vibes_auth/docs/drf/emailing.py:37 +#: engine/vibes_auth/emailing/views.py:69 +msgid "You have been successfully unsubscribed from our emails." +msgstr "Du har nå meldt deg av våre e-poster." + +#: engine/vibes_auth/docs/drf/emailing.py:45 +#: engine/vibes_auth/emailing/views.py:61 +msgid "You are already unsubscribed." +msgstr "Du er allerede meldt av." + +#: engine/vibes_auth/docs/drf/emailing.py:52 +msgid "Unsubscribe from email campaigns" +msgstr "Meld deg av e-postkampanjer" + +#: engine/vibes_auth/docs/drf/emailing.py:54 +msgid "" +"Unsubscribe a user from all marketing email campaigns using their unique unsubscribe token.\n" +"\n" +"This endpoint is designed for email client compatibility where clicking a link triggers a GET request. The user will no longer receive promotional emails after successful unsubscription.\n" +"\n" +"**Note:** Transactional emails (order confirmations, password resets, etc.) are not affected by this setting." +msgstr "" +"Avmeld en bruker fra alle markedsføringskampanjer via e-post ved hjelp av " +"deres unike avmeldingstoken. Dette endepunktet er designet for " +"kompatibilitet med e-postklienter der et klikk på en lenke utløser en GET-" +"forespørsel. Brukeren vil ikke lenger motta markedsførings-e-poster etter " +"vellykket avmelding. **Merk:** Transaksjons-e-poster (ordrebekreftelser, " +"tilbakestilling av passord osv.) påvirkes ikke av denne innstillingen." + +#: engine/vibes_auth/docs/drf/emailing.py:66 +#: engine/vibes_auth/docs/drf/emailing.py:146 +msgid "Successfully unsubscribed from email campaigns." +msgstr "Du har nå meldt deg av e-postkampanjer." + +#: engine/vibes_auth/docs/drf/emailing.py:82 +#: engine/vibes_auth/docs/drf/emailing.py:162 +msgid "Invalid or missing unsubscribe token." +msgstr "Ugyldig eller manglende avmeldingstoken." + +#: engine/vibes_auth/docs/drf/emailing.py:96 +#: engine/vibes_auth/docs/drf/emailing.py:176 +msgid "User associated with the token was not found." +msgstr "Brukeren knyttet til tokenet ble ikke funnet." + +#: engine/vibes_auth/docs/drf/emailing.py:118 +msgid "One-Click Unsubscribe (RFC 8058)" +msgstr "Avmelding med ett klikk (RFC 8058)" + +#: engine/vibes_auth/docs/drf/emailing.py:120 +msgid "" +"RFC 8058 compliant one-click unsubscribe endpoint for email campaigns.\n" +"\n" +"This endpoint supports the List-Unsubscribe-Post header mechanism defined in RFC 8058, which allows email clients to unsubscribe users with a single click without leaving the email application.\n" +"\n" +"The token can be provided either as a query parameter or in the request body.\n" +"\n" +"**Standards Compliance:**\n" +"- RFC 8058: Signaling One-Click Functionality for List Email Headers\n" +"- RFC 2369: The Use of URLs as Meta-Syntax for Core Mail List Commands\n" +"\n" +"**Note:** Transactional emails are not affected by this setting." +msgstr "" +"RFC 8058-kompatibel endepunkt for avmelding med ett klikk for e-postkampanjer. Dette endepunktet støtter List-Unsubscribe-Post-header-mekanismen definert i RFC 8058, som gjør det mulig for e-postklienter å avmelde brukere med ett enkelt klikk uten å forlate e-postprogrammet. Token kan leveres enten som en spørringsparameter eller i forespørselsteksten.\n" +"\n" +"**Overholdelse av standarder:** - RFC 8058: Signalisering av én-klikk-funksjonalitet for e-postoverskrifter - RFC 2369: Bruk av URL-er som metasyntax for sentrale e-postlistekommandoer **Merk:** Transaksjons-e-poster påvirkes ikke av denne innstillingen." + +#: engine/vibes_auth/docs/drf/emailing.py:137 +msgid "" +"Unsubscribe token (alternative to query parameter). Can be omitted if token " +"is provided in URL." +msgstr "" +"Avmeldingstoken (alternativ til spørringsparameter). Kan utelates hvis token" +" er angitt i URL-en." + +#: engine/vibes_auth/docs/drf/emailing.py:200 +msgid "Track email open event" +msgstr "Spor e-poståpningshendelse" + +#: engine/vibes_auth/docs/drf/emailing.py:202 +msgid "" +"Records when a campaign email is opened by the recipient.\n" +"\n" +"This endpoint is called automatically when the tracking pixel (1x1 transparent GIF) embedded in the email is loaded by the recipient's email client.\n" +"\n" +"**How it works:**\n" +"1. Each campaign email contains a unique tracking pixel URL with a `tid` parameter\n" +"2. When the email is opened and images are loaded, this endpoint is called\n" +"3. The recipient's status is updated to 'opened' and the timestamp is recorded\n" +"4. The campaign's aggregate opened count is updated\n" +"\n" +"**Privacy considerations:**\n" +"- Only the first open is recorded (subsequent opens are ignored)\n" +"- No personal information beyond the tracking ID is logged\n" +"- Users who disable image loading will not trigger this event\n" +"\n" +"**Response:**\n" +"Returns a 1x1 transparent GIF image regardless of whether tracking succeeded, to ensure consistent behavior and prevent information leakage." +msgstr "" +"Registrerer når en kampanje-e-post åpnes av mottakeren. Dette endepunktet kalles automatisk når sporingspikselen (1x1 gjennomsiktig GIF) som er innebygd i e-posten, lastes inn av mottakerens e-postklient.\n" +"\n" +"**Slik fungerer det:** 1. Hver kampanje-e-post inneholder en unik sporingspiksel-URL med en `tid`-parameter. 2. Når e-posten åpnes og bildene lastes inn, kalles dette endepunktet. 3. Mottakerens status oppdateres til «åpnet», og tidsstemplet registreres. 4. Kampanjens samlede antall åpninger oppdateres. **Personvern:**\n" +"- Bare den første åpningen registreres (påfølgende åpninger ignoreres) - Ingen personlig informasjon utover sporings-ID-en logges - Brukere som deaktiverer bildeinnlasting, vil ikke utløse denne hendelsen **Respons:** Returnerer et 1x1 gjennomsiktig GIF-bilde uavhengig av om sporingen lyktes, for å sikre konsistent oppførsel og forhindre informasjonslekkasje." + +#: engine/vibes_auth/docs/drf/emailing.py:223 +msgid "" +"Tracking ID (UUID) unique to each campaign-recipient combination. This ID " +"links the open event to a specific recipient and campaign." +msgstr "" +"Sporings-ID (UUID) som er unik for hver kombinasjon av kampanje og mottaker." +" Denne ID-en knytter åpningshendelsen til en bestemt mottaker og kampanje." + +#: engine/vibes_auth/docs/drf/emailing.py:241 +msgid "" +"1x1 transparent GIF image. Always returned regardless of tracking status to " +"maintain consistent behavior." +msgstr "" +"1x1 gjennomsiktig GIF-bilde. Returneres alltid uavhengig av sporingsstatus " +"for å opprettholde konsistent oppførsel." + +#: engine/vibes_auth/docs/drf/emailing.py:247 +msgid "" +"Returned when no tracking ID is provided. Note: Invalid tracking IDs still " +"return 200 with the GIF to prevent enumeration attacks." +msgstr "" +"Returneres når ingen sporings-ID er oppgitt. Merk: Ugyldige sporings-ID-er " +"returnerer fortsatt 200 med GIF for å forhindre oppregningsangrep." + #: engine/vibes_auth/docs/drf/messaging.py:17 msgid "User messages entrypoint" msgstr "Inngangspunkt for brukermeldinger" @@ -246,9 +387,9 @@ msgid "confirm a user's password reset" msgstr "Bekreft tilbakestilling av en brukers passord" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:351 +#: engine/vibes_auth/graphene/mutations.py:358 #: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107 -#: engine/vibes_auth/viewsets.py:94 +#: engine/vibes_auth/viewsets.py:97 msgid "passwords do not match" msgstr "Passordene stemmer ikke overens" @@ -301,195 +442,166 @@ msgstr "Åpnet" msgid "Clicked" msgstr "Klikket" -#: engine/vibes_auth/emailing/models.py:35 -#: engine/vibes_auth/emailing/models.py:71 -#: engine/vibes_auth/emailing/models.py:121 +#: engine/vibes_auth/emailing/models.py:38 +#: engine/vibes_auth/emailing/models.py:88 msgid "name" msgstr "navn" -#: engine/vibes_auth/emailing/models.py:36 -msgid "descriptive name for the image" -msgstr "beskrivende navn for bildet" - -#: engine/vibes_auth/emailing/models.py:40 -msgid "image" -msgstr "bilde" - -#: engine/vibes_auth/emailing/models.py:41 -msgid "image file to use in email templates" -msgstr "bildefil som skal brukes i e-postmaler" - -#: engine/vibes_auth/emailing/models.py:47 -msgid "alt text" -msgstr "annen tekst" - -#: engine/vibes_auth/emailing/models.py:48 -msgid "alternative text for accessibility" -msgstr "alternativ tekst for tilgjengelighet" - -#: engine/vibes_auth/emailing/models.py:52 -msgid "email image" -msgstr "e-postbilde" - -#: engine/vibes_auth/emailing/models.py:53 -msgid "email images" -msgstr "e-postbilder" - -#: engine/vibes_auth/emailing/models.py:72 +#: engine/vibes_auth/emailing/models.py:39 msgid "internal name for the template" msgstr "internt navn for malen" -#: engine/vibes_auth/emailing/models.py:76 +#: engine/vibes_auth/emailing/models.py:43 msgid "slug" msgstr "tjenere" -#: engine/vibes_auth/emailing/models.py:77 +#: engine/vibes_auth/emailing/models.py:44 msgid "unique identifier for the template" msgstr "unik identifikator for malen" -#: engine/vibes_auth/emailing/models.py:81 +#: engine/vibes_auth/emailing/models.py:48 msgid "subject" msgstr "emne" -#: engine/vibes_auth/emailing/models.py:82 +#: engine/vibes_auth/emailing/models.py:49 msgid "email subject line - supports {{ variables }}" msgstr "e-postens emnelinje - støtter {{ variables }}" -#: engine/vibes_auth/emailing/models.py:85 -msgid "HTML content" -msgstr "HTML-innhold" +#: engine/vibes_auth/emailing/models.py:52 +msgid "content" +msgstr "innhold" -#: engine/vibes_auth/emailing/models.py:87 +#: engine/vibes_auth/emailing/models.py:54 msgid "" -"email body content - supports {{ user.first_name }}, {{ user.email }}, {{ " -"project_name }}, {{ unsubscribe_url }}" +"email body in markdown - supports {{ user.first_name }}, {{ user.email }}, " +"{{ project_name }}, {{ unsubscribe_url }}" msgstr "" "e-postinnhold - støtter {{ user.first_name }}, {{ user.email }}, {{ " "project_name }}, {{ unsubscribe_url }}" -#: engine/vibes_auth/emailing/models.py:94 +#: engine/vibes_auth/emailing/models.py:61 msgid "plain text content" msgstr "ren tekstinnhold" -#: engine/vibes_auth/emailing/models.py:95 +#: engine/vibes_auth/emailing/models.py:62 msgid "plain text fallback (auto-generated if empty)" msgstr "ren tekst som reserve (genereres automatisk hvis tom)" -#: engine/vibes_auth/emailing/models.py:100 +#: engine/vibes_auth/emailing/models.py:67 msgid "available variables" msgstr "tilgjengelige variabler" -#: engine/vibes_auth/emailing/models.py:101 +#: engine/vibes_auth/emailing/models.py:68 msgid "documentation of available template variables" msgstr "dokumentasjon av tilgjengelige malvariabler" -#: engine/vibes_auth/emailing/models.py:105 +#: engine/vibes_auth/emailing/models.py:72 msgid "email template" msgstr "e-postmal" -#: engine/vibes_auth/emailing/models.py:106 +#: engine/vibes_auth/emailing/models.py:73 msgid "email templates" msgstr "e-postmaler" -#: engine/vibes_auth/emailing/models.py:122 +#: engine/vibes_auth/emailing/models.py:89 msgid "internal name for the campaign" msgstr "internt navn for kampanjen" -#: engine/vibes_auth/emailing/models.py:129 +#: engine/vibes_auth/emailing/models.py:96 msgid "template" msgstr "mal" -#: engine/vibes_auth/emailing/models.py:130 +#: engine/vibes_auth/emailing/models.py:97 msgid "email template to use for this campaign" msgstr "E-postmal som skal brukes til denne kampanjen" -#: engine/vibes_auth/emailing/models.py:136 -#: engine/vibes_auth/emailing/models.py:206 +#: engine/vibes_auth/emailing/models.py:103 +#: engine/vibes_auth/emailing/models.py:173 msgid "status" msgstr "status" -#: engine/vibes_auth/emailing/models.py:141 +#: engine/vibes_auth/emailing/models.py:108 msgid "scheduled at" msgstr "planlagt til" -#: engine/vibes_auth/emailing/models.py:142 +#: engine/vibes_auth/emailing/models.py:109 msgid "when to send the campaign (leave empty for manual send)" msgstr "når kampanjen skal sendes (la feltet stå tomt for manuell sending)" -#: engine/vibes_auth/emailing/models.py:147 -#: engine/vibes_auth/emailing/models.py:211 +#: engine/vibes_auth/emailing/models.py:114 +#: engine/vibes_auth/emailing/models.py:178 msgid "sent at" msgstr "sent at" -#: engine/vibes_auth/emailing/models.py:148 +#: engine/vibes_auth/emailing/models.py:115 msgid "when the campaign was actually sent" msgstr "når kampanjen faktisk ble sendt" -#: engine/vibes_auth/emailing/models.py:153 +#: engine/vibes_auth/emailing/models.py:120 msgid "total recipients" msgstr "totalt antall mottakere" -#: engine/vibes_auth/emailing/models.py:157 +#: engine/vibes_auth/emailing/models.py:124 msgid "sent count" msgstr "sendt antall" -#: engine/vibes_auth/emailing/models.py:161 +#: engine/vibes_auth/emailing/models.py:128 msgid "failed count" msgstr "mislykket telling" -#: engine/vibes_auth/emailing/models.py:165 +#: engine/vibes_auth/emailing/models.py:132 msgid "opened count" msgstr "åpnet telling" -#: engine/vibes_auth/emailing/models.py:169 +#: engine/vibes_auth/emailing/models.py:136 msgid "clicked count" msgstr "antall klikk" -#: engine/vibes_auth/emailing/models.py:173 +#: engine/vibes_auth/emailing/models.py:140 msgid "email campaign" msgstr "e-postkampanje" -#: engine/vibes_auth/emailing/models.py:174 +#: engine/vibes_auth/emailing/models.py:141 msgid "email campaigns" msgstr "e-postkampanjer" -#: engine/vibes_auth/emailing/models.py:194 +#: engine/vibes_auth/emailing/models.py:161 msgid "campaign" msgstr "kampanje" -#: engine/vibes_auth/emailing/models.py:200 engine/vibes_auth/models.py:146 +#: engine/vibes_auth/emailing/models.py:167 engine/vibes_auth/models.py:183 msgid "user" msgstr "Bruker" -#: engine/vibes_auth/emailing/models.py:216 +#: engine/vibes_auth/emailing/models.py:183 msgid "opened at" msgstr "åpnet kl." -#: engine/vibes_auth/emailing/models.py:221 +#: engine/vibes_auth/emailing/models.py:188 msgid "clicked at" msgstr "klikk på" -#: engine/vibes_auth/emailing/models.py:227 +#: engine/vibes_auth/emailing/models.py:194 msgid "tracking ID" msgstr "sporings-ID" -#: engine/vibes_auth/emailing/models.py:228 +#: engine/vibes_auth/emailing/models.py:195 msgid "unique ID for tracking opens and clicks" msgstr "unik ID for sporing av åpninger og klikk" -#: engine/vibes_auth/emailing/models.py:233 +#: engine/vibes_auth/emailing/models.py:200 msgid "error message" msgstr "feilmelding" -#: engine/vibes_auth/emailing/models.py:234 +#: engine/vibes_auth/emailing/models.py:201 msgid "error details if sending failed" msgstr "feildetaljer hvis sending mislyktes" -#: engine/vibes_auth/emailing/models.py:238 +#: engine/vibes_auth/emailing/models.py:205 msgid "campaign recipient" msgstr "kampanjemottaker" -#: engine/vibes_auth/emailing/models.py:239 +#: engine/vibes_auth/emailing/models.py:206 msgid "campaign recipients" msgstr "kampanjemottakere" @@ -506,73 +618,73 @@ msgstr "" msgid "Unsubscribe" msgstr "Avmeld" -#: engine/vibes_auth/emailing/views.py:71 +#: engine/vibes_auth/emailing/views.py:39 msgid "Unsubscribe token is required." msgstr "Avmeldingstoken er påkrevd." -#: engine/vibes_auth/emailing/views.py:79 +#: engine/vibes_auth/emailing/views.py:47 msgid "Invalid unsubscribe token format." msgstr "Ugyldig format for avmeldingstoken." -#: engine/vibes_auth/emailing/views.py:87 +#: engine/vibes_auth/emailing/views.py:55 msgid "User not found." msgstr "Bruker ikke funnet." -#: engine/vibes_auth/emailing/views.py:93 -msgid "You are already unsubscribed." -msgstr "Du er allerede meldt av." - -#: engine/vibes_auth/emailing/views.py:101 -msgid "You have been successfully unsubscribed from our emails." -msgstr "Du har nå meldt deg av våre e-poster." - -#: engine/vibes_auth/graphene/mutations.py:46 +#: engine/vibes_auth/graphene/mutations.py:47 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "Brukerens b64-kodede uuid som henviste den nye brukeren til oss." -#: engine/vibes_auth/graphene/mutations.py:68 +#: engine/vibes_auth/graphene/mutations.py:70 msgid "password too weak" msgstr "Passordet er for svakt" -#: engine/vibes_auth/graphene/mutations.py:128 +#: engine/vibes_auth/graphene/mutations.py:130 msgid "malformed email" msgstr "Feilaktig e-post" -#: engine/vibes_auth/graphene/mutations.py:140 +#: engine/vibes_auth/graphene/mutations.py:142 #: engine/vibes_auth/serializers.py:117 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Feilaktig telefonnummer: {phone_number}!" -#: engine/vibes_auth/graphene/mutations.py:165 +#: engine/vibes_auth/graphene/mutations.py:167 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Ugyldig attributtformat: {attribute_pair}!" -#: engine/vibes_auth/graphene/mutations.py:182 +#: engine/vibes_auth/graphene/mutations.py:184 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} eksisterer ikke: {uuid}!" -#: engine/vibes_auth/graphene/mutations.py:304 -#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180 +#: engine/vibes_auth/graphene/mutations.py:309 +#: engine/vibes_auth/viewsets.py:174 engine/vibes_auth/viewsets.py:198 msgid "activation link is invalid!" msgstr "Aktiveringslenken er ugyldig!" -#: engine/vibes_auth/graphene/mutations.py:307 +#: engine/vibes_auth/graphene/mutations.py:312 msgid "account already activated..." msgstr "Kontoen er allerede aktivert..." -#: engine/vibes_auth/graphene/mutations.py:314 -#: engine/vibes_auth/graphene/mutations.py:376 +#: engine/vibes_auth/graphene/mutations.py:319 +#: engine/vibes_auth/graphene/mutations.py:383 msgid "something went wrong: {e!s}" msgstr "Noe gikk galt: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:358 -#: engine/vibes_auth/viewsets.py:106 +#: engine/vibes_auth/graphene/mutations.py:365 +#: engine/vibes_auth/viewsets.py:109 msgid "token is invalid!" msgstr "Tokenet er ugyldig!" +#: engine/vibes_auth/graphene/mutations.py:403 +msgid "only image files are allowed (jpg, png, gif, webp)" +msgstr "Bare bildefiler er tillatt (jpg, png, gif, webp)" + +#: engine/vibes_auth/graphene/mutations.py:406 +msgid "file size must not exceed 5 MB" +msgstr "Filstørrelsen må ikke overstige 5 MB." + #: engine/vibes_auth/graphene/object_types.py:46 msgid "" "the products this user has viewed most recently (max 48), in " @@ -582,7 +694,7 @@ msgstr "" "kronologisk rekkefølge." #: engine/vibes_auth/graphene/object_types.py:49 -#: engine/vibes_auth/models.py:214 +#: engine/vibes_auth/models.py:270 msgid "groups" msgstr "Grupper" @@ -591,7 +703,7 @@ msgid "wishlist" msgstr "Ønskeliste" #: engine/vibes_auth/graphene/object_types.py:56 -#: engine/vibes_auth/models.py:70 +#: engine/vibes_auth/models.py:75 msgid "avatar" msgstr "Avatar" @@ -627,7 +739,7 @@ msgstr "Vi leter etter operatøren som kan svare deg allerede, vent litt!" msgid "Assignee must be a staff user." msgstr "Mottaker må være en ansatt bruker." -#: engine/vibes_auth/models.py:42 +#: engine/vibes_auth/models.py:44 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -645,123 +757,135 @@ msgstr "" "aktivering for å verifisere kontoer. User-modellen er utformet for å " "håndtere spesifikke brukstilfeller for forbedret brukeradministrasjon." -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "email" msgstr "E-post" -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "user email address" msgstr "Brukerens e-postadresse" -#: engine/vibes_auth/models.py:55 +#: engine/vibes_auth/models.py:57 msgid "phone_number" msgstr "Telefonnummer" -#: engine/vibes_auth/models.py:60 +#: engine/vibes_auth/models.py:61 msgid "user phone number" msgstr "Brukerens telefonnummer" -#: engine/vibes_auth/models.py:66 +#: engine/vibes_auth/models.py:68 msgid "first_name" msgstr "Fornavn" -#: engine/vibes_auth/models.py:67 +#: engine/vibes_auth/models.py:71 msgid "last_name" msgstr "Etternavn" -#: engine/vibes_auth/models.py:73 +#: engine/vibes_auth/models.py:78 msgid "user profile image" msgstr "Bilde av brukerprofil" -#: engine/vibes_auth/models.py:78 +#: engine/vibes_auth/models.py:83 msgid "is verified" msgstr "Er verifisert" -#: engine/vibes_auth/models.py:79 +#: engine/vibes_auth/models.py:84 msgid "user verification status" msgstr "Brukerens bekreftelsesstatus" -#: engine/vibes_auth/models.py:82 +#: engine/vibes_auth/models.py:87 msgid "is_active" msgstr "Er aktiv" -#: engine/vibes_auth/models.py:84 +#: engine/vibes_auth/models.py:89 msgid "unselect this instead of deleting accounts" msgstr "Fjern dette valget i stedet for å slette kontoer" -#: engine/vibes_auth/models.py:87 +#: engine/vibes_auth/models.py:92 msgid "is_subscribed" msgstr "Er abonnert" -#: engine/vibes_auth/models.py:88 +#: engine/vibes_auth/models.py:93 msgid "user's newsletter subscription status" msgstr "Status for brukerens abonnement på nyhetsbrev" -#: engine/vibes_auth/models.py:92 +#: engine/vibes_auth/models.py:98 msgid "activation token" msgstr "Aktiveringstoken" -#: engine/vibes_auth/models.py:95 +#: engine/vibes_auth/models.py:103 +msgid "activation token created" +msgstr "Aktiveringstoken opprettet" + +#: engine/vibes_auth/models.py:107 msgid "unsubscribe token" msgstr "avmeldingstoken" -#: engine/vibes_auth/models.py:96 +#: engine/vibes_auth/models.py:108 msgid "token for secure one-click unsubscribe from campaigns" msgstr "token for sikker avmelding fra kampanjer med ett klikk" -#: engine/vibes_auth/models.py:106 +#: engine/vibes_auth/models.py:118 msgid "attributes" msgstr "Egenskaper" -#: engine/vibes_auth/models.py:147 +#: engine/vibes_auth/models.py:184 msgid "users" msgstr "Brukere" -#: engine/vibes_auth/models.py:154 +#: engine/vibes_auth/models.py:202 +msgid "admin OTP code" +msgstr "Admin OTP-kode" + +#: engine/vibes_auth/models.py:203 +msgid "admin OTP codes" +msgstr "Admin OTP-koder" + +#: engine/vibes_auth/models.py:210 msgid "For anonymous threads" msgstr "For anonyme tråder" -#: engine/vibes_auth/models.py:178 +#: engine/vibes_auth/models.py:234 msgid "Chat thread" msgstr "Chat-tråd" -#: engine/vibes_auth/models.py:179 +#: engine/vibes_auth/models.py:235 msgid "Chat threads" msgstr "Chat-tråder" -#: engine/vibes_auth/models.py:185 +#: engine/vibes_auth/models.py:241 msgid "provide user or email for anonymous thread." msgstr "oppgi bruker eller e-post for anonym tråd." -#: engine/vibes_auth/models.py:188 +#: engine/vibes_auth/models.py:244 msgid "assignee must be a staff user." msgstr "mottakeren må være en personalbruker." -#: engine/vibes_auth/models.py:206 +#: engine/vibes_auth/models.py:262 msgid "Chat message" msgstr "Chat-melding" -#: engine/vibes_auth/models.py:207 +#: engine/vibes_auth/models.py:263 msgid "Chat messages" msgstr "Chat-meldinger" -#: engine/vibes_auth/models.py:213 +#: engine/vibes_auth/models.py:269 msgid "group" msgstr "Gruppe" -#: engine/vibes_auth/models.py:220 +#: engine/vibes_auth/models.py:276 msgid "outstanding token" msgstr "Enestående symbol" -#: engine/vibes_auth/models.py:221 +#: engine/vibes_auth/models.py:277 msgid "outstanding tokens" msgstr "Outstanding tokens" -#: engine/vibes_auth/models.py:227 +#: engine/vibes_auth/models.py:283 msgid "blacklisted token" msgstr "Svartelistet token" -#: engine/vibes_auth/models.py:228 +#: engine/vibes_auth/models.py:284 msgid "blacklisted tokens" msgstr "Svartelistede tokens" @@ -804,6 +928,10 @@ msgstr "Ingen bruker-uuid-krav i tokenet" msgid "user does not exist" msgstr "Brukeren eksisterer ikke" +#: engine/vibes_auth/templates/admin/verify_otp.html:27 +msgid "Verify" +msgstr "Bekreft" + #: engine/vibes_auth/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "Tilbakestill passordet ditt" @@ -889,12 +1017,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "Med vennlig hilsen,
teamet %(project_name)s" -#: engine/vibes_auth/utils/emailing.py:24 +#: engine/vibes_auth/utils/emailing.py:27 #, python-brace-format msgid "{settings.PROJECT_NAME} | Activate Account" msgstr "{settings.PROJECT_NAME} | Aktiver konto" -#: engine/vibes_auth/utils/emailing.py:63 +#: engine/vibes_auth/utils/emailing.py:66 #, python-brace-format msgid "{settings.PROJECT_NAME} | Reset Password" msgstr "{settings.PROJECT_NAME} | Tilbakestill passord" @@ -949,7 +1077,7 @@ msgstr "" msgid "the token is invalid" msgstr "Tokenet er ugyldig" -#: engine/vibes_auth/viewsets.py:44 +#: engine/vibes_auth/viewsets.py:47 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." @@ -957,10 +1085,18 @@ 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." -#: engine/vibes_auth/viewsets.py:113 +#: engine/vibes_auth/viewsets.py:116 msgid "password reset successfully" msgstr "Passordet har blitt tilbakestilt!" -#: engine/vibes_auth/viewsets.py:161 +#: engine/vibes_auth/viewsets.py:146 +msgid "" +"Account already registered but not yet activated. A new activation email has" +" been sent." +msgstr "" +"Kontoen er allerede registrert, men ikke aktivert ennå. En ny aktiverings-e-" +"post er sendt." + +#: engine/vibes_auth/viewsets.py:179 msgid "account already activated!" msgstr "Du har allerede aktivert kontoen..." diff --git a/engine/vibes_auth/locale/pl_PL/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/pl_PL/LC_MESSAGES/django.mo index 1a1ffd68..c1d84f2f 100644 Binary files a/engine/vibes_auth/locale/pl_PL/LC_MESSAGES/django.mo and b/engine/vibes_auth/locale/pl_PL/LC_MESSAGES/django.mo differ diff --git a/engine/vibes_auth/locale/pl_PL/LC_MESSAGES/django.po b/engine/vibes_auth/locale/pl_PL/LC_MESSAGES/django.po index 881c4059..4f8ae583 100644 --- a/engine/vibes_auth/locale/pl_PL/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/pl_PL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 03:06+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,32 +13,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:65 engine/vibes_auth/admin.py:66 +#: engine/vibes_auth/admin.py:64 engine/vibes_auth/admin.py:65 #: engine/vibes_auth/graphene/object_types.py:54 msgid "balance" msgstr "Równowaga" -#: engine/vibes_auth/admin.py:74 +#: engine/vibes_auth/admin.py:73 msgid "order" msgstr "Zamówienie" -#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:51 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:51 msgid "orders" msgstr "Zamówienia" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:84 msgid "personal info" msgstr "Informacje osobiste" -#: engine/vibes_auth/admin.py:89 engine/vibes_auth/graphene/object_types.py:50 +#: engine/vibes_auth/admin.py:88 engine/vibes_auth/graphene/object_types.py:50 msgid "permissions" msgstr "Uprawnienia" -#: engine/vibes_auth/admin.py:102 +#: engine/vibes_auth/admin.py:101 msgid "important dates" msgstr "Ważne daty" -#: engine/vibes_auth/admin.py:103 +#: engine/vibes_auth/admin.py:102 msgid "additional info" msgstr "Dodatkowe informacje" @@ -54,79 +54,83 @@ msgstr "Zamykanie wybranych wątków" msgid "Open selected threads" msgstr "Otwieranie wybranych wątków" -#: engine/vibes_auth/admin.py:208 -msgid "Preview" -msgstr "Podgląd" - -#: engine/vibes_auth/admin.py:209 engine/vibes_auth/admin.py:249 -#: engine/vibes_auth/admin.py:326 -msgid "Metadata" -msgstr "Metadane" - -#: engine/vibes_auth/admin.py:212 -msgid "preview" -msgstr "podgląd" - -#: engine/vibes_auth/admin.py:221 -msgid "image preview" -msgstr "podgląd obrazu" - -#: engine/vibes_auth/admin.py:241 +#: engine/vibes_auth/admin.py:209 msgid "Content" msgstr "Treść" -#: engine/vibes_auth/admin.py:243 +#: engine/vibes_auth/admin.py:211 msgid "Documentation" msgstr "Dokumentacja" -#: engine/vibes_auth/admin.py:313 +#: engine/vibes_auth/admin.py:217 engine/vibes_auth/admin.py:294 +msgid "Metadata" +msgstr "Metadane" + +#: engine/vibes_auth/admin.py:281 msgid "Scheduling" msgstr "Planowanie" -#: engine/vibes_auth/admin.py:315 +#: engine/vibes_auth/admin.py:283 msgid "Statistics" msgstr "Statystyki" -#: engine/vibes_auth/admin.py:329 +#: engine/vibes_auth/admin.py:297 msgid "stats" msgstr "państwowy" -#: engine/vibes_auth/admin.py:335 +#: engine/vibes_auth/admin.py:303 msgid "Prepare recipients (subscribed users)" msgstr "Przygotuj odbiorców (zarejestrowanych użytkowników)" -#: engine/vibes_auth/admin.py:343 +#: engine/vibes_auth/admin.py:311 msgid "Campaign '{}' is not in draft status." msgstr "Kampania „{}” nie ma statusu wersji roboczej." -#: engine/vibes_auth/admin.py:350 +#: engine/vibes_auth/admin.py:318 msgid "Preparing recipients for campaign '{}'." msgstr "Przygotowanie odbiorców do kampanii „{}”." -#: engine/vibes_auth/admin.py:354 +#: engine/vibes_auth/admin.py:322 msgid "Send campaign now" msgstr "Wyślij kampanię teraz" -#: engine/vibes_auth/admin.py:362 +#: engine/vibes_auth/admin.py:330 msgid "Campaign '{}' cannot be sent (status: {})." msgstr "Nie można wysłać kampanii „{}” (status: {})." -#: engine/vibes_auth/admin.py:372 +#: engine/vibes_auth/admin.py:340 msgid "Campaign '{}' has no recipients. Prepare recipients first." msgstr "Kampania „{}” nie ma odbiorców. Najpierw przygotuj odbiorców." -#: engine/vibes_auth/admin.py:383 +#: engine/vibes_auth/admin.py:351 msgid "Started sending campaign '{}'." msgstr "Rozpoczęto wysyłanie kampanii „{}”." -#: engine/vibes_auth/admin.py:387 +#: engine/vibes_auth/admin.py:355 msgid "Cancel campaign" msgstr "Anuluj kampanię" -#: engine/vibes_auth/admin.py:396 +#: engine/vibes_auth/admin.py:364 msgid "{} campaign(s) cancelled." msgstr "{} kampania(-e) anulowana(-e)." +#: engine/vibes_auth/admin_site.py:24 +msgid "Verification code" +msgstr "Kod weryfikacyjny" + +#: engine/vibes_auth/admin_site.py:62 +msgid "A verification code has been sent to your email." +msgstr "Kod weryfikacyjny został wysłany na Twój adres e-mail." + +#: engine/vibes_auth/admin_site.py:118 +msgid "Invalid or expired code. Please try again." +msgstr "Nieprawidłowy lub wygasły kod. Spróbuj ponownie." + +#: engine/vibes_auth/admin_site.py:124 +#: engine/vibes_auth/templates/admin/verify_otp.html:10 +msgid "Two-factor authentication" +msgstr "Uwierzytelnianie dwuskładnikowe" + #: engine/vibes_auth/apps.py:8 msgid "Accounting" msgstr "Księgowość" @@ -151,6 +155,147 @@ msgstr "Personel" msgid "System" msgstr "System" +#: engine/vibes_auth/docs/drf/emailing.py:18 +msgid "" +"UUID token for unsubscribing. This token is unique per user and is included " +"in the unsubscribe link of every campaign email. The token remains constant " +"for each user unless regenerated." +msgstr "" +"Token UUID do rezygnacji z subskrypcji. Ten token jest unikalny dla każdego " +"użytkownika i znajduje się w linku rezygnacji z subskrypcji w każdej " +"wiadomości e-mailowej kampanii. Token pozostaje niezmienny dla każdego " +"użytkownika, chyba że zostanie ponownie wygenerowany." + +#: engine/vibes_auth/docs/drf/emailing.py:37 +#: engine/vibes_auth/emailing/views.py:69 +msgid "You have been successfully unsubscribed from our emails." +msgstr "Zostałeś pomyślnie wypisany z naszej listy mailingowej." + +#: engine/vibes_auth/docs/drf/emailing.py:45 +#: engine/vibes_auth/emailing/views.py:61 +msgid "You are already unsubscribed." +msgstr "Już się wypisałeś." + +#: engine/vibes_auth/docs/drf/emailing.py:52 +msgid "Unsubscribe from email campaigns" +msgstr "Rezygnacja z subskrypcji kampanii e-mailowych" + +#: engine/vibes_auth/docs/drf/emailing.py:54 +msgid "" +"Unsubscribe a user from all marketing email campaigns using their unique unsubscribe token.\n" +"\n" +"This endpoint is designed for email client compatibility where clicking a link triggers a GET request. The user will no longer receive promotional emails after successful unsubscription.\n" +"\n" +"**Note:** Transactional emails (order confirmations, password resets, etc.) are not affected by this setting." +msgstr "" +"Wypisz użytkownika ze wszystkich marketingowych kampanii e-mailowych, " +"używając jego unikalnego tokenu rezygnacji. Ten punkt końcowy jest " +"zaprojektowany z myślą o kompatybilności z klientami poczty e-mail, gdzie " +"kliknięcie linku powoduje wysłanie żądania GET. Po pomyślnym wypisaniu się " +"użytkownik nie będzie już otrzymywał promocyjnych wiadomości e-mail. " +"**Uwaga:** ustawienie to nie ma wpływu na wiadomości transakcyjne " +"(potwierdzenia zamówień, resetowanie hasła itp.)." + +#: engine/vibes_auth/docs/drf/emailing.py:66 +#: engine/vibes_auth/docs/drf/emailing.py:146 +msgid "Successfully unsubscribed from email campaigns." +msgstr "Pomyślnie zrezygnowałeś z subskrypcji kampanii e-mailowych." + +#: engine/vibes_auth/docs/drf/emailing.py:82 +#: engine/vibes_auth/docs/drf/emailing.py:162 +msgid "Invalid or missing unsubscribe token." +msgstr "Nieprawidłowy lub brakujący token rezygnacji z subskrypcji." + +#: engine/vibes_auth/docs/drf/emailing.py:96 +#: engine/vibes_auth/docs/drf/emailing.py:176 +msgid "User associated with the token was not found." +msgstr "Nie znaleziono użytkownika powiązanego z tokenem." + +#: engine/vibes_auth/docs/drf/emailing.py:118 +msgid "One-Click Unsubscribe (RFC 8058)" +msgstr "Rezygnacja z subskrypcji jednym kliknięciem (RFC 8058)" + +#: engine/vibes_auth/docs/drf/emailing.py:120 +msgid "" +"RFC 8058 compliant one-click unsubscribe endpoint for email campaigns.\n" +"\n" +"This endpoint supports the List-Unsubscribe-Post header mechanism defined in RFC 8058, which allows email clients to unsubscribe users with a single click without leaving the email application.\n" +"\n" +"The token can be provided either as a query parameter or in the request body.\n" +"\n" +"**Standards Compliance:**\n" +"- RFC 8058: Signaling One-Click Functionality for List Email Headers\n" +"- RFC 2369: The Use of URLs as Meta-Syntax for Core Mail List Commands\n" +"\n" +"**Note:** Transactional emails are not affected by this setting." +msgstr "" +"Punkt końcowy zgodny z RFC 8058 umożliwiający rezygnację z subskrypcji jednym kliknięciem w przypadku kampanii e-mailowych. Punkt końcowy obsługuje mechanizm nagłówka List-Unsubscribe-Post zdefiniowany w RFC 8058, który pozwala klientom poczty e-mail rezygnować z subskrypcji jednym kliknięciem bez opuszczania aplikacji pocztowej. Token może być dostarczony jako parametr zapytania lub w treści żądania.\n" +"\n" +"**Zgodność z normami:** - RFC 8058: Sygnalizacja funkcji jednego kliknięcia dla nagłówków list e-mailowych - RFC 2369: Wykorzystanie adresów URL jako meta-składni dla podstawowych poleceń listy mailingowej **Uwaga:** To ustawienie nie ma wpływu na e-maile transakcyjne." + +#: engine/vibes_auth/docs/drf/emailing.py:137 +msgid "" +"Unsubscribe token (alternative to query parameter). Can be omitted if token " +"is provided in URL." +msgstr "" +"Token rezygnacji z subskrypcji (alternatywa dla parametru zapytania). Można " +"pominąć, jeśli token jest podany w adresie URL." + +#: engine/vibes_auth/docs/drf/emailing.py:200 +msgid "Track email open event" +msgstr "Śledź otwarcie wiadomości e-mail" + +#: engine/vibes_auth/docs/drf/emailing.py:202 +msgid "" +"Records when a campaign email is opened by the recipient.\n" +"\n" +"This endpoint is called automatically when the tracking pixel (1x1 transparent GIF) embedded in the email is loaded by the recipient's email client.\n" +"\n" +"**How it works:**\n" +"1. Each campaign email contains a unique tracking pixel URL with a `tid` parameter\n" +"2. When the email is opened and images are loaded, this endpoint is called\n" +"3. The recipient's status is updated to 'opened' and the timestamp is recorded\n" +"4. The campaign's aggregate opened count is updated\n" +"\n" +"**Privacy considerations:**\n" +"- Only the first open is recorded (subsequent opens are ignored)\n" +"- No personal information beyond the tracking ID is logged\n" +"- Users who disable image loading will not trigger this event\n" +"\n" +"**Response:**\n" +"Returns a 1x1 transparent GIF image regardless of whether tracking succeeded, to ensure consistent behavior and prevent information leakage." +msgstr "" +"Rejestruje moment otwarcia wiadomości e-mailowej kampanii przez odbiorcę. Ten punkt końcowy jest wywoływany automatycznie, gdy piksel śledzący (przezroczysty plik GIF o wymiarach 1x1) osadzony w wiadomości e-mailowej zostanie załadowany przez klienta poczty e-mail odbiorcy.\n" +"\n" +"**Jak to działa:** 1. Każda wiadomość e-mail z kampanii zawiera unikalny adres URL piksela śledzącego z parametrem „tid”. 2. Po otwarciu wiadomości e-mail i załadowaniu obrazów wywoływany jest ten punkt końcowy. 3. Status odbiorcy jest aktualizowany do „otwarty”, a znacznik czasu jest rejestrowany. 4. Łączna liczba otwarć kampanii jest aktualizowana. **Kwestie dotyczące prywatności:**\n" +"- Rejestrowane jest tylko pierwsze otwarcie (kolejne otwarcia są ignorowane). - Nie są rejestrowane żadne dane osobowe poza identyfikatorem śledzenia. - Użytkownicy, którzy wyłączyli ładowanie obrazów, nie wywołują tego zdarzenia. **Odpowiedź:** Zwraca przezroczysty obraz GIF o wymiarach 1x1 niezależnie od tego, czy śledzenie zakończyło się powodzeniem, aby zapewnić spójne działanie i zapobiec wyciekowi informacji." + +#: engine/vibes_auth/docs/drf/emailing.py:223 +msgid "" +"Tracking ID (UUID) unique to each campaign-recipient combination. This ID " +"links the open event to a specific recipient and campaign." +msgstr "" +"Identyfikator śledzenia (UUID) unikalny dla każdej kombinacji kampanii i " +"odbiorcy. Identyfikator ten łączy zdarzenie otwarcia z konkretnym odbiorcą i" +" kampanią." + +#: engine/vibes_auth/docs/drf/emailing.py:241 +msgid "" +"1x1 transparent GIF image. Always returned regardless of tracking status to " +"maintain consistent behavior." +msgstr "" +"Przezroczysty obraz GIF o wymiarach 1x1. Zawsze zwracany niezależnie od " +"statusu śledzenia, aby zachować spójność działania." + +#: engine/vibes_auth/docs/drf/emailing.py:247 +msgid "" +"Returned when no tracking ID is provided. Note: Invalid tracking IDs still " +"return 200 with the GIF to prevent enumeration attacks." +msgstr "" +"Zwracane, gdy nie podano identyfikatora śledzenia. Uwaga: Nieprawidłowe " +"identyfikatory śledzenia nadal zwracają kod 200 wraz z plikiem GIF, aby " +"zapobiec atakom enumeracyjnym." + #: engine/vibes_auth/docs/drf/messaging.py:17 msgid "User messages entrypoint" msgstr "Punkt wejścia komunikatów użytkownika" @@ -247,9 +392,9 @@ msgid "confirm a user's password reset" msgstr "Potwierdzenie zresetowania hasła użytkownika" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:351 +#: engine/vibes_auth/graphene/mutations.py:358 #: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107 -#: engine/vibes_auth/viewsets.py:94 +#: engine/vibes_auth/viewsets.py:97 msgid "passwords do not match" msgstr "Hasła nie są zgodne" @@ -302,196 +447,167 @@ msgstr "Otwarte" msgid "Clicked" msgstr "Kliknięto" -#: engine/vibes_auth/emailing/models.py:35 -#: engine/vibes_auth/emailing/models.py:71 -#: engine/vibes_auth/emailing/models.py:121 +#: engine/vibes_auth/emailing/models.py:38 +#: engine/vibes_auth/emailing/models.py:88 msgid "name" msgstr "nazwa" -#: engine/vibes_auth/emailing/models.py:36 -msgid "descriptive name for the image" -msgstr "opisowa nazwa obrazu" - -#: engine/vibes_auth/emailing/models.py:40 -msgid "image" -msgstr "obraz" - -#: engine/vibes_auth/emailing/models.py:41 -msgid "image file to use in email templates" -msgstr "plik obrazu do wykorzystania w szablonach wiadomości e-mail" - -#: engine/vibes_auth/emailing/models.py:47 -msgid "alt text" -msgstr "inny tekst" - -#: engine/vibes_auth/emailing/models.py:48 -msgid "alternative text for accessibility" -msgstr "tekst alternatywny dla dostępności" - -#: engine/vibes_auth/emailing/models.py:52 -msgid "email image" -msgstr "obraz e-maila" - -#: engine/vibes_auth/emailing/models.py:53 -msgid "email images" -msgstr "obrazy e-mailowe" - -#: engine/vibes_auth/emailing/models.py:72 +#: engine/vibes_auth/emailing/models.py:39 msgid "internal name for the template" msgstr "wewnętrzna nazwa szablonu" -#: engine/vibes_auth/emailing/models.py:76 +#: engine/vibes_auth/emailing/models.py:43 msgid "slug" msgstr "słuch" -#: engine/vibes_auth/emailing/models.py:77 +#: engine/vibes_auth/emailing/models.py:44 msgid "unique identifier for the template" msgstr "unikalny identyfikator szablonu" -#: engine/vibes_auth/emailing/models.py:81 +#: engine/vibes_auth/emailing/models.py:48 msgid "subject" msgstr "temat" -#: engine/vibes_auth/emailing/models.py:82 +#: engine/vibes_auth/emailing/models.py:49 msgid "email subject line - supports {{ variables }}" msgstr "Temat wiadomości e-mail – obsługuje {{ variables }}" -#: engine/vibes_auth/emailing/models.py:85 -msgid "HTML content" -msgstr "Treść HTML" +#: engine/vibes_auth/emailing/models.py:52 +msgid "content" +msgstr "treść" -#: engine/vibes_auth/emailing/models.py:87 +#: engine/vibes_auth/emailing/models.py:54 msgid "" -"email body content - supports {{ user.first_name }}, {{ user.email }}, {{ " -"project_name }}, {{ unsubscribe_url }}" +"email body in markdown - supports {{ user.first_name }}, {{ user.email }}, " +"{{ project_name }}, {{ unsubscribe_url }}" msgstr "" "treść wiadomości e-mail – obsługuje {{ user.first_name }}, {{ user.email }}," " {{ project_name }}, {{ unsubscribe_url }}" -#: engine/vibes_auth/emailing/models.py:94 +#: engine/vibes_auth/emailing/models.py:61 msgid "plain text content" msgstr "treść tekstowa" -#: engine/vibes_auth/emailing/models.py:95 +#: engine/vibes_auth/emailing/models.py:62 msgid "plain text fallback (auto-generated if empty)" msgstr "" "rezerwa tekstu zwykłego (generowana automatycznie, jeśli pole jest puste)" -#: engine/vibes_auth/emailing/models.py:100 +#: engine/vibes_auth/emailing/models.py:67 msgid "available variables" msgstr "dostępne zmienne" -#: engine/vibes_auth/emailing/models.py:101 +#: engine/vibes_auth/emailing/models.py:68 msgid "documentation of available template variables" msgstr "dokumentacja dostępnych zmiennych szablonu" -#: engine/vibes_auth/emailing/models.py:105 +#: engine/vibes_auth/emailing/models.py:72 msgid "email template" msgstr "szablon wiadomości e-mail" -#: engine/vibes_auth/emailing/models.py:106 +#: engine/vibes_auth/emailing/models.py:73 msgid "email templates" msgstr "szablony wiadomości e-mail" -#: engine/vibes_auth/emailing/models.py:122 +#: engine/vibes_auth/emailing/models.py:89 msgid "internal name for the campaign" msgstr "wewnętrzna nazwa kampanii" -#: engine/vibes_auth/emailing/models.py:129 +#: engine/vibes_auth/emailing/models.py:96 msgid "template" msgstr "szablon" -#: engine/vibes_auth/emailing/models.py:130 +#: engine/vibes_auth/emailing/models.py:97 msgid "email template to use for this campaign" msgstr "szablon wiadomości e-mail do wykorzystania w tej kampanii" -#: engine/vibes_auth/emailing/models.py:136 -#: engine/vibes_auth/emailing/models.py:206 +#: engine/vibes_auth/emailing/models.py:103 +#: engine/vibes_auth/emailing/models.py:173 msgid "status" msgstr "status" -#: engine/vibes_auth/emailing/models.py:141 +#: engine/vibes_auth/emailing/models.py:108 msgid "scheduled at" msgstr "zaplanowane na" -#: engine/vibes_auth/emailing/models.py:142 +#: engine/vibes_auth/emailing/models.py:109 msgid "when to send the campaign (leave empty for manual send)" msgstr "kiedy wysłać kampanię (pozostaw puste pole, aby wysłać ręcznie)" -#: engine/vibes_auth/emailing/models.py:147 -#: engine/vibes_auth/emailing/models.py:211 +#: engine/vibes_auth/emailing/models.py:114 +#: engine/vibes_auth/emailing/models.py:178 msgid "sent at" msgstr "późno, że" -#: engine/vibes_auth/emailing/models.py:148 +#: engine/vibes_auth/emailing/models.py:115 msgid "when the campaign was actually sent" msgstr "kiedy kampania została faktycznie wysłana" -#: engine/vibes_auth/emailing/models.py:153 +#: engine/vibes_auth/emailing/models.py:120 msgid "total recipients" msgstr "łączna liczba odbiorców" -#: engine/vibes_auth/emailing/models.py:157 +#: engine/vibes_auth/emailing/models.py:124 msgid "sent count" msgstr "liczba wysłanych" -#: engine/vibes_auth/emailing/models.py:161 +#: engine/vibes_auth/emailing/models.py:128 msgid "failed count" msgstr "nieudana próba" -#: engine/vibes_auth/emailing/models.py:165 +#: engine/vibes_auth/emailing/models.py:132 msgid "opened count" msgstr "liczba otwartych" -#: engine/vibes_auth/emailing/models.py:169 +#: engine/vibes_auth/emailing/models.py:136 msgid "clicked count" msgstr "liczba kliknięć" -#: engine/vibes_auth/emailing/models.py:173 +#: engine/vibes_auth/emailing/models.py:140 msgid "email campaign" msgstr "kampania e-mailowa" -#: engine/vibes_auth/emailing/models.py:174 +#: engine/vibes_auth/emailing/models.py:141 msgid "email campaigns" msgstr "kampanie e-mailowe" -#: engine/vibes_auth/emailing/models.py:194 +#: engine/vibes_auth/emailing/models.py:161 msgid "campaign" msgstr "kampania" -#: engine/vibes_auth/emailing/models.py:200 engine/vibes_auth/models.py:146 +#: engine/vibes_auth/emailing/models.py:167 engine/vibes_auth/models.py:183 msgid "user" msgstr "Użytkownik" -#: engine/vibes_auth/emailing/models.py:216 +#: engine/vibes_auth/emailing/models.py:183 msgid "opened at" msgstr "otwarty w" -#: engine/vibes_auth/emailing/models.py:221 +#: engine/vibes_auth/emailing/models.py:188 msgid "clicked at" msgstr "kliknięto w" -#: engine/vibes_auth/emailing/models.py:227 +#: engine/vibes_auth/emailing/models.py:194 msgid "tracking ID" msgstr "identyfikator śledzenia" -#: engine/vibes_auth/emailing/models.py:228 +#: engine/vibes_auth/emailing/models.py:195 msgid "unique ID for tracking opens and clicks" msgstr "unikalny identyfikator do śledzenia otwarć i kliknięć" -#: engine/vibes_auth/emailing/models.py:233 +#: engine/vibes_auth/emailing/models.py:200 msgid "error message" msgstr "komunikat o błędzie" -#: engine/vibes_auth/emailing/models.py:234 +#: engine/vibes_auth/emailing/models.py:201 msgid "error details if sending failed" msgstr "szczegóły błędu, jeśli wysyłanie nie powiodło się" -#: engine/vibes_auth/emailing/models.py:238 +#: engine/vibes_auth/emailing/models.py:205 msgid "campaign recipient" msgstr "odbiorca kampanii" -#: engine/vibes_auth/emailing/models.py:239 +#: engine/vibes_auth/emailing/models.py:206 msgid "campaign recipients" msgstr "odbiorcy kampanii" @@ -509,75 +625,75 @@ msgstr "" msgid "Unsubscribe" msgstr "Wypisz się" -#: engine/vibes_auth/emailing/views.py:71 +#: engine/vibes_auth/emailing/views.py:39 msgid "Unsubscribe token is required." msgstr "Wymagany jest token rezygnacji z subskrypcji." -#: engine/vibes_auth/emailing/views.py:79 +#: engine/vibes_auth/emailing/views.py:47 msgid "Invalid unsubscribe token format." msgstr "Nieprawidłowy format tokenu rezygnacji z subskrypcji." -#: engine/vibes_auth/emailing/views.py:87 +#: engine/vibes_auth/emailing/views.py:55 msgid "User not found." msgstr "Nie znaleziono użytkownika." -#: engine/vibes_auth/emailing/views.py:93 -msgid "You are already unsubscribed." -msgstr "Już się wypisałeś." - -#: engine/vibes_auth/emailing/views.py:101 -msgid "You have been successfully unsubscribed from our emails." -msgstr "Zostałeś pomyślnie wypisany z naszej listy mailingowej." - -#: engine/vibes_auth/graphene/mutations.py:46 +#: engine/vibes_auth/graphene/mutations.py:47 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" "Zakodowany w b64 identyfikator uuid użytkownika, który polecił nam nowego " "użytkownika." -#: engine/vibes_auth/graphene/mutations.py:68 +#: engine/vibes_auth/graphene/mutations.py:70 msgid "password too weak" msgstr "Hasło jest zbyt słabe" -#: engine/vibes_auth/graphene/mutations.py:128 +#: engine/vibes_auth/graphene/mutations.py:130 msgid "malformed email" msgstr "Zniekształcona wiadomość e-mail" -#: engine/vibes_auth/graphene/mutations.py:140 +#: engine/vibes_auth/graphene/mutations.py:142 #: engine/vibes_auth/serializers.py:117 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Zniekształcony numer telefonu: {phone_number}!" -#: engine/vibes_auth/graphene/mutations.py:165 +#: engine/vibes_auth/graphene/mutations.py:167 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Nieprawidłowy format atrybutu: {attribute_pair}!" -#: engine/vibes_auth/graphene/mutations.py:182 +#: engine/vibes_auth/graphene/mutations.py:184 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} nie istnieje: {uuid}!" -#: engine/vibes_auth/graphene/mutations.py:304 -#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180 +#: engine/vibes_auth/graphene/mutations.py:309 +#: engine/vibes_auth/viewsets.py:174 engine/vibes_auth/viewsets.py:198 msgid "activation link is invalid!" msgstr "Link aktywacyjny jest nieprawidłowy!" -#: engine/vibes_auth/graphene/mutations.py:307 +#: engine/vibes_auth/graphene/mutations.py:312 msgid "account already activated..." msgstr "Konto zostało już aktywowane..." -#: engine/vibes_auth/graphene/mutations.py:314 -#: engine/vibes_auth/graphene/mutations.py:376 +#: engine/vibes_auth/graphene/mutations.py:319 +#: engine/vibes_auth/graphene/mutations.py:383 msgid "something went wrong: {e!s}" msgstr "Coś poszło nie tak: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:358 -#: engine/vibes_auth/viewsets.py:106 +#: engine/vibes_auth/graphene/mutations.py:365 +#: engine/vibes_auth/viewsets.py:109 msgid "token is invalid!" msgstr "Token jest nieprawidłowy!" +#: engine/vibes_auth/graphene/mutations.py:403 +msgid "only image files are allowed (jpg, png, gif, webp)" +msgstr "Dopuszczalne są wyłącznie pliki graficzne (jpg, png, gif, webp)." + +#: engine/vibes_auth/graphene/mutations.py:406 +msgid "file size must not exceed 5 MB" +msgstr "Rozmiar pliku nie może przekraczać 5 MB." + #: engine/vibes_auth/graphene/object_types.py:46 msgid "" "the products this user has viewed most recently (max 48), in " @@ -587,7 +703,7 @@ msgstr "" "kolejności odwrotnej do chronologicznej." #: engine/vibes_auth/graphene/object_types.py:49 -#: engine/vibes_auth/models.py:214 +#: engine/vibes_auth/models.py:270 msgid "groups" msgstr "Grupy" @@ -596,7 +712,7 @@ msgid "wishlist" msgstr "Lista życzeń" #: engine/vibes_auth/graphene/object_types.py:56 -#: engine/vibes_auth/models.py:70 +#: engine/vibes_auth/models.py:75 msgid "avatar" msgstr "Awatar" @@ -633,7 +749,7 @@ msgstr "Szukamy operatora, który już ci odpowie, zaczekaj!" msgid "Assignee must be a staff user." msgstr "Odbiorca musi być użytkownikiem personelu." -#: engine/vibes_auth/models.py:42 +#: engine/vibes_auth/models.py:44 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -652,124 +768,136 @@ msgstr "" "zaprojektowany do obsługi określonych przypadków użycia w celu ulepszonego " "zarządzania użytkownikami." -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "email" msgstr "E-mail" -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "user email address" msgstr "Adres e-mail użytkownika" -#: engine/vibes_auth/models.py:55 +#: engine/vibes_auth/models.py:57 msgid "phone_number" msgstr "Numer telefonu" -#: engine/vibes_auth/models.py:60 +#: engine/vibes_auth/models.py:61 msgid "user phone number" msgstr "Numer telefonu użytkownika" -#: engine/vibes_auth/models.py:66 +#: engine/vibes_auth/models.py:68 msgid "first_name" msgstr "Imię" -#: engine/vibes_auth/models.py:67 +#: engine/vibes_auth/models.py:71 msgid "last_name" msgstr "Nazwisko" -#: engine/vibes_auth/models.py:73 +#: engine/vibes_auth/models.py:78 msgid "user profile image" msgstr "Obraz profilu użytkownika" -#: engine/vibes_auth/models.py:78 +#: engine/vibes_auth/models.py:83 msgid "is verified" msgstr "Czy zweryfikowano" -#: engine/vibes_auth/models.py:79 +#: engine/vibes_auth/models.py:84 msgid "user verification status" msgstr "Status weryfikacji użytkownika" -#: engine/vibes_auth/models.py:82 +#: engine/vibes_auth/models.py:87 msgid "is_active" msgstr "Jest aktywny" -#: engine/vibes_auth/models.py:84 +#: engine/vibes_auth/models.py:89 msgid "unselect this instead of deleting accounts" msgstr "Odznacz to zamiast usuwać konta" -#: engine/vibes_auth/models.py:87 +#: engine/vibes_auth/models.py:92 msgid "is_subscribed" msgstr "Jest subskrybowany" -#: engine/vibes_auth/models.py:88 +#: engine/vibes_auth/models.py:93 msgid "user's newsletter subscription status" msgstr "Status subskrypcji newslettera użytkownika" -#: engine/vibes_auth/models.py:92 +#: engine/vibes_auth/models.py:98 msgid "activation token" msgstr "Token aktywacyjny" -#: engine/vibes_auth/models.py:95 +#: engine/vibes_auth/models.py:103 +msgid "activation token created" +msgstr "Token aktywacyjny utworzony" + +#: engine/vibes_auth/models.py:107 msgid "unsubscribe token" msgstr "token rezygnacji z subskrypcji" -#: engine/vibes_auth/models.py:96 +#: engine/vibes_auth/models.py:108 msgid "token for secure one-click unsubscribe from campaigns" msgstr "" "token umożliwiający bezpieczne wypisanie się z kampanii jednym kliknięciem" -#: engine/vibes_auth/models.py:106 +#: engine/vibes_auth/models.py:118 msgid "attributes" msgstr "Atrybuty" -#: engine/vibes_auth/models.py:147 +#: engine/vibes_auth/models.py:184 msgid "users" msgstr "Użytkownicy" -#: engine/vibes_auth/models.py:154 +#: engine/vibes_auth/models.py:202 +msgid "admin OTP code" +msgstr "Kod OTP administratora" + +#: engine/vibes_auth/models.py:203 +msgid "admin OTP codes" +msgstr "Kody OTP administratora" + +#: engine/vibes_auth/models.py:210 msgid "For anonymous threads" msgstr "Dla wątków anonimowych" -#: engine/vibes_auth/models.py:178 +#: engine/vibes_auth/models.py:234 msgid "Chat thread" msgstr "Wątek czatu" -#: engine/vibes_auth/models.py:179 +#: engine/vibes_auth/models.py:235 msgid "Chat threads" msgstr "Wątki czatu" -#: engine/vibes_auth/models.py:185 +#: engine/vibes_auth/models.py:241 msgid "provide user or email for anonymous thread." msgstr "Podaj użytkownika lub adres e-mail dla anonimowego wątku." -#: engine/vibes_auth/models.py:188 +#: engine/vibes_auth/models.py:244 msgid "assignee must be a staff user." msgstr "cesjonariusz musi być użytkownikiem personelu." -#: engine/vibes_auth/models.py:206 +#: engine/vibes_auth/models.py:262 msgid "Chat message" msgstr "Wiadomość na czacie" -#: engine/vibes_auth/models.py:207 +#: engine/vibes_auth/models.py:263 msgid "Chat messages" msgstr "Wiadomości czatu" -#: engine/vibes_auth/models.py:213 +#: engine/vibes_auth/models.py:269 msgid "group" msgstr "Grupa" -#: engine/vibes_auth/models.py:220 +#: engine/vibes_auth/models.py:276 msgid "outstanding token" msgstr "Wyjątkowy token" -#: engine/vibes_auth/models.py:221 +#: engine/vibes_auth/models.py:277 msgid "outstanding tokens" msgstr "Zaległe tokeny" -#: engine/vibes_auth/models.py:227 +#: engine/vibes_auth/models.py:283 msgid "blacklisted token" msgstr "Token na czarnej liście" -#: engine/vibes_auth/models.py:228 +#: engine/vibes_auth/models.py:284 msgid "blacklisted tokens" msgstr "Tokeny znajdujące się na czarnej liście" @@ -811,6 +939,10 @@ msgstr "Brak oświadczenia uuid użytkownika w tokenie" msgid "user does not exist" msgstr "Użytkownik nie istnieje" +#: engine/vibes_auth/templates/admin/verify_otp.html:27 +msgid "Verify" +msgstr "Zweryfikuj" + #: engine/vibes_auth/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "Resetowanie hasła" @@ -896,12 +1028,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "Najlepsze pozdrowienia,
zespół %(project_name)s" -#: engine/vibes_auth/utils/emailing.py:24 +#: engine/vibes_auth/utils/emailing.py:27 #, python-brace-format msgid "{settings.PROJECT_NAME} | Activate Account" msgstr "{settings.PROJECT_NAME} | Aktywuj konto" -#: engine/vibes_auth/utils/emailing.py:63 +#: engine/vibes_auth/utils/emailing.py:66 #, python-brace-format msgid "{settings.PROJECT_NAME} | Reset Password" msgstr "{settings.PROJECT_NAME} | Resetuj hasło" @@ -956,7 +1088,7 @@ msgstr "" msgid "the token is invalid" msgstr "Token jest nieprawidłowy" -#: engine/vibes_auth/viewsets.py:44 +#: engine/vibes_auth/viewsets.py:47 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." @@ -964,10 +1096,18 @@ 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." -#: engine/vibes_auth/viewsets.py:113 +#: engine/vibes_auth/viewsets.py:116 msgid "password reset successfully" msgstr "Hasło zostało pomyślnie zresetowane!" -#: engine/vibes_auth/viewsets.py:161 +#: engine/vibes_auth/viewsets.py:146 +msgid "" +"Account already registered but not yet activated. A new activation email has" +" been sent." +msgstr "" +"Konto zostało już zarejestrowane, ale nie zostało jeszcze aktywowane. " +"Wysłano nową wiadomość e-mail z linkiem aktywacyjnym." + +#: engine/vibes_auth/viewsets.py:179 msgid "account already activated!" msgstr "Konto zostało już aktywowane..." diff --git a/engine/vibes_auth/locale/pt_BR/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/pt_BR/LC_MESSAGES/django.mo index 7c7c2835..52d5e703 100644 Binary files a/engine/vibes_auth/locale/pt_BR/LC_MESSAGES/django.mo and b/engine/vibes_auth/locale/pt_BR/LC_MESSAGES/django.mo differ diff --git a/engine/vibes_auth/locale/pt_BR/LC_MESSAGES/django.po b/engine/vibes_auth/locale/pt_BR/LC_MESSAGES/django.po index 598b4a87..1749d0d6 100644 --- a/engine/vibes_auth/locale/pt_BR/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/pt_BR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 03:06+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,32 +13,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:65 engine/vibes_auth/admin.py:66 +#: engine/vibes_auth/admin.py:64 engine/vibes_auth/admin.py:65 #: engine/vibes_auth/graphene/object_types.py:54 msgid "balance" msgstr "Equilíbrio" -#: engine/vibes_auth/admin.py:74 +#: engine/vibes_auth/admin.py:73 msgid "order" msgstr "Pedido" -#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:51 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:51 msgid "orders" msgstr "Pedidos" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:84 msgid "personal info" msgstr "Informações pessoais" -#: engine/vibes_auth/admin.py:89 engine/vibes_auth/graphene/object_types.py:50 +#: engine/vibes_auth/admin.py:88 engine/vibes_auth/graphene/object_types.py:50 msgid "permissions" msgstr "Permissões" -#: engine/vibes_auth/admin.py:102 +#: engine/vibes_auth/admin.py:101 msgid "important dates" msgstr "Datas importantes" -#: engine/vibes_auth/admin.py:103 +#: engine/vibes_auth/admin.py:102 msgid "additional info" msgstr "Informações adicionais" @@ -54,80 +54,84 @@ msgstr "Fechar as linhas selecionadas" msgid "Open selected threads" msgstr "Abrir linhas selecionadas" -#: engine/vibes_auth/admin.py:208 -msgid "Preview" -msgstr "Pré-visualização" - -#: engine/vibes_auth/admin.py:209 engine/vibes_auth/admin.py:249 -#: engine/vibes_auth/admin.py:326 -msgid "Metadata" -msgstr "Metadados" - -#: engine/vibes_auth/admin.py:212 -msgid "preview" -msgstr "visualização" - -#: engine/vibes_auth/admin.py:221 -msgid "image preview" -msgstr "visualização da imagem" - -#: engine/vibes_auth/admin.py:241 +#: engine/vibes_auth/admin.py:209 msgid "Content" msgstr "Conteúdo" -#: engine/vibes_auth/admin.py:243 +#: engine/vibes_auth/admin.py:211 msgid "Documentation" msgstr "Documentação" -#: engine/vibes_auth/admin.py:313 +#: engine/vibes_auth/admin.py:217 engine/vibes_auth/admin.py:294 +msgid "Metadata" +msgstr "Metadados" + +#: engine/vibes_auth/admin.py:281 msgid "Scheduling" msgstr "Agendamento" -#: engine/vibes_auth/admin.py:315 +#: engine/vibes_auth/admin.py:283 msgid "Statistics" msgstr "Estatísticas" -#: engine/vibes_auth/admin.py:329 +#: engine/vibes_auth/admin.py:297 msgid "stats" msgstr "estatista" -#: engine/vibes_auth/admin.py:335 +#: engine/vibes_auth/admin.py:303 msgid "Prepare recipients (subscribed users)" msgstr "Prepare os destinatários (usuários inscritos)" -#: engine/vibes_auth/admin.py:343 +#: engine/vibes_auth/admin.py:311 msgid "Campaign '{}' is not in draft status." msgstr "A campanha '{}' não está em estado de rascunho." -#: engine/vibes_auth/admin.py:350 +#: engine/vibes_auth/admin.py:318 msgid "Preparing recipients for campaign '{}'." msgstr "Preparando destinatários para a campanha '{}'." -#: engine/vibes_auth/admin.py:354 +#: engine/vibes_auth/admin.py:322 msgid "Send campaign now" msgstr "Enviar campanha agora" -#: engine/vibes_auth/admin.py:362 +#: engine/vibes_auth/admin.py:330 msgid "Campaign '{}' cannot be sent (status: {})." msgstr "A campanha '{}' não pode ser enviada (status: {})." -#: engine/vibes_auth/admin.py:372 +#: engine/vibes_auth/admin.py:340 msgid "Campaign '{}' has no recipients. Prepare recipients first." msgstr "" "A campanha '{}' não tem destinatários. Prepare primeiro os destinatários." -#: engine/vibes_auth/admin.py:383 +#: engine/vibes_auth/admin.py:351 msgid "Started sending campaign '{}'." msgstr "Iniciada a campanha \"{}\"." -#: engine/vibes_auth/admin.py:387 +#: engine/vibes_auth/admin.py:355 msgid "Cancel campaign" msgstr "Cancelar campanha" -#: engine/vibes_auth/admin.py:396 +#: engine/vibes_auth/admin.py:364 msgid "{} campaign(s) cancelled." msgstr "Campanha(s) cancelada(s)." +#: engine/vibes_auth/admin_site.py:24 +msgid "Verification code" +msgstr "Código de verificação" + +#: engine/vibes_auth/admin_site.py:62 +msgid "A verification code has been sent to your email." +msgstr "Um código de verificação foi enviado para o seu e-mail." + +#: engine/vibes_auth/admin_site.py:118 +msgid "Invalid or expired code. Please try again." +msgstr "Código inválido ou expirado. Por favor, tente novamente." + +#: engine/vibes_auth/admin_site.py:124 +#: engine/vibes_auth/templates/admin/verify_otp.html:10 +msgid "Two-factor authentication" +msgstr "Autenticação de dois fatores" + #: engine/vibes_auth/apps.py:8 msgid "Accounting" msgstr "Contabilidade" @@ -152,6 +156,147 @@ msgstr "Equipe" msgid "System" msgstr "Sistema" +#: engine/vibes_auth/docs/drf/emailing.py:18 +msgid "" +"UUID token for unsubscribing. This token is unique per user and is included " +"in the unsubscribe link of every campaign email. The token remains constant " +"for each user unless regenerated." +msgstr "" +"Token UUID para cancelar a inscrição. Esse token é exclusivo para cada " +"usuário e está incluído no link de cancelamento de inscrição de todos os " +"e-mails da campanha. O token permanece constante para cada usuário, a menos " +"que seja regenerado." + +#: engine/vibes_auth/docs/drf/emailing.py:37 +#: engine/vibes_auth/emailing/views.py:69 +msgid "You have been successfully unsubscribed from our emails." +msgstr "Você foi excluído com sucesso de nossa lista de e-mails." + +#: engine/vibes_auth/docs/drf/emailing.py:45 +#: engine/vibes_auth/emailing/views.py:61 +msgid "You are already unsubscribed." +msgstr "Você já está cancelado." + +#: engine/vibes_auth/docs/drf/emailing.py:52 +msgid "Unsubscribe from email campaigns" +msgstr "Cancelar inscrição em campanhas por e-mail" + +#: engine/vibes_auth/docs/drf/emailing.py:54 +msgid "" +"Unsubscribe a user from all marketing email campaigns using their unique unsubscribe token.\n" +"\n" +"This endpoint is designed for email client compatibility where clicking a link triggers a GET request. The user will no longer receive promotional emails after successful unsubscription.\n" +"\n" +"**Note:** Transactional emails (order confirmations, password resets, etc.) are not affected by this setting." +msgstr "" +"Cancelar a inscrição de um usuário em todas as campanhas de e-mail de " +"marketing usando seu token exclusivo de cancelamento de inscrição. Este " +"endpoint foi projetado para compatibilidade com clientes de e-mail, nos " +"quais clicar em um link aciona uma solicitação GET. O usuário não receberá " +"mais e-mails promocionais após o cancelamento da inscrição. **Observação:** " +"e-mails transacionais (confirmações de pedidos, redefinições de senha etc.) " +"não são afetados por essa configuração." + +#: engine/vibes_auth/docs/drf/emailing.py:66 +#: engine/vibes_auth/docs/drf/emailing.py:146 +msgid "Successfully unsubscribed from email campaigns." +msgstr "Cancelamento bem-sucedido da inscrição em campanhas por e-mail." + +#: engine/vibes_auth/docs/drf/emailing.py:82 +#: engine/vibes_auth/docs/drf/emailing.py:162 +msgid "Invalid or missing unsubscribe token." +msgstr "Token de cancelamento de inscrição inválido ou ausente." + +#: engine/vibes_auth/docs/drf/emailing.py:96 +#: engine/vibes_auth/docs/drf/emailing.py:176 +msgid "User associated with the token was not found." +msgstr "Não foi encontrado nenhum usuário associado ao token." + +#: engine/vibes_auth/docs/drf/emailing.py:118 +msgid "One-Click Unsubscribe (RFC 8058)" +msgstr "Cancelamento de inscrição com um clique (RFC 8058)" + +#: engine/vibes_auth/docs/drf/emailing.py:120 +msgid "" +"RFC 8058 compliant one-click unsubscribe endpoint for email campaigns.\n" +"\n" +"This endpoint supports the List-Unsubscribe-Post header mechanism defined in RFC 8058, which allows email clients to unsubscribe users with a single click without leaving the email application.\n" +"\n" +"The token can be provided either as a query parameter or in the request body.\n" +"\n" +"**Standards Compliance:**\n" +"- RFC 8058: Signaling One-Click Functionality for List Email Headers\n" +"- RFC 2369: The Use of URLs as Meta-Syntax for Core Mail List Commands\n" +"\n" +"**Note:** Transactional emails are not affected by this setting." +msgstr "" +"Ponto final de cancelamento de inscrição com um clique em conformidade com a RFC 8058 para campanhas de e-mail. Este ponto final suporta o mecanismo de cabeçalho List-Unsubscribe-Post definido na RFC 8058, que permite que os clientes de e-mail cancelem a inscrição dos usuários com um único clique, sem sair do aplicativo de e-mail. O token pode ser fornecido como um parâmetro de consulta ou no corpo da solicitação.\n" +"\n" +"**Conformidade com padrões:** - RFC 8058: Sinalização da funcionalidade de um clique para cabeçalhos de e-mail de lista - RFC 2369: O uso de URLs como meta-sintaxe para comandos básicos de lista de e-mail **Observação:** os e-mails transacionais não são afetados por essa configuração." + +#: engine/vibes_auth/docs/drf/emailing.py:137 +msgid "" +"Unsubscribe token (alternative to query parameter). Can be omitted if token " +"is provided in URL." +msgstr "" +"Token de cancelamento de inscrição (alternativa ao parâmetro de consulta). " +"Pode ser omitido se o token for fornecido na URL." + +#: engine/vibes_auth/docs/drf/emailing.py:200 +msgid "Track email open event" +msgstr "Rastrear evento de abertura de e-mail" + +#: engine/vibes_auth/docs/drf/emailing.py:202 +msgid "" +"Records when a campaign email is opened by the recipient.\n" +"\n" +"This endpoint is called automatically when the tracking pixel (1x1 transparent GIF) embedded in the email is loaded by the recipient's email client.\n" +"\n" +"**How it works:**\n" +"1. Each campaign email contains a unique tracking pixel URL with a `tid` parameter\n" +"2. When the email is opened and images are loaded, this endpoint is called\n" +"3. The recipient's status is updated to 'opened' and the timestamp is recorded\n" +"4. The campaign's aggregate opened count is updated\n" +"\n" +"**Privacy considerations:**\n" +"- Only the first open is recorded (subsequent opens are ignored)\n" +"- No personal information beyond the tracking ID is logged\n" +"- Users who disable image loading will not trigger this event\n" +"\n" +"**Response:**\n" +"Returns a 1x1 transparent GIF image regardless of whether tracking succeeded, to ensure consistent behavior and prevent information leakage." +msgstr "" +"Registra quando um e-mail de campanha é aberto pelo destinatário. Esse endpoint é chamado automaticamente quando o pixel de rastreamento (GIF transparente 1x1) incorporado ao e-mail é carregado pelo cliente de e-mail do destinatário.\n" +"\n" +"**Como funciona:** 1. Cada e-mail de campanha contém uma URL de pixel de rastreamento exclusiva com um parâmetro `tid` 2. Quando o e-mail é aberto e as imagens são carregadas, este endpoint é chamado 3. O status do destinatário é atualizado para “aberto” e o carimbo de data/hora é registrado 4. A contagem agregada de aberturas da campanha é atualizada **Considerações de privacidade:**\n" +"- Apenas a primeira abertura é registrada (as aberturas subsequentes são ignoradas) - Nenhuma informação pessoal além do ID de rastreamento é registrada - Os usuários que desativarem o carregamento de imagens não acionarão este evento **Resposta:** Retorna uma imagem GIF transparente 1x1, independentemente do sucesso do rastreamento, para garantir um comportamento consistente e evitar vazamento de informações." + +#: engine/vibes_auth/docs/drf/emailing.py:223 +msgid "" +"Tracking ID (UUID) unique to each campaign-recipient combination. This ID " +"links the open event to a specific recipient and campaign." +msgstr "" +"ID de rastreamento (UUID) exclusivo para cada combinação de campanha-" +"destinatário. Esse ID vincula o evento de abertura a um destinatário e uma " +"campanha específicos." + +#: engine/vibes_auth/docs/drf/emailing.py:241 +msgid "" +"1x1 transparent GIF image. Always returned regardless of tracking status to " +"maintain consistent behavior." +msgstr "" +"Imagem GIF transparente 1x1. Sempre retornada, independentemente do status " +"de rastreamento, para manter um comportamento consistente." + +#: engine/vibes_auth/docs/drf/emailing.py:247 +msgid "" +"Returned when no tracking ID is provided. Note: Invalid tracking IDs still " +"return 200 with the GIF to prevent enumeration attacks." +msgstr "" +"Retornado quando nenhum ID de rastreamento é fornecido. Observação: IDs de " +"rastreamento inválidos ainda retornam 200 com o GIF para evitar ataques de " +"enumeração." + #: engine/vibes_auth/docs/drf/messaging.py:17 msgid "User messages entrypoint" msgstr "Ponto de entrada de mensagens do usuário" @@ -246,9 +391,9 @@ msgid "confirm a user's password reset" msgstr "Confirmar a redefinição de senha de um usuário" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:351 +#: engine/vibes_auth/graphene/mutations.py:358 #: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107 -#: engine/vibes_auth/viewsets.py:94 +#: engine/vibes_auth/viewsets.py:97 msgid "passwords do not match" msgstr "As senhas não correspondem" @@ -301,195 +446,166 @@ msgstr "Inaugurado" msgid "Clicked" msgstr "Clicado" -#: engine/vibes_auth/emailing/models.py:35 -#: engine/vibes_auth/emailing/models.py:71 -#: engine/vibes_auth/emailing/models.py:121 +#: engine/vibes_auth/emailing/models.py:38 +#: engine/vibes_auth/emailing/models.py:88 msgid "name" msgstr "nome" -#: engine/vibes_auth/emailing/models.py:36 -msgid "descriptive name for the image" -msgstr "nome descritivo para a imagem" - -#: engine/vibes_auth/emailing/models.py:40 -msgid "image" -msgstr "imagem" - -#: engine/vibes_auth/emailing/models.py:41 -msgid "image file to use in email templates" -msgstr "arquivo de imagem a ser usado em modelos de e-mail" - -#: engine/vibes_auth/emailing/models.py:47 -msgid "alt text" -msgstr "outro texto" - -#: engine/vibes_auth/emailing/models.py:48 -msgid "alternative text for accessibility" -msgstr "texto alternativo para acessibilidade" - -#: engine/vibes_auth/emailing/models.py:52 -msgid "email image" -msgstr "imagem de e-mail" - -#: engine/vibes_auth/emailing/models.py:53 -msgid "email images" -msgstr "imagens de e-mail" - -#: engine/vibes_auth/emailing/models.py:72 +#: engine/vibes_auth/emailing/models.py:39 msgid "internal name for the template" msgstr "nome interno do modelo" -#: engine/vibes_auth/emailing/models.py:76 +#: engine/vibes_auth/emailing/models.py:43 msgid "slug" msgstr "servos" -#: engine/vibes_auth/emailing/models.py:77 +#: engine/vibes_auth/emailing/models.py:44 msgid "unique identifier for the template" msgstr "identificador único para o modelo" -#: engine/vibes_auth/emailing/models.py:81 +#: engine/vibes_auth/emailing/models.py:48 msgid "subject" msgstr "assunto" -#: engine/vibes_auth/emailing/models.py:82 +#: engine/vibes_auth/emailing/models.py:49 msgid "email subject line - supports {{ variables }}" msgstr "assunto do e-mail - suporta {{ variables }}" -#: engine/vibes_auth/emailing/models.py:85 -msgid "HTML content" -msgstr "Conteúdo HTML" +#: engine/vibes_auth/emailing/models.py:52 +msgid "content" +msgstr "conteúdo" -#: engine/vibes_auth/emailing/models.py:87 +#: engine/vibes_auth/emailing/models.py:54 msgid "" -"email body content - supports {{ user.first_name }}, {{ user.email }}, {{ " -"project_name }}, {{ unsubscribe_url }}" +"email body in markdown - supports {{ user.first_name }}, {{ user.email }}, " +"{{ project_name }}, {{ unsubscribe_url }}" msgstr "" "conteúdo do corpo do e-mail - suporta {{ user.first_name }}, {{ user.email " "}}, {{ project_name }}, {{ unsubscribe_url }}" -#: engine/vibes_auth/emailing/models.py:94 +#: engine/vibes_auth/emailing/models.py:61 msgid "plain text content" msgstr "conteúdo em texto simples" -#: engine/vibes_auth/emailing/models.py:95 +#: engine/vibes_auth/emailing/models.py:62 msgid "plain text fallback (auto-generated if empty)" msgstr "texto simples alternativo (gerado automaticamente se estiver vazio)" -#: engine/vibes_auth/emailing/models.py:100 +#: engine/vibes_auth/emailing/models.py:67 msgid "available variables" msgstr "variáveis disponíveis" -#: engine/vibes_auth/emailing/models.py:101 +#: engine/vibes_auth/emailing/models.py:68 msgid "documentation of available template variables" msgstr "documentação das variáveis de modelo disponíveis" -#: engine/vibes_auth/emailing/models.py:105 +#: engine/vibes_auth/emailing/models.py:72 msgid "email template" msgstr "modelo de e-mail" -#: engine/vibes_auth/emailing/models.py:106 +#: engine/vibes_auth/emailing/models.py:73 msgid "email templates" msgstr "modelos de e-mail" -#: engine/vibes_auth/emailing/models.py:122 +#: engine/vibes_auth/emailing/models.py:89 msgid "internal name for the campaign" msgstr "nome interno da campanha" -#: engine/vibes_auth/emailing/models.py:129 +#: engine/vibes_auth/emailing/models.py:96 msgid "template" msgstr "modelo" -#: engine/vibes_auth/emailing/models.py:130 +#: engine/vibes_auth/emailing/models.py:97 msgid "email template to use for this campaign" msgstr "modelo de e-mail a ser usado para esta campanha" -#: engine/vibes_auth/emailing/models.py:136 -#: engine/vibes_auth/emailing/models.py:206 +#: engine/vibes_auth/emailing/models.py:103 +#: engine/vibes_auth/emailing/models.py:173 msgid "status" msgstr "status" -#: engine/vibes_auth/emailing/models.py:141 +#: engine/vibes_auth/emailing/models.py:108 msgid "scheduled at" msgstr "programado para" -#: engine/vibes_auth/emailing/models.py:142 +#: engine/vibes_auth/emailing/models.py:109 msgid "when to send the campaign (leave empty for manual send)" msgstr "quando enviar a campanha (deixe em branco para envio manual)" -#: engine/vibes_auth/emailing/models.py:147 -#: engine/vibes_auth/emailing/models.py:211 +#: engine/vibes_auth/emailing/models.py:114 +#: engine/vibes_auth/emailing/models.py:178 msgid "sent at" msgstr "tarde que" -#: engine/vibes_auth/emailing/models.py:148 +#: engine/vibes_auth/emailing/models.py:115 msgid "when the campaign was actually sent" msgstr "quando a campanha foi realmente enviada" -#: engine/vibes_auth/emailing/models.py:153 +#: engine/vibes_auth/emailing/models.py:120 msgid "total recipients" msgstr "total de destinatários" -#: engine/vibes_auth/emailing/models.py:157 +#: engine/vibes_auth/emailing/models.py:124 msgid "sent count" msgstr "contagem enviada" -#: engine/vibes_auth/emailing/models.py:161 +#: engine/vibes_auth/emailing/models.py:128 msgid "failed count" msgstr "contagem falhada" -#: engine/vibes_auth/emailing/models.py:165 +#: engine/vibes_auth/emailing/models.py:132 msgid "opened count" msgstr "contagem aberta" -#: engine/vibes_auth/emailing/models.py:169 +#: engine/vibes_auth/emailing/models.py:136 msgid "clicked count" msgstr "contagem de cliques" -#: engine/vibes_auth/emailing/models.py:173 +#: engine/vibes_auth/emailing/models.py:140 msgid "email campaign" msgstr "campanha por e-mail" -#: engine/vibes_auth/emailing/models.py:174 +#: engine/vibes_auth/emailing/models.py:141 msgid "email campaigns" msgstr "campanhas por e-mail" -#: engine/vibes_auth/emailing/models.py:194 +#: engine/vibes_auth/emailing/models.py:161 msgid "campaign" msgstr "campanha" -#: engine/vibes_auth/emailing/models.py:200 engine/vibes_auth/models.py:146 +#: engine/vibes_auth/emailing/models.py:167 engine/vibes_auth/models.py:183 msgid "user" msgstr "Usuário" -#: engine/vibes_auth/emailing/models.py:216 +#: engine/vibes_auth/emailing/models.py:183 msgid "opened at" msgstr "inaugurado em" -#: engine/vibes_auth/emailing/models.py:221 +#: engine/vibes_auth/emailing/models.py:188 msgid "clicked at" msgstr "clicou em" -#: engine/vibes_auth/emailing/models.py:227 +#: engine/vibes_auth/emailing/models.py:194 msgid "tracking ID" msgstr "ID de rastreamento" -#: engine/vibes_auth/emailing/models.py:228 +#: engine/vibes_auth/emailing/models.py:195 msgid "unique ID for tracking opens and clicks" msgstr "ID exclusivo para rastrear aberturas e cliques" -#: engine/vibes_auth/emailing/models.py:233 +#: engine/vibes_auth/emailing/models.py:200 msgid "error message" msgstr "mensagem de erro" -#: engine/vibes_auth/emailing/models.py:234 +#: engine/vibes_auth/emailing/models.py:201 msgid "error details if sending failed" msgstr "detalhes do erro se o envio falhou" -#: engine/vibes_auth/emailing/models.py:238 +#: engine/vibes_auth/emailing/models.py:205 msgid "campaign recipient" msgstr "destinatário da campanha" -#: engine/vibes_auth/emailing/models.py:239 +#: engine/vibes_auth/emailing/models.py:206 msgid "campaign recipients" msgstr "destinatários da campanha" @@ -505,73 +621,73 @@ msgstr "Você recebeu este e-mail porque se inscreveu em nossa newsletter." msgid "Unsubscribe" msgstr "Cancelar inscrição" -#: engine/vibes_auth/emailing/views.py:71 +#: engine/vibes_auth/emailing/views.py:39 msgid "Unsubscribe token is required." msgstr "É necessário um token de cancelamento de inscrição." -#: engine/vibes_auth/emailing/views.py:79 +#: engine/vibes_auth/emailing/views.py:47 msgid "Invalid unsubscribe token format." msgstr "Formato inválido do token de cancelamento de inscrição." -#: engine/vibes_auth/emailing/views.py:87 +#: engine/vibes_auth/emailing/views.py:55 msgid "User not found." msgstr "Usuário não encontrado." -#: engine/vibes_auth/emailing/views.py:93 -msgid "You are already unsubscribed." -msgstr "Você já está cancelado." - -#: engine/vibes_auth/emailing/views.py:101 -msgid "You have been successfully unsubscribed from our emails." -msgstr "Você foi excluído com sucesso de nossa lista de e-mails." - -#: engine/vibes_auth/graphene/mutations.py:46 +#: engine/vibes_auth/graphene/mutations.py:47 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "O uuid codificado em b64 do usuário que nos indicou o novo usuário." -#: engine/vibes_auth/graphene/mutations.py:68 +#: engine/vibes_auth/graphene/mutations.py:70 msgid "password too weak" msgstr "A senha é muito fraca" -#: engine/vibes_auth/graphene/mutations.py:128 +#: engine/vibes_auth/graphene/mutations.py:130 msgid "malformed email" msgstr "E-mail malformado" -#: engine/vibes_auth/graphene/mutations.py:140 +#: engine/vibes_auth/graphene/mutations.py:142 #: engine/vibes_auth/serializers.py:117 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Número de telefone malformado: {phone_number}!" -#: engine/vibes_auth/graphene/mutations.py:165 +#: engine/vibes_auth/graphene/mutations.py:167 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Formato de atributo inválido: {attribute_pair}!" -#: engine/vibes_auth/graphene/mutations.py:182 +#: engine/vibes_auth/graphene/mutations.py:184 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} não existe: {uuid}!" -#: engine/vibes_auth/graphene/mutations.py:304 -#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180 +#: engine/vibes_auth/graphene/mutations.py:309 +#: engine/vibes_auth/viewsets.py:174 engine/vibes_auth/viewsets.py:198 msgid "activation link is invalid!" msgstr "O link de ativação é inválido!" -#: engine/vibes_auth/graphene/mutations.py:307 +#: engine/vibes_auth/graphene/mutations.py:312 msgid "account already activated..." msgstr "A conta já foi ativada..." -#: engine/vibes_auth/graphene/mutations.py:314 -#: engine/vibes_auth/graphene/mutations.py:376 +#: engine/vibes_auth/graphene/mutations.py:319 +#: engine/vibes_auth/graphene/mutations.py:383 msgid "something went wrong: {e!s}" msgstr "Algo deu errado: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:358 -#: engine/vibes_auth/viewsets.py:106 +#: engine/vibes_auth/graphene/mutations.py:365 +#: engine/vibes_auth/viewsets.py:109 msgid "token is invalid!" msgstr "O token é inválido!" +#: engine/vibes_auth/graphene/mutations.py:403 +msgid "only image files are allowed (jpg, png, gif, webp)" +msgstr "Apenas arquivos de imagem são permitidos (jpg, png, gif, webp)" + +#: engine/vibes_auth/graphene/mutations.py:406 +msgid "file size must not exceed 5 MB" +msgstr "O tamanho do arquivo não deve exceder 5 MB." + #: engine/vibes_auth/graphene/object_types.py:46 msgid "" "the products this user has viewed most recently (max 48), in " @@ -581,7 +697,7 @@ msgstr "" " ordem cronológica inversa." #: engine/vibes_auth/graphene/object_types.py:49 -#: engine/vibes_auth/models.py:214 +#: engine/vibes_auth/models.py:270 msgid "groups" msgstr "Grupos" @@ -590,7 +706,7 @@ msgid "wishlist" msgstr "Lista de desejos" #: engine/vibes_auth/graphene/object_types.py:56 -#: engine/vibes_auth/models.py:70 +#: engine/vibes_auth/models.py:75 msgid "avatar" msgstr "Avatar" @@ -626,7 +742,7 @@ msgstr "Estamos procurando o operador para lhe responder, aguarde!" msgid "Assignee must be a staff user." msgstr "O responsável deve ser um usuário da equipe." -#: engine/vibes_auth/models.py:42 +#: engine/vibes_auth/models.py:44 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -645,124 +761,136 @@ msgstr "" "modelo User foi projetado para lidar com casos de uso específicos para o " "gerenciamento aprimorado de usuários." -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "email" msgstr "E-mail" -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "user email address" msgstr "Endereço de e-mail do usuário" -#: engine/vibes_auth/models.py:55 +#: engine/vibes_auth/models.py:57 msgid "phone_number" msgstr "Número de telefone" -#: engine/vibes_auth/models.py:60 +#: engine/vibes_auth/models.py:61 msgid "user phone number" msgstr "Número de telefone do usuário" -#: engine/vibes_auth/models.py:66 +#: engine/vibes_auth/models.py:68 msgid "first_name" msgstr "Primeiro nome" -#: engine/vibes_auth/models.py:67 +#: engine/vibes_auth/models.py:71 msgid "last_name" msgstr "Sobrenome" -#: engine/vibes_auth/models.py:73 +#: engine/vibes_auth/models.py:78 msgid "user profile image" msgstr "Imagem do perfil do usuário" -#: engine/vibes_auth/models.py:78 +#: engine/vibes_auth/models.py:83 msgid "is verified" msgstr "É verificado" -#: engine/vibes_auth/models.py:79 +#: engine/vibes_auth/models.py:84 msgid "user verification status" msgstr "Status de verificação do usuário" -#: engine/vibes_auth/models.py:82 +#: engine/vibes_auth/models.py:87 msgid "is_active" msgstr "Está ativo" -#: engine/vibes_auth/models.py:84 +#: engine/vibes_auth/models.py:89 msgid "unselect this instead of deleting accounts" msgstr "Desmarque essa opção em vez de excluir contas" -#: engine/vibes_auth/models.py:87 +#: engine/vibes_auth/models.py:92 msgid "is_subscribed" msgstr "Está inscrito" -#: engine/vibes_auth/models.py:88 +#: engine/vibes_auth/models.py:93 msgid "user's newsletter subscription status" msgstr "Status da assinatura do boletim informativo do usuário" -#: engine/vibes_auth/models.py:92 +#: engine/vibes_auth/models.py:98 msgid "activation token" msgstr "Token de ativação" -#: engine/vibes_auth/models.py:95 +#: engine/vibes_auth/models.py:103 +msgid "activation token created" +msgstr "Token de ativação criado" + +#: engine/vibes_auth/models.py:107 msgid "unsubscribe token" msgstr "token de cancelamento de inscrição" -#: engine/vibes_auth/models.py:96 +#: engine/vibes_auth/models.py:108 msgid "token for secure one-click unsubscribe from campaigns" msgstr "" "token para cancelamento seguro de inscrição em campanhas com um clique" -#: engine/vibes_auth/models.py:106 +#: engine/vibes_auth/models.py:118 msgid "attributes" msgstr "Atributos" -#: engine/vibes_auth/models.py:147 +#: engine/vibes_auth/models.py:184 msgid "users" msgstr "Usuários" -#: engine/vibes_auth/models.py:154 +#: engine/vibes_auth/models.py:202 +msgid "admin OTP code" +msgstr "Código OTP do administrador" + +#: engine/vibes_auth/models.py:203 +msgid "admin OTP codes" +msgstr "Códigos OTP de administrador" + +#: engine/vibes_auth/models.py:210 msgid "For anonymous threads" msgstr "Para tópicos anônimos" -#: engine/vibes_auth/models.py:178 +#: engine/vibes_auth/models.py:234 msgid "Chat thread" msgstr "Linha de bate-papo" -#: engine/vibes_auth/models.py:179 +#: engine/vibes_auth/models.py:235 msgid "Chat threads" msgstr "Tópicos de bate-papo" -#: engine/vibes_auth/models.py:185 +#: engine/vibes_auth/models.py:241 msgid "provide user or email for anonymous thread." msgstr "forneça o usuário ou e-mail para o tópico anônimo." -#: engine/vibes_auth/models.py:188 +#: engine/vibes_auth/models.py:244 msgid "assignee must be a staff user." msgstr "O responsável deve ser um usuário da equipe." -#: engine/vibes_auth/models.py:206 +#: engine/vibes_auth/models.py:262 msgid "Chat message" msgstr "Mensagem de bate-papo" -#: engine/vibes_auth/models.py:207 +#: engine/vibes_auth/models.py:263 msgid "Chat messages" msgstr "Mensagens de bate-papo" -#: engine/vibes_auth/models.py:213 +#: engine/vibes_auth/models.py:269 msgid "group" msgstr "Grupo" -#: engine/vibes_auth/models.py:220 +#: engine/vibes_auth/models.py:276 msgid "outstanding token" msgstr "Token excepcional" -#: engine/vibes_auth/models.py:221 +#: engine/vibes_auth/models.py:277 msgid "outstanding tokens" msgstr "Tokens pendentes" -#: engine/vibes_auth/models.py:227 +#: engine/vibes_auth/models.py:283 msgid "blacklisted token" msgstr "Token na lista negra" -#: engine/vibes_auth/models.py:228 +#: engine/vibes_auth/models.py:284 msgid "blacklisted tokens" msgstr "Tokens na lista negra" @@ -805,6 +933,10 @@ msgstr "Nenhuma reivindicação de uuid de usuário presente no token" msgid "user does not exist" msgstr "O usuário não existe" +#: engine/vibes_auth/templates/admin/verify_otp.html:27 +msgid "Verify" +msgstr "Verificar" + #: engine/vibes_auth/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "Redefinir sua senha" @@ -890,12 +1022,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "Atenciosamente,
a equipe %(project_name)s" -#: engine/vibes_auth/utils/emailing.py:24 +#: engine/vibes_auth/utils/emailing.py:27 #, python-brace-format msgid "{settings.PROJECT_NAME} | Activate Account" msgstr "{settings.PROJECT_NAME} | Ativar conta" -#: engine/vibes_auth/utils/emailing.py:63 +#: engine/vibes_auth/utils/emailing.py:66 #, python-brace-format msgid "{settings.PROJECT_NAME} | Reset Password" msgstr "{settings.PROJECT_NAME} | Redefinir senha" @@ -951,7 +1083,7 @@ msgstr "" msgid "the token is invalid" msgstr "O token é inválido" -#: engine/vibes_auth/viewsets.py:44 +#: engine/vibes_auth/viewsets.py:47 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." @@ -959,10 +1091,18 @@ 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." -#: engine/vibes_auth/viewsets.py:113 +#: engine/vibes_auth/viewsets.py:116 msgid "password reset successfully" msgstr "A senha foi redefinida com sucesso!" -#: engine/vibes_auth/viewsets.py:161 +#: engine/vibes_auth/viewsets.py:146 +msgid "" +"Account already registered but not yet activated. A new activation email has" +" been sent." +msgstr "" +"Conta já registrada, mas ainda não ativada. Um novo e-mail de ativação foi " +"enviado." + +#: engine/vibes_auth/viewsets.py:179 msgid "account already activated!" msgstr "Você já ativou a conta..." diff --git a/engine/vibes_auth/locale/ro_RO/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/ro_RO/LC_MESSAGES/django.mo index de49024d..a2664571 100644 Binary files a/engine/vibes_auth/locale/ro_RO/LC_MESSAGES/django.mo and b/engine/vibes_auth/locale/ro_RO/LC_MESSAGES/django.mo differ diff --git a/engine/vibes_auth/locale/ro_RO/LC_MESSAGES/django.po b/engine/vibes_auth/locale/ro_RO/LC_MESSAGES/django.po index 9a191355..75a24bf1 100644 --- a/engine/vibes_auth/locale/ro_RO/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/ro_RO/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 03:06+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,32 +13,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:65 engine/vibes_auth/admin.py:66 +#: engine/vibes_auth/admin.py:64 engine/vibes_auth/admin.py:65 #: engine/vibes_auth/graphene/object_types.py:54 msgid "balance" msgstr "Echilibru" -#: engine/vibes_auth/admin.py:74 +#: engine/vibes_auth/admin.py:73 msgid "order" msgstr "Comandă" -#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:51 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:51 msgid "orders" msgstr "Ordine" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:84 msgid "personal info" msgstr "Informații personale" -#: engine/vibes_auth/admin.py:89 engine/vibes_auth/graphene/object_types.py:50 +#: engine/vibes_auth/admin.py:88 engine/vibes_auth/graphene/object_types.py:50 msgid "permissions" msgstr "Permisiuni" -#: engine/vibes_auth/admin.py:102 +#: engine/vibes_auth/admin.py:101 msgid "important dates" msgstr "Date importante" -#: engine/vibes_auth/admin.py:103 +#: engine/vibes_auth/admin.py:102 msgid "additional info" msgstr "Informații suplimentare" @@ -54,79 +54,83 @@ msgstr "Închideți firele selectate" msgid "Open selected threads" msgstr "Deschideți firele selectate" -#: engine/vibes_auth/admin.py:208 -msgid "Preview" -msgstr "Previzualizare" - -#: engine/vibes_auth/admin.py:209 engine/vibes_auth/admin.py:249 -#: engine/vibes_auth/admin.py:326 -msgid "Metadata" -msgstr "Metadate" - -#: engine/vibes_auth/admin.py:212 -msgid "preview" -msgstr "previzualizare" - -#: engine/vibes_auth/admin.py:221 -msgid "image preview" -msgstr "previzualizare imagine" - -#: engine/vibes_auth/admin.py:241 +#: engine/vibes_auth/admin.py:209 msgid "Content" msgstr "Conținut" -#: engine/vibes_auth/admin.py:243 +#: engine/vibes_auth/admin.py:211 msgid "Documentation" msgstr "Documentație" -#: engine/vibes_auth/admin.py:313 +#: engine/vibes_auth/admin.py:217 engine/vibes_auth/admin.py:294 +msgid "Metadata" +msgstr "Metadate" + +#: engine/vibes_auth/admin.py:281 msgid "Scheduling" msgstr "Programare" -#: engine/vibes_auth/admin.py:315 +#: engine/vibes_auth/admin.py:283 msgid "Statistics" msgstr "Statistici" -#: engine/vibes_auth/admin.py:329 +#: engine/vibes_auth/admin.py:297 msgid "stats" msgstr "stat" -#: engine/vibes_auth/admin.py:335 +#: engine/vibes_auth/admin.py:303 msgid "Prepare recipients (subscribed users)" msgstr "Pregătiți destinatarii (utilizatorii abonați)" -#: engine/vibes_auth/admin.py:343 +#: engine/vibes_auth/admin.py:311 msgid "Campaign '{}' is not in draft status." msgstr "Campania „{}” nu se află în stadiul de schiță." -#: engine/vibes_auth/admin.py:350 +#: engine/vibes_auth/admin.py:318 msgid "Preparing recipients for campaign '{}'." msgstr "Pregătirea destinatarilor pentru campania „{}”." -#: engine/vibes_auth/admin.py:354 +#: engine/vibes_auth/admin.py:322 msgid "Send campaign now" msgstr "Trimiteți campania acum" -#: engine/vibes_auth/admin.py:362 +#: engine/vibes_auth/admin.py:330 msgid "Campaign '{}' cannot be sent (status: {})." msgstr "Campania „{}” nu poate fi trimisă (stare: {})." -#: engine/vibes_auth/admin.py:372 +#: engine/vibes_auth/admin.py:340 msgid "Campaign '{}' has no recipients. Prepare recipients first." msgstr "Campania „{}” nu are destinatari. Pregătiți mai întâi destinatarii." -#: engine/vibes_auth/admin.py:383 +#: engine/vibes_auth/admin.py:351 msgid "Started sending campaign '{}'." msgstr "A început trimiterea campaniei „{}”." -#: engine/vibes_auth/admin.py:387 +#: engine/vibes_auth/admin.py:355 msgid "Cancel campaign" msgstr "Anulează campania" -#: engine/vibes_auth/admin.py:396 +#: engine/vibes_auth/admin.py:364 msgid "{} campaign(s) cancelled." msgstr "Campanie (campanii) anulată (anulate)." +#: engine/vibes_auth/admin_site.py:24 +msgid "Verification code" +msgstr "Cod de verificare" + +#: engine/vibes_auth/admin_site.py:62 +msgid "A verification code has been sent to your email." +msgstr "Un cod de verificare a fost trimis la adresa ta de e-mail." + +#: engine/vibes_auth/admin_site.py:118 +msgid "Invalid or expired code. Please try again." +msgstr "Cod invalid sau expirat. Vă rugăm să încercați din nou." + +#: engine/vibes_auth/admin_site.py:124 +#: engine/vibes_auth/templates/admin/verify_otp.html:10 +msgid "Two-factor authentication" +msgstr "Autentificare în doi pași" + #: engine/vibes_auth/apps.py:8 msgid "Accounting" msgstr "Contabilitate" @@ -151,6 +155,147 @@ msgstr "Personal" msgid "System" msgstr "Sistemul" +#: engine/vibes_auth/docs/drf/emailing.py:18 +msgid "" +"UUID token for unsubscribing. This token is unique per user and is included " +"in the unsubscribe link of every campaign email. The token remains constant " +"for each user unless regenerated." +msgstr "" +"Token UUID pentru dezabonare. Acest token este unic pentru fiecare " +"utilizator și este inclus în linkul de dezabonare din fiecare e-mail de " +"campanie. Tokenul rămâne constant pentru fiecare utilizator, cu excepția " +"cazului în care este regenerat." + +#: engine/vibes_auth/docs/drf/emailing.py:37 +#: engine/vibes_auth/emailing/views.py:69 +msgid "You have been successfully unsubscribed from our emails." +msgstr "V-ați dezabonat cu succes de la e-mailurile noastre." + +#: engine/vibes_auth/docs/drf/emailing.py:45 +#: engine/vibes_auth/emailing/views.py:61 +msgid "You are already unsubscribed." +msgstr "V-ați dezabonat deja." + +#: engine/vibes_auth/docs/drf/emailing.py:52 +msgid "Unsubscribe from email campaigns" +msgstr "Dezabonare de la campaniile prin e-mail" + +#: engine/vibes_auth/docs/drf/emailing.py:54 +msgid "" +"Unsubscribe a user from all marketing email campaigns using their unique unsubscribe token.\n" +"\n" +"This endpoint is designed for email client compatibility where clicking a link triggers a GET request. The user will no longer receive promotional emails after successful unsubscription.\n" +"\n" +"**Note:** Transactional emails (order confirmations, password resets, etc.) are not affected by this setting." +msgstr "" +"Dezabonați un utilizator de la toate campaniile de marketing prin e-mail " +"utilizând tokenul său unic de dezabonare. Acest punct final este conceput " +"pentru compatibilitatea cu clienții de e-mail, unde clic pe un link " +"declanșează o cerere GET. Utilizatorul nu va mai primi e-mailuri " +"promoționale după dezabonarea cu succes. **Notă:** E-mailurile " +"tranzacționale (confirmări de comandă, resetări de parolă etc.) nu sunt " +"afectate de această setare." + +#: engine/vibes_auth/docs/drf/emailing.py:66 +#: engine/vibes_auth/docs/drf/emailing.py:146 +msgid "Successfully unsubscribed from email campaigns." +msgstr "V-ați dezabonat cu succes de la campaniile de e-mail." + +#: engine/vibes_auth/docs/drf/emailing.py:82 +#: engine/vibes_auth/docs/drf/emailing.py:162 +msgid "Invalid or missing unsubscribe token." +msgstr "Token de dezabonare invalid sau lipsă." + +#: engine/vibes_auth/docs/drf/emailing.py:96 +#: engine/vibes_auth/docs/drf/emailing.py:176 +msgid "User associated with the token was not found." +msgstr "Utilizatorul asociat cu tokenul nu a fost găsit." + +#: engine/vibes_auth/docs/drf/emailing.py:118 +msgid "One-Click Unsubscribe (RFC 8058)" +msgstr "Dezabonare cu un singur clic (RFC 8058)" + +#: engine/vibes_auth/docs/drf/emailing.py:120 +msgid "" +"RFC 8058 compliant one-click unsubscribe endpoint for email campaigns.\n" +"\n" +"This endpoint supports the List-Unsubscribe-Post header mechanism defined in RFC 8058, which allows email clients to unsubscribe users with a single click without leaving the email application.\n" +"\n" +"The token can be provided either as a query parameter or in the request body.\n" +"\n" +"**Standards Compliance:**\n" +"- RFC 8058: Signaling One-Click Functionality for List Email Headers\n" +"- RFC 2369: The Use of URLs as Meta-Syntax for Core Mail List Commands\n" +"\n" +"**Note:** Transactional emails are not affected by this setting." +msgstr "" +"Punct final de dezabonare cu un singur clic, conform cu RFC 8058, pentru campanii de e-mail. Acest punct final acceptă mecanismul antetului List-Unsubscribe-Post definit în RFC 8058, care permite clienților de e-mail să dezaboneze utilizatorii cu un singur clic, fără a părăsi aplicația de e-mail. Tokenul poate fi furnizat fie ca parametru de interogare, fie în corpul cererii.\n" +"\n" +"**Conformitate cu standardele:** - RFC 8058: Semnalarea funcționalității cu un singur clic pentru anteturile de e-mail din listă - RFC 2369: Utilizarea adreselor URL ca meta-sintaxă pentru comenzile de bază ale listei de e-mail **Notă:** E-mailurile tranzacționale nu sunt afectate de această setare." + +#: engine/vibes_auth/docs/drf/emailing.py:137 +msgid "" +"Unsubscribe token (alternative to query parameter). Can be omitted if token " +"is provided in URL." +msgstr "" +"Token de dezabonare (alternativă la parametrul de interogare). Poate fi omis" +" dacă tokenul este furnizat în URL." + +#: engine/vibes_auth/docs/drf/emailing.py:200 +msgid "Track email open event" +msgstr "Urmăriți evenimentul de deschidere a e-mailului" + +#: engine/vibes_auth/docs/drf/emailing.py:202 +msgid "" +"Records when a campaign email is opened by the recipient.\n" +"\n" +"This endpoint is called automatically when the tracking pixel (1x1 transparent GIF) embedded in the email is loaded by the recipient's email client.\n" +"\n" +"**How it works:**\n" +"1. Each campaign email contains a unique tracking pixel URL with a `tid` parameter\n" +"2. When the email is opened and images are loaded, this endpoint is called\n" +"3. The recipient's status is updated to 'opened' and the timestamp is recorded\n" +"4. The campaign's aggregate opened count is updated\n" +"\n" +"**Privacy considerations:**\n" +"- Only the first open is recorded (subsequent opens are ignored)\n" +"- No personal information beyond the tracking ID is logged\n" +"- Users who disable image loading will not trigger this event\n" +"\n" +"**Response:**\n" +"Returns a 1x1 transparent GIF image regardless of whether tracking succeeded, to ensure consistent behavior and prevent information leakage." +msgstr "" +"Înregistrează momentul în care un e-mail de campanie este deschis de destinatar. Acest punct final este apelat automat atunci când pixelul de urmărire (GIF transparent 1x1) încorporat în e-mail este încărcat de clientul de e-mail al destinatarului.\n" +"\n" +"**Cum funcționează:** 1. Fiecare e-mail de campanie conține o adresă URL unică de pixel de urmărire cu un parametru „tid”. 2. Când e-mailul este deschis și imaginile sunt încărcate, acest punct final este apelat. 3. Starea destinatarului este actualizată la „deschis” și se înregistrează marca temporală. 4. Numărul total de deschideri ale campaniei este actualizat. **Considerații privind confidențialitatea:**\n" +"- Se înregistrează numai prima deschidere (deschiderile ulterioare sunt ignorate) - Nu se înregistrează informații personale în afara ID-ului de urmărire - Utilizatorii care dezactivează încărcarea imaginilor nu vor declanșa acest eveniment **Răspuns:** Returnează o imagine GIF transparentă 1x1, indiferent dacă urmărirea a reușit sau nu, pentru a asigura un comportament consecvent și pentru a preveni scurgerea de informații." + +#: engine/vibes_auth/docs/drf/emailing.py:223 +msgid "" +"Tracking ID (UUID) unique to each campaign-recipient combination. This ID " +"links the open event to a specific recipient and campaign." +msgstr "" +"ID de urmărire (UUID) unic pentru fiecare combinație campanie-destinatar. " +"Acest ID leagă evenimentul de deschidere de un destinatar și o campanie " +"specifice." + +#: engine/vibes_auth/docs/drf/emailing.py:241 +msgid "" +"1x1 transparent GIF image. Always returned regardless of tracking status to " +"maintain consistent behavior." +msgstr "" +"Imagine GIF transparentă 1x1. Este întotdeauna returnată, indiferent de " +"starea de urmărire, pentru a menține un comportament consecvent." + +#: engine/vibes_auth/docs/drf/emailing.py:247 +msgid "" +"Returned when no tracking ID is provided. Note: Invalid tracking IDs still " +"return 200 with the GIF to prevent enumeration attacks." +msgstr "" +"Se returnează atunci când nu este furnizat niciun ID de urmărire. Notă: ID-" +"urile de urmărire nevalide returnează în continuare 200 cu GIF pentru a " +"preveni atacurile de enumerare." + #: engine/vibes_auth/docs/drf/messaging.py:17 msgid "User messages entrypoint" msgstr "Punctul de intrare al mesajelor utilizatorului" @@ -249,9 +394,9 @@ msgid "confirm a user's password reset" msgstr "Confirmați resetarea parolei unui utilizator" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:351 +#: engine/vibes_auth/graphene/mutations.py:358 #: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107 -#: engine/vibes_auth/viewsets.py:94 +#: engine/vibes_auth/viewsets.py:97 msgid "passwords do not match" msgstr "Parolele nu se potrivesc" @@ -304,196 +449,167 @@ msgstr "Deschis" msgid "Clicked" msgstr "A dat clic" -#: engine/vibes_auth/emailing/models.py:35 -#: engine/vibes_auth/emailing/models.py:71 -#: engine/vibes_auth/emailing/models.py:121 +#: engine/vibes_auth/emailing/models.py:38 +#: engine/vibes_auth/emailing/models.py:88 msgid "name" msgstr "nume" -#: engine/vibes_auth/emailing/models.py:36 -msgid "descriptive name for the image" -msgstr "denumire descriptivă pentru imagine" - -#: engine/vibes_auth/emailing/models.py:40 -msgid "image" -msgstr "imagine" - -#: engine/vibes_auth/emailing/models.py:41 -msgid "image file to use in email templates" -msgstr "fișier imagine pentru utilizare în șabloanele de e-mail" - -#: engine/vibes_auth/emailing/models.py:47 -msgid "alt text" -msgstr "alt text" - -#: engine/vibes_auth/emailing/models.py:48 -msgid "alternative text for accessibility" -msgstr "text alternativ pentru accesibilitate" - -#: engine/vibes_auth/emailing/models.py:52 -msgid "email image" -msgstr "imagine e-mail" - -#: engine/vibes_auth/emailing/models.py:53 -msgid "email images" -msgstr "imagini e-mail" - -#: engine/vibes_auth/emailing/models.py:72 +#: engine/vibes_auth/emailing/models.py:39 msgid "internal name for the template" msgstr "numele intern al șablonului" -#: engine/vibes_auth/emailing/models.py:76 +#: engine/vibes_auth/emailing/models.py:43 msgid "slug" msgstr "servitori" -#: engine/vibes_auth/emailing/models.py:77 +#: engine/vibes_auth/emailing/models.py:44 msgid "unique identifier for the template" msgstr "identificator unic pentru șablon" -#: engine/vibes_auth/emailing/models.py:81 +#: engine/vibes_auth/emailing/models.py:48 msgid "subject" msgstr "subiect" -#: engine/vibes_auth/emailing/models.py:82 +#: engine/vibes_auth/emailing/models.py:49 msgid "email subject line - supports {{ variables }}" msgstr "subiectul e-mailului - acceptă {{ variables }}" -#: engine/vibes_auth/emailing/models.py:85 -msgid "HTML content" -msgstr "Conținut HTML" +#: engine/vibes_auth/emailing/models.py:52 +msgid "content" +msgstr "conținut" -#: engine/vibes_auth/emailing/models.py:87 +#: engine/vibes_auth/emailing/models.py:54 msgid "" -"email body content - supports {{ user.first_name }}, {{ user.email }}, {{ " -"project_name }}, {{ unsubscribe_url }}" +"email body in markdown - supports {{ user.first_name }}, {{ user.email }}, " +"{{ project_name }}, {{ unsubscribe_url }}" msgstr "" "conținutul corpului e-mailului - acceptă {{ user.first_name }}, {{ " "user.email }}, {{ project_name }}, {{ unsubscribe_url }}" -#: engine/vibes_auth/emailing/models.py:94 +#: engine/vibes_auth/emailing/models.py:61 msgid "plain text content" msgstr "conținut text simplu" -#: engine/vibes_auth/emailing/models.py:95 +#: engine/vibes_auth/emailing/models.py:62 msgid "plain text fallback (auto-generated if empty)" msgstr "text simplu de rezervă (generat automat dacă este gol)" -#: engine/vibes_auth/emailing/models.py:100 +#: engine/vibes_auth/emailing/models.py:67 msgid "available variables" msgstr "variabile disponibile" -#: engine/vibes_auth/emailing/models.py:101 +#: engine/vibes_auth/emailing/models.py:68 msgid "documentation of available template variables" msgstr "documentația variabilelor disponibile în șabloane" -#: engine/vibes_auth/emailing/models.py:105 +#: engine/vibes_auth/emailing/models.py:72 msgid "email template" msgstr "șablon de e-mail" -#: engine/vibes_auth/emailing/models.py:106 +#: engine/vibes_auth/emailing/models.py:73 msgid "email templates" msgstr "șabloane de e-mail" -#: engine/vibes_auth/emailing/models.py:122 +#: engine/vibes_auth/emailing/models.py:89 msgid "internal name for the campaign" msgstr "denumirea internă a campaniei" -#: engine/vibes_auth/emailing/models.py:129 +#: engine/vibes_auth/emailing/models.py:96 msgid "template" msgstr "șablon" -#: engine/vibes_auth/emailing/models.py:130 +#: engine/vibes_auth/emailing/models.py:97 msgid "email template to use for this campaign" msgstr "șablon de e-mail de utilizat pentru această campanie" -#: engine/vibes_auth/emailing/models.py:136 -#: engine/vibes_auth/emailing/models.py:206 +#: engine/vibes_auth/emailing/models.py:103 +#: engine/vibes_auth/emailing/models.py:173 msgid "status" msgstr "statut" -#: engine/vibes_auth/emailing/models.py:141 +#: engine/vibes_auth/emailing/models.py:108 msgid "scheduled at" msgstr "programat la" -#: engine/vibes_auth/emailing/models.py:142 +#: engine/vibes_auth/emailing/models.py:109 msgid "when to send the campaign (leave empty for manual send)" msgstr "" "când să trimiteți campania (lăsați necompletat pentru trimitere manuală)" -#: engine/vibes_auth/emailing/models.py:147 -#: engine/vibes_auth/emailing/models.py:211 +#: engine/vibes_auth/emailing/models.py:114 +#: engine/vibes_auth/emailing/models.py:178 msgid "sent at" msgstr "târziu" -#: engine/vibes_auth/emailing/models.py:148 +#: engine/vibes_auth/emailing/models.py:115 msgid "when the campaign was actually sent" msgstr "când campania a fost efectiv trimisă" -#: engine/vibes_auth/emailing/models.py:153 +#: engine/vibes_auth/emailing/models.py:120 msgid "total recipients" msgstr "numărul total de destinatari" -#: engine/vibes_auth/emailing/models.py:157 +#: engine/vibes_auth/emailing/models.py:124 msgid "sent count" msgstr "număr trimis" -#: engine/vibes_auth/emailing/models.py:161 +#: engine/vibes_auth/emailing/models.py:128 msgid "failed count" msgstr "numărare eșuată" -#: engine/vibes_auth/emailing/models.py:165 +#: engine/vibes_auth/emailing/models.py:132 msgid "opened count" msgstr "număr deschis" -#: engine/vibes_auth/emailing/models.py:169 +#: engine/vibes_auth/emailing/models.py:136 msgid "clicked count" msgstr "număr de clicuri" -#: engine/vibes_auth/emailing/models.py:173 +#: engine/vibes_auth/emailing/models.py:140 msgid "email campaign" msgstr "campanie prin e-mail" -#: engine/vibes_auth/emailing/models.py:174 +#: engine/vibes_auth/emailing/models.py:141 msgid "email campaigns" msgstr "campanii prin e-mail" -#: engine/vibes_auth/emailing/models.py:194 +#: engine/vibes_auth/emailing/models.py:161 msgid "campaign" msgstr "campanie" -#: engine/vibes_auth/emailing/models.py:200 engine/vibes_auth/models.py:146 +#: engine/vibes_auth/emailing/models.py:167 engine/vibes_auth/models.py:183 msgid "user" msgstr "Utilizator" -#: engine/vibes_auth/emailing/models.py:216 +#: engine/vibes_auth/emailing/models.py:183 msgid "opened at" msgstr "deschis la" -#: engine/vibes_auth/emailing/models.py:221 +#: engine/vibes_auth/emailing/models.py:188 msgid "clicked at" msgstr "a făcut clic pe" -#: engine/vibes_auth/emailing/models.py:227 +#: engine/vibes_auth/emailing/models.py:194 msgid "tracking ID" msgstr "ID de urmărire" -#: engine/vibes_auth/emailing/models.py:228 +#: engine/vibes_auth/emailing/models.py:195 msgid "unique ID for tracking opens and clicks" msgstr "ID unic pentru urmărirea deschiderilor și clicurilor" -#: engine/vibes_auth/emailing/models.py:233 +#: engine/vibes_auth/emailing/models.py:200 msgid "error message" msgstr "mesaj de eroare" -#: engine/vibes_auth/emailing/models.py:234 +#: engine/vibes_auth/emailing/models.py:201 msgid "error details if sending failed" msgstr "detalii despre eroare dacă trimiterea a eșuat" -#: engine/vibes_auth/emailing/models.py:238 +#: engine/vibes_auth/emailing/models.py:205 msgid "campaign recipient" msgstr "destinatarul campaniei" -#: engine/vibes_auth/emailing/models.py:239 +#: engine/vibes_auth/emailing/models.py:206 msgid "campaign recipients" msgstr "destinatarii campaniei" @@ -511,74 +627,74 @@ msgstr "" msgid "Unsubscribe" msgstr "Dezabonare" -#: engine/vibes_auth/emailing/views.py:71 +#: engine/vibes_auth/emailing/views.py:39 msgid "Unsubscribe token is required." msgstr "Este necesar un token de dezabonare." -#: engine/vibes_auth/emailing/views.py:79 +#: engine/vibes_auth/emailing/views.py:47 msgid "Invalid unsubscribe token format." msgstr "Format token de dezabonare invalid." -#: engine/vibes_auth/emailing/views.py:87 +#: engine/vibes_auth/emailing/views.py:55 msgid "User not found." msgstr "Utilizator neidentificat." -#: engine/vibes_auth/emailing/views.py:93 -msgid "You are already unsubscribed." -msgstr "V-ați dezabonat deja." - -#: engine/vibes_auth/emailing/views.py:101 -msgid "You have been successfully unsubscribed from our emails." -msgstr "V-ați dezabonat cu succes de la e-mailurile noastre." - -#: engine/vibes_auth/graphene/mutations.py:46 +#: engine/vibes_auth/graphene/mutations.py:47 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" "Uuid codificat b64 al utilizatorului care ne-a recomandat noul utilizator." -#: engine/vibes_auth/graphene/mutations.py:68 +#: engine/vibes_auth/graphene/mutations.py:70 msgid "password too weak" msgstr "Parola este prea slabă" -#: engine/vibes_auth/graphene/mutations.py:128 +#: engine/vibes_auth/graphene/mutations.py:130 msgid "malformed email" msgstr "E-mail malformat" -#: engine/vibes_auth/graphene/mutations.py:140 +#: engine/vibes_auth/graphene/mutations.py:142 #: engine/vibes_auth/serializers.py:117 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Număr de telefon malformat: {phone_number}!" -#: engine/vibes_auth/graphene/mutations.py:165 +#: engine/vibes_auth/graphene/mutations.py:167 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Format de atribut invalid: {attribute_pair}!" -#: engine/vibes_auth/graphene/mutations.py:182 +#: engine/vibes_auth/graphene/mutations.py:184 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} nu există: {uuid}!" -#: engine/vibes_auth/graphene/mutations.py:304 -#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180 +#: engine/vibes_auth/graphene/mutations.py:309 +#: engine/vibes_auth/viewsets.py:174 engine/vibes_auth/viewsets.py:198 msgid "activation link is invalid!" msgstr "Linkul de activare este invalid!" -#: engine/vibes_auth/graphene/mutations.py:307 +#: engine/vibes_auth/graphene/mutations.py:312 msgid "account already activated..." msgstr "Contul a fost deja activat..." -#: engine/vibes_auth/graphene/mutations.py:314 -#: engine/vibes_auth/graphene/mutations.py:376 +#: engine/vibes_auth/graphene/mutations.py:319 +#: engine/vibes_auth/graphene/mutations.py:383 msgid "something went wrong: {e!s}" msgstr "Ceva nu a mers bine: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:358 -#: engine/vibes_auth/viewsets.py:106 +#: engine/vibes_auth/graphene/mutations.py:365 +#: engine/vibes_auth/viewsets.py:109 msgid "token is invalid!" msgstr "Token-ul nu este valabil!" +#: engine/vibes_auth/graphene/mutations.py:403 +msgid "only image files are allowed (jpg, png, gif, webp)" +msgstr "Sunt permise numai fișiere imagine (jpg, png, gif, webp)" + +#: engine/vibes_auth/graphene/mutations.py:406 +msgid "file size must not exceed 5 MB" +msgstr "Dimensiunea fișierului nu trebuie să depășească 5 MB." + #: engine/vibes_auth/graphene/object_types.py:46 msgid "" "the products this user has viewed most recently (max 48), in " @@ -588,7 +704,7 @@ msgstr "" "în ordine cronologică inversă." #: engine/vibes_auth/graphene/object_types.py:49 -#: engine/vibes_auth/models.py:214 +#: engine/vibes_auth/models.py:270 msgid "groups" msgstr "Grupuri" @@ -597,7 +713,7 @@ msgid "wishlist" msgstr "Lista dorințelor" #: engine/vibes_auth/graphene/object_types.py:56 -#: engine/vibes_auth/models.py:70 +#: engine/vibes_auth/models.py:75 msgid "avatar" msgstr "Avatar" @@ -634,7 +750,7 @@ msgstr "Căutăm operatorul care să vă răspundă deja, așteptați!" msgid "Assignee must be a staff user." msgstr "Destinatarul trebuie să fie un utilizator personal." -#: engine/vibes_auth/models.py:42 +#: engine/vibes_auth/models.py:44 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -653,123 +769,135 @@ msgstr "" "verificarea conturilor. Modelul User este conceput pentru a gestiona cazuri " "de utilizare specifice pentru gestionarea îmbunătățită a utilizatorilor." -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "email" msgstr "E-mail" -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "user email address" msgstr "Adresa de e-mail a utilizatorului" -#: engine/vibes_auth/models.py:55 +#: engine/vibes_auth/models.py:57 msgid "phone_number" msgstr "Număr de telefon" -#: engine/vibes_auth/models.py:60 +#: engine/vibes_auth/models.py:61 msgid "user phone number" msgstr "Numărul de telefon al utilizatorului" -#: engine/vibes_auth/models.py:66 +#: engine/vibes_auth/models.py:68 msgid "first_name" msgstr "Numele și prenumele" -#: engine/vibes_auth/models.py:67 +#: engine/vibes_auth/models.py:71 msgid "last_name" msgstr "Numele de familie" -#: engine/vibes_auth/models.py:73 +#: engine/vibes_auth/models.py:78 msgid "user profile image" msgstr "Imagine profil utilizator" -#: engine/vibes_auth/models.py:78 +#: engine/vibes_auth/models.py:83 msgid "is verified" msgstr "Este verificat" -#: engine/vibes_auth/models.py:79 +#: engine/vibes_auth/models.py:84 msgid "user verification status" msgstr "Statutul de verificare al utilizatorului" -#: engine/vibes_auth/models.py:82 +#: engine/vibes_auth/models.py:87 msgid "is_active" msgstr "Este activ" -#: engine/vibes_auth/models.py:84 +#: engine/vibes_auth/models.py:89 msgid "unselect this instead of deleting accounts" msgstr "Deselectați acest lucru în loc să ștergeți conturile" -#: engine/vibes_auth/models.py:87 +#: engine/vibes_auth/models.py:92 msgid "is_subscribed" msgstr "Este abonat" -#: engine/vibes_auth/models.py:88 +#: engine/vibes_auth/models.py:93 msgid "user's newsletter subscription status" msgstr "Starea abonării utilizatorului la buletinul informativ" -#: engine/vibes_auth/models.py:92 +#: engine/vibes_auth/models.py:98 msgid "activation token" msgstr "Jeton de activare" -#: engine/vibes_auth/models.py:95 +#: engine/vibes_auth/models.py:103 +msgid "activation token created" +msgstr "Token de activare creat" + +#: engine/vibes_auth/models.py:107 msgid "unsubscribe token" msgstr "token de dezabonare" -#: engine/vibes_auth/models.py:96 +#: engine/vibes_auth/models.py:108 msgid "token for secure one-click unsubscribe from campaigns" msgstr "token pentru dezabonarea sigură dintr-un singur clic din campanii" -#: engine/vibes_auth/models.py:106 +#: engine/vibes_auth/models.py:118 msgid "attributes" msgstr "Atribute" -#: engine/vibes_auth/models.py:147 +#: engine/vibes_auth/models.py:184 msgid "users" msgstr "Utilizatori" -#: engine/vibes_auth/models.py:154 +#: engine/vibes_auth/models.py:202 +msgid "admin OTP code" +msgstr "Cod OTP administrator" + +#: engine/vibes_auth/models.py:203 +msgid "admin OTP codes" +msgstr "Coduri OTP administrator" + +#: engine/vibes_auth/models.py:210 msgid "For anonymous threads" msgstr "Pentru subiecte anonime" -#: engine/vibes_auth/models.py:178 +#: engine/vibes_auth/models.py:234 msgid "Chat thread" msgstr "Fir de chat" -#: engine/vibes_auth/models.py:179 +#: engine/vibes_auth/models.py:235 msgid "Chat threads" msgstr "Fire de chat" -#: engine/vibes_auth/models.py:185 +#: engine/vibes_auth/models.py:241 msgid "provide user or email for anonymous thread." msgstr "furnizați utilizatorul sau adresa de e-mail pentru firul anonim." -#: engine/vibes_auth/models.py:188 +#: engine/vibes_auth/models.py:244 msgid "assignee must be a staff user." msgstr "cesionarul trebuie să fie un utilizator personal." -#: engine/vibes_auth/models.py:206 +#: engine/vibes_auth/models.py:262 msgid "Chat message" msgstr "Mesaj de chat" -#: engine/vibes_auth/models.py:207 +#: engine/vibes_auth/models.py:263 msgid "Chat messages" msgstr "Mesaje de chat" -#: engine/vibes_auth/models.py:213 +#: engine/vibes_auth/models.py:269 msgid "group" msgstr "Grup" -#: engine/vibes_auth/models.py:220 +#: engine/vibes_auth/models.py:276 msgid "outstanding token" msgstr "Simbol excepțional" -#: engine/vibes_auth/models.py:221 +#: engine/vibes_auth/models.py:277 msgid "outstanding tokens" msgstr "Jetoane restante" -#: engine/vibes_auth/models.py:227 +#: engine/vibes_auth/models.py:283 msgid "blacklisted token" msgstr "Token pe lista neagră" -#: engine/vibes_auth/models.py:228 +#: engine/vibes_auth/models.py:284 msgid "blacklisted tokens" msgstr "Jetoane pe lista neagră" @@ -813,6 +941,10 @@ msgstr "În jeton nu este prezentă nicio cerere uuid a utilizatorului" msgid "user does not exist" msgstr "Utilizatorul nu există" +#: engine/vibes_auth/templates/admin/verify_otp.html:27 +msgid "Verify" +msgstr "Verificați" + #: engine/vibes_auth/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "Resetați parola" @@ -898,12 +1030,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "Cele mai bune salutări,
echipa %(project_name)s" -#: engine/vibes_auth/utils/emailing.py:24 +#: engine/vibes_auth/utils/emailing.py:27 #, python-brace-format msgid "{settings.PROJECT_NAME} | Activate Account" msgstr "{settings.PROJECT_NAME} | Activare cont" -#: engine/vibes_auth/utils/emailing.py:63 +#: engine/vibes_auth/utils/emailing.py:66 #, python-brace-format msgid "{settings.PROJECT_NAME} | Reset Password" msgstr "{settings.PROJECT_NAME} | Resetați parola" @@ -960,7 +1092,7 @@ msgstr "" msgid "the token is invalid" msgstr "Jetonul nu este valabil" -#: engine/vibes_auth/viewsets.py:44 +#: engine/vibes_auth/viewsets.py:47 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." @@ -968,10 +1100,18 @@ 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." -#: engine/vibes_auth/viewsets.py:113 +#: engine/vibes_auth/viewsets.py:116 msgid "password reset successfully" msgstr "Parola a fost resetată cu succes!" -#: engine/vibes_auth/viewsets.py:161 +#: engine/vibes_auth/viewsets.py:146 +msgid "" +"Account already registered but not yet activated. A new activation email has" +" been sent." +msgstr "" +"Contul este deja înregistrat, dar nu a fost încă activat. A fost trimis un " +"nou e-mail de activare." + +#: engine/vibes_auth/viewsets.py:179 msgid "account already activated!" msgstr "Ați activat deja contul..." diff --git a/engine/vibes_auth/locale/ru_RU/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/ru_RU/LC_MESSAGES/django.mo index 3cd44173..7aae3913 100644 Binary files a/engine/vibes_auth/locale/ru_RU/LC_MESSAGES/django.mo and b/engine/vibes_auth/locale/ru_RU/LC_MESSAGES/django.mo differ diff --git a/engine/vibes_auth/locale/ru_RU/LC_MESSAGES/django.po b/engine/vibes_auth/locale/ru_RU/LC_MESSAGES/django.po index 308e6f8b..b7c488a5 100644 --- a/engine/vibes_auth/locale/ru_RU/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/ru_RU/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 03:06+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,32 +13,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:65 engine/vibes_auth/admin.py:66 +#: engine/vibes_auth/admin.py:64 engine/vibes_auth/admin.py:65 #: engine/vibes_auth/graphene/object_types.py:54 msgid "balance" msgstr "Баланс" -#: engine/vibes_auth/admin.py:74 +#: engine/vibes_auth/admin.py:73 msgid "order" msgstr "Заказ" -#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:51 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:51 msgid "orders" msgstr "Заказы" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:84 msgid "personal info" msgstr "Личная информация" -#: engine/vibes_auth/admin.py:89 engine/vibes_auth/graphene/object_types.py:50 +#: engine/vibes_auth/admin.py:88 engine/vibes_auth/graphene/object_types.py:50 msgid "permissions" msgstr "Разрешения" -#: engine/vibes_auth/admin.py:102 +#: engine/vibes_auth/admin.py:101 msgid "important dates" msgstr "Важные даты" -#: engine/vibes_auth/admin.py:103 +#: engine/vibes_auth/admin.py:102 msgid "additional info" msgstr "Дополнительная информация" @@ -54,79 +54,83 @@ msgstr "Закрыть выбранные нити" msgid "Open selected threads" msgstr "Открыть выбранные нити" -#: engine/vibes_auth/admin.py:208 -msgid "Preview" -msgstr "Предварительный просмотр" - -#: engine/vibes_auth/admin.py:209 engine/vibes_auth/admin.py:249 -#: engine/vibes_auth/admin.py:326 -msgid "Metadata" -msgstr "Метаданные" - -#: engine/vibes_auth/admin.py:212 -msgid "preview" -msgstr "предварительный просмотр" - -#: engine/vibes_auth/admin.py:221 -msgid "image preview" -msgstr "предварительный просмотр изображения" - -#: engine/vibes_auth/admin.py:241 +#: engine/vibes_auth/admin.py:209 msgid "Content" msgstr "Содержание" -#: engine/vibes_auth/admin.py:243 +#: engine/vibes_auth/admin.py:211 msgid "Documentation" msgstr "Документация" -#: engine/vibes_auth/admin.py:313 +#: engine/vibes_auth/admin.py:217 engine/vibes_auth/admin.py:294 +msgid "Metadata" +msgstr "Метаданные" + +#: engine/vibes_auth/admin.py:281 msgid "Scheduling" msgstr "Планирование" -#: engine/vibes_auth/admin.py:315 +#: engine/vibes_auth/admin.py:283 msgid "Statistics" msgstr "Статистика" -#: engine/vibes_auth/admin.py:329 +#: engine/vibes_auth/admin.py:297 msgid "stats" msgstr "государственный" -#: engine/vibes_auth/admin.py:335 +#: engine/vibes_auth/admin.py:303 msgid "Prepare recipients (subscribed users)" msgstr "Подготовьте получателей (подписавшихся пользователей)" -#: engine/vibes_auth/admin.py:343 +#: engine/vibes_auth/admin.py:311 msgid "Campaign '{}' is not in draft status." msgstr "Кампания «{}» не находится в статусе черновика." -#: engine/vibes_auth/admin.py:350 +#: engine/vibes_auth/admin.py:318 msgid "Preparing recipients for campaign '{}'." msgstr "Подготовка получателей к кампании «{}»." -#: engine/vibes_auth/admin.py:354 +#: engine/vibes_auth/admin.py:322 msgid "Send campaign now" msgstr "Отправить кампанию сейчас" -#: engine/vibes_auth/admin.py:362 +#: engine/vibes_auth/admin.py:330 msgid "Campaign '{}' cannot be sent (status: {})." msgstr "Кампания «{}» не может быть отправлена (статус: {})." -#: engine/vibes_auth/admin.py:372 +#: engine/vibes_auth/admin.py:340 msgid "Campaign '{}' has no recipients. Prepare recipients first." msgstr "Кампания «{}» не имеет получателей. Сначала подготовьте получателей." -#: engine/vibes_auth/admin.py:383 +#: engine/vibes_auth/admin.py:351 msgid "Started sending campaign '{}'." msgstr "Начата рассылка кампании «{}»." -#: engine/vibes_auth/admin.py:387 +#: engine/vibes_auth/admin.py:355 msgid "Cancel campaign" msgstr "Отменить кампанию" -#: engine/vibes_auth/admin.py:396 +#: engine/vibes_auth/admin.py:364 msgid "{} campaign(s) cancelled." msgstr "{} кампания(и) отменена(ы)." +#: engine/vibes_auth/admin_site.py:24 +msgid "Verification code" +msgstr "Код подтверждения" + +#: engine/vibes_auth/admin_site.py:62 +msgid "A verification code has been sent to your email." +msgstr "На ваш адрес электронной почты был отправлен код подтверждения." + +#: engine/vibes_auth/admin_site.py:118 +msgid "Invalid or expired code. Please try again." +msgstr "Недействительный или просроченный код. Повторите попытку." + +#: engine/vibes_auth/admin_site.py:124 +#: engine/vibes_auth/templates/admin/verify_otp.html:10 +msgid "Two-factor authentication" +msgstr "Двухфакторная аутентификация" + #: engine/vibes_auth/apps.py:8 msgid "Accounting" msgstr "Учётные записи" @@ -151,6 +155,145 @@ msgstr "Персонал" msgid "System" msgstr "Система" +#: engine/vibes_auth/docs/drf/emailing.py:18 +msgid "" +"UUID token for unsubscribing. This token is unique per user and is included " +"in the unsubscribe link of every campaign email. The token remains constant " +"for each user unless regenerated." +msgstr "" +"Токен UUID для отписки. Этот токен является уникальным для каждого " +"пользователя и включен в ссылку для отписки в каждом рекламном письме. Токен" +" остается неизменным для каждого пользователя, если не был перегенерирован." + +#: engine/vibes_auth/docs/drf/emailing.py:37 +#: engine/vibes_auth/emailing/views.py:69 +msgid "You have been successfully unsubscribed from our emails." +msgstr "Вы успешно отказались от подписки на наши электронные письма." + +#: engine/vibes_auth/docs/drf/emailing.py:45 +#: engine/vibes_auth/emailing/views.py:61 +msgid "You are already unsubscribed." +msgstr "Вы уже отписаны." + +#: engine/vibes_auth/docs/drf/emailing.py:52 +msgid "Unsubscribe from email campaigns" +msgstr "Отписаться от рассылки" + +#: engine/vibes_auth/docs/drf/emailing.py:54 +msgid "" +"Unsubscribe a user from all marketing email campaigns using their unique unsubscribe token.\n" +"\n" +"This endpoint is designed for email client compatibility where clicking a link triggers a GET request. The user will no longer receive promotional emails after successful unsubscription.\n" +"\n" +"**Note:** Transactional emails (order confirmations, password resets, etc.) are not affected by this setting." +msgstr "" +"Отпишите пользователя от всех маркетинговых рассылок, используя его " +"уникальный токен отписки. Этот конечный пункт предназначен для совместимости" +" с почтовыми клиентами, в которых нажатие на ссылку запускает запрос GET. " +"После успешной отписки пользователь больше не будет получать рекламные " +"письма. **Примечание:** эта настройка не влияет на транзакционные письма " +"(подтверждения заказов, сброс паролей и т. д.)." + +#: engine/vibes_auth/docs/drf/emailing.py:66 +#: engine/vibes_auth/docs/drf/emailing.py:146 +msgid "Successfully unsubscribed from email campaigns." +msgstr "Успешно отписались от рассылки." + +#: engine/vibes_auth/docs/drf/emailing.py:82 +#: engine/vibes_auth/docs/drf/emailing.py:162 +msgid "Invalid or missing unsubscribe token." +msgstr "Недопустимый или отсутствующий токен отписки." + +#: engine/vibes_auth/docs/drf/emailing.py:96 +#: engine/vibes_auth/docs/drf/emailing.py:176 +msgid "User associated with the token was not found." +msgstr "Пользователь, связанный с токеном, не найден." + +#: engine/vibes_auth/docs/drf/emailing.py:118 +msgid "One-Click Unsubscribe (RFC 8058)" +msgstr "Отказ от подписки в один клик (RFC 8058)" + +#: engine/vibes_auth/docs/drf/emailing.py:120 +msgid "" +"RFC 8058 compliant one-click unsubscribe endpoint for email campaigns.\n" +"\n" +"This endpoint supports the List-Unsubscribe-Post header mechanism defined in RFC 8058, which allows email clients to unsubscribe users with a single click without leaving the email application.\n" +"\n" +"The token can be provided either as a query parameter or in the request body.\n" +"\n" +"**Standards Compliance:**\n" +"- RFC 8058: Signaling One-Click Functionality for List Email Headers\n" +"- RFC 2369: The Use of URLs as Meta-Syntax for Core Mail List Commands\n" +"\n" +"**Note:** Transactional emails are not affected by this setting." +msgstr "" +"Конечная точка для отписки от рассылки одним щелчком мыши, соответствующая стандарту RFC 8058. Эта конечная точка поддерживает механизм заголовка List-Unsubscribe-Post, определенный в RFC 8058, который позволяет почтовым клиентам отписывать пользователей одним щелчком мыши, не выходя из почтового приложения. Токен может быть предоставлен либо в качестве параметра запроса, либо в теле запроса.\n" +"\n" +"**Соответствие стандартам:** - RFC 8058: Сигнализация функции «Один клик» для заголовков списка электронной почты - RFC 2369: Использование URL-адресов в качестве метасинтаксиса для основных команд списка рассылки **Примечание:** эта настройка не влияет на транзакционные электронные письма." + +#: engine/vibes_auth/docs/drf/emailing.py:137 +msgid "" +"Unsubscribe token (alternative to query parameter). Can be omitted if token " +"is provided in URL." +msgstr "" +"Токен отписки (альтернатива параметру запроса). Может быть опущен, если " +"токен указан в URL." + +#: engine/vibes_auth/docs/drf/emailing.py:200 +msgid "Track email open event" +msgstr "Отслеживать событие открытия электронного письма" + +#: engine/vibes_auth/docs/drf/emailing.py:202 +msgid "" +"Records when a campaign email is opened by the recipient.\n" +"\n" +"This endpoint is called automatically when the tracking pixel (1x1 transparent GIF) embedded in the email is loaded by the recipient's email client.\n" +"\n" +"**How it works:**\n" +"1. Each campaign email contains a unique tracking pixel URL with a `tid` parameter\n" +"2. When the email is opened and images are loaded, this endpoint is called\n" +"3. The recipient's status is updated to 'opened' and the timestamp is recorded\n" +"4. The campaign's aggregate opened count is updated\n" +"\n" +"**Privacy considerations:**\n" +"- Only the first open is recorded (subsequent opens are ignored)\n" +"- No personal information beyond the tracking ID is logged\n" +"- Users who disable image loading will not trigger this event\n" +"\n" +"**Response:**\n" +"Returns a 1x1 transparent GIF image regardless of whether tracking succeeded, to ensure consistent behavior and prevent information leakage." +msgstr "" +"Регистрирует, когда получатель открывает электронное письмо кампании. Этот конечный пункт вызывается автоматически, когда пиксель отслеживания (прозрачный GIF 1x1), встроенный в электронное письмо, загружается почтовым клиентом получателя.\n" +"\n" +"**Как это работает:** 1. Каждое письмо кампании содержит уникальный URL-адрес пикселя отслеживания с параметром `tid`. 2. Когда письмо открывается и загружаются изображения, вызывается эта конечная точка. 3. Статус получателя обновляется до «открыто», и записывается метка времени. 4. Обновляется совокупное количество открытий кампании. **Соображения конфиденциальности:**\n" +"- Записывается только первое открытие (последующие открытия игнорируются). - Никакая личная информация, кроме идентификатора отслеживания, не регистрируется. - Пользователи, которые отключают загрузку изображений, не вызывают это событие. **Ответ:** Возвращает прозрачное GIF-изображение размером 1x1 независимо от того, удалось ли отслеживание, чтобы обеспечить стабильное поведение и предотвратить утечку информации." + +#: engine/vibes_auth/docs/drf/emailing.py:223 +msgid "" +"Tracking ID (UUID) unique to each campaign-recipient combination. This ID " +"links the open event to a specific recipient and campaign." +msgstr "" +"Идентификатор отслеживания (UUID), уникальный для каждой комбинации кампании" +" и получателя. Этот идентификатор связывает событие открытия с конкретным " +"получателем и кампанией." + +#: engine/vibes_auth/docs/drf/emailing.py:241 +msgid "" +"1x1 transparent GIF image. Always returned regardless of tracking status to " +"maintain consistent behavior." +msgstr "" +"Прозрачное GIF-изображение 1x1. Всегда возвращается независимо от статуса " +"отслеживания для обеспечения стабильного поведения." + +#: engine/vibes_auth/docs/drf/emailing.py:247 +msgid "" +"Returned when no tracking ID is provided. Note: Invalid tracking IDs still " +"return 200 with the GIF to prevent enumeration attacks." +msgstr "" +"Возвращается, когда не указан идентификатор отслеживания. Примечание: " +"Недопустимые идентификаторы отслеживания по-прежнему возвращают 200 с GIF, " +"чтобы предотвратить атаки перебора." + #: engine/vibes_auth/docs/drf/messaging.py:17 msgid "User messages entrypoint" msgstr "Точка входа пользовательских сообщений" @@ -246,9 +389,9 @@ msgid "confirm a user's password reset" msgstr "Подтверждение сброса пароля пользователя" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:351 +#: engine/vibes_auth/graphene/mutations.py:358 #: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107 -#: engine/vibes_auth/viewsets.py:94 +#: engine/vibes_auth/viewsets.py:97 msgid "passwords do not match" msgstr "Пароли не совпадают" @@ -302,197 +445,168 @@ msgstr "Открыто" msgid "Clicked" msgstr "Нажато" -#: engine/vibes_auth/emailing/models.py:35 -#: engine/vibes_auth/emailing/models.py:71 -#: engine/vibes_auth/emailing/models.py:121 +#: engine/vibes_auth/emailing/models.py:38 +#: engine/vibes_auth/emailing/models.py:88 msgid "name" msgstr "название" -#: engine/vibes_auth/emailing/models.py:36 -msgid "descriptive name for the image" -msgstr "описательное название изображения" - -#: engine/vibes_auth/emailing/models.py:40 -msgid "image" -msgstr "изображение" - -#: engine/vibes_auth/emailing/models.py:41 -msgid "image file to use in email templates" -msgstr "файл изображения для использования в шаблонах электронных писем" - -#: engine/vibes_auth/emailing/models.py:47 -msgid "alt text" -msgstr "другой текст" - -#: engine/vibes_auth/emailing/models.py:48 -msgid "alternative text for accessibility" -msgstr "альтернативный текст для доступности" - -#: engine/vibes_auth/emailing/models.py:52 -msgid "email image" -msgstr "изображение электронной почты" - -#: engine/vibes_auth/emailing/models.py:53 -msgid "email images" -msgstr "изображения электронной почты" - -#: engine/vibes_auth/emailing/models.py:72 +#: engine/vibes_auth/emailing/models.py:39 msgid "internal name for the template" msgstr "внутреннее имя шаблона" -#: engine/vibes_auth/emailing/models.py:76 +#: engine/vibes_auth/emailing/models.py:43 msgid "slug" msgstr "слуги" -#: engine/vibes_auth/emailing/models.py:77 +#: engine/vibes_auth/emailing/models.py:44 msgid "unique identifier for the template" msgstr "уникальный идентификатор шаблона" -#: engine/vibes_auth/emailing/models.py:81 +#: engine/vibes_auth/emailing/models.py:48 msgid "subject" msgstr "предмет" -#: engine/vibes_auth/emailing/models.py:82 +#: engine/vibes_auth/emailing/models.py:49 msgid "email subject line - supports {{ variables }}" msgstr "тема письма — поддерживает {{ variables }}" -#: engine/vibes_auth/emailing/models.py:85 -msgid "HTML content" -msgstr "HTML-контент" +#: engine/vibes_auth/emailing/models.py:52 +msgid "content" +msgstr "содержание" -#: engine/vibes_auth/emailing/models.py:87 +#: engine/vibes_auth/emailing/models.py:54 msgid "" -"email body content - supports {{ user.first_name }}, {{ user.email }}, {{ " -"project_name }}, {{ unsubscribe_url }}" +"email body in markdown - supports {{ user.first_name }}, {{ user.email }}, " +"{{ project_name }}, {{ unsubscribe_url }}" msgstr "" "содержимое тела электронного письма — поддерживает {{ user.first_name }}, {{" " user.email }}, {{ project_name }}, {{ unsubscribe_url }}" -#: engine/vibes_auth/emailing/models.py:94 +#: engine/vibes_auth/emailing/models.py:61 msgid "plain text content" msgstr "обычный текстовый контент" -#: engine/vibes_auth/emailing/models.py:95 +#: engine/vibes_auth/emailing/models.py:62 msgid "plain text fallback (auto-generated if empty)" msgstr "" "резервный вариант в виде простого текста (создается автоматически, если поле" " пустое)" -#: engine/vibes_auth/emailing/models.py:100 +#: engine/vibes_auth/emailing/models.py:67 msgid "available variables" msgstr "доступные переменные" -#: engine/vibes_auth/emailing/models.py:101 +#: engine/vibes_auth/emailing/models.py:68 msgid "documentation of available template variables" msgstr "документация доступных переменных шаблона" -#: engine/vibes_auth/emailing/models.py:105 +#: engine/vibes_auth/emailing/models.py:72 msgid "email template" msgstr "шаблон электронного письма" -#: engine/vibes_auth/emailing/models.py:106 +#: engine/vibes_auth/emailing/models.py:73 msgid "email templates" msgstr "шаблоны электронных писем" -#: engine/vibes_auth/emailing/models.py:122 +#: engine/vibes_auth/emailing/models.py:89 msgid "internal name for the campaign" msgstr "внутреннее название кампании" -#: engine/vibes_auth/emailing/models.py:129 +#: engine/vibes_auth/emailing/models.py:96 msgid "template" msgstr "шаблон" -#: engine/vibes_auth/emailing/models.py:130 +#: engine/vibes_auth/emailing/models.py:97 msgid "email template to use for this campaign" msgstr "шаблон электронного письма для использования в этой кампании" -#: engine/vibes_auth/emailing/models.py:136 -#: engine/vibes_auth/emailing/models.py:206 +#: engine/vibes_auth/emailing/models.py:103 +#: engine/vibes_auth/emailing/models.py:173 msgid "status" msgstr "статус" -#: engine/vibes_auth/emailing/models.py:141 +#: engine/vibes_auth/emailing/models.py:108 msgid "scheduled at" msgstr "запланировано на" -#: engine/vibes_auth/emailing/models.py:142 +#: engine/vibes_auth/emailing/models.py:109 msgid "when to send the campaign (leave empty for manual send)" msgstr "когда отправить кампанию (оставьте поле пустым для отправки вручную)" -#: engine/vibes_auth/emailing/models.py:147 -#: engine/vibes_auth/emailing/models.py:211 +#: engine/vibes_auth/emailing/models.py:114 +#: engine/vibes_auth/emailing/models.py:178 msgid "sent at" msgstr "поздно, что" -#: engine/vibes_auth/emailing/models.py:148 +#: engine/vibes_auth/emailing/models.py:115 msgid "when the campaign was actually sent" msgstr "когда кампания была фактически отправлена" -#: engine/vibes_auth/emailing/models.py:153 +#: engine/vibes_auth/emailing/models.py:120 msgid "total recipients" msgstr "общее количество получателей" -#: engine/vibes_auth/emailing/models.py:157 +#: engine/vibes_auth/emailing/models.py:124 msgid "sent count" msgstr "количество отправленных" -#: engine/vibes_auth/emailing/models.py:161 +#: engine/vibes_auth/emailing/models.py:128 msgid "failed count" msgstr "неудачный подсчет" -#: engine/vibes_auth/emailing/models.py:165 +#: engine/vibes_auth/emailing/models.py:132 msgid "opened count" msgstr "открытый счет" -#: engine/vibes_auth/emailing/models.py:169 +#: engine/vibes_auth/emailing/models.py:136 msgid "clicked count" msgstr "количество кликов" -#: engine/vibes_auth/emailing/models.py:173 +#: engine/vibes_auth/emailing/models.py:140 msgid "email campaign" msgstr "электронная рассылка" -#: engine/vibes_auth/emailing/models.py:174 +#: engine/vibes_auth/emailing/models.py:141 msgid "email campaigns" msgstr "электронные рассылки" -#: engine/vibes_auth/emailing/models.py:194 +#: engine/vibes_auth/emailing/models.py:161 msgid "campaign" msgstr "кампания" -#: engine/vibes_auth/emailing/models.py:200 engine/vibes_auth/models.py:146 +#: engine/vibes_auth/emailing/models.py:167 engine/vibes_auth/models.py:183 msgid "user" msgstr "Пользователь" -#: engine/vibes_auth/emailing/models.py:216 +#: engine/vibes_auth/emailing/models.py:183 msgid "opened at" msgstr "открылся в" -#: engine/vibes_auth/emailing/models.py:221 +#: engine/vibes_auth/emailing/models.py:188 msgid "clicked at" msgstr "нажали на" -#: engine/vibes_auth/emailing/models.py:227 +#: engine/vibes_auth/emailing/models.py:194 msgid "tracking ID" msgstr "идентификатор отслеживания" -#: engine/vibes_auth/emailing/models.py:228 +#: engine/vibes_auth/emailing/models.py:195 msgid "unique ID for tracking opens and clicks" msgstr "уникальный идентификатор для отслеживания открытий и кликов" -#: engine/vibes_auth/emailing/models.py:233 +#: engine/vibes_auth/emailing/models.py:200 msgid "error message" msgstr "сообщение об ошибке" -#: engine/vibes_auth/emailing/models.py:234 +#: engine/vibes_auth/emailing/models.py:201 msgid "error details if sending failed" msgstr "подробности ошибки, если отправка не удалась" -#: engine/vibes_auth/emailing/models.py:238 +#: engine/vibes_auth/emailing/models.py:205 msgid "campaign recipient" msgstr "получатель кампании" -#: engine/vibes_auth/emailing/models.py:239 +#: engine/vibes_auth/emailing/models.py:206 msgid "campaign recipients" msgstr "получатели кампании" @@ -508,75 +622,75 @@ msgstr "Вы получили это письмо, потому что подп msgid "Unsubscribe" msgstr "Отписаться" -#: engine/vibes_auth/emailing/views.py:71 +#: engine/vibes_auth/emailing/views.py:39 msgid "Unsubscribe token is required." msgstr "Требуется токен отписки." -#: engine/vibes_auth/emailing/views.py:79 +#: engine/vibes_auth/emailing/views.py:47 msgid "Invalid unsubscribe token format." msgstr "Неверный формат токена для отписки." -#: engine/vibes_auth/emailing/views.py:87 +#: engine/vibes_auth/emailing/views.py:55 msgid "User not found." msgstr "Пользователь не найден." -#: engine/vibes_auth/emailing/views.py:93 -msgid "You are already unsubscribed." -msgstr "Вы уже отписаны." - -#: engine/vibes_auth/emailing/views.py:101 -msgid "You have been successfully unsubscribed from our emails." -msgstr "Вы успешно отказались от подписки на наши электронные письма." - -#: engine/vibes_auth/graphene/mutations.py:46 +#: engine/vibes_auth/graphene/mutations.py:47 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" "b64-кодированный uuid пользователя, который направил к нам нового " "пользователя." -#: engine/vibes_auth/graphene/mutations.py:68 +#: engine/vibes_auth/graphene/mutations.py:70 msgid "password too weak" msgstr "Пароль слишком слабый" -#: engine/vibes_auth/graphene/mutations.py:128 +#: engine/vibes_auth/graphene/mutations.py:130 msgid "malformed email" msgstr "Некорректное письмо" -#: engine/vibes_auth/graphene/mutations.py:140 +#: engine/vibes_auth/graphene/mutations.py:142 #: engine/vibes_auth/serializers.py:117 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Некорректный номер телефона: {phone_number}!" -#: engine/vibes_auth/graphene/mutations.py:165 +#: engine/vibes_auth/graphene/mutations.py:167 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Недопустимый формат атрибута: {attribute_pair}!" -#: engine/vibes_auth/graphene/mutations.py:182 +#: engine/vibes_auth/graphene/mutations.py:184 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} не существует: {uuid}!" -#: engine/vibes_auth/graphene/mutations.py:304 -#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180 +#: engine/vibes_auth/graphene/mutations.py:309 +#: engine/vibes_auth/viewsets.py:174 engine/vibes_auth/viewsets.py:198 msgid "activation link is invalid!" msgstr "Ссылка на активацию недействительна!" -#: engine/vibes_auth/graphene/mutations.py:307 +#: engine/vibes_auth/graphene/mutations.py:312 msgid "account already activated..." msgstr "Аккаунт уже активирован..." -#: engine/vibes_auth/graphene/mutations.py:314 -#: engine/vibes_auth/graphene/mutations.py:376 +#: engine/vibes_auth/graphene/mutations.py:319 +#: engine/vibes_auth/graphene/mutations.py:383 msgid "something went wrong: {e!s}" msgstr "Что-то пошло не так: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:358 -#: engine/vibes_auth/viewsets.py:106 +#: engine/vibes_auth/graphene/mutations.py:365 +#: engine/vibes_auth/viewsets.py:109 msgid "token is invalid!" msgstr "Токен недействителен!" +#: engine/vibes_auth/graphene/mutations.py:403 +msgid "only image files are allowed (jpg, png, gif, webp)" +msgstr "Допускаются только файлы изображений (jpg, png, gif, webp)" + +#: engine/vibes_auth/graphene/mutations.py:406 +msgid "file size must not exceed 5 MB" +msgstr "Размер файла не должен превышать 5 МБ." + #: engine/vibes_auth/graphene/object_types.py:46 msgid "" "the products this user has viewed most recently (max 48), in " @@ -586,7 +700,7 @@ msgstr "" " 48), в обратном хронологическом порядке." #: engine/vibes_auth/graphene/object_types.py:49 -#: engine/vibes_auth/models.py:214 +#: engine/vibes_auth/models.py:270 msgid "groups" msgstr "Группы" @@ -595,7 +709,7 @@ msgid "wishlist" msgstr "Список желаний" #: engine/vibes_auth/graphene/object_types.py:56 -#: engine/vibes_auth/models.py:70 +#: engine/vibes_auth/models.py:75 msgid "avatar" msgstr "Аватар" @@ -631,7 +745,7 @@ msgstr "Мы ищем оператора, чтобы ответить вам, д msgid "Assignee must be a staff user." msgstr "Получатель должен быть штатным пользователем." -#: engine/vibes_auth/models.py:42 +#: engine/vibes_auth/models.py:44 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -650,124 +764,136 @@ msgstr "" " записей. Модель User предназначена для обработки конкретных случаев " "использования для расширенного управления пользователями." -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "email" msgstr "Электронная почта" -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "user email address" msgstr "Адрес электронной почты пользователя" -#: engine/vibes_auth/models.py:55 +#: engine/vibes_auth/models.py:57 msgid "phone_number" msgstr "Номер телефона" -#: engine/vibes_auth/models.py:60 +#: engine/vibes_auth/models.py:61 msgid "user phone number" msgstr "Номер телефона пользователя" -#: engine/vibes_auth/models.py:66 +#: engine/vibes_auth/models.py:68 msgid "first_name" msgstr "Имя" -#: engine/vibes_auth/models.py:67 +#: engine/vibes_auth/models.py:71 msgid "last_name" msgstr "Фамилия" -#: engine/vibes_auth/models.py:73 +#: engine/vibes_auth/models.py:78 msgid "user profile image" msgstr "Изображение профиля пользователя" -#: engine/vibes_auth/models.py:78 +#: engine/vibes_auth/models.py:83 msgid "is verified" msgstr "Проверено" -#: engine/vibes_auth/models.py:79 +#: engine/vibes_auth/models.py:84 msgid "user verification status" msgstr "Статус верификации пользователя" -#: engine/vibes_auth/models.py:82 +#: engine/vibes_auth/models.py:87 msgid "is_active" msgstr "Активен" -#: engine/vibes_auth/models.py:84 +#: engine/vibes_auth/models.py:89 msgid "unselect this instead of deleting accounts" msgstr "Снимите этот флажок вместо удаления учетных записей" -#: engine/vibes_auth/models.py:87 +#: engine/vibes_auth/models.py:92 msgid "is_subscribed" msgstr "Подписан" -#: engine/vibes_auth/models.py:88 +#: engine/vibes_auth/models.py:93 msgid "user's newsletter subscription status" msgstr "Статус подписки пользователя на рассылку новостей" -#: engine/vibes_auth/models.py:92 +#: engine/vibes_auth/models.py:98 msgid "activation token" msgstr "Активационный токен" -#: engine/vibes_auth/models.py:95 +#: engine/vibes_auth/models.py:103 +msgid "activation token created" +msgstr "Создан токен активации" + +#: engine/vibes_auth/models.py:107 msgid "unsubscribe token" msgstr "токен отказа от подписки" -#: engine/vibes_auth/models.py:96 +#: engine/vibes_auth/models.py:108 msgid "token for secure one-click unsubscribe from campaigns" msgstr "" "токен для безопасного отказа от подписки на рассылки одним щелчком мыши" -#: engine/vibes_auth/models.py:106 +#: engine/vibes_auth/models.py:118 msgid "attributes" msgstr "Атрибуты" -#: engine/vibes_auth/models.py:147 +#: engine/vibes_auth/models.py:184 msgid "users" msgstr "Пользователи" -#: engine/vibes_auth/models.py:154 +#: engine/vibes_auth/models.py:202 +msgid "admin OTP code" +msgstr "Административный код OTP" + +#: engine/vibes_auth/models.py:203 +msgid "admin OTP codes" +msgstr "Административные коды OTP" + +#: engine/vibes_auth/models.py:210 msgid "For anonymous threads" msgstr "Для анонимных потоков" -#: engine/vibes_auth/models.py:178 +#: engine/vibes_auth/models.py:234 msgid "Chat thread" msgstr "Нить чата" -#: engine/vibes_auth/models.py:179 +#: engine/vibes_auth/models.py:235 msgid "Chat threads" msgstr "Нити чата" -#: engine/vibes_auth/models.py:185 +#: engine/vibes_auth/models.py:241 msgid "provide user or email for anonymous thread." msgstr "укажите пользователя или e-mail для анонимной темы." -#: engine/vibes_auth/models.py:188 +#: engine/vibes_auth/models.py:244 msgid "assignee must be a staff user." msgstr "Назначенный должен быть штатным пользователем." -#: engine/vibes_auth/models.py:206 +#: engine/vibes_auth/models.py:262 msgid "Chat message" msgstr "Сообщение в чате" -#: engine/vibes_auth/models.py:207 +#: engine/vibes_auth/models.py:263 msgid "Chat messages" msgstr "Сообщения в чате" -#: engine/vibes_auth/models.py:213 +#: engine/vibes_auth/models.py:269 msgid "group" msgstr "Группа" -#: engine/vibes_auth/models.py:220 +#: engine/vibes_auth/models.py:276 msgid "outstanding token" msgstr "Выдающийся жетон" -#: engine/vibes_auth/models.py:221 +#: engine/vibes_auth/models.py:277 msgid "outstanding tokens" msgstr "Выпущенные токены" -#: engine/vibes_auth/models.py:227 +#: engine/vibes_auth/models.py:283 msgid "blacklisted token" msgstr "Токен в черном списке" -#: engine/vibes_auth/models.py:228 +#: engine/vibes_auth/models.py:284 msgid "blacklisted tokens" msgstr "Чёрный список токенов" @@ -809,6 +935,10 @@ msgstr "В токене отсутствует утверждение uuid по msgid "user does not exist" msgstr "Пользователь не существует" +#: engine/vibes_auth/templates/admin/verify_otp.html:27 +msgid "Verify" +msgstr "Проверить" + #: engine/vibes_auth/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "Сбросить пароль" @@ -893,12 +1023,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "С наилучшими пожеланиями,
команда %(project_name)s" -#: engine/vibes_auth/utils/emailing.py:24 +#: engine/vibes_auth/utils/emailing.py:27 #, python-brace-format msgid "{settings.PROJECT_NAME} | Activate Account" msgstr "{settings.PROJECT_NAME} | Активировать учетную запись" -#: engine/vibes_auth/utils/emailing.py:63 +#: engine/vibes_auth/utils/emailing.py:66 #, python-brace-format msgid "{settings.PROJECT_NAME} | Reset Password" msgstr "{settings.PROJECT_NAME} | Сброс пароля" @@ -953,7 +1083,7 @@ msgstr "" msgid "the token is invalid" msgstr "Токен недействителен" -#: engine/vibes_auth/viewsets.py:44 +#: engine/vibes_auth/viewsets.py:47 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." @@ -961,10 +1091,18 @@ msgstr "" "Реализация набора пользовательских представлений.\n" "Предоставляет набор действий, которые управляют пользовательскими данными, такими как создание, получение, обновление, удаление, а также пользовательскими действиями, включая сброс пароля, загрузку аватара, активацию учетной записи и объединение недавно просмотренных элементов. Этот класс расширяет миксины и GenericViewSet для надежной работы с API." -#: engine/vibes_auth/viewsets.py:113 +#: engine/vibes_auth/viewsets.py:116 msgid "password reset successfully" msgstr "Пароль был успешно сброшен!" -#: engine/vibes_auth/viewsets.py:161 +#: engine/vibes_auth/viewsets.py:146 +msgid "" +"Account already registered but not yet activated. A new activation email has" +" been sent." +msgstr "" +"Учетная запись уже зарегистрирована, но еще не активирована. Было отправлено" +" новое письмо с кодом активации." + +#: engine/vibes_auth/viewsets.py:179 msgid "account already activated!" msgstr "Вы уже активировали учетную запись..." diff --git a/engine/vibes_auth/locale/sv_SE/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/sv_SE/LC_MESSAGES/django.mo index f9634071..29918b78 100644 Binary files a/engine/vibes_auth/locale/sv_SE/LC_MESSAGES/django.mo and b/engine/vibes_auth/locale/sv_SE/LC_MESSAGES/django.mo differ diff --git a/engine/vibes_auth/locale/sv_SE/LC_MESSAGES/django.po b/engine/vibes_auth/locale/sv_SE/LC_MESSAGES/django.po index a309165b..748629ab 100644 --- a/engine/vibes_auth/locale/sv_SE/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/sv_SE/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 03:06+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,32 +13,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:65 engine/vibes_auth/admin.py:66 +#: engine/vibes_auth/admin.py:64 engine/vibes_auth/admin.py:65 #: engine/vibes_auth/graphene/object_types.py:54 msgid "balance" msgstr "Balans" -#: engine/vibes_auth/admin.py:74 +#: engine/vibes_auth/admin.py:73 msgid "order" msgstr "Beställning" -#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:51 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:51 msgid "orders" msgstr "Beställningar" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:84 msgid "personal info" msgstr "Personlig information" -#: engine/vibes_auth/admin.py:89 engine/vibes_auth/graphene/object_types.py:50 +#: engine/vibes_auth/admin.py:88 engine/vibes_auth/graphene/object_types.py:50 msgid "permissions" msgstr "Behörigheter" -#: engine/vibes_auth/admin.py:102 +#: engine/vibes_auth/admin.py:101 msgid "important dates" msgstr "Viktiga datum" -#: engine/vibes_auth/admin.py:103 +#: engine/vibes_auth/admin.py:102 msgid "additional info" msgstr "Ytterligare information" @@ -54,79 +54,83 @@ msgstr "Stäng valda trådar" msgid "Open selected threads" msgstr "Öppna valda trådar" -#: engine/vibes_auth/admin.py:208 -msgid "Preview" -msgstr "Förhandsgranska" - -#: engine/vibes_auth/admin.py:209 engine/vibes_auth/admin.py:249 -#: engine/vibes_auth/admin.py:326 -msgid "Metadata" -msgstr "Metadata" - -#: engine/vibes_auth/admin.py:212 -msgid "preview" -msgstr "förhandsgranskning" - -#: engine/vibes_auth/admin.py:221 -msgid "image preview" -msgstr "bildförhandsvisning" - -#: engine/vibes_auth/admin.py:241 +#: engine/vibes_auth/admin.py:209 msgid "Content" msgstr "Innehåll" -#: engine/vibes_auth/admin.py:243 +#: engine/vibes_auth/admin.py:211 msgid "Documentation" msgstr "Dokumentation" -#: engine/vibes_auth/admin.py:313 +#: engine/vibes_auth/admin.py:217 engine/vibes_auth/admin.py:294 +msgid "Metadata" +msgstr "Metadata" + +#: engine/vibes_auth/admin.py:281 msgid "Scheduling" msgstr "Schemaläggning" -#: engine/vibes_auth/admin.py:315 +#: engine/vibes_auth/admin.py:283 msgid "Statistics" msgstr "Statistik" -#: engine/vibes_auth/admin.py:329 +#: engine/vibes_auth/admin.py:297 msgid "stats" msgstr "tillstånd" -#: engine/vibes_auth/admin.py:335 +#: engine/vibes_auth/admin.py:303 msgid "Prepare recipients (subscribed users)" msgstr "Förbered mottagare (prenumererande användare)" -#: engine/vibes_auth/admin.py:343 +#: engine/vibes_auth/admin.py:311 msgid "Campaign '{}' is not in draft status." msgstr "Kampanjen '{}' är inte i utkaststatus." -#: engine/vibes_auth/admin.py:350 +#: engine/vibes_auth/admin.py:318 msgid "Preparing recipients for campaign '{}'." msgstr "Förbereder mottagare för kampanj '{}'." -#: engine/vibes_auth/admin.py:354 +#: engine/vibes_auth/admin.py:322 msgid "Send campaign now" msgstr "Skicka kampanjen nu" -#: engine/vibes_auth/admin.py:362 +#: engine/vibes_auth/admin.py:330 msgid "Campaign '{}' cannot be sent (status: {})." msgstr "Kampanjen '{}' kan inte skickas (status: {})." -#: engine/vibes_auth/admin.py:372 +#: engine/vibes_auth/admin.py:340 msgid "Campaign '{}' has no recipients. Prepare recipients first." msgstr "Kampanjen '{}' har inga mottagare. Förbered mottagarna först." -#: engine/vibes_auth/admin.py:383 +#: engine/vibes_auth/admin.py:351 msgid "Started sending campaign '{}'." msgstr "Började skicka kampanjen '{}'." -#: engine/vibes_auth/admin.py:387 +#: engine/vibes_auth/admin.py:355 msgid "Cancel campaign" msgstr "Avbryt kampanj" -#: engine/vibes_auth/admin.py:396 +#: engine/vibes_auth/admin.py:364 msgid "{} campaign(s) cancelled." msgstr "{} kampanj(er) avbruten." +#: engine/vibes_auth/admin_site.py:24 +msgid "Verification code" +msgstr "Verifieringskod" + +#: engine/vibes_auth/admin_site.py:62 +msgid "A verification code has been sent to your email." +msgstr "En verifieringskod har skickats till din e-postadress." + +#: engine/vibes_auth/admin_site.py:118 +msgid "Invalid or expired code. Please try again." +msgstr "Ogiltig eller utgången kod. Försök igen." + +#: engine/vibes_auth/admin_site.py:124 +#: engine/vibes_auth/templates/admin/verify_otp.html:10 +msgid "Two-factor authentication" +msgstr "Tvåfaktorsautentisering" + #: engine/vibes_auth/apps.py:8 msgid "Accounting" msgstr "Redovisning" @@ -151,6 +155,146 @@ msgstr "Personal" msgid "System" msgstr "System" +#: engine/vibes_auth/docs/drf/emailing.py:18 +msgid "" +"UUID token for unsubscribing. This token is unique per user and is included " +"in the unsubscribe link of every campaign email. The token remains constant " +"for each user unless regenerated." +msgstr "" +"UUID-token för att avsluta prenumerationen. Denna token är unik för varje " +"användare och ingår i länken för att avsluta prenumerationen i varje " +"kampanjmejl. Token förblir densamma för varje användare om den inte " +"genereras på nytt." + +#: engine/vibes_auth/docs/drf/emailing.py:37 +#: engine/vibes_auth/emailing/views.py:69 +msgid "You have been successfully unsubscribed from our emails." +msgstr "Du har nu avslutat din prenumeration på våra e-postmeddelanden." + +#: engine/vibes_auth/docs/drf/emailing.py:45 +#: engine/vibes_auth/emailing/views.py:61 +msgid "You are already unsubscribed." +msgstr "Du är redan avregistrerad." + +#: engine/vibes_auth/docs/drf/emailing.py:52 +msgid "Unsubscribe from email campaigns" +msgstr "Avsluta prenumerationen på e-postkampanjer" + +#: engine/vibes_auth/docs/drf/emailing.py:54 +msgid "" +"Unsubscribe a user from all marketing email campaigns using their unique unsubscribe token.\n" +"\n" +"This endpoint is designed for email client compatibility where clicking a link triggers a GET request. The user will no longer receive promotional emails after successful unsubscription.\n" +"\n" +"**Note:** Transactional emails (order confirmations, password resets, etc.) are not affected by this setting." +msgstr "" +"Avregistrera en användare från alla marknadsföringskampanjer via e-post med " +"hjälp av deras unika avregistreringstoken. Denna slutpunkt är utformad för " +"kompatibilitet med e-postklienter där ett klick på en länk utlöser en GET-" +"begäran. Användaren kommer inte längre att få reklam via e-post efter en " +"lyckad avregistrering. **Observera:** Transaktionsmeddelanden " +"(orderbekräftelser, återställning av lösenord etc.) påverkas inte av denna " +"inställning." + +#: engine/vibes_auth/docs/drf/emailing.py:66 +#: engine/vibes_auth/docs/drf/emailing.py:146 +msgid "Successfully unsubscribed from email campaigns." +msgstr "Du har nu avslutat prenumerationen på e-postkampanjer." + +#: engine/vibes_auth/docs/drf/emailing.py:82 +#: engine/vibes_auth/docs/drf/emailing.py:162 +msgid "Invalid or missing unsubscribe token." +msgstr "Ogiltig eller saknad token för avregistrering." + +#: engine/vibes_auth/docs/drf/emailing.py:96 +#: engine/vibes_auth/docs/drf/emailing.py:176 +msgid "User associated with the token was not found." +msgstr "Användaren som är kopplad till token hittades inte." + +#: engine/vibes_auth/docs/drf/emailing.py:118 +msgid "One-Click Unsubscribe (RFC 8058)" +msgstr "Avregistrering med ett klick (RFC 8058)" + +#: engine/vibes_auth/docs/drf/emailing.py:120 +msgid "" +"RFC 8058 compliant one-click unsubscribe endpoint for email campaigns.\n" +"\n" +"This endpoint supports the List-Unsubscribe-Post header mechanism defined in RFC 8058, which allows email clients to unsubscribe users with a single click without leaving the email application.\n" +"\n" +"The token can be provided either as a query parameter or in the request body.\n" +"\n" +"**Standards Compliance:**\n" +"- RFC 8058: Signaling One-Click Functionality for List Email Headers\n" +"- RFC 2369: The Use of URLs as Meta-Syntax for Core Mail List Commands\n" +"\n" +"**Note:** Transactional emails are not affected by this setting." +msgstr "" +"RFC 8058-kompatibel endpoint för avregistrering med ett klick för e-postkampanjer. Denna endpoint stöder List-Unsubscribe-Post-header-mekanismen som definieras i RFC 8058, vilket gör det möjligt för e-postklienter att avregistrera användare med ett enda klick utan att lämna e-postprogrammet. Token kan tillhandahållas antingen som en frågeparameter eller i begäran.\n" +"\n" +"**Standardkompatibilitet:** - RFC 8058: Signaleringsfunktion med ett klick för e-postrubriker - RFC 2369: Användning av URL:er som metasyntax för centrala e-postlistkommandon **Obs!** Transaktionsmeddelanden påverkas inte av denna inställning." + +#: engine/vibes_auth/docs/drf/emailing.py:137 +msgid "" +"Unsubscribe token (alternative to query parameter). Can be omitted if token " +"is provided in URL." +msgstr "" +"Avregistreringstoken (alternativ till frågeparameter). Kan utelämnas om " +"token anges i URL." + +#: engine/vibes_auth/docs/drf/emailing.py:200 +msgid "Track email open event" +msgstr "Spåra händelser när e-post öppnas" + +#: engine/vibes_auth/docs/drf/emailing.py:202 +msgid "" +"Records when a campaign email is opened by the recipient.\n" +"\n" +"This endpoint is called automatically when the tracking pixel (1x1 transparent GIF) embedded in the email is loaded by the recipient's email client.\n" +"\n" +"**How it works:**\n" +"1. Each campaign email contains a unique tracking pixel URL with a `tid` parameter\n" +"2. When the email is opened and images are loaded, this endpoint is called\n" +"3. The recipient's status is updated to 'opened' and the timestamp is recorded\n" +"4. The campaign's aggregate opened count is updated\n" +"\n" +"**Privacy considerations:**\n" +"- Only the first open is recorded (subsequent opens are ignored)\n" +"- No personal information beyond the tracking ID is logged\n" +"- Users who disable image loading will not trigger this event\n" +"\n" +"**Response:**\n" +"Returns a 1x1 transparent GIF image regardless of whether tracking succeeded, to ensure consistent behavior and prevent information leakage." +msgstr "" +"Registrerar när ett kampanjmejl öppnas av mottagaren. Denna slutpunkt anropas automatiskt när spårningspixeln (1x1 transparent GIF) som är inbäddad i mejlet laddas av mottagarens mejlklient.\n" +"\n" +"**Så här fungerar det:** 1. Varje kampanjmejl innehåller en unik spårningspixel-URL med en `tid`-parameter. 2. När mejlet öppnas och bilderna laddas anropas denna slutpunkt. 3. Mottagarens status uppdateras till ”öppnat” och tidsstämpeln registreras. 4. Kampanjens sammanlagda antal öppnade mejl uppdateras. **Sekretessaspekter:**\n" +"- Endast den första öppningen registreras (efterföljande öppningar ignoreras). - Ingen personlig information utöver spårnings-ID:t loggas. - Användare som inaktiverar bildladdning utlöser inte denna händelse. **Svar:** Returnerar en 1x1 transparent GIF-bild oavsett om spårningen lyckades, för att säkerställa konsekvent beteende och förhindra informationsläckage." + +#: engine/vibes_auth/docs/drf/emailing.py:223 +msgid "" +"Tracking ID (UUID) unique to each campaign-recipient combination. This ID " +"links the open event to a specific recipient and campaign." +msgstr "" +"Spårnings-ID (UUID) som är unikt för varje kombination av kampanj och " +"mottagare. Detta ID kopplar öppningshändelsen till en specifik mottagare och" +" kampanj." + +#: engine/vibes_auth/docs/drf/emailing.py:241 +msgid "" +"1x1 transparent GIF image. Always returned regardless of tracking status to " +"maintain consistent behavior." +msgstr "" +"1x1 transparent GIF-bild. Returneras alltid oavsett spårningsstatus för att " +"upprätthålla ett konsekvent beteende." + +#: engine/vibes_auth/docs/drf/emailing.py:247 +msgid "" +"Returned when no tracking ID is provided. Note: Invalid tracking IDs still " +"return 200 with the GIF to prevent enumeration attacks." +msgstr "" +"Returneras när inget spårnings-ID anges. Obs! Ogiltiga spårnings-ID " +"returnerar fortfarande 200 med GIF för att förhindra enumerationsattacker." + #: engine/vibes_auth/docs/drf/messaging.py:17 msgid "User messages entrypoint" msgstr "Användarmeddelanden entrypoint" @@ -246,9 +390,9 @@ msgid "confirm a user's password reset" msgstr "Bekräfta återställning av en användares lösenord" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:351 +#: engine/vibes_auth/graphene/mutations.py:358 #: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107 -#: engine/vibes_auth/viewsets.py:94 +#: engine/vibes_auth/viewsets.py:97 msgid "passwords do not match" msgstr "Lösenorden stämmer inte överens" @@ -301,195 +445,166 @@ msgstr "Öppnad" msgid "Clicked" msgstr "Klickade" -#: engine/vibes_auth/emailing/models.py:35 -#: engine/vibes_auth/emailing/models.py:71 -#: engine/vibes_auth/emailing/models.py:121 +#: engine/vibes_auth/emailing/models.py:38 +#: engine/vibes_auth/emailing/models.py:88 msgid "name" msgstr "namn" -#: engine/vibes_auth/emailing/models.py:36 -msgid "descriptive name for the image" -msgstr "beskrivande namn för bilden" - -#: engine/vibes_auth/emailing/models.py:40 -msgid "image" -msgstr "bild" - -#: engine/vibes_auth/emailing/models.py:41 -msgid "image file to use in email templates" -msgstr "bildfil att använda i e-postmallar" - -#: engine/vibes_auth/emailing/models.py:47 -msgid "alt text" -msgstr "annan text" - -#: engine/vibes_auth/emailing/models.py:48 -msgid "alternative text for accessibility" -msgstr "alternativ text för tillgänglighet" - -#: engine/vibes_auth/emailing/models.py:52 -msgid "email image" -msgstr "e-postbild" - -#: engine/vibes_auth/emailing/models.py:53 -msgid "email images" -msgstr "e-postbilder" - -#: engine/vibes_auth/emailing/models.py:72 +#: engine/vibes_auth/emailing/models.py:39 msgid "internal name for the template" msgstr "internt namn för mallen" -#: engine/vibes_auth/emailing/models.py:76 +#: engine/vibes_auth/emailing/models.py:43 msgid "slug" msgstr "tjänare" -#: engine/vibes_auth/emailing/models.py:77 +#: engine/vibes_auth/emailing/models.py:44 msgid "unique identifier for the template" msgstr "unik identifierare för mallen" -#: engine/vibes_auth/emailing/models.py:81 +#: engine/vibes_auth/emailing/models.py:48 msgid "subject" msgstr "ämne" -#: engine/vibes_auth/emailing/models.py:82 +#: engine/vibes_auth/emailing/models.py:49 msgid "email subject line - supports {{ variables }}" msgstr "e-postens ämnesrad – stöder {{ variables }}" -#: engine/vibes_auth/emailing/models.py:85 -msgid "HTML content" -msgstr "HTML-innehåll" +#: engine/vibes_auth/emailing/models.py:52 +msgid "content" +msgstr "innehåll" -#: engine/vibes_auth/emailing/models.py:87 +#: engine/vibes_auth/emailing/models.py:54 msgid "" -"email body content - supports {{ user.first_name }}, {{ user.email }}, {{ " -"project_name }}, {{ unsubscribe_url }}" +"email body in markdown - supports {{ user.first_name }}, {{ user.email }}, " +"{{ project_name }}, {{ unsubscribe_url }}" msgstr "" "e-postmeddelandets innehåll – stöder {{ user.first_name }}, {{ user.email " "}}, {{ project_name }}, {{ unsubscribe_url }}" -#: engine/vibes_auth/emailing/models.py:94 +#: engine/vibes_auth/emailing/models.py:61 msgid "plain text content" msgstr "vanlig text" -#: engine/vibes_auth/emailing/models.py:95 +#: engine/vibes_auth/emailing/models.py:62 msgid "plain text fallback (auto-generated if empty)" msgstr "vanlig text som reserv (genereras automatiskt om tom)" -#: engine/vibes_auth/emailing/models.py:100 +#: engine/vibes_auth/emailing/models.py:67 msgid "available variables" msgstr "tillgängliga variabler" -#: engine/vibes_auth/emailing/models.py:101 +#: engine/vibes_auth/emailing/models.py:68 msgid "documentation of available template variables" msgstr "dokumentation av tillgängliga mallvariabler" -#: engine/vibes_auth/emailing/models.py:105 +#: engine/vibes_auth/emailing/models.py:72 msgid "email template" msgstr "e-postmall" -#: engine/vibes_auth/emailing/models.py:106 +#: engine/vibes_auth/emailing/models.py:73 msgid "email templates" msgstr "e-postmallar" -#: engine/vibes_auth/emailing/models.py:122 +#: engine/vibes_auth/emailing/models.py:89 msgid "internal name for the campaign" msgstr "internt namn för kampanjen" -#: engine/vibes_auth/emailing/models.py:129 +#: engine/vibes_auth/emailing/models.py:96 msgid "template" msgstr "mall" -#: engine/vibes_auth/emailing/models.py:130 +#: engine/vibes_auth/emailing/models.py:97 msgid "email template to use for this campaign" msgstr "E-postmall att använda för denna kampanj" -#: engine/vibes_auth/emailing/models.py:136 -#: engine/vibes_auth/emailing/models.py:206 +#: engine/vibes_auth/emailing/models.py:103 +#: engine/vibes_auth/emailing/models.py:173 msgid "status" msgstr "status" -#: engine/vibes_auth/emailing/models.py:141 +#: engine/vibes_auth/emailing/models.py:108 msgid "scheduled at" msgstr "planerad till" -#: engine/vibes_auth/emailing/models.py:142 +#: engine/vibes_auth/emailing/models.py:109 msgid "when to send the campaign (leave empty for manual send)" msgstr "när kampanjen ska skickas (lämna tomt för manuell sändning)" -#: engine/vibes_auth/emailing/models.py:147 -#: engine/vibes_auth/emailing/models.py:211 +#: engine/vibes_auth/emailing/models.py:114 +#: engine/vibes_auth/emailing/models.py:178 msgid "sent at" msgstr "senare" -#: engine/vibes_auth/emailing/models.py:148 +#: engine/vibes_auth/emailing/models.py:115 msgid "when the campaign was actually sent" msgstr "när kampanjen faktiskt skickades ut" -#: engine/vibes_auth/emailing/models.py:153 +#: engine/vibes_auth/emailing/models.py:120 msgid "total recipients" msgstr "totalt antal mottagare" -#: engine/vibes_auth/emailing/models.py:157 +#: engine/vibes_auth/emailing/models.py:124 msgid "sent count" msgstr "skickat antal" -#: engine/vibes_auth/emailing/models.py:161 +#: engine/vibes_auth/emailing/models.py:128 msgid "failed count" msgstr "misslyckad räkning" -#: engine/vibes_auth/emailing/models.py:165 +#: engine/vibes_auth/emailing/models.py:132 msgid "opened count" msgstr "öppnad räkning" -#: engine/vibes_auth/emailing/models.py:169 +#: engine/vibes_auth/emailing/models.py:136 msgid "clicked count" msgstr "klickräkning" -#: engine/vibes_auth/emailing/models.py:173 +#: engine/vibes_auth/emailing/models.py:140 msgid "email campaign" msgstr "e-postkampanj" -#: engine/vibes_auth/emailing/models.py:174 +#: engine/vibes_auth/emailing/models.py:141 msgid "email campaigns" msgstr "e-postkampanjer" -#: engine/vibes_auth/emailing/models.py:194 +#: engine/vibes_auth/emailing/models.py:161 msgid "campaign" msgstr "kampanj" -#: engine/vibes_auth/emailing/models.py:200 engine/vibes_auth/models.py:146 +#: engine/vibes_auth/emailing/models.py:167 engine/vibes_auth/models.py:183 msgid "user" msgstr "Användare" -#: engine/vibes_auth/emailing/models.py:216 +#: engine/vibes_auth/emailing/models.py:183 msgid "opened at" msgstr "öppnade vid" -#: engine/vibes_auth/emailing/models.py:221 +#: engine/vibes_auth/emailing/models.py:188 msgid "clicked at" msgstr "klickade på" -#: engine/vibes_auth/emailing/models.py:227 +#: engine/vibes_auth/emailing/models.py:194 msgid "tracking ID" msgstr "spårnings-ID" -#: engine/vibes_auth/emailing/models.py:228 +#: engine/vibes_auth/emailing/models.py:195 msgid "unique ID for tracking opens and clicks" msgstr "unikt ID för spårning av öppningar och klick" -#: engine/vibes_auth/emailing/models.py:233 +#: engine/vibes_auth/emailing/models.py:200 msgid "error message" msgstr "felmeddelande" -#: engine/vibes_auth/emailing/models.py:234 +#: engine/vibes_auth/emailing/models.py:201 msgid "error details if sending failed" msgstr "felinformation om sändningen misslyckades" -#: engine/vibes_auth/emailing/models.py:238 +#: engine/vibes_auth/emailing/models.py:205 msgid "campaign recipient" msgstr "kampanjmottagare" -#: engine/vibes_auth/emailing/models.py:239 +#: engine/vibes_auth/emailing/models.py:206 msgid "campaign recipients" msgstr "kampanjens mottagare" @@ -507,74 +622,74 @@ msgstr "" msgid "Unsubscribe" msgstr "Avregistrera" -#: engine/vibes_auth/emailing/views.py:71 +#: engine/vibes_auth/emailing/views.py:39 msgid "Unsubscribe token is required." msgstr "Avregistreringstoken krävs." -#: engine/vibes_auth/emailing/views.py:79 +#: engine/vibes_auth/emailing/views.py:47 msgid "Invalid unsubscribe token format." msgstr "Ogiltigt format för avregistreringstoken." -#: engine/vibes_auth/emailing/views.py:87 +#: engine/vibes_auth/emailing/views.py:55 msgid "User not found." msgstr "Användaren hittades inte." -#: engine/vibes_auth/emailing/views.py:93 -msgid "You are already unsubscribed." -msgstr "Du är redan avregistrerad." - -#: engine/vibes_auth/emailing/views.py:101 -msgid "You have been successfully unsubscribed from our emails." -msgstr "Du har nu avslutat din prenumeration på våra e-postmeddelanden." - -#: engine/vibes_auth/graphene/mutations.py:46 +#: engine/vibes_auth/graphene/mutations.py:47 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" "Den användares b64-kodade uuid som hänvisade den nya användaren till oss." -#: engine/vibes_auth/graphene/mutations.py:68 +#: engine/vibes_auth/graphene/mutations.py:70 msgid "password too weak" msgstr "Lösenordet är för svagt" -#: engine/vibes_auth/graphene/mutations.py:128 +#: engine/vibes_auth/graphene/mutations.py:130 msgid "malformed email" msgstr "Missvisande e-post" -#: engine/vibes_auth/graphene/mutations.py:140 +#: engine/vibes_auth/graphene/mutations.py:142 #: engine/vibes_auth/serializers.py:117 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Missbildat telefonnummer: {phone_number}!" -#: engine/vibes_auth/graphene/mutations.py:165 +#: engine/vibes_auth/graphene/mutations.py:167 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Ogiltigt attributformat: {attribute_pair}!" -#: engine/vibes_auth/graphene/mutations.py:182 +#: engine/vibes_auth/graphene/mutations.py:184 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} existerar inte: {uuid}!" -#: engine/vibes_auth/graphene/mutations.py:304 -#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180 +#: engine/vibes_auth/graphene/mutations.py:309 +#: engine/vibes_auth/viewsets.py:174 engine/vibes_auth/viewsets.py:198 msgid "activation link is invalid!" msgstr "Aktiveringslänken är ogiltig!" -#: engine/vibes_auth/graphene/mutations.py:307 +#: engine/vibes_auth/graphene/mutations.py:312 msgid "account already activated..." msgstr "Kontot har redan aktiverats..." -#: engine/vibes_auth/graphene/mutations.py:314 -#: engine/vibes_auth/graphene/mutations.py:376 +#: engine/vibes_auth/graphene/mutations.py:319 +#: engine/vibes_auth/graphene/mutations.py:383 msgid "something went wrong: {e!s}" msgstr "Något gick fel: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:358 -#: engine/vibes_auth/viewsets.py:106 +#: engine/vibes_auth/graphene/mutations.py:365 +#: engine/vibes_auth/viewsets.py:109 msgid "token is invalid!" msgstr "Token är ogiltig!" +#: engine/vibes_auth/graphene/mutations.py:403 +msgid "only image files are allowed (jpg, png, gif, webp)" +msgstr "Endast bildfiler är tillåtna (jpg, png, gif, webp)" + +#: engine/vibes_auth/graphene/mutations.py:406 +msgid "file size must not exceed 5 MB" +msgstr "Filstorleken får inte överstiga 5 MB." + #: engine/vibes_auth/graphene/object_types.py:46 msgid "" "the products this user has viewed most recently (max 48), in " @@ -584,7 +699,7 @@ msgstr "" "kronologisk ordning." #: engine/vibes_auth/graphene/object_types.py:49 -#: engine/vibes_auth/models.py:214 +#: engine/vibes_auth/models.py:270 msgid "groups" msgstr "Grupper" @@ -593,7 +708,7 @@ msgid "wishlist" msgstr "Önskelista" #: engine/vibes_auth/graphene/object_types.py:56 -#: engine/vibes_auth/models.py:70 +#: engine/vibes_auth/models.py:75 msgid "avatar" msgstr "Avatar" @@ -629,7 +744,7 @@ msgstr "Vi söker efter en operatör som kan svara dig redan nu, så håll ut!" msgid "Assignee must be a staff user." msgstr "Mottagaren måste vara en personalanvändare." -#: engine/vibes_auth/models.py:42 +#: engine/vibes_auth/models.py:44 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -647,123 +762,135 @@ msgstr "" "aktivering för att verifiera konton. User-modellen är utformad för att " "hantera specifika användningsfall för förbättrad användarhantering." -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "email" msgstr "E-post" -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "user email address" msgstr "Användarens e-postadress" -#: engine/vibes_auth/models.py:55 +#: engine/vibes_auth/models.py:57 msgid "phone_number" msgstr "Telefonnummer" -#: engine/vibes_auth/models.py:60 +#: engine/vibes_auth/models.py:61 msgid "user phone number" msgstr "Användarens telefonnummer" -#: engine/vibes_auth/models.py:66 +#: engine/vibes_auth/models.py:68 msgid "first_name" msgstr "Förnamn" -#: engine/vibes_auth/models.py:67 +#: engine/vibes_auth/models.py:71 msgid "last_name" msgstr "Efternamn" -#: engine/vibes_auth/models.py:73 +#: engine/vibes_auth/models.py:78 msgid "user profile image" msgstr "Bild på användarprofil" -#: engine/vibes_auth/models.py:78 +#: engine/vibes_auth/models.py:83 msgid "is verified" msgstr "Är verifierad" -#: engine/vibes_auth/models.py:79 +#: engine/vibes_auth/models.py:84 msgid "user verification status" msgstr "Användarens verifieringsstatus" -#: engine/vibes_auth/models.py:82 +#: engine/vibes_auth/models.py:87 msgid "is_active" msgstr "Är aktiv" -#: engine/vibes_auth/models.py:84 +#: engine/vibes_auth/models.py:89 msgid "unselect this instead of deleting accounts" msgstr "Avmarkera detta istället för att radera konton" -#: engine/vibes_auth/models.py:87 +#: engine/vibes_auth/models.py:92 msgid "is_subscribed" msgstr "Är prenumererad" -#: engine/vibes_auth/models.py:88 +#: engine/vibes_auth/models.py:93 msgid "user's newsletter subscription status" msgstr "Användarens status för prenumeration på nyhetsbrev" -#: engine/vibes_auth/models.py:92 +#: engine/vibes_auth/models.py:98 msgid "activation token" msgstr "Aktiveringstoken" -#: engine/vibes_auth/models.py:95 +#: engine/vibes_auth/models.py:103 +msgid "activation token created" +msgstr "Aktiveringstoken skapad" + +#: engine/vibes_auth/models.py:107 msgid "unsubscribe token" msgstr "avregistreringstoken" -#: engine/vibes_auth/models.py:96 +#: engine/vibes_auth/models.py:108 msgid "token for secure one-click unsubscribe from campaigns" msgstr "token för säker avregistrering från kampanjer med ett klick" -#: engine/vibes_auth/models.py:106 +#: engine/vibes_auth/models.py:118 msgid "attributes" msgstr "Attribut" -#: engine/vibes_auth/models.py:147 +#: engine/vibes_auth/models.py:184 msgid "users" msgstr "Användare" -#: engine/vibes_auth/models.py:154 +#: engine/vibes_auth/models.py:202 +msgid "admin OTP code" +msgstr "Admin OTP-kod" + +#: engine/vibes_auth/models.py:203 +msgid "admin OTP codes" +msgstr "Admin OTP-koder" + +#: engine/vibes_auth/models.py:210 msgid "For anonymous threads" msgstr "För anonyma trådar" -#: engine/vibes_auth/models.py:178 +#: engine/vibes_auth/models.py:234 msgid "Chat thread" msgstr "Chattråd" -#: engine/vibes_auth/models.py:179 +#: engine/vibes_auth/models.py:235 msgid "Chat threads" msgstr "Chatt-trådar" -#: engine/vibes_auth/models.py:185 +#: engine/vibes_auth/models.py:241 msgid "provide user or email for anonymous thread." msgstr "ange användare eller e-post för anonym tråd." -#: engine/vibes_auth/models.py:188 +#: engine/vibes_auth/models.py:244 msgid "assignee must be a staff user." msgstr "mottagaren måste vara en personalanvändare." -#: engine/vibes_auth/models.py:206 +#: engine/vibes_auth/models.py:262 msgid "Chat message" msgstr "Chattmeddelande" -#: engine/vibes_auth/models.py:207 +#: engine/vibes_auth/models.py:263 msgid "Chat messages" msgstr "Chattmeddelanden" -#: engine/vibes_auth/models.py:213 +#: engine/vibes_auth/models.py:269 msgid "group" msgstr "Grupp" -#: engine/vibes_auth/models.py:220 +#: engine/vibes_auth/models.py:276 msgid "outstanding token" msgstr "Utestående symbol" -#: engine/vibes_auth/models.py:221 +#: engine/vibes_auth/models.py:277 msgid "outstanding tokens" msgstr "Utestående polletter" -#: engine/vibes_auth/models.py:227 +#: engine/vibes_auth/models.py:283 msgid "blacklisted token" msgstr "Svartlistad token" -#: engine/vibes_auth/models.py:228 +#: engine/vibes_auth/models.py:284 msgid "blacklisted tokens" msgstr "Svartlistade tokens" @@ -805,6 +932,10 @@ msgstr "Inget användar-uuid-krav finns i token" msgid "user does not exist" msgstr "Användaren finns inte" +#: engine/vibes_auth/templates/admin/verify_otp.html:27 +msgid "Verify" +msgstr "Verifiera" + #: engine/vibes_auth/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "Återställ ditt lösenord" @@ -890,12 +1021,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "Bästa hälsningar,
teamet %(project_name)s" -#: engine/vibes_auth/utils/emailing.py:24 +#: engine/vibes_auth/utils/emailing.py:27 #, python-brace-format msgid "{settings.PROJECT_NAME} | Activate Account" msgstr "{settings.PROJECT_NAME} | Aktivera konto" -#: engine/vibes_auth/utils/emailing.py:63 +#: engine/vibes_auth/utils/emailing.py:66 #, python-brace-format msgid "{settings.PROJECT_NAME} | Reset Password" msgstr "{settings.PROJECT_NAME} | Återställ lösenord" @@ -950,7 +1081,7 @@ msgstr "" msgid "the token is invalid" msgstr "Token är ogiltig" -#: engine/vibes_auth/viewsets.py:44 +#: engine/vibes_auth/viewsets.py:47 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." @@ -958,10 +1089,18 @@ 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." -#: engine/vibes_auth/viewsets.py:113 +#: engine/vibes_auth/viewsets.py:116 msgid "password reset successfully" msgstr "Lösenordet har återställts framgångsrikt!" -#: engine/vibes_auth/viewsets.py:161 +#: engine/vibes_auth/viewsets.py:146 +msgid "" +"Account already registered but not yet activated. A new activation email has" +" been sent." +msgstr "" +"Kontot är redan registrerat men ännu inte aktiverat. Ett nytt " +"aktiveringsmeddelande har skickats." + +#: engine/vibes_auth/viewsets.py:179 msgid "account already activated!" msgstr "Du har redan aktiverat kontot..." diff --git a/engine/vibes_auth/locale/th_TH/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/th_TH/LC_MESSAGES/django.mo index 374f27a1..f98bc92b 100644 Binary files a/engine/vibes_auth/locale/th_TH/LC_MESSAGES/django.mo and b/engine/vibes_auth/locale/th_TH/LC_MESSAGES/django.mo differ diff --git a/engine/vibes_auth/locale/th_TH/LC_MESSAGES/django.po b/engine/vibes_auth/locale/th_TH/LC_MESSAGES/django.po index 04bf7b71..5282938b 100644 --- a/engine/vibes_auth/locale/th_TH/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/th_TH/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 03:06+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,32 +13,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:65 engine/vibes_auth/admin.py:66 +#: engine/vibes_auth/admin.py:64 engine/vibes_auth/admin.py:65 #: engine/vibes_auth/graphene/object_types.py:54 msgid "balance" msgstr "สมดุล" -#: engine/vibes_auth/admin.py:74 +#: engine/vibes_auth/admin.py:73 msgid "order" msgstr "คำสั่ง" -#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:51 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:51 msgid "orders" msgstr "คำสั่ง" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:84 msgid "personal info" msgstr "ข้อมูลส่วนตัว" -#: engine/vibes_auth/admin.py:89 engine/vibes_auth/graphene/object_types.py:50 +#: engine/vibes_auth/admin.py:88 engine/vibes_auth/graphene/object_types.py:50 msgid "permissions" msgstr "สิทธิ์การใช้งาน" -#: engine/vibes_auth/admin.py:102 +#: engine/vibes_auth/admin.py:101 msgid "important dates" msgstr "วันที่สำคัญ" -#: engine/vibes_auth/admin.py:103 +#: engine/vibes_auth/admin.py:102 msgid "additional info" msgstr "ข้อมูลเพิ่มเติม" @@ -54,79 +54,83 @@ msgstr "ปิดกระทู้ที่เลือก" msgid "Open selected threads" msgstr "เปิดกระทู้ที่เลือก" -#: engine/vibes_auth/admin.py:208 -msgid "Preview" -msgstr "ตัวอย่าง" - -#: engine/vibes_auth/admin.py:209 engine/vibes_auth/admin.py:249 -#: engine/vibes_auth/admin.py:326 -msgid "Metadata" -msgstr "เมตาดาตา" - -#: engine/vibes_auth/admin.py:212 -msgid "preview" -msgstr "ตัวอย่าง" - -#: engine/vibes_auth/admin.py:221 -msgid "image preview" -msgstr "ภาพตัวอย่าง" - -#: engine/vibes_auth/admin.py:241 +#: engine/vibes_auth/admin.py:209 msgid "Content" msgstr "เนื้อหา" -#: engine/vibes_auth/admin.py:243 +#: engine/vibes_auth/admin.py:211 msgid "Documentation" msgstr "เอกสาร" -#: engine/vibes_auth/admin.py:313 +#: engine/vibes_auth/admin.py:217 engine/vibes_auth/admin.py:294 +msgid "Metadata" +msgstr "เมตาดาตา" + +#: engine/vibes_auth/admin.py:281 msgid "Scheduling" msgstr "การจัดตารางเวลา" -#: engine/vibes_auth/admin.py:315 +#: engine/vibes_auth/admin.py:283 msgid "Statistics" msgstr "สถิติ" -#: engine/vibes_auth/admin.py:329 +#: engine/vibes_auth/admin.py:297 msgid "stats" msgstr "รัฐ" -#: engine/vibes_auth/admin.py:335 +#: engine/vibes_auth/admin.py:303 msgid "Prepare recipients (subscribed users)" msgstr "เตรียมผู้รับ (ผู้ใช้ที่สมัครรับข้อมูล)" -#: engine/vibes_auth/admin.py:343 +#: engine/vibes_auth/admin.py:311 msgid "Campaign '{}' is not in draft status." msgstr "แคมเปญ '{}' ไม่ได้อยู่ในสถานะร่าง" -#: engine/vibes_auth/admin.py:350 +#: engine/vibes_auth/admin.py:318 msgid "Preparing recipients for campaign '{}'." msgstr "เตรียมผู้รับสำหรับแคมเปญ '{}'" -#: engine/vibes_auth/admin.py:354 +#: engine/vibes_auth/admin.py:322 msgid "Send campaign now" msgstr "ส่งแคมเปญตอนนี้" -#: engine/vibes_auth/admin.py:362 +#: engine/vibes_auth/admin.py:330 msgid "Campaign '{}' cannot be sent (status: {})." msgstr "ไม่สามารถส่งแคมเปญ '{}' ได้ (สถานะ: {})." -#: engine/vibes_auth/admin.py:372 +#: engine/vibes_auth/admin.py:340 msgid "Campaign '{}' has no recipients. Prepare recipients first." msgstr "แคมเปญ '{}' ไม่มีผู้รับ โปรดเตรียมผู้รับก่อน" -#: engine/vibes_auth/admin.py:383 +#: engine/vibes_auth/admin.py:351 msgid "Started sending campaign '{}'." msgstr "เริ่มส่งแคมเปญ '{}'" -#: engine/vibes_auth/admin.py:387 +#: engine/vibes_auth/admin.py:355 msgid "Cancel campaign" msgstr "ยกเลิกแคมเปญ" -#: engine/vibes_auth/admin.py:396 +#: engine/vibes_auth/admin.py:364 msgid "{} campaign(s) cancelled." msgstr "{} แคมเปญถูกยกเลิก" +#: engine/vibes_auth/admin_site.py:24 +msgid "Verification code" +msgstr "รหัสยืนยัน" + +#: engine/vibes_auth/admin_site.py:62 +msgid "A verification code has been sent to your email." +msgstr "รหัสยืนยันได้ถูกส่งไปยังอีเมลของคุณแล้ว" + +#: engine/vibes_auth/admin_site.py:118 +msgid "Invalid or expired code. Please try again." +msgstr "รหัสไม่ถูกต้องหรือหมดอายุ กรุณาลองอีกครั้ง" + +#: engine/vibes_auth/admin_site.py:124 +#: engine/vibes_auth/templates/admin/verify_otp.html:10 +msgid "Two-factor authentication" +msgstr "การยืนยันตัวตนแบบสองปัจจัย" + #: engine/vibes_auth/apps.py:8 msgid "Accounting" msgstr "บัญชี" @@ -151,6 +155,144 @@ msgstr "พนักงาน" msgid "System" msgstr "ระบบ" +#: engine/vibes_auth/docs/drf/emailing.py:18 +msgid "" +"UUID token for unsubscribing. This token is unique per user and is included " +"in the unsubscribe link of every campaign email. The token remains constant " +"for each user unless regenerated." +msgstr "" +"โทเค็น UUID สำหรับการยกเลิกการสมัคร " +"โทเค็นนี้มีความเฉพาะเจาะจงต่อผู้ใช้แต่ละรายและรวมอยู่ในลิงก์ยกเลิกการสมัครของอีเมลแคมเปญทุกฉบับ" +" โทเค็นนี้จะคงที่สำหรับผู้ใช้แต่ละรายจนกว่าจะมีการสร้างใหม่" + +#: engine/vibes_auth/docs/drf/emailing.py:37 +#: engine/vibes_auth/emailing/views.py:69 +msgid "You have been successfully unsubscribed from our emails." +msgstr "คุณได้ยกเลิกการสมัครรับอีเมลจากเราเรียบร้อยแล้ว" + +#: engine/vibes_auth/docs/drf/emailing.py:45 +#: engine/vibes_auth/emailing/views.py:61 +msgid "You are already unsubscribed." +msgstr "คุณได้ยกเลิกการสมัครแล้ว" + +#: engine/vibes_auth/docs/drf/emailing.py:52 +msgid "Unsubscribe from email campaigns" +msgstr "ยกเลิกการรับอีเมลจากแคมเปญ" + +#: engine/vibes_auth/docs/drf/emailing.py:54 +msgid "" +"Unsubscribe a user from all marketing email campaigns using their unique unsubscribe token.\n" +"\n" +"This endpoint is designed for email client compatibility where clicking a link triggers a GET request. The user will no longer receive promotional emails after successful unsubscription.\n" +"\n" +"**Note:** Transactional emails (order confirmations, password resets, etc.) are not affected by this setting." +msgstr "" +"ยกเลิกการสมัครรับอีเมลการตลาดทั้งหมดของผู้ใช้โดยใช้โทเค็นยกเลิกการสมัครที่ไม่ซ้ำกันของพวกเขา" +" " +"จุดสิ้นสุดนี้ถูกออกแบบมาเพื่อความเข้ากันได้กับไคลเอนต์อีเมลที่การคลิกที่ลิงก์จะกระตุ้นการร้องขอแบบ" +" GET ผู้ใช้จะไม่ได้รับอีเมลส่งเสริมการขายอีกต่อไปหลังจากยกเลิกการสมัครสำเร็จ" +" **หมายเหตุ:** อีเมลธุรกรรม (การยืนยันคำสั่งซื้อ การรีเซ็ตรหัสผ่าน ฯลฯ) " +"จะไม่ได้รับผลกระทบจากการตั้งค่านี้" + +#: engine/vibes_auth/docs/drf/emailing.py:66 +#: engine/vibes_auth/docs/drf/emailing.py:146 +msgid "Successfully unsubscribed from email campaigns." +msgstr "ยกเลิกการรับอีเมลจากแคมเปญเรียบร้อยแล้ว" + +#: engine/vibes_auth/docs/drf/emailing.py:82 +#: engine/vibes_auth/docs/drf/emailing.py:162 +msgid "Invalid or missing unsubscribe token." +msgstr "โทเค็นยกเลิกการสมัครไม่ถูกต้องหรือหายไป" + +#: engine/vibes_auth/docs/drf/emailing.py:96 +#: engine/vibes_auth/docs/drf/emailing.py:176 +msgid "User associated with the token was not found." +msgstr "ไม่พบผู้ใช้ที่เกี่ยวข้องกับโทเค็น" + +#: engine/vibes_auth/docs/drf/emailing.py:118 +msgid "One-Click Unsubscribe (RFC 8058)" +msgstr "ยกเลิกการสมัครด้วยคลิกเดียว (RFC 8058)" + +#: engine/vibes_auth/docs/drf/emailing.py:120 +msgid "" +"RFC 8058 compliant one-click unsubscribe endpoint for email campaigns.\n" +"\n" +"This endpoint supports the List-Unsubscribe-Post header mechanism defined in RFC 8058, which allows email clients to unsubscribe users with a single click without leaving the email application.\n" +"\n" +"The token can be provided either as a query parameter or in the request body.\n" +"\n" +"**Standards Compliance:**\n" +"- RFC 8058: Signaling One-Click Functionality for List Email Headers\n" +"- RFC 2369: The Use of URLs as Meta-Syntax for Core Mail List Commands\n" +"\n" +"**Note:** Transactional emails are not affected by this setting." +msgstr "" +"จุดสิ้นสุดการยกเลิกการสมัครแบบคลิกเดียวที่สอดคล้องกับ RFC 8058 สำหรับแคมเปญอีเมล จุดสิ้นสุดนี้รองรับกลไกหัวเรื่อง List-Unsubscribe-Post ที่กำหนดไว้ใน RFC 8058 ซึ่งช่วยให้ไคลเอนต์อีเมลยกเลิกการสมัครผู้ใช้ด้วยการคลิกเพียงครั้งเดียวโดยไม่ต้องออกจากแอปพลิเคชันอีเมล โทเค็นสามารถระบุได้ทั้งเป็นพารามิเตอร์การค้นหาหรือในเนื้อหาคำขอ\n" +"\n" +"**การปฏิบัติตามมาตรฐาน:** - RFC 8058: การส่งสัญญาณฟังก์ชันคลิกเดียวสำหรับหัวข้ออีเมลในรายการ - RFC 2369: การใช้ URL เป็นเมตา-ไวยากรณ์สำหรับคำสั่งหลักของรายการอีเมล **หมายเหตุ:** อีเมลธุรกรรมไม่ได้รับผลกระทบจากการตั้งค่านี้" + +#: engine/vibes_auth/docs/drf/emailing.py:137 +msgid "" +"Unsubscribe token (alternative to query parameter). Can be omitted if token " +"is provided in URL." +msgstr "" +"โทเค็นยกเลิกการสมัคร (ทางเลือกสำหรับพารามิเตอร์การค้นหา) " +"สามารถละเว้นได้หากโทเค็นถูกระบุไว้ใน URL" + +#: engine/vibes_auth/docs/drf/emailing.py:200 +msgid "Track email open event" +msgstr "ติดตามเหตุการณ์การเปิดอีเมล" + +#: engine/vibes_auth/docs/drf/emailing.py:202 +msgid "" +"Records when a campaign email is opened by the recipient.\n" +"\n" +"This endpoint is called automatically when the tracking pixel (1x1 transparent GIF) embedded in the email is loaded by the recipient's email client.\n" +"\n" +"**How it works:**\n" +"1. Each campaign email contains a unique tracking pixel URL with a `tid` parameter\n" +"2. When the email is opened and images are loaded, this endpoint is called\n" +"3. The recipient's status is updated to 'opened' and the timestamp is recorded\n" +"4. The campaign's aggregate opened count is updated\n" +"\n" +"**Privacy considerations:**\n" +"- Only the first open is recorded (subsequent opens are ignored)\n" +"- No personal information beyond the tracking ID is logged\n" +"- Users who disable image loading will not trigger this event\n" +"\n" +"**Response:**\n" +"Returns a 1x1 transparent GIF image regardless of whether tracking succeeded, to ensure consistent behavior and prevent information leakage." +msgstr "" +"บันทึกเมื่ออีเมลแคมเปญถูกเปิดโดยผู้รับ จุดสิ้นสุดนี้จะถูกเรียกใช้โดยอัตโนมัติเมื่อพิกเซลติดตาม (GIF โปร่งใสขนาด 1x1) ที่ฝังอยู่ในอีเมลถูกโหลดโดยโปรแกรมอีเมลของผู้รับ\n" +"\n" +"**วิธีการทำงาน:** 1. อีเมลแคมเปญแต่ละฉบับจะมี URL พิกเซลติดตามเฉพาะที่มีพารามิเตอร์ `tid` 2. เมื่อเปิดอีเมลและโหลดรูปภาพ จุดสิ้นสุดนี้จะถูกเรียก 3. สถานะของผู้รับจะอัปเดตเป็น 'เปิดแล้ว' และบันทึกเวลา 4. จำนวนการเปิดทั้งหมดของแคมเปญจะอัปเดต **ข้อพิจารณาด้านความเป็นส่วนตัว:**\n" +"- บันทึกเฉพาะการเปิดครั้งแรกเท่านั้น (การเปิดครั้งถัดไปจะไม่ถูกบันทึก) - ไม่มีการบันทึกข้อมูลส่วนบุคคลใด ๆ นอกเหนือจากรหัสติดตาม - ผู้ใช้ที่ปิดการแสดงผลรูปภาพจะไม่ทำให้เกิดเหตุการณ์นี้ **การตอบกลับ:** ส่งคืนภาพ GIF โปร่งใสขนาด 1x1 โดยไม่คำนึงว่าติดตามสำเร็จหรือไม่ เพื่อให้มั่นใจในพฤติกรรมที่สม่ำเสมอและป้องกันการรั่วไหลของข้อมูล" + +#: engine/vibes_auth/docs/drf/emailing.py:223 +msgid "" +"Tracking ID (UUID) unique to each campaign-recipient combination. This ID " +"links the open event to a specific recipient and campaign." +msgstr "" +"รหัสติดตาม (UUID) ที่ไม่ซ้ำกันสำหรับแต่ละคู่ของแคมเปญและผู้รับ " +"รหัสนี้จะเชื่อมโยงเหตุการณ์การเปิดกับผู้รับและแคมเปญเฉพาะ" + +#: engine/vibes_auth/docs/drf/emailing.py:241 +msgid "" +"1x1 transparent GIF image. Always returned regardless of tracking status to " +"maintain consistent behavior." +msgstr "" +"ภาพ GIF โปร่งใสขนาด 1x1. " +"จะส่งคืนเสมอไม่ว่าสถานะการติดตามจะเป็นอย่างไรเพื่อรักษาพฤติกรรมที่สม่ำเสมอ" + +#: engine/vibes_auth/docs/drf/emailing.py:247 +msgid "" +"Returned when no tracking ID is provided. Note: Invalid tracking IDs still " +"return 200 with the GIF to prevent enumeration attacks." +msgstr "" +"คืนค่าเมื่อไม่มีการระบุรหัสติดตาม หมายเหตุ: " +"รหัสติดตามที่ไม่ถูกต้องจะยังคงคืนค่า 200 พร้อม GIF " +"เพื่อป้องกันการโจมตีแบบการไล่รายการ" + #: engine/vibes_auth/docs/drf/messaging.py:17 msgid "User messages entrypoint" msgstr "จุดเริ่มต้นของข้อความผู้ใช้" @@ -244,9 +386,9 @@ msgid "confirm a user's password reset" msgstr "ยืนยันการรีเซ็ตรหัสผ่านของผู้ใช้" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:351 +#: engine/vibes_auth/graphene/mutations.py:358 #: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107 -#: engine/vibes_auth/viewsets.py:94 +#: engine/vibes_auth/viewsets.py:97 msgid "passwords do not match" msgstr "รหัสผ่านไม่ตรงกัน" @@ -299,195 +441,166 @@ msgstr "เปิด" msgid "Clicked" msgstr "คลิก" -#: engine/vibes_auth/emailing/models.py:35 -#: engine/vibes_auth/emailing/models.py:71 -#: engine/vibes_auth/emailing/models.py:121 +#: engine/vibes_auth/emailing/models.py:38 +#: engine/vibes_auth/emailing/models.py:88 msgid "name" msgstr "ชื่อ" -#: engine/vibes_auth/emailing/models.py:36 -msgid "descriptive name for the image" -msgstr "ชื่อเชิงอธิบายสำหรับภาพ" - -#: engine/vibes_auth/emailing/models.py:40 -msgid "image" -msgstr "รูปภาพ" - -#: engine/vibes_auth/emailing/models.py:41 -msgid "image file to use in email templates" -msgstr "ไฟล์ภาพที่จะใช้ในเทมเพลตอีเมล" - -#: engine/vibes_auth/emailing/models.py:47 -msgid "alt text" -msgstr "ข้อความอื่น" - -#: engine/vibes_auth/emailing/models.py:48 -msgid "alternative text for accessibility" -msgstr "ข้อความทางเลือกเพื่อการเข้าถึง" - -#: engine/vibes_auth/emailing/models.py:52 -msgid "email image" -msgstr "รูปภาพอีเมล" - -#: engine/vibes_auth/emailing/models.py:53 -msgid "email images" -msgstr "รูปภาพทางอีเมล" - -#: engine/vibes_auth/emailing/models.py:72 +#: engine/vibes_auth/emailing/models.py:39 msgid "internal name for the template" msgstr "ชื่อภายในสำหรับเทมเพลต" -#: engine/vibes_auth/emailing/models.py:76 +#: engine/vibes_auth/emailing/models.py:43 msgid "slug" msgstr "คนรับใช้" -#: engine/vibes_auth/emailing/models.py:77 +#: engine/vibes_auth/emailing/models.py:44 msgid "unique identifier for the template" msgstr "รหัสประจำตัวที่ไม่ซ้ำกันสำหรับแม่แบบ" -#: engine/vibes_auth/emailing/models.py:81 +#: engine/vibes_auth/emailing/models.py:48 msgid "subject" msgstr "หัวข้อ" -#: engine/vibes_auth/emailing/models.py:82 +#: engine/vibes_auth/emailing/models.py:49 msgid "email subject line - supports {{ variables }}" msgstr "หัวข้ออีเมล - สนับสนุน {{ variables }}" -#: engine/vibes_auth/emailing/models.py:85 -msgid "HTML content" -msgstr "เนื้อหา HTML" +#: engine/vibes_auth/emailing/models.py:52 +msgid "content" +msgstr "เนื้อหา" -#: engine/vibes_auth/emailing/models.py:87 +#: engine/vibes_auth/emailing/models.py:54 msgid "" -"email body content - supports {{ user.first_name }}, {{ user.email }}, {{ " -"project_name }}, {{ unsubscribe_url }}" +"email body in markdown - supports {{ user.first_name }}, {{ user.email }}, " +"{{ project_name }}, {{ unsubscribe_url }}" msgstr "" "เนื้อหาในอีเมล - รองรับ {{ user.first_name }}, {{ user.email }}, {{ " "project_name }}, {{ unsubscribe_url }}" -#: engine/vibes_auth/emailing/models.py:94 +#: engine/vibes_auth/emailing/models.py:61 msgid "plain text content" msgstr "เนื้อหาข้อความธรรมดา" -#: engine/vibes_auth/emailing/models.py:95 +#: engine/vibes_auth/emailing/models.py:62 msgid "plain text fallback (auto-generated if empty)" msgstr "ข้อความธรรมดาสำรอง (สร้างอัตโนมัติหากว่างเปล่า)" -#: engine/vibes_auth/emailing/models.py:100 +#: engine/vibes_auth/emailing/models.py:67 msgid "available variables" msgstr "ตัวแปรที่มีอยู่" -#: engine/vibes_auth/emailing/models.py:101 +#: engine/vibes_auth/emailing/models.py:68 msgid "documentation of available template variables" msgstr "เอกสารประกอบตัวแปรแม่แบบที่มีอยู่" -#: engine/vibes_auth/emailing/models.py:105 +#: engine/vibes_auth/emailing/models.py:72 msgid "email template" msgstr "แม่แบบอีเมล" -#: engine/vibes_auth/emailing/models.py:106 +#: engine/vibes_auth/emailing/models.py:73 msgid "email templates" msgstr "เทมเพลตอีเมล" -#: engine/vibes_auth/emailing/models.py:122 +#: engine/vibes_auth/emailing/models.py:89 msgid "internal name for the campaign" msgstr "ชื่อภายในสำหรับแคมเปญ" -#: engine/vibes_auth/emailing/models.py:129 +#: engine/vibes_auth/emailing/models.py:96 msgid "template" msgstr "แม่แบบ" -#: engine/vibes_auth/emailing/models.py:130 +#: engine/vibes_auth/emailing/models.py:97 msgid "email template to use for this campaign" msgstr "เทมเพลตอีเมลสำหรับใช้ในแคมเปญนี้" -#: engine/vibes_auth/emailing/models.py:136 -#: engine/vibes_auth/emailing/models.py:206 +#: engine/vibes_auth/emailing/models.py:103 +#: engine/vibes_auth/emailing/models.py:173 msgid "status" msgstr "สถานะ" -#: engine/vibes_auth/emailing/models.py:141 +#: engine/vibes_auth/emailing/models.py:108 msgid "scheduled at" msgstr "กำหนดไว้ที่" -#: engine/vibes_auth/emailing/models.py:142 +#: engine/vibes_auth/emailing/models.py:109 msgid "when to send the campaign (leave empty for manual send)" msgstr "เมื่อใดที่จะส่งแคมเปญ (เว้นว่างไว้สำหรับการส่งด้วยตนเอง)" -#: engine/vibes_auth/emailing/models.py:147 -#: engine/vibes_auth/emailing/models.py:211 +#: engine/vibes_auth/emailing/models.py:114 +#: engine/vibes_auth/emailing/models.py:178 msgid "sent at" msgstr "สายแล้ว" -#: engine/vibes_auth/emailing/models.py:148 +#: engine/vibes_auth/emailing/models.py:115 msgid "when the campaign was actually sent" msgstr "เมื่อแคมเปญถูกส่งออกไปจริง ๆ" -#: engine/vibes_auth/emailing/models.py:153 +#: engine/vibes_auth/emailing/models.py:120 msgid "total recipients" msgstr "ผู้รับทั้งหมด" -#: engine/vibes_auth/emailing/models.py:157 +#: engine/vibes_auth/emailing/models.py:124 msgid "sent count" msgstr "จำนวนที่ส่ง" -#: engine/vibes_auth/emailing/models.py:161 +#: engine/vibes_auth/emailing/models.py:128 msgid "failed count" msgstr "ล้มเหลวในการนับ" -#: engine/vibes_auth/emailing/models.py:165 +#: engine/vibes_auth/emailing/models.py:132 msgid "opened count" msgstr "เปิดนับ" -#: engine/vibes_auth/emailing/models.py:169 +#: engine/vibes_auth/emailing/models.py:136 msgid "clicked count" msgstr "จำนวนครั้งที่คลิก" -#: engine/vibes_auth/emailing/models.py:173 +#: engine/vibes_auth/emailing/models.py:140 msgid "email campaign" msgstr "แคมเปญอีเมล" -#: engine/vibes_auth/emailing/models.py:174 +#: engine/vibes_auth/emailing/models.py:141 msgid "email campaigns" msgstr "แคมเปญอีเมล" -#: engine/vibes_auth/emailing/models.py:194 +#: engine/vibes_auth/emailing/models.py:161 msgid "campaign" msgstr "แคมเปญ" -#: engine/vibes_auth/emailing/models.py:200 engine/vibes_auth/models.py:146 +#: engine/vibes_auth/emailing/models.py:167 engine/vibes_auth/models.py:183 msgid "user" msgstr "ผู้ใช้" -#: engine/vibes_auth/emailing/models.py:216 +#: engine/vibes_auth/emailing/models.py:183 msgid "opened at" msgstr "เปิดที่" -#: engine/vibes_auth/emailing/models.py:221 +#: engine/vibes_auth/emailing/models.py:188 msgid "clicked at" msgstr "คลิกที่" -#: engine/vibes_auth/emailing/models.py:227 +#: engine/vibes_auth/emailing/models.py:194 msgid "tracking ID" msgstr "หมายเลขติดตาม" -#: engine/vibes_auth/emailing/models.py:228 +#: engine/vibes_auth/emailing/models.py:195 msgid "unique ID for tracking opens and clicks" msgstr "รหัสประจำตัวที่ไม่ซ้ำกันสำหรับการติดตามการเปิดและการคลิก" -#: engine/vibes_auth/emailing/models.py:233 +#: engine/vibes_auth/emailing/models.py:200 msgid "error message" msgstr "ข้อความแสดงข้อผิดพลาด" -#: engine/vibes_auth/emailing/models.py:234 +#: engine/vibes_auth/emailing/models.py:201 msgid "error details if sending failed" msgstr "รายละเอียดข้อผิดพลาดหากการส่งล้มเหลว" -#: engine/vibes_auth/emailing/models.py:238 +#: engine/vibes_auth/emailing/models.py:205 msgid "campaign recipient" msgstr "ผู้รับแคมเปญ" -#: engine/vibes_auth/emailing/models.py:239 +#: engine/vibes_auth/emailing/models.py:206 msgid "campaign recipients" msgstr "ผู้รับแคมเปญ" @@ -503,73 +616,73 @@ msgstr "คุณได้รับอีเมลนี้เพราะคุ msgid "Unsubscribe" msgstr "ยกเลิกการสมัคร" -#: engine/vibes_auth/emailing/views.py:71 +#: engine/vibes_auth/emailing/views.py:39 msgid "Unsubscribe token is required." msgstr "จำเป็นต้องใช้โทเคนยกเลิกการสมัคร" -#: engine/vibes_auth/emailing/views.py:79 +#: engine/vibes_auth/emailing/views.py:47 msgid "Invalid unsubscribe token format." msgstr "รูปแบบโทเค็นยกเลิกการสมัครไม่ถูกต้อง" -#: engine/vibes_auth/emailing/views.py:87 +#: engine/vibes_auth/emailing/views.py:55 msgid "User not found." msgstr "ไม่พบผู้ใช้" -#: engine/vibes_auth/emailing/views.py:93 -msgid "You are already unsubscribed." -msgstr "คุณได้ยกเลิกการสมัครแล้ว" - -#: engine/vibes_auth/emailing/views.py:101 -msgid "You have been successfully unsubscribed from our emails." -msgstr "คุณได้ยกเลิกการสมัครรับอีเมลจากเราเรียบร้อยแล้ว" - -#: engine/vibes_auth/graphene/mutations.py:46 +#: engine/vibes_auth/graphene/mutations.py:47 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "ผู้ใช้ที่เข้ารหัส uuid ด้วย b64 ซึ่งแนะนำผู้ใช้ใหม่ให้เรามา" -#: engine/vibes_auth/graphene/mutations.py:68 +#: engine/vibes_auth/graphene/mutations.py:70 msgid "password too weak" msgstr "รหัสผ่านอ่อนแอเกินไป" -#: engine/vibes_auth/graphene/mutations.py:128 +#: engine/vibes_auth/graphene/mutations.py:130 msgid "malformed email" msgstr "อีเมลไม่ถูกต้อง" -#: engine/vibes_auth/graphene/mutations.py:140 +#: engine/vibes_auth/graphene/mutations.py:142 #: engine/vibes_auth/serializers.py:117 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "หมายเลขโทรศัพท์ไม่ถูกต้อง: {phone_number}!" -#: engine/vibes_auth/graphene/mutations.py:165 +#: engine/vibes_auth/graphene/mutations.py:167 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "รูปแบบแอตทริบิวต์ไม่ถูกต้อง: {attribute_pair}!" -#: engine/vibes_auth/graphene/mutations.py:182 +#: engine/vibes_auth/graphene/mutations.py:184 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} ไม่พบ: {uuid}!" -#: engine/vibes_auth/graphene/mutations.py:304 -#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180 +#: engine/vibes_auth/graphene/mutations.py:309 +#: engine/vibes_auth/viewsets.py:174 engine/vibes_auth/viewsets.py:198 msgid "activation link is invalid!" msgstr "ลิงก์การเปิดใช้งานไม่ถูกต้อง!" -#: engine/vibes_auth/graphene/mutations.py:307 +#: engine/vibes_auth/graphene/mutations.py:312 msgid "account already activated..." msgstr "บัญชีได้รับการเปิดใช้งานแล้ว..." -#: engine/vibes_auth/graphene/mutations.py:314 -#: engine/vibes_auth/graphene/mutations.py:376 +#: engine/vibes_auth/graphene/mutations.py:319 +#: engine/vibes_auth/graphene/mutations.py:383 msgid "something went wrong: {e!s}" msgstr "เกิดข้อผิดพลาด: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:358 -#: engine/vibes_auth/viewsets.py:106 +#: engine/vibes_auth/graphene/mutations.py:365 +#: engine/vibes_auth/viewsets.py:109 msgid "token is invalid!" msgstr "โทเคนไม่ถูกต้อง!" +#: engine/vibes_auth/graphene/mutations.py:403 +msgid "only image files are allowed (jpg, png, gif, webp)" +msgstr "อนุญาตเฉพาะไฟล์รูปภาพเท่านั้น (jpg, png, gif, webp)" + +#: engine/vibes_auth/graphene/mutations.py:406 +msgid "file size must not exceed 5 MB" +msgstr "ขนาดไฟล์ต้องไม่เกิน 5 MB" + #: engine/vibes_auth/graphene/object_types.py:46 msgid "" "the products this user has viewed most recently (max 48), in " @@ -578,7 +691,7 @@ msgstr "" "สินค้าที่ผู้ใช้รายนี้ดูล่าสุด (สูงสุด 48 รายการ) เรียงตามลำดับเวลาล่าสุด" #: engine/vibes_auth/graphene/object_types.py:49 -#: engine/vibes_auth/models.py:214 +#: engine/vibes_auth/models.py:270 msgid "groups" msgstr "กลุ่ม" @@ -587,7 +700,7 @@ msgid "wishlist" msgstr "รายการสิ่งที่ต้องการ" #: engine/vibes_auth/graphene/object_types.py:56 -#: engine/vibes_auth/models.py:70 +#: engine/vibes_auth/models.py:75 msgid "avatar" msgstr "อวตาร" @@ -624,7 +737,7 @@ msgstr "เรากำลังค้นหาผู้ดำเนินกา msgid "Assignee must be a staff user." msgstr "ผู้รับมอบหมายต้องเป็นผู้ใช้ที่เป็นพนักงานเท่านั้น" -#: engine/vibes_auth/models.py:42 +#: engine/vibes_auth/models.py:44 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -642,124 +755,136 @@ msgstr "" " " "โมเดลผู้ใช้ได้รับการออกแบบมาเพื่อจัดการกรณีการใช้งานเฉพาะสำหรับการจัดการผู้ใช้ที่ดียิ่งขึ้น" -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "email" msgstr "อีเมล" -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "user email address" msgstr "ที่อยู่อีเมลของผู้ใช้" -#: engine/vibes_auth/models.py:55 +#: engine/vibes_auth/models.py:57 msgid "phone_number" msgstr "หมายเลขโทรศัพท์" -#: engine/vibes_auth/models.py:60 +#: engine/vibes_auth/models.py:61 msgid "user phone number" msgstr "หมายเลขโทรศัพท์ผู้ใช้" -#: engine/vibes_auth/models.py:66 +#: engine/vibes_auth/models.py:68 msgid "first_name" msgstr "ชื่อ" -#: engine/vibes_auth/models.py:67 +#: engine/vibes_auth/models.py:71 msgid "last_name" msgstr "นามสกุล" -#: engine/vibes_auth/models.py:73 +#: engine/vibes_auth/models.py:78 msgid "user profile image" msgstr "รูปภาพโปรไฟล์ผู้ใช้" -#: engine/vibes_auth/models.py:78 +#: engine/vibes_auth/models.py:83 msgid "is verified" msgstr "ได้รับการยืนยันแล้ว" -#: engine/vibes_auth/models.py:79 +#: engine/vibes_auth/models.py:84 msgid "user verification status" msgstr "สถานะการยืนยันของผู้ใช้" -#: engine/vibes_auth/models.py:82 +#: engine/vibes_auth/models.py:87 msgid "is_active" msgstr "กำลังใช้งานอยู่" -#: engine/vibes_auth/models.py:84 +#: engine/vibes_auth/models.py:89 msgid "unselect this instead of deleting accounts" msgstr "ยกเลิกการเลือกสิ่งนี้แทนการลบบัญชี" -#: engine/vibes_auth/models.py:87 +#: engine/vibes_auth/models.py:92 msgid "is_subscribed" msgstr "สมัครสมาชิกแล้ว" -#: engine/vibes_auth/models.py:88 +#: engine/vibes_auth/models.py:93 msgid "user's newsletter subscription status" msgstr "สถานะการสมัครสมาชิกจดหมายข่าวของผู้ใช้" -#: engine/vibes_auth/models.py:92 +#: engine/vibes_auth/models.py:98 msgid "activation token" msgstr "โทเค็นการเปิดใช้งาน" -#: engine/vibes_auth/models.py:95 +#: engine/vibes_auth/models.py:103 +msgid "activation token created" +msgstr "สร้างโทเค็นการเปิดใช้งานแล้ว" + +#: engine/vibes_auth/models.py:107 msgid "unsubscribe token" msgstr "โทเคนยกเลิกการสมัคร" -#: engine/vibes_auth/models.py:96 +#: engine/vibes_auth/models.py:108 msgid "token for secure one-click unsubscribe from campaigns" msgstr "" "โทเค็นสำหรับการยกเลิกการสมัครรับข้อมูลจากแคมเปญอย่างปลอดภัยด้วยการคลิกเพียงครั้งเดียว" -#: engine/vibes_auth/models.py:106 +#: engine/vibes_auth/models.py:118 msgid "attributes" msgstr "คุณลักษณะ" -#: engine/vibes_auth/models.py:147 +#: engine/vibes_auth/models.py:184 msgid "users" msgstr "ผู้ใช้" -#: engine/vibes_auth/models.py:154 +#: engine/vibes_auth/models.py:202 +msgid "admin OTP code" +msgstr "รหัส OTP ของผู้ดูแลระบบ" + +#: engine/vibes_auth/models.py:203 +msgid "admin OTP codes" +msgstr "รหัส OTP สำหรับผู้ดูแลระบบ" + +#: engine/vibes_auth/models.py:210 msgid "For anonymous threads" msgstr "สำหรับกระทู้ที่ไม่ระบุชื่อ" -#: engine/vibes_auth/models.py:178 +#: engine/vibes_auth/models.py:234 msgid "Chat thread" msgstr "หัวข้อสนทนา" -#: engine/vibes_auth/models.py:179 +#: engine/vibes_auth/models.py:235 msgid "Chat threads" msgstr "หัวข้อสนทนา" -#: engine/vibes_auth/models.py:185 +#: engine/vibes_auth/models.py:241 msgid "provide user or email for anonymous thread." msgstr "ให้ผู้ใช้หรืออีเมลสำหรับกระทู้ไม่ระบุตัวตน" -#: engine/vibes_auth/models.py:188 +#: engine/vibes_auth/models.py:244 msgid "assignee must be a staff user." msgstr "ผู้รับมอบหมายต้องเป็นผู้ใช้ที่เป็นพนักงานเท่านั้น" -#: engine/vibes_auth/models.py:206 +#: engine/vibes_auth/models.py:262 msgid "Chat message" msgstr "ข้อความแชท" -#: engine/vibes_auth/models.py:207 +#: engine/vibes_auth/models.py:263 msgid "Chat messages" msgstr "ข้อความแชท" -#: engine/vibes_auth/models.py:213 +#: engine/vibes_auth/models.py:269 msgid "group" msgstr "กลุ่ม" -#: engine/vibes_auth/models.py:220 +#: engine/vibes_auth/models.py:276 msgid "outstanding token" msgstr "โทเค็นที่ยังไม่ได้ใช้" -#: engine/vibes_auth/models.py:221 +#: engine/vibes_auth/models.py:277 msgid "outstanding tokens" msgstr "โทเค็นที่ยังไม่ได้ใช้" -#: engine/vibes_auth/models.py:227 +#: engine/vibes_auth/models.py:283 msgid "blacklisted token" msgstr "โทเค็นที่ถูกขึ้นบัญชีดำ" -#: engine/vibes_auth/models.py:228 +#: engine/vibes_auth/models.py:284 msgid "blacklisted tokens" msgstr "โทเค็นที่ถูกขึ้นบัญชีดำ" @@ -801,6 +926,10 @@ msgstr "ไม่มีการอ้างสิทธิ์ uuid ของผ msgid "user does not exist" msgstr "ผู้ใช้ไม่มีอยู่" +#: engine/vibes_auth/templates/admin/verify_otp.html:27 +msgid "Verify" +msgstr "ตรวจสอบ" + #: engine/vibes_auth/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "รีเซ็ตรหัสผ่านของคุณ" @@ -882,12 +1011,12 @@ msgstr "เปิดใช้งานบัญชี" msgid "best regards,
the %(project_name)s team" msgstr "ขอแสดงความนับถือ
ทีมงาน %(project_name)s" -#: engine/vibes_auth/utils/emailing.py:24 +#: engine/vibes_auth/utils/emailing.py:27 #, python-brace-format msgid "{settings.PROJECT_NAME} | Activate Account" msgstr "{settings.PROJECT_NAME} | เปิดใช้งานบัญชี" -#: engine/vibes_auth/utils/emailing.py:63 +#: engine/vibes_auth/utils/emailing.py:66 #, python-brace-format msgid "{settings.PROJECT_NAME} | Reset Password" msgstr "{settings.PROJECT_NAME} | ตั้งค่ารหัสผ่านใหม่" @@ -942,7 +1071,7 @@ msgstr "" msgid "the token is invalid" msgstr "โทเค็นไม่ถูกต้อง" -#: engine/vibes_auth/viewsets.py:44 +#: engine/vibes_auth/viewsets.py:47 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." @@ -954,10 +1083,18 @@ msgstr "" "และการรวมรายการที่ดูล่าสุด คลาสนี้ขยายส่วนผสมและ GenericViewSet " "เพื่อการจัดการ API ที่มีความแข็งแกร่ง" -#: engine/vibes_auth/viewsets.py:113 +#: engine/vibes_auth/viewsets.py:116 msgid "password reset successfully" msgstr "รหัสผ่านได้รับการรีเซ็ตเรียบร้อยแล้ว!" -#: engine/vibes_auth/viewsets.py:161 +#: engine/vibes_auth/viewsets.py:146 +msgid "" +"Account already registered but not yet activated. A new activation email has" +" been sent." +msgstr "" +"บัญชีได้ลงทะเบียนไว้แล้ว แต่ยังไม่ได้เปิดใช้งาน. " +"อีเมลเปิดใช้งานใหม่ได้ถูกส่งไปแล้ว." + +#: engine/vibes_auth/viewsets.py:179 msgid "account already activated!" msgstr "คุณได้เปิดใช้งานบัญชีเรียบร้อยแล้ว..." diff --git a/engine/vibes_auth/locale/tr_TR/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/tr_TR/LC_MESSAGES/django.mo index 77904a13..56c5b582 100644 Binary files a/engine/vibes_auth/locale/tr_TR/LC_MESSAGES/django.mo and b/engine/vibes_auth/locale/tr_TR/LC_MESSAGES/django.mo differ diff --git a/engine/vibes_auth/locale/tr_TR/LC_MESSAGES/django.po b/engine/vibes_auth/locale/tr_TR/LC_MESSAGES/django.po index 3e95350f..4506276a 100644 --- a/engine/vibes_auth/locale/tr_TR/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/tr_TR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 03:06+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,32 +13,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:65 engine/vibes_auth/admin.py:66 +#: engine/vibes_auth/admin.py:64 engine/vibes_auth/admin.py:65 #: engine/vibes_auth/graphene/object_types.py:54 msgid "balance" msgstr "Denge" -#: engine/vibes_auth/admin.py:74 +#: engine/vibes_auth/admin.py:73 msgid "order" msgstr "Sipariş" -#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:51 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:51 msgid "orders" msgstr "Siparişler" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:84 msgid "personal info" msgstr "Kişisel Bilgiler" -#: engine/vibes_auth/admin.py:89 engine/vibes_auth/graphene/object_types.py:50 +#: engine/vibes_auth/admin.py:88 engine/vibes_auth/graphene/object_types.py:50 msgid "permissions" msgstr "İzinler" -#: engine/vibes_auth/admin.py:102 +#: engine/vibes_auth/admin.py:101 msgid "important dates" msgstr "Önemli tarihler" -#: engine/vibes_auth/admin.py:103 +#: engine/vibes_auth/admin.py:102 msgid "additional info" msgstr "Ek Bilgi" @@ -54,79 +54,83 @@ msgstr "Seçili konuları kapatın" msgid "Open selected threads" msgstr "Seçili konuları açın" -#: engine/vibes_auth/admin.py:208 -msgid "Preview" -msgstr "Önizleme" - -#: engine/vibes_auth/admin.py:209 engine/vibes_auth/admin.py:249 -#: engine/vibes_auth/admin.py:326 -msgid "Metadata" -msgstr "Meta veriler" - -#: engine/vibes_auth/admin.py:212 -msgid "preview" -msgstr "ön izleme" - -#: engine/vibes_auth/admin.py:221 -msgid "image preview" -msgstr "görüntü önizlemesi" - -#: engine/vibes_auth/admin.py:241 +#: engine/vibes_auth/admin.py:209 msgid "Content" msgstr "İçerik" -#: engine/vibes_auth/admin.py:243 +#: engine/vibes_auth/admin.py:211 msgid "Documentation" msgstr "Belgeler" -#: engine/vibes_auth/admin.py:313 +#: engine/vibes_auth/admin.py:217 engine/vibes_auth/admin.py:294 +msgid "Metadata" +msgstr "Meta veriler" + +#: engine/vibes_auth/admin.py:281 msgid "Scheduling" msgstr "Planlama" -#: engine/vibes_auth/admin.py:315 +#: engine/vibes_auth/admin.py:283 msgid "Statistics" msgstr "İstatistik" -#: engine/vibes_auth/admin.py:329 +#: engine/vibes_auth/admin.py:297 msgid "stats" msgstr "devlet" -#: engine/vibes_auth/admin.py:335 +#: engine/vibes_auth/admin.py:303 msgid "Prepare recipients (subscribed users)" msgstr "Alıcıları hazırlayın (abone olan kullanıcılar)" -#: engine/vibes_auth/admin.py:343 +#: engine/vibes_auth/admin.py:311 msgid "Campaign '{}' is not in draft status." msgstr "Kampanya '{}' taslak durumunda değildir." -#: engine/vibes_auth/admin.py:350 +#: engine/vibes_auth/admin.py:318 msgid "Preparing recipients for campaign '{}'." msgstr "Alıcıları '{}' kampanyası için hazırlama." -#: engine/vibes_auth/admin.py:354 +#: engine/vibes_auth/admin.py:322 msgid "Send campaign now" msgstr "Kampanyayı şimdi gönder" -#: engine/vibes_auth/admin.py:362 +#: engine/vibes_auth/admin.py:330 msgid "Campaign '{}' cannot be sent (status: {})." msgstr "Kampanya '{}' gönderilemiyor (durum: {})." -#: engine/vibes_auth/admin.py:372 +#: engine/vibes_auth/admin.py:340 msgid "Campaign '{}' has no recipients. Prepare recipients first." msgstr "Kampanya '{}'in alıcısı yok. Önce alıcıları hazırlayın." -#: engine/vibes_auth/admin.py:383 +#: engine/vibes_auth/admin.py:351 msgid "Started sending campaign '{}'." msgstr "'{}' kampanyasını göndermeye başladı." -#: engine/vibes_auth/admin.py:387 +#: engine/vibes_auth/admin.py:355 msgid "Cancel campaign" msgstr "Kampanyayı iptal et" -#: engine/vibes_auth/admin.py:396 +#: engine/vibes_auth/admin.py:364 msgid "{} campaign(s) cancelled." msgstr "{} kampanyası/kampanyaları iptal edildi." +#: engine/vibes_auth/admin_site.py:24 +msgid "Verification code" +msgstr "Doğrulama kodu" + +#: engine/vibes_auth/admin_site.py:62 +msgid "A verification code has been sent to your email." +msgstr "Doğrulama kodu e-postanıza gönderildi." + +#: engine/vibes_auth/admin_site.py:118 +msgid "Invalid or expired code. Please try again." +msgstr "Geçersiz veya süresi dolmuş kod. Lütfen tekrar deneyin." + +#: engine/vibes_auth/admin_site.py:124 +#: engine/vibes_auth/templates/admin/verify_otp.html:10 +msgid "Two-factor authentication" +msgstr "İki faktörlü kimlik doğrulama" + #: engine/vibes_auth/apps.py:8 msgid "Accounting" msgstr "Muhasebe" @@ -151,6 +155,143 @@ msgstr "Personel" msgid "System" msgstr "Sistem" +#: engine/vibes_auth/docs/drf/emailing.py:18 +msgid "" +"UUID token for unsubscribing. This token is unique per user and is included " +"in the unsubscribe link of every campaign email. The token remains constant " +"for each user unless regenerated." +msgstr "" +"Abonelikten çıkmak için UUID jetonu. Bu jeton, kullanıcı başına benzersizdir" +" ve her kampanya e-postasının abonelikten çıkma bağlantısında yer alır. " +"Jeton, yeniden oluşturulmadıkça her kullanıcı için sabit kalır." + +#: engine/vibes_auth/docs/drf/emailing.py:37 +#: engine/vibes_auth/emailing/views.py:69 +msgid "You have been successfully unsubscribed from our emails." +msgstr "E-postalarımızdan başarıyla aboneliğiniz iptal edildi." + +#: engine/vibes_auth/docs/drf/emailing.py:45 +#: engine/vibes_auth/emailing/views.py:61 +msgid "You are already unsubscribed." +msgstr "Zaten abonelikten çıkmış durumdasınız." + +#: engine/vibes_auth/docs/drf/emailing.py:52 +msgid "Unsubscribe from email campaigns" +msgstr "E-posta kampanyalarından çıkmak" + +#: engine/vibes_auth/docs/drf/emailing.py:54 +msgid "" +"Unsubscribe a user from all marketing email campaigns using their unique unsubscribe token.\n" +"\n" +"This endpoint is designed for email client compatibility where clicking a link triggers a GET request. The user will no longer receive promotional emails after successful unsubscription.\n" +"\n" +"**Note:** Transactional emails (order confirmations, password resets, etc.) are not affected by this setting." +msgstr "" +"Kullanıcının benzersiz abonelik iptal jetonunu kullanarak tüm pazarlama " +"e-posta kampanyalarından aboneliğini iptal edin. Bu uç nokta, bir bağlantıya" +" tıklandığında GET isteği tetikleyen e-posta istemcisi uyumluluğu için " +"tasarlanmıştır. Kullanıcı, aboneliği başarıyla iptal ettikten sonra artık " +"promosyon e-postaları almayacaktır. **Not:** İşlem e-postaları (sipariş " +"onayları, şifre sıfırlamaları vb.) bu ayardan etkilenmez." + +#: engine/vibes_auth/docs/drf/emailing.py:66 +#: engine/vibes_auth/docs/drf/emailing.py:146 +msgid "Successfully unsubscribed from email campaigns." +msgstr "E-posta kampanyalarından başarıyla abonelikten çıkarıldınız." + +#: engine/vibes_auth/docs/drf/emailing.py:82 +#: engine/vibes_auth/docs/drf/emailing.py:162 +msgid "Invalid or missing unsubscribe token." +msgstr "Geçersiz veya eksik abonelik iptal jetonu." + +#: engine/vibes_auth/docs/drf/emailing.py:96 +#: engine/vibes_auth/docs/drf/emailing.py:176 +msgid "User associated with the token was not found." +msgstr "Token ile ilişkili kullanıcı bulunamadı." + +#: engine/vibes_auth/docs/drf/emailing.py:118 +msgid "One-Click Unsubscribe (RFC 8058)" +msgstr "Tek Tıkla Abonelikten Çıkma (RFC 8058)" + +#: engine/vibes_auth/docs/drf/emailing.py:120 +msgid "" +"RFC 8058 compliant one-click unsubscribe endpoint for email campaigns.\n" +"\n" +"This endpoint supports the List-Unsubscribe-Post header mechanism defined in RFC 8058, which allows email clients to unsubscribe users with a single click without leaving the email application.\n" +"\n" +"The token can be provided either as a query parameter or in the request body.\n" +"\n" +"**Standards Compliance:**\n" +"- RFC 8058: Signaling One-Click Functionality for List Email Headers\n" +"- RFC 2369: The Use of URLs as Meta-Syntax for Core Mail List Commands\n" +"\n" +"**Note:** Transactional emails are not affected by this setting." +msgstr "" +"E-posta kampanyaları için RFC 8058 uyumlu tek tıklamayla abonelikten çıkma uç noktası. Bu uç nokta, RFC 8058'de tanımlanan List-Unsubscribe-Post başlık mekanizmasını destekler ve e-posta istemcilerinin e-posta uygulamasından çıkmadan tek bir tıklamayla kullanıcıların abonelikten çıkmasını sağlar. Belirteç, sorgu parametresi olarak veya istek gövdesinde sağlanabilir.\n" +"\n" +"**Standartlara Uyumluluk:** - RFC 8058: Liste E-posta Başlıkları için Tek Tıkla İşlevselliği Sinyal Verme - RFC 2369: Temel Posta Listesi Komutları için Meta Sözdizimi Olarak URL'lerin Kullanımı **Not:** İşlem e-postaları bu ayardan etkilenmez." + +#: engine/vibes_auth/docs/drf/emailing.py:137 +msgid "" +"Unsubscribe token (alternative to query parameter). Can be omitted if token " +"is provided in URL." +msgstr "" +"Abonelikten çıkma jetonu (sorgu parametresine alternatif). Jeton URL'de " +"sağlanmışsa atlanabilir." + +#: engine/vibes_auth/docs/drf/emailing.py:200 +msgid "Track email open event" +msgstr "E-posta açma olayını izle" + +#: engine/vibes_auth/docs/drf/emailing.py:202 +msgid "" +"Records when a campaign email is opened by the recipient.\n" +"\n" +"This endpoint is called automatically when the tracking pixel (1x1 transparent GIF) embedded in the email is loaded by the recipient's email client.\n" +"\n" +"**How it works:**\n" +"1. Each campaign email contains a unique tracking pixel URL with a `tid` parameter\n" +"2. When the email is opened and images are loaded, this endpoint is called\n" +"3. The recipient's status is updated to 'opened' and the timestamp is recorded\n" +"4. The campaign's aggregate opened count is updated\n" +"\n" +"**Privacy considerations:**\n" +"- Only the first open is recorded (subsequent opens are ignored)\n" +"- No personal information beyond the tracking ID is logged\n" +"- Users who disable image loading will not trigger this event\n" +"\n" +"**Response:**\n" +"Returns a 1x1 transparent GIF image regardless of whether tracking succeeded, to ensure consistent behavior and prevent information leakage." +msgstr "" +"Alıcı tarafından bir kampanya e-postası açıldığında kayıt yapar. Bu uç nokta, e-postaya gömülü izleme pikseli (1x1 şeffaf GIF) alıcının e-posta istemcisi tarafından yüklendiğinde otomatik olarak çağrılır.\n" +"\n" +"**Nasıl çalışır:** 1. Her kampanya e-postası, `tid` parametresi içeren benzersiz bir izleme pikseli URL'si içerir. 2. E-posta açıldığında ve resimler yüklendiğinde, bu uç nokta çağrılır. 3. Alıcının durumu \"açıldı\" olarak güncellenir ve zaman damgası kaydedilir. 4. Kampanyanın toplam açılma sayısı güncellenir. **Gizlilikle ilgili hususlar:**\n" +"- Yalnızca ilk açılış kaydedilir (sonraki açılışlar yok sayılır) - İzleme kimliği dışında hiçbir kişisel bilgi kaydedilmez - Görüntü yüklemeyi devre dışı bırakan kullanıcılar bu olayı tetiklemez **Yanıt:** Tutarlı davranış sağlamak ve bilgi sızıntısını önlemek için, izleme başarılı olsun ya da olmasın 1x1 şeffaf GIF görüntüsü döndürür." + +#: engine/vibes_auth/docs/drf/emailing.py:223 +msgid "" +"Tracking ID (UUID) unique to each campaign-recipient combination. This ID " +"links the open event to a specific recipient and campaign." +msgstr "" +"Her kampanya-alıcı kombinasyonuna özgü izleme kimliği (UUID). Bu kimlik, " +"açma olayını belirli bir alıcı ve kampanyaya bağlar." + +#: engine/vibes_auth/docs/drf/emailing.py:241 +msgid "" +"1x1 transparent GIF image. Always returned regardless of tracking status to " +"maintain consistent behavior." +msgstr "" +"1x1 şeffaf GIF görüntüsü. Tutarlı davranışı korumak için izleme durumuna " +"bakılmaksızın her zaman döndürülür." + +#: engine/vibes_auth/docs/drf/emailing.py:247 +msgid "" +"Returned when no tracking ID is provided. Note: Invalid tracking IDs still " +"return 200 with the GIF to prevent enumeration attacks." +msgstr "" +"İzleme kimliği sağlanmadığında döndürülür. Not: Geçersiz izleme kimlikleri, " +"numaralandırma saldırılarını önlemek için yine de 200 ile GIF döndürür." + #: engine/vibes_auth/docs/drf/messaging.py:17 msgid "User messages entrypoint" msgstr "Kullanıcı mesajları giriş noktası" @@ -245,9 +386,9 @@ msgid "confirm a user's password reset" msgstr "Bir kullanıcının parola sıfırlamasını onaylama" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:351 +#: engine/vibes_auth/graphene/mutations.py:358 #: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107 -#: engine/vibes_auth/viewsets.py:94 +#: engine/vibes_auth/viewsets.py:97 msgid "passwords do not match" msgstr "Parolalar eşleşmiyor" @@ -300,195 +441,166 @@ msgstr "Açıldı" msgid "Clicked" msgstr "Tıklandı" -#: engine/vibes_auth/emailing/models.py:35 -#: engine/vibes_auth/emailing/models.py:71 -#: engine/vibes_auth/emailing/models.py:121 +#: engine/vibes_auth/emailing/models.py:38 +#: engine/vibes_auth/emailing/models.py:88 msgid "name" msgstr "isim" -#: engine/vibes_auth/emailing/models.py:36 -msgid "descriptive name for the image" -msgstr "görüntü için açıklayıcı ad" - -#: engine/vibes_auth/emailing/models.py:40 -msgid "image" -msgstr "görüntü" - -#: engine/vibes_auth/emailing/models.py:41 -msgid "image file to use in email templates" -msgstr "e-posta şablonlarında kullanılacak resim dosyası" - -#: engine/vibes_auth/emailing/models.py:47 -msgid "alt text" -msgstr "başka metin" - -#: engine/vibes_auth/emailing/models.py:48 -msgid "alternative text for accessibility" -msgstr "erişilebilirlik için alternatif metin" - -#: engine/vibes_auth/emailing/models.py:52 -msgid "email image" -msgstr "e-posta görüntüsü" - -#: engine/vibes_auth/emailing/models.py:53 -msgid "email images" -msgstr "e-posta resimleri" - -#: engine/vibes_auth/emailing/models.py:72 +#: engine/vibes_auth/emailing/models.py:39 msgid "internal name for the template" msgstr "şablonun dahili adı" -#: engine/vibes_auth/emailing/models.py:76 +#: engine/vibes_auth/emailing/models.py:43 msgid "slug" msgstr "slug" -#: engine/vibes_auth/emailing/models.py:77 +#: engine/vibes_auth/emailing/models.py:44 msgid "unique identifier for the template" msgstr "şablon için benzersiz tanımlayıcı" -#: engine/vibes_auth/emailing/models.py:81 +#: engine/vibes_auth/emailing/models.py:48 msgid "subject" msgstr "konu" -#: engine/vibes_auth/emailing/models.py:82 +#: engine/vibes_auth/emailing/models.py:49 msgid "email subject line - supports {{ variables }}" msgstr "e-posta konu satırı - {{ variables }}'ı destekler}}" -#: engine/vibes_auth/emailing/models.py:85 -msgid "HTML content" -msgstr "HTML içeriği" +#: engine/vibes_auth/emailing/models.py:52 +msgid "content" +msgstr "içerik" -#: engine/vibes_auth/emailing/models.py:87 +#: engine/vibes_auth/emailing/models.py:54 msgid "" -"email body content - supports {{ user.first_name }}, {{ user.email }}, {{ " -"project_name }}, {{ unsubscribe_url }}" +"email body in markdown - supports {{ user.first_name }}, {{ user.email }}, " +"{{ project_name }}, {{ unsubscribe_url }}" msgstr "" "e-posta gövdesi içeriği - {{ user.first_name }}, {{ user.email }}, {{ " "project_name }}, {{ unsubscribe_url }} destekler" -#: engine/vibes_auth/emailing/models.py:94 +#: engine/vibes_auth/emailing/models.py:61 msgid "plain text content" msgstr "düz metin içeriği" -#: engine/vibes_auth/emailing/models.py:95 +#: engine/vibes_auth/emailing/models.py:62 msgid "plain text fallback (auto-generated if empty)" msgstr "düz metin yedeği (boşsa otomatik olarak oluşturulur)" -#: engine/vibes_auth/emailing/models.py:100 +#: engine/vibes_auth/emailing/models.py:67 msgid "available variables" msgstr "kullanılabilir değişkenler" -#: engine/vibes_auth/emailing/models.py:101 +#: engine/vibes_auth/emailing/models.py:68 msgid "documentation of available template variables" msgstr "kullanılabilir şablon değişkenlerinin belgelenmesi" -#: engine/vibes_auth/emailing/models.py:105 +#: engine/vibes_auth/emailing/models.py:72 msgid "email template" msgstr "e-posta şablonu" -#: engine/vibes_auth/emailing/models.py:106 +#: engine/vibes_auth/emailing/models.py:73 msgid "email templates" msgstr "e-posta şablonları" -#: engine/vibes_auth/emailing/models.py:122 +#: engine/vibes_auth/emailing/models.py:89 msgid "internal name for the campaign" msgstr "kampanyanın iç adı" -#: engine/vibes_auth/emailing/models.py:129 +#: engine/vibes_auth/emailing/models.py:96 msgid "template" msgstr "şablon" -#: engine/vibes_auth/emailing/models.py:130 +#: engine/vibes_auth/emailing/models.py:97 msgid "email template to use for this campaign" msgstr "Bu kampanya için kullanılacak e-posta şablonu" -#: engine/vibes_auth/emailing/models.py:136 -#: engine/vibes_auth/emailing/models.py:206 +#: engine/vibes_auth/emailing/models.py:103 +#: engine/vibes_auth/emailing/models.py:173 msgid "status" msgstr "durum" -#: engine/vibes_auth/emailing/models.py:141 +#: engine/vibes_auth/emailing/models.py:108 msgid "scheduled at" msgstr "planlanan" -#: engine/vibes_auth/emailing/models.py:142 +#: engine/vibes_auth/emailing/models.py:109 msgid "when to send the campaign (leave empty for manual send)" msgstr "kampanyayı ne zaman gönderecek (manuel gönderim için boş bırakın)" -#: engine/vibes_auth/emailing/models.py:147 -#: engine/vibes_auth/emailing/models.py:211 +#: engine/vibes_auth/emailing/models.py:114 +#: engine/vibes_auth/emailing/models.py:178 msgid "sent at" msgstr "geç" -#: engine/vibes_auth/emailing/models.py:148 +#: engine/vibes_auth/emailing/models.py:115 msgid "when the campaign was actually sent" msgstr "kampanya gerçekten gönderildiğinde" -#: engine/vibes_auth/emailing/models.py:153 +#: engine/vibes_auth/emailing/models.py:120 msgid "total recipients" msgstr "toplam alıcı sayısı" -#: engine/vibes_auth/emailing/models.py:157 +#: engine/vibes_auth/emailing/models.py:124 msgid "sent count" msgstr "gönderilen sayı" -#: engine/vibes_auth/emailing/models.py:161 +#: engine/vibes_auth/emailing/models.py:128 msgid "failed count" msgstr "başarısız sayım" -#: engine/vibes_auth/emailing/models.py:165 +#: engine/vibes_auth/emailing/models.py:132 msgid "opened count" msgstr "açık sayım" -#: engine/vibes_auth/emailing/models.py:169 +#: engine/vibes_auth/emailing/models.py:136 msgid "clicked count" msgstr "tıklama sayısı" -#: engine/vibes_auth/emailing/models.py:173 +#: engine/vibes_auth/emailing/models.py:140 msgid "email campaign" msgstr "e-posta kampanyası" -#: engine/vibes_auth/emailing/models.py:174 +#: engine/vibes_auth/emailing/models.py:141 msgid "email campaigns" msgstr "e-posta kampanyaları" -#: engine/vibes_auth/emailing/models.py:194 +#: engine/vibes_auth/emailing/models.py:161 msgid "campaign" msgstr "kampanya" -#: engine/vibes_auth/emailing/models.py:200 engine/vibes_auth/models.py:146 +#: engine/vibes_auth/emailing/models.py:167 engine/vibes_auth/models.py:183 msgid "user" msgstr "Kullanıcı" -#: engine/vibes_auth/emailing/models.py:216 +#: engine/vibes_auth/emailing/models.py:183 msgid "opened at" msgstr "açıldı" -#: engine/vibes_auth/emailing/models.py:221 +#: engine/vibes_auth/emailing/models.py:188 msgid "clicked at" msgstr "tıklandı" -#: engine/vibes_auth/emailing/models.py:227 +#: engine/vibes_auth/emailing/models.py:194 msgid "tracking ID" msgstr "izleme kimliği" -#: engine/vibes_auth/emailing/models.py:228 +#: engine/vibes_auth/emailing/models.py:195 msgid "unique ID for tracking opens and clicks" msgstr "açılışları ve tıklamaları izlemek için benzersiz kimlik" -#: engine/vibes_auth/emailing/models.py:233 +#: engine/vibes_auth/emailing/models.py:200 msgid "error message" msgstr "hata mesajı" -#: engine/vibes_auth/emailing/models.py:234 +#: engine/vibes_auth/emailing/models.py:201 msgid "error details if sending failed" msgstr "gönderme başarısız olursa hata ayrıntıları" -#: engine/vibes_auth/emailing/models.py:238 +#: engine/vibes_auth/emailing/models.py:205 msgid "campaign recipient" msgstr "kampanya alıcısı" -#: engine/vibes_auth/emailing/models.py:239 +#: engine/vibes_auth/emailing/models.py:206 msgid "campaign recipients" msgstr "kampanya alıcıları" @@ -504,73 +616,73 @@ msgstr "Bu e-postayı, haber bültenimize abone olduğunuz için aldınız." msgid "Unsubscribe" msgstr "Abonelikten çık" -#: engine/vibes_auth/emailing/views.py:71 +#: engine/vibes_auth/emailing/views.py:39 msgid "Unsubscribe token is required." msgstr "Abonelikten çıkma jetonu gereklidir." -#: engine/vibes_auth/emailing/views.py:79 +#: engine/vibes_auth/emailing/views.py:47 msgid "Invalid unsubscribe token format." msgstr "Geçersiz abonelik iptal jetonu biçimi." -#: engine/vibes_auth/emailing/views.py:87 +#: engine/vibes_auth/emailing/views.py:55 msgid "User not found." msgstr "Kullanıcı bulunamadı." -#: engine/vibes_auth/emailing/views.py:93 -msgid "You are already unsubscribed." -msgstr "Zaten abonelikten çıkmış durumdasınız." - -#: engine/vibes_auth/emailing/views.py:101 -msgid "You have been successfully unsubscribed from our emails." -msgstr "E-postalarımızdan başarıyla aboneliğiniz iptal edildi." - -#: engine/vibes_auth/graphene/mutations.py:46 +#: engine/vibes_auth/graphene/mutations.py:47 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "Yeni kullanıcıyı bize yönlendiren kullanıcının b64 kodlu uuid'si." -#: engine/vibes_auth/graphene/mutations.py:68 +#: engine/vibes_auth/graphene/mutations.py:70 msgid "password too weak" msgstr "Şifre çok zayıf" -#: engine/vibes_auth/graphene/mutations.py:128 +#: engine/vibes_auth/graphene/mutations.py:130 msgid "malformed email" msgstr "Hatalı biçimlendirilmiş e-posta" -#: engine/vibes_auth/graphene/mutations.py:140 +#: engine/vibes_auth/graphene/mutations.py:142 #: engine/vibes_auth/serializers.py:117 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Hatalı biçimlendirilmiş telefon numarası: {phone_number}!" -#: engine/vibes_auth/graphene/mutations.py:165 +#: engine/vibes_auth/graphene/mutations.py:167 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Geçersiz öznitelik biçimi: {attribute_pair}!" -#: engine/vibes_auth/graphene/mutations.py:182 +#: engine/vibes_auth/graphene/mutations.py:184 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} mevcut değil: {uuid}!" -#: engine/vibes_auth/graphene/mutations.py:304 -#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180 +#: engine/vibes_auth/graphene/mutations.py:309 +#: engine/vibes_auth/viewsets.py:174 engine/vibes_auth/viewsets.py:198 msgid "activation link is invalid!" msgstr "Aktivasyon bağlantısı geçersiz!" -#: engine/vibes_auth/graphene/mutations.py:307 +#: engine/vibes_auth/graphene/mutations.py:312 msgid "account already activated..." msgstr "Hesap zaten etkinleştirildi..." -#: engine/vibes_auth/graphene/mutations.py:314 -#: engine/vibes_auth/graphene/mutations.py:376 +#: engine/vibes_auth/graphene/mutations.py:319 +#: engine/vibes_auth/graphene/mutations.py:383 msgid "something went wrong: {e!s}" msgstr "Bir şeyler ters gitti: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:358 -#: engine/vibes_auth/viewsets.py:106 +#: engine/vibes_auth/graphene/mutations.py:365 +#: engine/vibes_auth/viewsets.py:109 msgid "token is invalid!" msgstr "Jeton geçersiz!" +#: engine/vibes_auth/graphene/mutations.py:403 +msgid "only image files are allowed (jpg, png, gif, webp)" +msgstr "Yalnızca görüntü dosyaları izin verilir (jpg, png, gif, webp)" + +#: engine/vibes_auth/graphene/mutations.py:406 +msgid "file size must not exceed 5 MB" +msgstr "Dosya boyutu 5 MB'yi geçmemelidir." + #: engine/vibes_auth/graphene/object_types.py:46 msgid "" "the products this user has viewed most recently (max 48), in " @@ -580,7 +692,7 @@ msgstr "" "sırayla." #: engine/vibes_auth/graphene/object_types.py:49 -#: engine/vibes_auth/models.py:214 +#: engine/vibes_auth/models.py:270 msgid "groups" msgstr "Gruplar" @@ -589,7 +701,7 @@ msgid "wishlist" msgstr "İstek Listesi" #: engine/vibes_auth/graphene/object_types.py:56 -#: engine/vibes_auth/models.py:70 +#: engine/vibes_auth/models.py:75 msgid "avatar" msgstr "Avatar" @@ -626,7 +738,7 @@ msgstr "Size cevap verecek operatörü arıyoruz, bekleyin!" msgid "Assignee must be a staff user." msgstr "Atanan kişi bir personel kullanıcısı olmalıdır." -#: engine/vibes_auth/models.py:42 +#: engine/vibes_auth/models.py:44 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -645,125 +757,137 @@ msgstr "" "kullanıcı yönetimi için belirli kullanım durumlarını ele almak üzere " "tasarlanmıştır." -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "email" msgstr "E-posta" -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "user email address" msgstr "Kullanıcının e-posta adresi" -#: engine/vibes_auth/models.py:55 +#: engine/vibes_auth/models.py:57 msgid "phone_number" msgstr "Telefon Numarası" -#: engine/vibes_auth/models.py:60 +#: engine/vibes_auth/models.py:61 msgid "user phone number" msgstr "Kullanıcı telefon numarası" -#: engine/vibes_auth/models.py:66 +#: engine/vibes_auth/models.py:68 msgid "first_name" msgstr "İlk isim" -#: engine/vibes_auth/models.py:67 +#: engine/vibes_auth/models.py:71 msgid "last_name" msgstr "Soyadı" -#: engine/vibes_auth/models.py:73 +#: engine/vibes_auth/models.py:78 msgid "user profile image" msgstr "Kullanıcı profili resmi" -#: engine/vibes_auth/models.py:78 +#: engine/vibes_auth/models.py:83 msgid "is verified" msgstr "Doğrulandı" -#: engine/vibes_auth/models.py:79 +#: engine/vibes_auth/models.py:84 msgid "user verification status" msgstr "Kullanıcının doğrulama durumu" -#: engine/vibes_auth/models.py:82 +#: engine/vibes_auth/models.py:87 msgid "is_active" msgstr "Aktif" -#: engine/vibes_auth/models.py:84 +#: engine/vibes_auth/models.py:89 msgid "unselect this instead of deleting accounts" msgstr "Hesapları silmek yerine bunun seçimini kaldırın" -#: engine/vibes_auth/models.py:87 +#: engine/vibes_auth/models.py:92 msgid "is_subscribed" msgstr "Abone olundu" -#: engine/vibes_auth/models.py:88 +#: engine/vibes_auth/models.py:93 msgid "user's newsletter subscription status" msgstr "Kullanıcının haber bülteni abonelik durumu" -#: engine/vibes_auth/models.py:92 +#: engine/vibes_auth/models.py:98 msgid "activation token" msgstr "Etkinleştirme belirteci" -#: engine/vibes_auth/models.py:95 +#: engine/vibes_auth/models.py:103 +msgid "activation token created" +msgstr "Etkinleştirme jetonu oluşturuldu" + +#: engine/vibes_auth/models.py:107 msgid "unsubscribe token" msgstr "abonelikten çıkma jetonu" -#: engine/vibes_auth/models.py:96 +#: engine/vibes_auth/models.py:108 msgid "token for secure one-click unsubscribe from campaigns" msgstr "" "kampanyalardan tek tıklamayla güvenli bir şekilde abonelikten çıkmak için " "jeton" -#: engine/vibes_auth/models.py:106 +#: engine/vibes_auth/models.py:118 msgid "attributes" msgstr "Nitelikler" -#: engine/vibes_auth/models.py:147 +#: engine/vibes_auth/models.py:184 msgid "users" msgstr "Kullanıcılar" -#: engine/vibes_auth/models.py:154 +#: engine/vibes_auth/models.py:202 +msgid "admin OTP code" +msgstr "Yönetici OTP kodu" + +#: engine/vibes_auth/models.py:203 +msgid "admin OTP codes" +msgstr "Yönetici OTP kodları" + +#: engine/vibes_auth/models.py:210 msgid "For anonymous threads" msgstr "Anonim konular için" -#: engine/vibes_auth/models.py:178 +#: engine/vibes_auth/models.py:234 msgid "Chat thread" msgstr "Sohbet başlığı" -#: engine/vibes_auth/models.py:179 +#: engine/vibes_auth/models.py:235 msgid "Chat threads" msgstr "Sohbet konuları" -#: engine/vibes_auth/models.py:185 +#: engine/vibes_auth/models.py:241 msgid "provide user or email for anonymous thread." msgstr "anonim konu için kullanıcı veya e-posta sağlayın." -#: engine/vibes_auth/models.py:188 +#: engine/vibes_auth/models.py:244 msgid "assignee must be a staff user." msgstr "atanan kişi bir personel kullanıcısı olmalıdır." -#: engine/vibes_auth/models.py:206 +#: engine/vibes_auth/models.py:262 msgid "Chat message" msgstr "Sohbet mesajı" -#: engine/vibes_auth/models.py:207 +#: engine/vibes_auth/models.py:263 msgid "Chat messages" msgstr "Sohbet mesajları" -#: engine/vibes_auth/models.py:213 +#: engine/vibes_auth/models.py:269 msgid "group" msgstr "Grup" -#: engine/vibes_auth/models.py:220 +#: engine/vibes_auth/models.py:276 msgid "outstanding token" msgstr "Olağanüstü belirteç" -#: engine/vibes_auth/models.py:221 +#: engine/vibes_auth/models.py:277 msgid "outstanding tokens" msgstr "Ödenmemiş jetonlar" -#: engine/vibes_auth/models.py:227 +#: engine/vibes_auth/models.py:283 msgid "blacklisted token" msgstr "Kara listeye alınmış belirteç" -#: engine/vibes_auth/models.py:228 +#: engine/vibes_auth/models.py:284 msgid "blacklisted tokens" msgstr "Kara listeye alınmış belirteçler" @@ -805,6 +929,10 @@ msgstr "Belirteçte kullanıcı uuid talebi yok" msgid "user does not exist" msgstr "Kullanıcı mevcut değil" +#: engine/vibes_auth/templates/admin/verify_otp.html:27 +msgid "Verify" +msgstr "Doğrula" + #: engine/vibes_auth/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "Şifrenizi sıfırlayın" @@ -890,12 +1018,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "Saygılarımla,
the %(project_name)s team" -#: engine/vibes_auth/utils/emailing.py:24 +#: engine/vibes_auth/utils/emailing.py:27 #, python-brace-format msgid "{settings.PROJECT_NAME} | Activate Account" msgstr "{settings.PROJECT_NAME} | Hesabı Etkinleştir" -#: engine/vibes_auth/utils/emailing.py:63 +#: engine/vibes_auth/utils/emailing.py:66 #, python-brace-format msgid "{settings.PROJECT_NAME} | Reset Password" msgstr "{settings.PROJECT_NAME} | Şifreyi Sıfırla" @@ -950,7 +1078,7 @@ msgstr "" msgid "the token is invalid" msgstr "Belirteç geçersiz" -#: engine/vibes_auth/viewsets.py:44 +#: engine/vibes_auth/viewsets.py:47 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." @@ -958,10 +1086,18 @@ 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." -#: engine/vibes_auth/viewsets.py:113 +#: engine/vibes_auth/viewsets.py:116 msgid "password reset successfully" msgstr "Şifre başarıyla sıfırlandı!" -#: engine/vibes_auth/viewsets.py:161 +#: engine/vibes_auth/viewsets.py:146 +msgid "" +"Account already registered but not yet activated. A new activation email has" +" been sent." +msgstr "" +"Hesap zaten kayıtlı ancak henüz etkinleştirilmemiştir. Yeni bir " +"etkinleştirme e-postası gönderilmiştir." + +#: engine/vibes_auth/viewsets.py:179 msgid "account already activated!" msgstr "Hesabı zaten etkinleştirdiniz..." diff --git a/engine/vibes_auth/locale/vi_VN/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/vi_VN/LC_MESSAGES/django.mo index 8aa4b9ee..a3c19e13 100644 Binary files a/engine/vibes_auth/locale/vi_VN/LC_MESSAGES/django.mo and b/engine/vibes_auth/locale/vi_VN/LC_MESSAGES/django.mo differ diff --git a/engine/vibes_auth/locale/vi_VN/LC_MESSAGES/django.po b/engine/vibes_auth/locale/vi_VN/LC_MESSAGES/django.po index 5137b9ca..1e010011 100644 --- a/engine/vibes_auth/locale/vi_VN/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/vi_VN/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 03:06+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,32 +13,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:65 engine/vibes_auth/admin.py:66 +#: engine/vibes_auth/admin.py:64 engine/vibes_auth/admin.py:65 #: engine/vibes_auth/graphene/object_types.py:54 msgid "balance" msgstr "Cân bằng" -#: engine/vibes_auth/admin.py:74 +#: engine/vibes_auth/admin.py:73 msgid "order" msgstr "Đặt hàng" -#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:51 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:51 msgid "orders" msgstr "Đơn hàng" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:84 msgid "personal info" msgstr "Thông tin cá nhân" -#: engine/vibes_auth/admin.py:89 engine/vibes_auth/graphene/object_types.py:50 +#: engine/vibes_auth/admin.py:88 engine/vibes_auth/graphene/object_types.py:50 msgid "permissions" msgstr "Quyền" -#: engine/vibes_auth/admin.py:102 +#: engine/vibes_auth/admin.py:101 msgid "important dates" msgstr "Các ngày quan trọng" -#: engine/vibes_auth/admin.py:103 +#: engine/vibes_auth/admin.py:102 msgid "additional info" msgstr "Thông tin bổ sung" @@ -54,81 +54,85 @@ msgstr "Đóng các chủ đề đã chọn" msgid "Open selected threads" msgstr "Mở các chủ đề đã chọn" -#: engine/vibes_auth/admin.py:208 -msgid "Preview" -msgstr "Xem trước" - -#: engine/vibes_auth/admin.py:209 engine/vibes_auth/admin.py:249 -#: engine/vibes_auth/admin.py:326 -msgid "Metadata" -msgstr "Siêu dữ liệu" - -#: engine/vibes_auth/admin.py:212 -msgid "preview" -msgstr "Xem trước" - -#: engine/vibes_auth/admin.py:221 -msgid "image preview" -msgstr "Xem trước hình ảnh" - -#: engine/vibes_auth/admin.py:241 +#: engine/vibes_auth/admin.py:209 msgid "Content" msgstr "Nội dung" -#: engine/vibes_auth/admin.py:243 +#: engine/vibes_auth/admin.py:211 msgid "Documentation" msgstr "Tài liệu" -#: engine/vibes_auth/admin.py:313 +#: engine/vibes_auth/admin.py:217 engine/vibes_auth/admin.py:294 +msgid "Metadata" +msgstr "Siêu dữ liệu" + +#: engine/vibes_auth/admin.py:281 msgid "Scheduling" msgstr "Lập lịch" -#: engine/vibes_auth/admin.py:315 +#: engine/vibes_auth/admin.py:283 msgid "Statistics" msgstr "Thống kê" -#: engine/vibes_auth/admin.py:329 +#: engine/vibes_auth/admin.py:297 msgid "stats" msgstr "nhà nước" -#: engine/vibes_auth/admin.py:335 +#: engine/vibes_auth/admin.py:303 msgid "Prepare recipients (subscribed users)" msgstr "Chuẩn bị danh sách người nhận (người dùng đã đăng ký)" -#: engine/vibes_auth/admin.py:343 +#: engine/vibes_auth/admin.py:311 msgid "Campaign '{}' is not in draft status." msgstr "Chiến dịch '{}' không ở trạng thái bản nháp." -#: engine/vibes_auth/admin.py:350 +#: engine/vibes_auth/admin.py:318 msgid "Preparing recipients for campaign '{}'." msgstr "Chuẩn bị cho người nhận tham gia chiến dịch '{}'." -#: engine/vibes_auth/admin.py:354 +#: engine/vibes_auth/admin.py:322 msgid "Send campaign now" msgstr "Gửi chiến dịch ngay bây giờ" -#: engine/vibes_auth/admin.py:362 +#: engine/vibes_auth/admin.py:330 msgid "Campaign '{}' cannot be sent (status: {})." msgstr "Chiến dịch '{}' không thể được gửi (trạng thái: {})." -#: engine/vibes_auth/admin.py:372 +#: engine/vibes_auth/admin.py:340 msgid "Campaign '{}' has no recipients. Prepare recipients first." msgstr "" "Chiến dịch '{}' không có người nhận. Vui lòng chuẩn bị danh sách người nhận " "trước." -#: engine/vibes_auth/admin.py:383 +#: engine/vibes_auth/admin.py:351 msgid "Started sending campaign '{}'." msgstr "Đã bắt đầu gửi chiến dịch '{}'." -#: engine/vibes_auth/admin.py:387 +#: engine/vibes_auth/admin.py:355 msgid "Cancel campaign" msgstr "Hủy chiến dịch" -#: engine/vibes_auth/admin.py:396 +#: engine/vibes_auth/admin.py:364 msgid "{} campaign(s) cancelled." msgstr "{} chiến dịch đã bị hủy." +#: engine/vibes_auth/admin_site.py:24 +msgid "Verification code" +msgstr "Mã xác minh" + +#: engine/vibes_auth/admin_site.py:62 +msgid "A verification code has been sent to your email." +msgstr "Một mã xác minh đã được gửi đến email của bạn." + +#: engine/vibes_auth/admin_site.py:118 +msgid "Invalid or expired code. Please try again." +msgstr "Mã không hợp lệ hoặc đã hết hạn. Vui lòng thử lại." + +#: engine/vibes_auth/admin_site.py:124 +#: engine/vibes_auth/templates/admin/verify_otp.html:10 +msgid "Two-factor authentication" +msgstr "Xác thực hai yếu tố" + #: engine/vibes_auth/apps.py:8 msgid "Accounting" msgstr "Kế toán" @@ -153,6 +157,144 @@ msgstr "Nhân viên" msgid "System" msgstr "Hệ thống" +#: engine/vibes_auth/docs/drf/emailing.py:18 +msgid "" +"UUID token for unsubscribing. This token is unique per user and is included " +"in the unsubscribe link of every campaign email. The token remains constant " +"for each user unless regenerated." +msgstr "" +"Token UUID để hủy đăng ký. Token này là duy nhất cho mỗi người dùng và được " +"bao gồm trong liên kết hủy đăng ký của mỗi email chiến dịch. Token này sẽ " +"không thay đổi cho mỗi người dùng trừ khi được tạo lại." + +#: engine/vibes_auth/docs/drf/emailing.py:37 +#: engine/vibes_auth/emailing/views.py:69 +msgid "You have been successfully unsubscribed from our emails." +msgstr "Bạn đã hủy đăng ký nhận email của chúng tôi thành công." + +#: engine/vibes_auth/docs/drf/emailing.py:45 +#: engine/vibes_auth/emailing/views.py:61 +msgid "You are already unsubscribed." +msgstr "Bạn đã hủy đăng ký." + +#: engine/vibes_auth/docs/drf/emailing.py:52 +msgid "Unsubscribe from email campaigns" +msgstr "Hủy đăng ký khỏi các chiến dịch email" + +#: engine/vibes_auth/docs/drf/emailing.py:54 +msgid "" +"Unsubscribe a user from all marketing email campaigns using their unique unsubscribe token.\n" +"\n" +"This endpoint is designed for email client compatibility where clicking a link triggers a GET request. The user will no longer receive promotional emails after successful unsubscription.\n" +"\n" +"**Note:** Transactional emails (order confirmations, password resets, etc.) are not affected by this setting." +msgstr "" +"Hủy đăng ký người dùng khỏi tất cả các chiến dịch email tiếp thị bằng mã hủy" +" đăng ký duy nhất của họ. Điểm cuối này được thiết kế để tương thích với các" +" ứng dụng email, nơi việc nhấp vào liên kết sẽ kích hoạt yêu cầu GET. Người " +"dùng sẽ không còn nhận được email quảng cáo sau khi hủy đăng ký thành công. " +"**Lưu ý:** Email giao dịch (xác nhận đơn hàng, đặt lại mật khẩu, v.v.) không" +" bị ảnh hưởng bởi cài đặt này." + +#: engine/vibes_auth/docs/drf/emailing.py:66 +#: engine/vibes_auth/docs/drf/emailing.py:146 +msgid "Successfully unsubscribed from email campaigns." +msgstr "Đã hủy đăng ký thành công khỏi các chiến dịch email." + +#: engine/vibes_auth/docs/drf/emailing.py:82 +#: engine/vibes_auth/docs/drf/emailing.py:162 +msgid "Invalid or missing unsubscribe token." +msgstr "Mã hủy đăng ký không hợp lệ hoặc thiếu." + +#: engine/vibes_auth/docs/drf/emailing.py:96 +#: engine/vibes_auth/docs/drf/emailing.py:176 +msgid "User associated with the token was not found." +msgstr "Người dùng liên kết với token không được tìm thấy." + +#: engine/vibes_auth/docs/drf/emailing.py:118 +msgid "One-Click Unsubscribe (RFC 8058)" +msgstr "Hủy đăng ký chỉ với một cú nhấp chuột (RFC 8058)" + +#: engine/vibes_auth/docs/drf/emailing.py:120 +msgid "" +"RFC 8058 compliant one-click unsubscribe endpoint for email campaigns.\n" +"\n" +"This endpoint supports the List-Unsubscribe-Post header mechanism defined in RFC 8058, which allows email clients to unsubscribe users with a single click without leaving the email application.\n" +"\n" +"The token can be provided either as a query parameter or in the request body.\n" +"\n" +"**Standards Compliance:**\n" +"- RFC 8058: Signaling One-Click Functionality for List Email Headers\n" +"- RFC 2369: The Use of URLs as Meta-Syntax for Core Mail List Commands\n" +"\n" +"**Note:** Transactional emails are not affected by this setting." +msgstr "" +"Điểm cuối hủy đăng ký một cú nhấp chuột tuân thủ RFC 8058 cho các chiến dịch email. Điểm cuối này hỗ trợ cơ chế tiêu đề List-Unsubscribe-Post được định nghĩa trong RFC 8058, cho phép các ứng dụng email hủy đăng ký người dùng chỉ với một cú nhấp chuột mà không cần rời khỏi ứng dụng email. Token có thể được cung cấp dưới dạng tham số truy vấn hoặc trong phần thân yêu cầu.\n" +"\n" +"**Tuân thủ tiêu chuẩn:** - RFC 8058: Tín hiệu chức năng một cú nhấp chuột cho tiêu đề danh sách email - RFC 2369: Sử dụng URL làm cú pháp meta cho các lệnh danh sách email cơ bản **Lưu ý:** Email giao dịch không bị ảnh hưởng bởi cài đặt này." + +#: engine/vibes_auth/docs/drf/emailing.py:137 +msgid "" +"Unsubscribe token (alternative to query parameter). Can be omitted if token " +"is provided in URL." +msgstr "" +"Token hủy đăng ký (thay thế cho tham số truy vấn). Có thể bỏ qua nếu token " +"đã được cung cấp trong URL." + +#: engine/vibes_auth/docs/drf/emailing.py:200 +msgid "Track email open event" +msgstr "Theo dõi sự kiện mở email" + +#: engine/vibes_auth/docs/drf/emailing.py:202 +msgid "" +"Records when a campaign email is opened by the recipient.\n" +"\n" +"This endpoint is called automatically when the tracking pixel (1x1 transparent GIF) embedded in the email is loaded by the recipient's email client.\n" +"\n" +"**How it works:**\n" +"1. Each campaign email contains a unique tracking pixel URL with a `tid` parameter\n" +"2. When the email is opened and images are loaded, this endpoint is called\n" +"3. The recipient's status is updated to 'opened' and the timestamp is recorded\n" +"4. The campaign's aggregate opened count is updated\n" +"\n" +"**Privacy considerations:**\n" +"- Only the first open is recorded (subsequent opens are ignored)\n" +"- No personal information beyond the tracking ID is logged\n" +"- Users who disable image loading will not trigger this event\n" +"\n" +"**Response:**\n" +"Returns a 1x1 transparent GIF image regardless of whether tracking succeeded, to ensure consistent behavior and prevent information leakage." +msgstr "" +"Ghi lại thời điểm email chiến dịch được người nhận mở. Điểm cuối này được gọi tự động khi pixel theo dõi (GIF trong suốt 1x1) được nhúng trong email được trình duyệt email của người nhận tải xuống.\n" +"\n" +"**Cách hoạt động:** 1. Mỗi email chiến dịch chứa một URL pixel theo dõi duy nhất với tham số `tid` 2. Khi email được mở và hình ảnh được tải, điểm cuối này được gọi 3. Trạng thái của người nhận được cập nhật thành 'đã mở' và thời gian ghi lại 4. Số lần mở tổng hợp của chiến dịch được cập nhật **Xem xét về quyền riêng tư:**\n" +"- Chỉ lần mở đầu tiên được ghi lại (các lần mở sau đó bị bỏ qua) - Không ghi lại thông tin cá nhân ngoài ID theo dõi - Người dùng tắt tính năng tải hình ảnh sẽ không kích hoạt sự kiện này **Phản hồi:** Trả về hình ảnh GIF trong suốt 1x1 bất kể việc theo dõi thành công hay không, để đảm bảo hành vi nhất quán và ngăn chặn rò rỉ thông tin." + +#: engine/vibes_auth/docs/drf/emailing.py:223 +msgid "" +"Tracking ID (UUID) unique to each campaign-recipient combination. This ID " +"links the open event to a specific recipient and campaign." +msgstr "" +"Mã theo dõi (UUID) duy nhất cho mỗi cặp chiến dịch-người nhận. Mã này liên " +"kết sự kiện mở với một người nhận cụ thể và chiến dịch." + +#: engine/vibes_auth/docs/drf/emailing.py:241 +msgid "" +"1x1 transparent GIF image. Always returned regardless of tracking status to " +"maintain consistent behavior." +msgstr "" +"Hình ảnh GIF trong suốt 1x1. Luôn được trả về bất kể trạng thái theo dõi để " +"duy trì hành vi nhất quán." + +#: engine/vibes_auth/docs/drf/emailing.py:247 +msgid "" +"Returned when no tracking ID is provided. Note: Invalid tracking IDs still " +"return 200 with the GIF to prevent enumeration attacks." +msgstr "" +"Trả về khi không có mã theo dõi được cung cấp. Lưu ý: Các mã theo dõi không " +"hợp lệ vẫn trả về mã trạng thái 200 kèm theo GIF để ngăn chặn các cuộc tấn " +"công liệt kê." + #: engine/vibes_auth/docs/drf/messaging.py:17 msgid "User messages entrypoint" msgstr "Điểm nhập tin nhắn của người dùng" @@ -246,9 +388,9 @@ msgid "confirm a user's password reset" msgstr "Xác nhận việc đặt lại mật khẩu của người dùng" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:351 +#: engine/vibes_auth/graphene/mutations.py:358 #: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107 -#: engine/vibes_auth/viewsets.py:94 +#: engine/vibes_auth/viewsets.py:97 msgid "passwords do not match" msgstr "Mật khẩu không khớp." @@ -302,195 +444,166 @@ msgstr "Đã mở" msgid "Clicked" msgstr "Đã nhấp chuột" -#: engine/vibes_auth/emailing/models.py:35 -#: engine/vibes_auth/emailing/models.py:71 -#: engine/vibes_auth/emailing/models.py:121 +#: engine/vibes_auth/emailing/models.py:38 +#: engine/vibes_auth/emailing/models.py:88 msgid "name" msgstr "tên" -#: engine/vibes_auth/emailing/models.py:36 -msgid "descriptive name for the image" -msgstr "Tên mô tả cho hình ảnh" - -#: engine/vibes_auth/emailing/models.py:40 -msgid "image" -msgstr "hình ảnh" - -#: engine/vibes_auth/emailing/models.py:41 -msgid "image file to use in email templates" -msgstr "Tệp hình ảnh để sử dụng trong mẫu email" - -#: engine/vibes_auth/emailing/models.py:47 -msgid "alt text" -msgstr "văn bản khác" - -#: engine/vibes_auth/emailing/models.py:48 -msgid "alternative text for accessibility" -msgstr "Văn bản thay thế cho tính năng truy cập" - -#: engine/vibes_auth/emailing/models.py:52 -msgid "email image" -msgstr "Hình ảnh trong email" - -#: engine/vibes_auth/emailing/models.py:53 -msgid "email images" -msgstr "Hình ảnh trong email" - -#: engine/vibes_auth/emailing/models.py:72 +#: engine/vibes_auth/emailing/models.py:39 msgid "internal name for the template" msgstr "Tên nội bộ cho mẫu" -#: engine/vibes_auth/emailing/models.py:76 +#: engine/vibes_auth/emailing/models.py:43 msgid "slug" msgstr "slug" -#: engine/vibes_auth/emailing/models.py:77 +#: engine/vibes_auth/emailing/models.py:44 msgid "unique identifier for the template" msgstr "Mã định danh duy nhất cho mẫu" -#: engine/vibes_auth/emailing/models.py:81 +#: engine/vibes_auth/emailing/models.py:48 msgid "subject" msgstr "chủ đề" -#: engine/vibes_auth/emailing/models.py:82 +#: engine/vibes_auth/emailing/models.py:49 msgid "email subject line - supports {{ variables }}" msgstr "Tiêu đề email - Hỗ trợ {{ variables }}" -#: engine/vibes_auth/emailing/models.py:85 -msgid "HTML content" -msgstr "Nội dung HTML" +#: engine/vibes_auth/emailing/models.py:52 +msgid "content" +msgstr "nội dung" -#: engine/vibes_auth/emailing/models.py:87 +#: engine/vibes_auth/emailing/models.py:54 msgid "" -"email body content - supports {{ user.first_name }}, {{ user.email }}, {{ " -"project_name }}, {{ unsubscribe_url }}" +"email body in markdown - supports {{ user.first_name }}, {{ user.email }}, " +"{{ project_name }}, {{ unsubscribe_url }}" msgstr "" "Nội dung thân email - hỗ trợ {{ user.first_name }}, {{ user.email }}, {{ " "project_name }}, {{ unsubscribe_url }}" -#: engine/vibes_auth/emailing/models.py:94 +#: engine/vibes_auth/emailing/models.py:61 msgid "plain text content" msgstr "Nội dung văn bản thuần túy" -#: engine/vibes_auth/emailing/models.py:95 +#: engine/vibes_auth/emailing/models.py:62 msgid "plain text fallback (auto-generated if empty)" msgstr "Nội dung văn bản thuần túy (được tạo tự động nếu trống)" -#: engine/vibes_auth/emailing/models.py:100 +#: engine/vibes_auth/emailing/models.py:67 msgid "available variables" msgstr "Các biến có sẵn" -#: engine/vibes_auth/emailing/models.py:101 +#: engine/vibes_auth/emailing/models.py:68 msgid "documentation of available template variables" msgstr "Tài liệu mô tả các biến mẫu có sẵn" -#: engine/vibes_auth/emailing/models.py:105 +#: engine/vibes_auth/emailing/models.py:72 msgid "email template" msgstr "Mẫu email" -#: engine/vibes_auth/emailing/models.py:106 +#: engine/vibes_auth/emailing/models.py:73 msgid "email templates" msgstr "Mẫu email" -#: engine/vibes_auth/emailing/models.py:122 +#: engine/vibes_auth/emailing/models.py:89 msgid "internal name for the campaign" msgstr "Tên nội bộ cho chiến dịch" -#: engine/vibes_auth/emailing/models.py:129 +#: engine/vibes_auth/emailing/models.py:96 msgid "template" msgstr "mẫu" -#: engine/vibes_auth/emailing/models.py:130 +#: engine/vibes_auth/emailing/models.py:97 msgid "email template to use for this campaign" msgstr "Mẫu email để sử dụng cho chiến dịch này" -#: engine/vibes_auth/emailing/models.py:136 -#: engine/vibes_auth/emailing/models.py:206 +#: engine/vibes_auth/emailing/models.py:103 +#: engine/vibes_auth/emailing/models.py:173 msgid "status" msgstr "tình trạng" -#: engine/vibes_auth/emailing/models.py:141 +#: engine/vibes_auth/emailing/models.py:108 msgid "scheduled at" msgstr "được lên lịch vào" -#: engine/vibes_auth/emailing/models.py:142 +#: engine/vibes_auth/emailing/models.py:109 msgid "when to send the campaign (leave empty for manual send)" msgstr "Thời điểm gửi chiến dịch (để trống nếu muốn gửi thủ công)" -#: engine/vibes_auth/emailing/models.py:147 -#: engine/vibes_auth/emailing/models.py:211 +#: engine/vibes_auth/emailing/models.py:114 +#: engine/vibes_auth/emailing/models.py:178 msgid "sent at" msgstr "gửi" -#: engine/vibes_auth/emailing/models.py:148 +#: engine/vibes_auth/emailing/models.py:115 msgid "when the campaign was actually sent" msgstr "Khi chiến dịch thực sự được gửi đi" -#: engine/vibes_auth/emailing/models.py:153 +#: engine/vibes_auth/emailing/models.py:120 msgid "total recipients" msgstr "Tổng số người nhận" -#: engine/vibes_auth/emailing/models.py:157 +#: engine/vibes_auth/emailing/models.py:124 msgid "sent count" msgstr "Số lượng tin nhắn đã gửi" -#: engine/vibes_auth/emailing/models.py:161 +#: engine/vibes_auth/emailing/models.py:128 msgid "failed count" msgstr "Số lần đếm không thành công" -#: engine/vibes_auth/emailing/models.py:165 +#: engine/vibes_auth/emailing/models.py:132 msgid "opened count" msgstr "Số lượng đã mở" -#: engine/vibes_auth/emailing/models.py:169 +#: engine/vibes_auth/emailing/models.py:136 msgid "clicked count" msgstr "Số lần nhấp chuột" -#: engine/vibes_auth/emailing/models.py:173 +#: engine/vibes_auth/emailing/models.py:140 msgid "email campaign" msgstr "Chiến dịch email" -#: engine/vibes_auth/emailing/models.py:174 +#: engine/vibes_auth/emailing/models.py:141 msgid "email campaigns" msgstr "Chiến dịch email" -#: engine/vibes_auth/emailing/models.py:194 +#: engine/vibes_auth/emailing/models.py:161 msgid "campaign" msgstr "chiến dịch" -#: engine/vibes_auth/emailing/models.py:200 engine/vibes_auth/models.py:146 +#: engine/vibes_auth/emailing/models.py:167 engine/vibes_auth/models.py:183 msgid "user" msgstr "Người dùng" -#: engine/vibes_auth/emailing/models.py:216 +#: engine/vibes_auth/emailing/models.py:183 msgid "opened at" msgstr "Được mở tại" -#: engine/vibes_auth/emailing/models.py:221 +#: engine/vibes_auth/emailing/models.py:188 msgid "clicked at" msgstr "được nhấp vào" -#: engine/vibes_auth/emailing/models.py:227 +#: engine/vibes_auth/emailing/models.py:194 msgid "tracking ID" msgstr "Mã theo dõi" -#: engine/vibes_auth/emailing/models.py:228 +#: engine/vibes_auth/emailing/models.py:195 msgid "unique ID for tracking opens and clicks" msgstr "Mã định danh duy nhất để theo dõi số lần mở và nhấp chuột" -#: engine/vibes_auth/emailing/models.py:233 +#: engine/vibes_auth/emailing/models.py:200 msgid "error message" msgstr "Thông báo lỗi" -#: engine/vibes_auth/emailing/models.py:234 +#: engine/vibes_auth/emailing/models.py:201 msgid "error details if sending failed" msgstr "Chi tiết lỗi nếu việc gửi không thành công" -#: engine/vibes_auth/emailing/models.py:238 +#: engine/vibes_auth/emailing/models.py:205 msgid "campaign recipient" msgstr "Người nhận chiến dịch" -#: engine/vibes_auth/emailing/models.py:239 +#: engine/vibes_auth/emailing/models.py:206 msgid "campaign recipients" msgstr "Người nhận chiến dịch" @@ -506,75 +619,75 @@ msgstr "Bạn nhận được email này vì bạn đã đăng ký nhận bản msgid "Unsubscribe" msgstr "Hủy đăng ký" -#: engine/vibes_auth/emailing/views.py:71 +#: engine/vibes_auth/emailing/views.py:39 msgid "Unsubscribe token is required." msgstr "Mã hủy đăng ký là bắt buộc." -#: engine/vibes_auth/emailing/views.py:79 +#: engine/vibes_auth/emailing/views.py:47 msgid "Invalid unsubscribe token format." msgstr "Định dạng mã hủy đăng ký không hợp lệ." -#: engine/vibes_auth/emailing/views.py:87 +#: engine/vibes_auth/emailing/views.py:55 msgid "User not found." msgstr "Không tìm thấy người dùng." -#: engine/vibes_auth/emailing/views.py:93 -msgid "You are already unsubscribed." -msgstr "Bạn đã hủy đăng ký." - -#: engine/vibes_auth/emailing/views.py:101 -msgid "You have been successfully unsubscribed from our emails." -msgstr "Bạn đã hủy đăng ký nhận email của chúng tôi thành công." - -#: engine/vibes_auth/graphene/mutations.py:46 +#: engine/vibes_auth/graphene/mutations.py:47 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" "Mã UUID được mã hóa bằng B64 của người dùng đã giới thiệu người dùng mới cho" " chúng tôi." -#: engine/vibes_auth/graphene/mutations.py:68 +#: engine/vibes_auth/graphene/mutations.py:70 msgid "password too weak" msgstr "Mật khẩu quá yếu." -#: engine/vibes_auth/graphene/mutations.py:128 +#: engine/vibes_auth/graphene/mutations.py:130 msgid "malformed email" msgstr "Email không hợp lệ" -#: engine/vibes_auth/graphene/mutations.py:140 +#: engine/vibes_auth/graphene/mutations.py:142 #: engine/vibes_auth/serializers.py:117 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Số điện thoại không hợp lệ: {phone_number}!" -#: engine/vibes_auth/graphene/mutations.py:165 +#: engine/vibes_auth/graphene/mutations.py:167 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Định dạng thuộc tính không hợp lệ: {attribute_pair}!" -#: engine/vibes_auth/graphene/mutations.py:182 +#: engine/vibes_auth/graphene/mutations.py:184 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} không tồn tại: {uuid}!" -#: engine/vibes_auth/graphene/mutations.py:304 -#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180 +#: engine/vibes_auth/graphene/mutations.py:309 +#: engine/vibes_auth/viewsets.py:174 engine/vibes_auth/viewsets.py:198 msgid "activation link is invalid!" msgstr "Liên kết kích hoạt không hợp lệ!" -#: engine/vibes_auth/graphene/mutations.py:307 +#: engine/vibes_auth/graphene/mutations.py:312 msgid "account already activated..." msgstr "Tài khoản đã được kích hoạt..." -#: engine/vibes_auth/graphene/mutations.py:314 -#: engine/vibes_auth/graphene/mutations.py:376 +#: engine/vibes_auth/graphene/mutations.py:319 +#: engine/vibes_auth/graphene/mutations.py:383 msgid "something went wrong: {e!s}" msgstr "Có sự cố xảy ra: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:358 -#: engine/vibes_auth/viewsets.py:106 +#: engine/vibes_auth/graphene/mutations.py:365 +#: engine/vibes_auth/viewsets.py:109 msgid "token is invalid!" msgstr "Token không hợp lệ!" +#: engine/vibes_auth/graphene/mutations.py:403 +msgid "only image files are allowed (jpg, png, gif, webp)" +msgstr "Chỉ cho phép các tệp hình ảnh (jpg, png, gif, webp)" + +#: engine/vibes_auth/graphene/mutations.py:406 +msgid "file size must not exceed 5 MB" +msgstr "Kích thước tệp không được vượt quá 5 MB." + #: engine/vibes_auth/graphene/object_types.py:46 msgid "" "the products this user has viewed most recently (max 48), in " @@ -584,7 +697,7 @@ msgstr "" "thời gian ngược." #: engine/vibes_auth/graphene/object_types.py:49 -#: engine/vibes_auth/models.py:214 +#: engine/vibes_auth/models.py:270 msgid "groups" msgstr "Nhóm" @@ -593,7 +706,7 @@ msgid "wishlist" msgstr "Danh sách mong muốn" #: engine/vibes_auth/graphene/object_types.py:56 -#: engine/vibes_auth/models.py:70 +#: engine/vibes_auth/models.py:75 msgid "avatar" msgstr "Avatar" @@ -632,7 +745,7 @@ msgstr "" msgid "Assignee must be a staff user." msgstr "Người được giao nhiệm vụ phải là người dùng nhân viên." -#: engine/vibes_auth/models.py:42 +#: engine/vibes_auth/models.py:44 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -650,126 +763,138 @@ msgstr "" " 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." -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "email" msgstr "Email" -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "user email address" msgstr "Địa chỉ email của người dùng" -#: engine/vibes_auth/models.py:55 +#: engine/vibes_auth/models.py:57 msgid "phone_number" msgstr "Số điện thoại" -#: engine/vibes_auth/models.py:60 +#: engine/vibes_auth/models.py:61 msgid "user phone number" msgstr "Số điện thoại của người dùng" -#: engine/vibes_auth/models.py:66 +#: engine/vibes_auth/models.py:68 msgid "first_name" msgstr "Họ" -#: engine/vibes_auth/models.py:67 +#: engine/vibes_auth/models.py:71 msgid "last_name" msgstr "Họ" -#: engine/vibes_auth/models.py:73 +#: engine/vibes_auth/models.py:78 msgid "user profile image" msgstr "Hình ảnh hồ sơ người dùng" -#: engine/vibes_auth/models.py:78 +#: engine/vibes_auth/models.py:83 msgid "is verified" msgstr "Đã được xác minh" -#: engine/vibes_auth/models.py:79 +#: engine/vibes_auth/models.py:84 msgid "user verification status" msgstr "Trạng thái xác minh của người dùng" -#: engine/vibes_auth/models.py:82 +#: engine/vibes_auth/models.py:87 msgid "is_active" msgstr "Đang hoạt động" -#: engine/vibes_auth/models.py:84 +#: engine/vibes_auth/models.py:89 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." -#: engine/vibes_auth/models.py:87 +#: engine/vibes_auth/models.py:92 msgid "is_subscribed" msgstr "Đã đăng ký" -#: engine/vibes_auth/models.py:88 +#: engine/vibes_auth/models.py:93 msgid "user's newsletter subscription status" msgstr "Tình trạng đăng ký bản tin của người dùng" -#: engine/vibes_auth/models.py:92 +#: engine/vibes_auth/models.py:98 msgid "activation token" msgstr "Mã kích hoạt" -#: engine/vibes_auth/models.py:95 +#: engine/vibes_auth/models.py:103 +msgid "activation token created" +msgstr "Token kích hoạt đã được tạo" + +#: engine/vibes_auth/models.py:107 msgid "unsubscribe token" msgstr "Mã hủy đăng ký" -#: engine/vibes_auth/models.py:96 +#: engine/vibes_auth/models.py:108 msgid "token for secure one-click unsubscribe from campaigns" msgstr "" "Token để hủy đăng ký một cách an toàn chỉ với một cú nhấp chuột khỏi các " "chiến dịch." -#: engine/vibes_auth/models.py:106 +#: engine/vibes_auth/models.py:118 msgid "attributes" msgstr "Thuộc tính" -#: engine/vibes_auth/models.py:147 +#: engine/vibes_auth/models.py:184 msgid "users" msgstr "Người dùng" -#: engine/vibes_auth/models.py:154 +#: engine/vibes_auth/models.py:202 +msgid "admin OTP code" +msgstr "Mã OTP của quản trị viên" + +#: engine/vibes_auth/models.py:203 +msgid "admin OTP codes" +msgstr "Mã OTP của quản trị viên" + +#: engine/vibes_auth/models.py:210 msgid "For anonymous threads" msgstr "Đối với các chủ đề ẩn danh" -#: engine/vibes_auth/models.py:178 +#: engine/vibes_auth/models.py:234 msgid "Chat thread" msgstr "Dòng trò chuyện" -#: engine/vibes_auth/models.py:179 +#: engine/vibes_auth/models.py:235 msgid "Chat threads" msgstr "Các chuỗi trò chuyện" -#: engine/vibes_auth/models.py:185 +#: engine/vibes_auth/models.py:241 msgid "provide user or email for anonymous thread." msgstr "" "Cung cấp tên người dùng hoặc địa chỉ email cho chuỗi thảo luận ẩn danh." -#: engine/vibes_auth/models.py:188 +#: engine/vibes_auth/models.py:244 msgid "assignee must be a staff user." msgstr "Người được giao nhiệm vụ phải là người dùng nhân viên." -#: engine/vibes_auth/models.py:206 +#: engine/vibes_auth/models.py:262 msgid "Chat message" msgstr "Tin nhắn trò chuyện" -#: engine/vibes_auth/models.py:207 +#: engine/vibes_auth/models.py:263 msgid "Chat messages" msgstr "Tin nhắn trò chuyện" -#: engine/vibes_auth/models.py:213 +#: engine/vibes_auth/models.py:269 msgid "group" msgstr "Nhóm" -#: engine/vibes_auth/models.py:220 +#: engine/vibes_auth/models.py:276 msgid "outstanding token" msgstr "Token xuất sắc" -#: engine/vibes_auth/models.py:221 +#: engine/vibes_auth/models.py:277 msgid "outstanding tokens" msgstr "Token xuất sắc" -#: engine/vibes_auth/models.py:227 +#: engine/vibes_auth/models.py:283 msgid "blacklisted token" msgstr "Token bị đưa vào danh sách đen" -#: engine/vibes_auth/models.py:228 +#: engine/vibes_auth/models.py:284 msgid "blacklisted tokens" msgstr "Các token bị đưa vào danh sách đen" @@ -811,6 +936,10 @@ msgstr "Không có yêu cầu UUID của người dùng trong token." msgid "user does not exist" msgstr "Người dùng không tồn tại" +#: engine/vibes_auth/templates/admin/verify_otp.html:27 +msgid "Verify" +msgstr "Xác minh" + #: engine/vibes_auth/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "Đặt lại mật khẩu của bạn" @@ -892,12 +1021,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" -#: engine/vibes_auth/utils/emailing.py:24 +#: engine/vibes_auth/utils/emailing.py:27 #, python-brace-format msgid "{settings.PROJECT_NAME} | Activate Account" msgstr "{settings.PROJECT_NAME} | Kích hoạt tài khoản" -#: engine/vibes_auth/utils/emailing.py:63 +#: engine/vibes_auth/utils/emailing.py:66 #, python-brace-format msgid "{settings.PROJECT_NAME} | Reset Password" msgstr "{settings.PROJECT_NAME} | Đặt lại mật khẩu" @@ -952,7 +1081,7 @@ msgstr "" msgid "the token is invalid" msgstr "Token không hợp lệ" -#: engine/vibes_auth/viewsets.py:44 +#: engine/vibes_auth/viewsets.py:47 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." @@ -963,10 +1092,18 @@ 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ẽ." -#: engine/vibes_auth/viewsets.py:113 +#: engine/vibes_auth/viewsets.py:116 msgid "password reset successfully" msgstr "Mật khẩu đã được đặt lại thành công!" -#: engine/vibes_auth/viewsets.py:161 +#: engine/vibes_auth/viewsets.py:146 +msgid "" +"Account already registered but not yet activated. A new activation email has" +" been sent." +msgstr "" +"Tài khoản đã được đăng ký nhưng chưa được kích hoạt. Một email kích hoạt mới" +" đã được gửi." + +#: engine/vibes_auth/viewsets.py:179 msgid "account already activated!" msgstr "Bạn đã kích hoạt tài khoản..." diff --git a/engine/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.mo b/engine/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.mo index c8ed6800..c5fb2174 100644 Binary files a/engine/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.mo and b/engine/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.mo differ diff --git a/engine/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.po b/engine/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.po index 1f5fb985..afd76ce5 100644 --- a/engine/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 03:06+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,32 +13,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: engine/vibes_auth/admin.py:65 engine/vibes_auth/admin.py:66 +#: engine/vibes_auth/admin.py:64 engine/vibes_auth/admin.py:65 #: engine/vibes_auth/graphene/object_types.py:54 msgid "balance" msgstr "平衡" -#: engine/vibes_auth/admin.py:74 +#: engine/vibes_auth/admin.py:73 msgid "order" msgstr "订购" -#: engine/vibes_auth/admin.py:75 engine/vibes_auth/graphene/object_types.py:51 +#: engine/vibes_auth/admin.py:74 engine/vibes_auth/graphene/object_types.py:51 msgid "orders" msgstr "订单" -#: engine/vibes_auth/admin.py:85 +#: engine/vibes_auth/admin.py:84 msgid "personal info" msgstr "个人信息" -#: engine/vibes_auth/admin.py:89 engine/vibes_auth/graphene/object_types.py:50 +#: engine/vibes_auth/admin.py:88 engine/vibes_auth/graphene/object_types.py:50 msgid "permissions" msgstr "权限" -#: engine/vibes_auth/admin.py:102 +#: engine/vibes_auth/admin.py:101 msgid "important dates" msgstr "重要日期" -#: engine/vibes_auth/admin.py:103 +#: engine/vibes_auth/admin.py:102 msgid "additional info" msgstr "其他信息" @@ -54,79 +54,83 @@ msgstr "关闭选定的线程" msgid "Open selected threads" msgstr "打开选定的线程" -#: engine/vibes_auth/admin.py:208 -msgid "Preview" -msgstr "预览" - -#: engine/vibes_auth/admin.py:209 engine/vibes_auth/admin.py:249 -#: engine/vibes_auth/admin.py:326 -msgid "Metadata" -msgstr "元数据" - -#: engine/vibes_auth/admin.py:212 -msgid "preview" -msgstr "预览" - -#: engine/vibes_auth/admin.py:221 -msgid "image preview" -msgstr "图片预览" - -#: engine/vibes_auth/admin.py:241 +#: engine/vibes_auth/admin.py:209 msgid "Content" msgstr "内容" -#: engine/vibes_auth/admin.py:243 +#: engine/vibes_auth/admin.py:211 msgid "Documentation" msgstr "文档" -#: engine/vibes_auth/admin.py:313 +#: engine/vibes_auth/admin.py:217 engine/vibes_auth/admin.py:294 +msgid "Metadata" +msgstr "元数据" + +#: engine/vibes_auth/admin.py:281 msgid "Scheduling" msgstr "排程" -#: engine/vibes_auth/admin.py:315 +#: engine/vibes_auth/admin.py:283 msgid "Statistics" msgstr "统计数据" -#: engine/vibes_auth/admin.py:329 +#: engine/vibes_auth/admin.py:297 msgid "stats" msgstr "状态" -#: engine/vibes_auth/admin.py:335 +#: engine/vibes_auth/admin.py:303 msgid "Prepare recipients (subscribed users)" msgstr "准备收件人(已订阅用户)" -#: engine/vibes_auth/admin.py:343 +#: engine/vibes_auth/admin.py:311 msgid "Campaign '{}' is not in draft status." msgstr "活动 '{}' 当前未处于草稿状态。" -#: engine/vibes_auth/admin.py:350 +#: engine/vibes_auth/admin.py:318 msgid "Preparing recipients for campaign '{}'." msgstr "为活动'{}'准备接收者。" -#: engine/vibes_auth/admin.py:354 +#: engine/vibes_auth/admin.py:322 msgid "Send campaign now" msgstr "立即发送活动" -#: engine/vibes_auth/admin.py:362 +#: engine/vibes_auth/admin.py:330 msgid "Campaign '{}' cannot be sent (status: {})." msgstr "活动 '{}' 无法发送(状态:{})。" -#: engine/vibes_auth/admin.py:372 +#: engine/vibes_auth/admin.py:340 msgid "Campaign '{}' has no recipients. Prepare recipients first." msgstr "活动 '{}' 没有收件人。请先准备收件人。" -#: engine/vibes_auth/admin.py:383 +#: engine/vibes_auth/admin.py:351 msgid "Started sending campaign '{}'." msgstr "开始发送活动'{}'。" -#: engine/vibes_auth/admin.py:387 +#: engine/vibes_auth/admin.py:355 msgid "Cancel campaign" msgstr "取消活动" -#: engine/vibes_auth/admin.py:396 +#: engine/vibes_auth/admin.py:364 msgid "{} campaign(s) cancelled." msgstr "{} 活动已取消。" +#: engine/vibes_auth/admin_site.py:24 +msgid "Verification code" +msgstr "验证码" + +#: engine/vibes_auth/admin_site.py:62 +msgid "A verification code has been sent to your email." +msgstr "验证码已发送至您的邮箱。" + +#: engine/vibes_auth/admin_site.py:118 +msgid "Invalid or expired code. Please try again." +msgstr "代码无效或已过期。请重试。" + +#: engine/vibes_auth/admin_site.py:124 +#: engine/vibes_auth/templates/admin/verify_otp.html:10 +msgid "Two-factor authentication" +msgstr "双重认证" + #: engine/vibes_auth/apps.py:8 msgid "Accounting" msgstr "会计" @@ -151,6 +155,127 @@ msgstr "工作人员" msgid "System" msgstr "系统" +#: engine/vibes_auth/docs/drf/emailing.py:18 +msgid "" +"UUID token for unsubscribing. This token is unique per user and is included " +"in the unsubscribe link of every campaign email. The token remains constant " +"for each user unless regenerated." +msgstr "用于取消订阅的UUID令牌。该令牌对每个用户都是唯一的,并包含在每封活动邮件的取消订阅链接中。除非重新生成,否则该令牌对每个用户保持不变。" + +#: engine/vibes_auth/docs/drf/emailing.py:37 +#: engine/vibes_auth/emailing/views.py:69 +msgid "You have been successfully unsubscribed from our emails." +msgstr "您已成功取消订阅我们的邮件。" + +#: engine/vibes_auth/docs/drf/emailing.py:45 +#: engine/vibes_auth/emailing/views.py:61 +msgid "You are already unsubscribed." +msgstr "您已取消订阅。" + +#: engine/vibes_auth/docs/drf/emailing.py:52 +msgid "Unsubscribe from email campaigns" +msgstr "取消订阅电子邮件营销活动" + +#: engine/vibes_auth/docs/drf/emailing.py:54 +msgid "" +"Unsubscribe a user from all marketing email campaigns using their unique unsubscribe token.\n" +"\n" +"This endpoint is designed for email client compatibility where clicking a link triggers a GET request. The user will no longer receive promotional emails after successful unsubscription.\n" +"\n" +"**Note:** Transactional emails (order confirmations, password resets, etc.) are not affected by this setting." +msgstr "" +"使用用户的唯一退订令牌将其从所有营销邮件活动中移除。此接口专为邮件客户端兼容性设计,点击链接将触发GET请求。成功退订后,用户将不再接收促销邮件。**注意:**此设置不影响交易类邮件(订单确认、密码重置等)。" + +#: engine/vibes_auth/docs/drf/emailing.py:66 +#: engine/vibes_auth/docs/drf/emailing.py:146 +msgid "Successfully unsubscribed from email campaigns." +msgstr "已成功取消订阅邮件活动。" + +#: engine/vibes_auth/docs/drf/emailing.py:82 +#: engine/vibes_auth/docs/drf/emailing.py:162 +msgid "Invalid or missing unsubscribe token." +msgstr "无效或缺失的退订令牌。" + +#: engine/vibes_auth/docs/drf/emailing.py:96 +#: engine/vibes_auth/docs/drf/emailing.py:176 +msgid "User associated with the token was not found." +msgstr "未找到与该令牌关联的用户。" + +#: engine/vibes_auth/docs/drf/emailing.py:118 +msgid "One-Click Unsubscribe (RFC 8058)" +msgstr "一键退订(RFC 8058)" + +#: engine/vibes_auth/docs/drf/emailing.py:120 +msgid "" +"RFC 8058 compliant one-click unsubscribe endpoint for email campaigns.\n" +"\n" +"This endpoint supports the List-Unsubscribe-Post header mechanism defined in RFC 8058, which allows email clients to unsubscribe users with a single click without leaving the email application.\n" +"\n" +"The token can be provided either as a query parameter or in the request body.\n" +"\n" +"**Standards Compliance:**\n" +"- RFC 8058: Signaling One-Click Functionality for List Email Headers\n" +"- RFC 2369: The Use of URLs as Meta-Syntax for Core Mail List Commands\n" +"\n" +"**Note:** Transactional emails are not affected by this setting." +msgstr "" +"符合RFC 8058标准的邮件营销活动一键退订接口。该接口支持RFC 8058定义的List-Unsubscribe-Post标头机制,允许邮件客户端用户通过单次点击即可完成退订,无需离开邮件应用程序。令牌可作为查询参数或请求主体内容提供。\n" +"\n" +"**标准兼容性:**- RFC 8058:邮件列表头部的一键功能标识规范- RFC 2369:核心邮件列表命令的URL元语法使用规范**注意:**此设置不影响交易类邮件。" + +#: engine/vibes_auth/docs/drf/emailing.py:137 +msgid "" +"Unsubscribe token (alternative to query parameter). Can be omitted if token " +"is provided in URL." +msgstr "取消订阅令牌(查询参数的替代方案)。若URL中已提供令牌,则可省略。" + +#: engine/vibes_auth/docs/drf/emailing.py:200 +msgid "Track email open event" +msgstr "追踪邮件打开事件" + +#: engine/vibes_auth/docs/drf/emailing.py:202 +msgid "" +"Records when a campaign email is opened by the recipient.\n" +"\n" +"This endpoint is called automatically when the tracking pixel (1x1 transparent GIF) embedded in the email is loaded by the recipient's email client.\n" +"\n" +"**How it works:**\n" +"1. Each campaign email contains a unique tracking pixel URL with a `tid` parameter\n" +"2. When the email is opened and images are loaded, this endpoint is called\n" +"3. The recipient's status is updated to 'opened' and the timestamp is recorded\n" +"4. The campaign's aggregate opened count is updated\n" +"\n" +"**Privacy considerations:**\n" +"- Only the first open is recorded (subsequent opens are ignored)\n" +"- No personal information beyond the tracking ID is logged\n" +"- Users who disable image loading will not trigger this event\n" +"\n" +"**Response:**\n" +"Returns a 1x1 transparent GIF image regardless of whether tracking succeeded, to ensure consistent behavior and prevent information leakage." +msgstr "" +"记录收件人打开营销邮件的时间。当邮件中嵌入的追踪像素(1x1透明GIF)被收件人的邮件客户端加载时,该接口将自动调用。\n" +"\n" +"**工作原理:** 1. 每封营销邮件均包含带`tid`参数的唯一追踪像素URL 2. 邮件被打开且图片加载时调用此接口 3. 收件人状态更新为\"已打开\"并记录时间戳 4. 营销活动总打开次数同步更新 **隐私注意事项:**\n" +"- 仅记录首次打开(后续打开将忽略)- 除跟踪ID外不记录任何个人信息- 禁用图片加载的用户不会触发此事件**响应机制:**无论跟踪是否成功,均返回1x1透明GIF图像,以确保行为一致性并防止信息泄露。" + +#: engine/vibes_auth/docs/drf/emailing.py:223 +msgid "" +"Tracking ID (UUID) unique to each campaign-recipient combination. This ID " +"links the open event to a specific recipient and campaign." +msgstr "每个活动-接收者组合专属的跟踪ID(UUID)。该ID将打开事件与特定接收者和活动关联起来。" + +#: engine/vibes_auth/docs/drf/emailing.py:241 +msgid "" +"1x1 transparent GIF image. Always returned regardless of tracking status to " +"maintain consistent behavior." +msgstr "1x1透明GIF图像。无论跟踪状态如何,始终返回该图像以保持行为一致性。" + +#: engine/vibes_auth/docs/drf/emailing.py:247 +msgid "" +"Returned when no tracking ID is provided. Note: Invalid tracking IDs still " +"return 200 with the GIF to prevent enumeration attacks." +msgstr "当未提供跟踪ID时返回此状态码。注意:无效的跟踪ID仍会返回200状态码及GIF图片,以防止枚举攻击。" + #: engine/vibes_auth/docs/drf/messaging.py:17 msgid "User messages entrypoint" msgstr "用户信息入口" @@ -240,9 +365,9 @@ msgid "confirm a user's password reset" msgstr "确认用户密码重置" #: engine/vibes_auth/docs/drf/viewsets.py:87 -#: engine/vibes_auth/graphene/mutations.py:351 +#: engine/vibes_auth/graphene/mutations.py:358 #: engine/vibes_auth/serializers.py:103 engine/vibes_auth/serializers.py:107 -#: engine/vibes_auth/viewsets.py:94 +#: engine/vibes_auth/viewsets.py:97 msgid "passwords do not match" msgstr "密码不匹配" @@ -295,195 +420,166 @@ msgstr "开放" msgid "Clicked" msgstr "点击" -#: engine/vibes_auth/emailing/models.py:35 -#: engine/vibes_auth/emailing/models.py:71 -#: engine/vibes_auth/emailing/models.py:121 +#: engine/vibes_auth/emailing/models.py:38 +#: engine/vibes_auth/emailing/models.py:88 msgid "name" msgstr "名称" -#: engine/vibes_auth/emailing/models.py:36 -msgid "descriptive name for the image" -msgstr "图像的描述性名称" - -#: engine/vibes_auth/emailing/models.py:40 -msgid "image" -msgstr "图片" - -#: engine/vibes_auth/emailing/models.py:41 -msgid "image file to use in email templates" -msgstr "用于电子邮件模板的图像文件" - -#: engine/vibes_auth/emailing/models.py:47 -msgid "alt text" -msgstr "其他文本" - -#: engine/vibes_auth/emailing/models.py:48 -msgid "alternative text for accessibility" -msgstr "辅助功能替代文本" - -#: engine/vibes_auth/emailing/models.py:52 -msgid "email image" -msgstr "电子邮件图片" - -#: engine/vibes_auth/emailing/models.py:53 -msgid "email images" -msgstr "邮件图片" - -#: engine/vibes_auth/emailing/models.py:72 +#: engine/vibes_auth/emailing/models.py:39 msgid "internal name for the template" msgstr "模板的内部名称" -#: engine/vibes_auth/emailing/models.py:76 +#: engine/vibes_auth/emailing/models.py:43 msgid "slug" msgstr "仆人" -#: engine/vibes_auth/emailing/models.py:77 +#: engine/vibes_auth/emailing/models.py:44 msgid "unique identifier for the template" msgstr "模板的唯一标识符" -#: engine/vibes_auth/emailing/models.py:81 +#: engine/vibes_auth/emailing/models.py:48 msgid "subject" msgstr "主题" -#: engine/vibes_auth/emailing/models.py:82 +#: engine/vibes_auth/emailing/models.py:49 msgid "email subject line - supports {{ variables }}" msgstr "邮件主题行 - 支持 {{ variables }}" -#: engine/vibes_auth/emailing/models.py:85 -msgid "HTML content" -msgstr "HTML内容" +#: engine/vibes_auth/emailing/models.py:52 +msgid "content" +msgstr "内容" -#: engine/vibes_auth/emailing/models.py:87 +#: engine/vibes_auth/emailing/models.py:54 msgid "" -"email body content - supports {{ user.first_name }}, {{ user.email }}, {{ " -"project_name }}, {{ unsubscribe_url }}" +"email body in markdown - supports {{ user.first_name }}, {{ user.email }}, " +"{{ project_name }}, {{ unsubscribe_url }}" msgstr "" "邮件正文内容 - 支持 {{ user.first_name }}、{{ user.email }}、{{ project_name }}、{{ " "unsubscribe_url }}" -#: engine/vibes_auth/emailing/models.py:94 +#: engine/vibes_auth/emailing/models.py:61 msgid "plain text content" msgstr "纯文本内容" -#: engine/vibes_auth/emailing/models.py:95 +#: engine/vibes_auth/emailing/models.py:62 msgid "plain text fallback (auto-generated if empty)" msgstr "纯文本备用方案(若为空则自动生成)" -#: engine/vibes_auth/emailing/models.py:100 +#: engine/vibes_auth/emailing/models.py:67 msgid "available variables" msgstr "可用变量" -#: engine/vibes_auth/emailing/models.py:101 +#: engine/vibes_auth/emailing/models.py:68 msgid "documentation of available template variables" msgstr "可用模板变量的文档说明" -#: engine/vibes_auth/emailing/models.py:105 +#: engine/vibes_auth/emailing/models.py:72 msgid "email template" msgstr "电子邮件模板" -#: engine/vibes_auth/emailing/models.py:106 +#: engine/vibes_auth/emailing/models.py:73 msgid "email templates" msgstr "电子邮件模板" -#: engine/vibes_auth/emailing/models.py:122 +#: engine/vibes_auth/emailing/models.py:89 msgid "internal name for the campaign" msgstr "该活动的内部名称" -#: engine/vibes_auth/emailing/models.py:129 +#: engine/vibes_auth/emailing/models.py:96 msgid "template" msgstr "模板" -#: engine/vibes_auth/emailing/models.py:130 +#: engine/vibes_auth/emailing/models.py:97 msgid "email template to use for this campaign" msgstr "本次活动使用的邮件模板" -#: engine/vibes_auth/emailing/models.py:136 -#: engine/vibes_auth/emailing/models.py:206 +#: engine/vibes_auth/emailing/models.py:103 +#: engine/vibes_auth/emailing/models.py:173 msgid "status" msgstr "状态" -#: engine/vibes_auth/emailing/models.py:141 +#: engine/vibes_auth/emailing/models.py:108 msgid "scheduled at" msgstr "定于" -#: engine/vibes_auth/emailing/models.py:142 +#: engine/vibes_auth/emailing/models.py:109 msgid "when to send the campaign (leave empty for manual send)" msgstr "活动发送时间(留空表示手动发送)" -#: engine/vibes_auth/emailing/models.py:147 -#: engine/vibes_auth/emailing/models.py:211 +#: engine/vibes_auth/emailing/models.py:114 +#: engine/vibes_auth/emailing/models.py:178 msgid "sent at" msgstr "那晚" -#: engine/vibes_auth/emailing/models.py:148 +#: engine/vibes_auth/emailing/models.py:115 msgid "when the campaign was actually sent" msgstr "当活动实际发送时" -#: engine/vibes_auth/emailing/models.py:153 +#: engine/vibes_auth/emailing/models.py:120 msgid "total recipients" msgstr "总接收者" -#: engine/vibes_auth/emailing/models.py:157 +#: engine/vibes_auth/emailing/models.py:124 msgid "sent count" msgstr "发送计数" -#: engine/vibes_auth/emailing/models.py:161 +#: engine/vibes_auth/emailing/models.py:128 msgid "failed count" msgstr "失败计数" -#: engine/vibes_auth/emailing/models.py:165 +#: engine/vibes_auth/emailing/models.py:132 msgid "opened count" msgstr "已打开计数" -#: engine/vibes_auth/emailing/models.py:169 +#: engine/vibes_auth/emailing/models.py:136 msgid "clicked count" msgstr "点击次数" -#: engine/vibes_auth/emailing/models.py:173 +#: engine/vibes_auth/emailing/models.py:140 msgid "email campaign" msgstr "电子邮件营销活动" -#: engine/vibes_auth/emailing/models.py:174 +#: engine/vibes_auth/emailing/models.py:141 msgid "email campaigns" msgstr "电子邮件营销活动" -#: engine/vibes_auth/emailing/models.py:194 +#: engine/vibes_auth/emailing/models.py:161 msgid "campaign" msgstr "竞选活动" -#: engine/vibes_auth/emailing/models.py:200 engine/vibes_auth/models.py:146 +#: engine/vibes_auth/emailing/models.py:167 engine/vibes_auth/models.py:183 msgid "user" msgstr "用户" -#: engine/vibes_auth/emailing/models.py:216 +#: engine/vibes_auth/emailing/models.py:183 msgid "opened at" msgstr "于" -#: engine/vibes_auth/emailing/models.py:221 +#: engine/vibes_auth/emailing/models.py:188 msgid "clicked at" msgstr "点击" -#: engine/vibes_auth/emailing/models.py:227 +#: engine/vibes_auth/emailing/models.py:194 msgid "tracking ID" msgstr "追踪ID" -#: engine/vibes_auth/emailing/models.py:228 +#: engine/vibes_auth/emailing/models.py:195 msgid "unique ID for tracking opens and clicks" msgstr "用于追踪打开和点击的唯一标识符" -#: engine/vibes_auth/emailing/models.py:233 +#: engine/vibes_auth/emailing/models.py:200 msgid "error message" msgstr "错误信息" -#: engine/vibes_auth/emailing/models.py:234 +#: engine/vibes_auth/emailing/models.py:201 msgid "error details if sending failed" msgstr "发送失败时的错误详情" -#: engine/vibes_auth/emailing/models.py:238 +#: engine/vibes_auth/emailing/models.py:205 msgid "campaign recipient" msgstr "活动接收方" -#: engine/vibes_auth/emailing/models.py:239 +#: engine/vibes_auth/emailing/models.py:206 msgid "campaign recipients" msgstr "活动接收者" @@ -499,73 +595,73 @@ msgstr "您收到此邮件是因为您订阅了我们的新闻通讯。" msgid "Unsubscribe" msgstr "取消订阅" -#: engine/vibes_auth/emailing/views.py:71 +#: engine/vibes_auth/emailing/views.py:39 msgid "Unsubscribe token is required." msgstr "需要提供退订令牌。" -#: engine/vibes_auth/emailing/views.py:79 +#: engine/vibes_auth/emailing/views.py:47 msgid "Invalid unsubscribe token format." msgstr "无效的取消订阅令牌格式。" -#: engine/vibes_auth/emailing/views.py:87 +#: engine/vibes_auth/emailing/views.py:55 msgid "User not found." msgstr "用户不存在。" -#: engine/vibes_auth/emailing/views.py:93 -msgid "You are already unsubscribed." -msgstr "您已取消订阅。" - -#: engine/vibes_auth/emailing/views.py:101 -msgid "You have been successfully unsubscribed from our emails." -msgstr "您已成功取消订阅我们的邮件。" - -#: engine/vibes_auth/graphene/mutations.py:46 +#: engine/vibes_auth/graphene/mutations.py:47 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "将新用户推荐给我们的用户的 b64-encoded uuid。" -#: engine/vibes_auth/graphene/mutations.py:68 +#: engine/vibes_auth/graphene/mutations.py:70 msgid "password too weak" msgstr "密码太弱" -#: engine/vibes_auth/graphene/mutations.py:128 +#: engine/vibes_auth/graphene/mutations.py:130 msgid "malformed email" msgstr "畸形电子邮件" -#: engine/vibes_auth/graphene/mutations.py:140 +#: engine/vibes_auth/graphene/mutations.py:142 #: engine/vibes_auth/serializers.py:117 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "畸形电话号码:{phone_number}!" -#: engine/vibes_auth/graphene/mutations.py:165 +#: engine/vibes_auth/graphene/mutations.py:167 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "属性格式无效:{attribute_pair}!" -#: engine/vibes_auth/graphene/mutations.py:182 +#: engine/vibes_auth/graphene/mutations.py:184 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} 不存在:{uuid}!" -#: engine/vibes_auth/graphene/mutations.py:304 -#: engine/vibes_auth/viewsets.py:156 engine/vibes_auth/viewsets.py:180 +#: engine/vibes_auth/graphene/mutations.py:309 +#: engine/vibes_auth/viewsets.py:174 engine/vibes_auth/viewsets.py:198 msgid "activation link is invalid!" msgstr "激活链接无效!" -#: engine/vibes_auth/graphene/mutations.py:307 +#: engine/vibes_auth/graphene/mutations.py:312 msgid "account already activated..." msgstr "帐户已激活..." -#: engine/vibes_auth/graphene/mutations.py:314 -#: engine/vibes_auth/graphene/mutations.py:376 +#: engine/vibes_auth/graphene/mutations.py:319 +#: engine/vibes_auth/graphene/mutations.py:383 msgid "something went wrong: {e!s}" msgstr "出了问题:{e!s}" -#: engine/vibes_auth/graphene/mutations.py:358 -#: engine/vibes_auth/viewsets.py:106 +#: engine/vibes_auth/graphene/mutations.py:365 +#: engine/vibes_auth/viewsets.py:109 msgid "token is invalid!" msgstr "令牌无效!" +#: engine/vibes_auth/graphene/mutations.py:403 +msgid "only image files are allowed (jpg, png, gif, webp)" +msgstr "仅允许上传图像文件(jpg、png、gif、webp格式)" + +#: engine/vibes_auth/graphene/mutations.py:406 +msgid "file size must not exceed 5 MB" +msgstr "文件大小不得超过5 MB" + #: engine/vibes_auth/graphene/object_types.py:46 msgid "" "the products this user has viewed most recently (max 48), in " @@ -573,7 +669,7 @@ msgid "" msgstr "该用户最近查看过的产品(最多 48 个),按倒序排列。" #: engine/vibes_auth/graphene/object_types.py:49 -#: engine/vibes_auth/models.py:214 +#: engine/vibes_auth/models.py:270 msgid "groups" msgstr "组别" @@ -582,7 +678,7 @@ msgid "wishlist" msgstr "愿望清单" #: engine/vibes_auth/graphene/object_types.py:56 -#: engine/vibes_auth/models.py:70 +#: engine/vibes_auth/models.py:75 msgid "avatar" msgstr "阿凡达" @@ -617,7 +713,7 @@ msgstr "我们正在寻找接线员,请稍候!" msgid "Assignee must be a staff user." msgstr "受让人必须是工作人员用户。" -#: engine/vibes_auth/models.py:42 +#: engine/vibes_auth/models.py:44 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -630,123 +726,135 @@ msgstr "" "代表具有自定义字段和方法以扩展功能的用户实体。该类扩展了 AbstractUser " "模型,并集成了其他功能,如自定义电子邮件登录、验证方法、订阅状态、验证和属性存储。它还为管理最近查看的项目和基于令牌的激活提供了实用工具,以便验证账户。用户模型旨在处理增强用户管理的特定用例。" -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "email" msgstr "电子邮件" -#: engine/vibes_auth/models.py:53 +#: engine/vibes_auth/models.py:55 msgid "user email address" msgstr "用户电子邮件地址" -#: engine/vibes_auth/models.py:55 +#: engine/vibes_auth/models.py:57 msgid "phone_number" msgstr "电话号码" -#: engine/vibes_auth/models.py:60 +#: engine/vibes_auth/models.py:61 msgid "user phone number" msgstr "用户电话号码" -#: engine/vibes_auth/models.py:66 +#: engine/vibes_auth/models.py:68 msgid "first_name" msgstr "姓名" -#: engine/vibes_auth/models.py:67 +#: engine/vibes_auth/models.py:71 msgid "last_name" msgstr "姓氏" -#: engine/vibes_auth/models.py:73 +#: engine/vibes_auth/models.py:78 msgid "user profile image" msgstr "用户配置文件图像" -#: engine/vibes_auth/models.py:78 +#: engine/vibes_auth/models.py:83 msgid "is verified" msgstr "已核实" -#: engine/vibes_auth/models.py:79 +#: engine/vibes_auth/models.py:84 msgid "user verification status" msgstr "用户验证状态" -#: engine/vibes_auth/models.py:82 +#: engine/vibes_auth/models.py:87 msgid "is_active" msgstr "处于活动状态" -#: engine/vibes_auth/models.py:84 +#: engine/vibes_auth/models.py:89 msgid "unselect this instead of deleting accounts" msgstr "取消选择此选项,而不是删除账户" -#: engine/vibes_auth/models.py:87 +#: engine/vibes_auth/models.py:92 msgid "is_subscribed" msgstr "已订阅" -#: engine/vibes_auth/models.py:88 +#: engine/vibes_auth/models.py:93 msgid "user's newsletter subscription status" msgstr "用户的通讯订阅状态" -#: engine/vibes_auth/models.py:92 +#: engine/vibes_auth/models.py:98 msgid "activation token" msgstr "激活令牌" -#: engine/vibes_auth/models.py:95 +#: engine/vibes_auth/models.py:103 +msgid "activation token created" +msgstr "激活令牌已创建" + +#: engine/vibes_auth/models.py:107 msgid "unsubscribe token" msgstr "退订令牌" -#: engine/vibes_auth/models.py:96 +#: engine/vibes_auth/models.py:108 msgid "token for secure one-click unsubscribe from campaigns" msgstr "安全一键退订活动令牌" -#: engine/vibes_auth/models.py:106 +#: engine/vibes_auth/models.py:118 msgid "attributes" msgstr "属性" -#: engine/vibes_auth/models.py:147 +#: engine/vibes_auth/models.py:184 msgid "users" msgstr "用户" -#: engine/vibes_auth/models.py:154 +#: engine/vibes_auth/models.py:202 +msgid "admin OTP code" +msgstr "管理员一次性密码" + +#: engine/vibes_auth/models.py:203 +msgid "admin OTP codes" +msgstr "管理员一次性密码" + +#: engine/vibes_auth/models.py:210 msgid "For anonymous threads" msgstr "匿名主题" -#: engine/vibes_auth/models.py:178 +#: engine/vibes_auth/models.py:234 msgid "Chat thread" msgstr "聊天主题" -#: engine/vibes_auth/models.py:179 +#: engine/vibes_auth/models.py:235 msgid "Chat threads" msgstr "聊天主题" -#: engine/vibes_auth/models.py:185 +#: engine/vibes_auth/models.py:241 msgid "provide user or email for anonymous thread." msgstr "为匿名主题提供用户或电子邮件。" -#: engine/vibes_auth/models.py:188 +#: engine/vibes_auth/models.py:244 msgid "assignee must be a staff user." msgstr "受让人必须是工作人员用户。" -#: engine/vibes_auth/models.py:206 +#: engine/vibes_auth/models.py:262 msgid "Chat message" msgstr "聊天信息" -#: engine/vibes_auth/models.py:207 +#: engine/vibes_auth/models.py:263 msgid "Chat messages" msgstr "聊天信息" -#: engine/vibes_auth/models.py:213 +#: engine/vibes_auth/models.py:269 msgid "group" msgstr "组别" -#: engine/vibes_auth/models.py:220 +#: engine/vibes_auth/models.py:276 msgid "outstanding token" msgstr "出色的代币" -#: engine/vibes_auth/models.py:221 +#: engine/vibes_auth/models.py:277 msgid "outstanding tokens" msgstr "未兑代币" -#: engine/vibes_auth/models.py:227 +#: engine/vibes_auth/models.py:283 msgid "blacklisted token" msgstr "黑名单令牌" -#: engine/vibes_auth/models.py:228 +#: engine/vibes_auth/models.py:284 msgid "blacklisted tokens" msgstr "黑名单令牌" @@ -788,6 +896,10 @@ msgstr "令牌中没有用户 uuid 声明" msgid "user does not exist" msgstr "用户不存在" +#: engine/vibes_auth/templates/admin/verify_otp.html:27 +msgid "Verify" +msgstr "验证" + #: engine/vibes_auth/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "重置密码" @@ -869,12 +981,12 @@ msgstr "" msgid "best regards,
the %(project_name)s team" msgstr "致以最崇高的敬意,
%(project_name)s_团队" -#: engine/vibes_auth/utils/emailing.py:24 +#: engine/vibes_auth/utils/emailing.py:27 #, python-brace-format msgid "{settings.PROJECT_NAME} | Activate Account" msgstr "{settings.PROJECT_NAME}| 激活帐户" -#: engine/vibes_auth/utils/emailing.py:63 +#: engine/vibes_auth/utils/emailing.py:66 #, python-brace-format msgid "{settings.PROJECT_NAME} | Reset Password" msgstr "{settings.PROJECT_NAME}| 重置密码" @@ -916,7 +1028,7 @@ msgstr "代表使用特定序列化和验证逻辑验证 JSON Web 标记 (JWT) msgid "the token is invalid" msgstr "令牌无效" -#: engine/vibes_auth/viewsets.py:44 +#: engine/vibes_auth/viewsets.py:47 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." @@ -924,10 +1036,16 @@ msgstr "" "用户视图集实施。\n" "该类提供了一组操作,用于管理用户相关数据,如创建、检索、更新、删除以及自定义操作,包括密码重置、上传头像、激活账户和合并最近查看的项目。该类对 mixins 和 GenericViewSet 进行了扩展,以实现强大的 API 处理功能。" -#: engine/vibes_auth/viewsets.py:113 +#: engine/vibes_auth/viewsets.py:116 msgid "password reset successfully" msgstr "密码已重置成功!" -#: engine/vibes_auth/viewsets.py:161 +#: engine/vibes_auth/viewsets.py:146 +msgid "" +"Account already registered but not yet activated. A new activation email has" +" been sent." +msgstr "账户已注册但尚未激活。新的激活邮件已发送。" + +#: engine/vibes_auth/viewsets.py:179 msgid "account already activated!" msgstr "您已经激活了账户..." diff --git a/schon/locale/ar_AR/LC_MESSAGES/django.mo b/schon/locale/ar_AR/LC_MESSAGES/django.mo index 98639079..591cb97d 100644 Binary files a/schon/locale/ar_AR/LC_MESSAGES/django.mo and b/schon/locale/ar_AR/LC_MESSAGES/django.mo differ diff --git a/schon/locale/ar_AR/LC_MESSAGES/django.po b/schon/locale/ar_AR/LC_MESSAGES/django.po index 214dd6a8..32a10dce 100644 --- a/schon/locale/ar_AR/LC_MESSAGES/django.po +++ b/schon/locale/ar_AR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 01:59+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -13,19 +13,19 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: schon/settings/constance.py:24 +#: schon/settings/constance.py:31 msgid "Name of the company" msgstr "اسم الشركة" -#: schon/settings/constance.py:25 +#: schon/settings/constance.py:32 msgid "Address of the company" msgstr "عنوان الشركة" -#: schon/settings/constance.py:28 +#: schon/settings/constance.py:35 msgid "Phone number of the company" msgstr "رقم هاتف الشركة" -#: schon/settings/constance.py:35 +#: schon/settings/constance.py:42 msgid "" "Tax rate in jurisdiction of your company. Leave 0 if you don't want to " "process taxes." @@ -33,161 +33,154 @@ msgstr "" "معدل الضريبة في الولاية القضائية لشركتك. اترك 0 إذا كنت لا تريد معالجة " "الضرائب." -#: schon/settings/constance.py:44 +#: schon/settings/constance.py:51 msgid "Shows if the taxes are already included in product's selling prices" msgstr "يوضح ما إذا كانت الضرائب مشمولة بالفعل في أسعار بيع المنتج" -#: schon/settings/constance.py:52 +#: schon/settings/constance.py:59 msgid "Exchange rate API key" msgstr "مفتاح API لسعر الصرف" -#: schon/settings/constance.py:58 +#: schon/settings/constance.py:65 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!، لا تتغير!!!" -#: schon/settings/constance.py:60 +#: schon/settings/constance.py:67 msgid "SMTP host" msgstr "مضيف SMTP" -#: schon/settings/constance.py:61 +#: schon/settings/constance.py:68 msgid "SMTP port" msgstr "منفذ SMTP" -#: schon/settings/constance.py:62 +#: schon/settings/constance.py:69 msgid "Use TLS" msgstr "استخدام TLS" -#: schon/settings/constance.py:63 +#: schon/settings/constance.py:70 msgid "Use SSL" msgstr "استخدام SSL" -#: schon/settings/constance.py:66 +#: schon/settings/constance.py:73 msgid "SMTP username" msgstr "اسم مستخدم SMTP" -#: schon/settings/constance.py:70 +#: schon/settings/constance.py:79 msgid "SMTP password" msgstr "كلمة مرور SMTP" -#: schon/settings/constance.py:72 +#: schon/settings/constance.py:83 msgid "Mail from option" msgstr "البريد من خيار البريد من" -#: schon/settings/constance.py:76 +#: schon/settings/constance.py:90 +msgid "" +"Export products to specified marketplaces. Comma-separated list from " +"" +msgstr "" +"تصدير المنتجات إلى الأسواق المحددة. قائمة مفصولة بفواصل من " +"" + +#: schon/settings/constance.py:96 msgid "How many days we store messages from anonymous users" msgstr "عدد الأيام التي نخزن فيها الرسائل من المستخدمين المجهولين" -#: schon/settings/constance.py:80 +#: schon/settings/constance.py:100 msgid "How many days we store messages from authenticated users" msgstr "عدد الأيام التي نخزن فيها الرسائل من المستخدمين الموثقين" -#: schon/settings/constance.py:84 +#: schon/settings/constance.py:104 msgid "Disable buy functionality" msgstr "تعطيل وظيفة الشراء" -#: schon/settings/constance.py:88 +#: schon/settings/constance.py:108 msgid "OpenStreetMap Nominatim API URL" msgstr "عنوان URL الخاص بواجهة برمجة تطبيقات OpenStreetMap Nominatim" -#: schon/settings/constance.py:92 +#: schon/settings/constance.py:112 msgid "OpenAI API Key" msgstr "مفتاح واجهة برمجة تطبيقات OpenAI" -#: schon/settings/constance.py:96 +#: schon/settings/constance.py:116 msgid "Abstract API Key" msgstr "مفتاح واجهة برمجة التطبيقات المجردة" -#: schon/settings/constance.py:104 +#: schon/settings/constance.py:124 msgid "HTTP Proxy" msgstr "وكيل HTTP" -#: schon/settings/constance.py:112 +#: schon/settings/constance.py:132 msgid "An entity for storing advertisiment data" msgstr "كيان لتخزين بيانات الإعلانات" -#: schon/settings/constance.py:120 +#: schon/settings/constance.py:140 msgid "An entity for storing analytics data" msgstr "كيان لتخزين بيانات التحليلات" -#: schon/settings/constance.py:125 +#: schon/settings/constance.py:145 msgid "Save responses from vendors' APIs" msgstr "حفظ الاستجابات من واجهات برمجة تطبيقات البائعين" -#: schon/settings/constance.py:126 +#: schon/settings/constance.py:146 msgid "Backup database" msgstr "قاعدة البيانات الاحتياطية" -#: schon/settings/constance.py:127 +#: schon/settings/constance.py:147 msgid "Backup media" msgstr "وسائط النسخ الاحتياطي" -#: schon/settings/constance.py:133 +#: schon/settings/constance.py:153 msgid "Legal Options" msgstr "الخيارات القانونية" -#: schon/settings/constance.py:141 +#: schon/settings/constance.py:161 msgid "Email Options" msgstr "خيارات البريد الإلكتروني" -#: schon/settings/constance.py:151 +#: schon/settings/constance.py:171 msgid "Features Options" msgstr "خيارات الميزات" -#: schon/settings/constance.py:160 +#: schon/settings/constance.py:181 msgid "SEO Options" msgstr "خيارات تحسين محركات البحث" -#: schon/settings/constance.py:164 +#: schon/settings/constance.py:185 msgid "System Options" msgstr "خيارات النظام" -#: schon/settings/drf.py:51 +#: schon/settings/drf.py:59 #, python-brace-format msgid "" "\n" "Welcome to the Schon documentation.\n" "\n" -"Schon is a powerful e-commerce platform that allows you to launch and manage " -"an online store of any kind in just a few clicks.\n" +"Schon is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks.\n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"SCHON-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-SCHON-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {access_lifetime} {access_unit}.\n" "- Refresh token lifetime is {refresh_hours} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -199,7 +192,6 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {version}\n" @@ -207,45 +199,32 @@ msgstr "" "\n" "مرحباً بك في وثائق Schon.\n" "\n" -"Schon عبارة عن منصة تجارة إلكترونية قوية تتيح لك إطلاق وإدارة متجر إلكتروني " -"من أي نوع بنقرات قليلة.\n" +"Schon عبارة عن منصة تجارة إلكترونية قوية تتيح لك إطلاق وإدارة متجر إلكتروني من أي نوع بنقرات قليلة.\n" "\n" "## الميزات الرئيسية\n" -"- ** كتالوج المنتجات:** إدارة تفاصيل المنتج والتسعير والمخزون والتوافر عبر " -"فئات متعددة.\n" -"- **إدارة الطلبات:** معالجة الطلبات وتتبع التنفيذ والتعامل مع طلبات العملاء " -"بكفاءة.\n" -"- **المصادقة والتخويل:** مصادقة شاملة للمستخدمين باستخدام رموز JWT المميزة " -"والأذونات المستندة إلى الأدوار.\n" +"- ** كتالوج المنتجات:** إدارة تفاصيل المنتج والتسعير والمخزون والتوافر عبر فئات متعددة.\n" +"- **إدارة الطلبات:** معالجة الطلبات وتتبع التنفيذ والتعامل مع طلبات العملاء بكفاءة.\n" +"- **المصادقة والتخويل:** مصادقة شاملة للمستخدمين باستخدام رموز JWT المميزة والأذونات المستندة إلى الأدوار.\n" "- ** معالجة المدفوعات:** دمج بوابات دفع متعددة وإدارة المعاملات بشكل آمن.\n" -"- ** إدارة المدونة والمحتوى:** إنشاء وإدارة منشورات المدونة والمحتوى " -"التسويقي لمتجرك.\n" -"- ** عمليات B2B:** نقاط نهاية مخصصة للمعاملات بين الشركات وإدارة البيع " -"بالجملة.\n" -"- **دعم متعدد اللغات:** خدمة العملاء في جميع أنحاء العالم مع إمكانات التدويل " -"الكاملة (i18n).\n" -"- **تكامل مخصص:** بنية واجهة برمجة تطبيقات قابلة للتوسيع للتكامل مع المنصات " -"والخدمات الخارجية.\n" -"- **التحليلات والتقارير:** إنشاء تقارير مفصلة عن المبيعات والمخزون وسلوك " -"العملاء.\n" -"- ** تحديثات في الوقت الفعلي:** احصل على بيانات مباشرة عن مستويات المخزون " -"وحالات الطلبات وتغييرات الأسعار.\n" +"- ** إدارة المدونة والمحتوى:** إنشاء وإدارة منشورات المدونة والمحتوى التسويقي لمتجرك.\n" +"- ** عمليات B2B:** نقاط نهاية مخصصة للمعاملات بين الشركات وإدارة البيع بالجملة.\n" +"- **دعم متعدد اللغات:** خدمة العملاء في جميع أنحاء العالم مع إمكانات التدويل الكاملة (i18n).\n" +"- **تكامل مخصص:** بنية واجهة برمجة تطبيقات قابلة للتوسيع للتكامل مع المنصات والخدمات الخارجية.\n" +"- **التحليلات والتقارير:** إنشاء تقارير مفصلة عن المبيعات والمخزون وسلوك العملاء.\n" +"- ** تحديثات في الوقت الفعلي:** احصل على بيانات مباشرة عن مستويات المخزون وحالات الطلبات وتغييرات الأسعار.\n" "\n" "## واجهات برمجة التطبيقات المتاحة\n" "- **واجهة برمجة تطبيقات REST:** واجهة REST كاملة (هذه الوثائق)\n" -"- ** واجهة برمجة تطبيقات GraphiQL:** متوفرة على '/graphql/' مع واجهة " -"GraphiQL للاستعلامات التفاعلية\n" +"- ** واجهة برمجة تطبيقات GraphiQL:** متوفرة على '/graphql/' مع واجهة GraphiQL للاستعلامات التفاعلية\n" "\n" "## المصادقة\n" -"- يتم التعامل مع المصادقة عبر رموز JWT المميزة. قم بتضمين الرمز المميز في " -"رأس \"X-SCHON-AUTH\" لطلباتك بصيغة \"حامل \".\n" +"- يتم التعامل مع المصادقة عبر رموز JWT المميزة. قم بتضمين الرمز المميز في رأس \"X-SCHON-AUTH\" لطلباتك بصيغة \"حامل \".\n" "- عمر رمز الوصول الرمزي هو {access_lifetime} {access_unit}.\n" "- عمر الرمز المميز للتحديث هو {refresh_hours} ساعة.\n" "- يتم تدوير رموز التحديث تلقائيًا وإبطالها بعد الاستخدام لتعزيز الأمان.\n" "\n" "## التدويل (i18n)\n" -"- قم بتعيين رأس \"قبول اللغة\" لتحديد لغتك المفضلة (على سبيل المثال، \"قبول " -"اللغة: en-US\").\n" +"- قم بتعيين رأس \"قبول اللغة\" لتحديد لغتك المفضلة (على سبيل المثال، \"قبول اللغة: en-US\").\n" "- يمكن استرداد اللغات المتاحة من نقطة النهاية \"/ التطبيق/اللغات/\".\n" "- جميع المحتويات التي تواجه المستخدم تدعم لغات متعددة خارج الصندوق.\n" "\n" @@ -290,38 +269,38 @@ msgstr "التكوين" msgid "Periodic Tasks" msgstr "المهام الدورية" -#: schon/settings/unfold.py:134 +#: schon/settings/unfold.py:129 msgid "Taskboard" msgstr "لوحة المهام" -#: schon/settings/unfold.py:146 +#: schon/settings/unfold.py:141 msgid "Quick Links" msgstr "روابط سريعة" -#: schon/settings/unfold.py:151 +#: schon/settings/unfold.py:146 msgid "Users" msgstr "المستخدمون" -#: schon/settings/unfold.py:156 +#: schon/settings/unfold.py:151 msgid "Groups" msgstr "المجموعات" -#: schon/settings/unfold.py:161 +#: schon/settings/unfold.py:156 msgid "Orders" msgstr "الطلبات" -#: schon/settings/unfold.py:166 +#: schon/settings/unfold.py:161 msgid "Products" msgstr "المنتجات" -#: schon/settings/unfold.py:171 +#: schon/settings/unfold.py:166 msgid "Categories" msgstr "الفئات" -#: schon/settings/unfold.py:176 +#: schon/settings/unfold.py:171 msgid "Brands" msgstr "العلامات التجارية" -#: schon/settings/unfold.py:181 +#: schon/settings/unfold.py:176 msgid "Blogposts" msgstr "المدونات" diff --git a/schon/locale/cs_CZ/LC_MESSAGES/django.mo b/schon/locale/cs_CZ/LC_MESSAGES/django.mo index e00015f8..61132632 100644 Binary files a/schon/locale/cs_CZ/LC_MESSAGES/django.mo and b/schon/locale/cs_CZ/LC_MESSAGES/django.mo differ diff --git a/schon/locale/cs_CZ/LC_MESSAGES/django.po b/schon/locale/cs_CZ/LC_MESSAGES/django.po index 8e9b1126..49061e31 100644 --- a/schon/locale/cs_CZ/LC_MESSAGES/django.po +++ b/schon/locale/cs_CZ/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 01:44+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -13,19 +13,19 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: schon/settings/constance.py:24 +#: schon/settings/constance.py:31 msgid "Name of the company" msgstr "Název společnosti" -#: schon/settings/constance.py:25 +#: schon/settings/constance.py:32 msgid "Address of the company" msgstr "Adresa společnosti" -#: schon/settings/constance.py:28 +#: schon/settings/constance.py:35 msgid "Phone number of the company" msgstr "Telefonní číslo společnosti" -#: schon/settings/constance.py:35 +#: schon/settings/constance.py:42 msgid "" "Tax rate in jurisdiction of your company. Leave 0 if you don't want to " "process taxes." @@ -33,161 +33,154 @@ msgstr "" "Sazba daně v jurisdikci vaší společnosti. Pokud nechcete zpracovávat daně, " "ponechte 0." -#: schon/settings/constance.py:44 +#: schon/settings/constance.py:51 msgid "Shows if the taxes are already included in product's selling prices" msgstr "Zobrazuje, zda jsou daně již zahrnuty v prodejních cenách produktu." -#: schon/settings/constance.py:52 +#: schon/settings/constance.py:59 msgid "Exchange rate API key" msgstr "Klíč API pro směnný kurz" -#: schon/settings/constance.py:58 +#: schon/settings/constance.py:65 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!NEMĚŇTE!!!" -#: schon/settings/constance.py:60 +#: schon/settings/constance.py:67 msgid "SMTP host" msgstr "SMTP host" -#: schon/settings/constance.py:61 +#: schon/settings/constance.py:68 msgid "SMTP port" msgstr "Port SMTP" -#: schon/settings/constance.py:62 +#: schon/settings/constance.py:69 msgid "Use TLS" msgstr "Použití protokolu TLS" -#: schon/settings/constance.py:63 +#: schon/settings/constance.py:70 msgid "Use SSL" msgstr "Použití protokolu SSL" -#: schon/settings/constance.py:66 +#: schon/settings/constance.py:73 msgid "SMTP username" msgstr "Uživatelské jméno SMTP" -#: schon/settings/constance.py:70 +#: schon/settings/constance.py:79 msgid "SMTP password" msgstr "Heslo SMTP" -#: schon/settings/constance.py:72 +#: schon/settings/constance.py:83 msgid "Mail from option" msgstr "Možnost Pošta z" -#: schon/settings/constance.py:76 +#: schon/settings/constance.py:90 +msgid "" +"Export products to specified marketplaces. Comma-separated list from " +"" +msgstr "" +"Exportujte produkty na určené tržiště. Seznam oddělený čárkami z " +"" + +#: schon/settings/constance.py:96 msgid "How many days we store messages from anonymous users" msgstr "Kolik dní uchováváme zprávy od anonymních uživatelů" -#: schon/settings/constance.py:80 +#: schon/settings/constance.py:100 msgid "How many days we store messages from authenticated users" msgstr "Kolik dní uchováváme zprávy od ověřených uživatelů" -#: schon/settings/constance.py:84 +#: schon/settings/constance.py:104 msgid "Disable buy functionality" msgstr "Zakázat funkci nákupu" -#: schon/settings/constance.py:88 +#: schon/settings/constance.py:108 msgid "OpenStreetMap Nominatim API URL" msgstr "URL rozhraní API OpenStreetMap Nominatim" -#: schon/settings/constance.py:92 +#: schon/settings/constance.py:112 msgid "OpenAI API Key" msgstr "Klíč API OpenAI" -#: schon/settings/constance.py:96 +#: schon/settings/constance.py:116 msgid "Abstract API Key" msgstr "Abstraktní klíč API" -#: schon/settings/constance.py:104 +#: schon/settings/constance.py:124 msgid "HTTP Proxy" msgstr "Proxy server HTTP" -#: schon/settings/constance.py:112 +#: schon/settings/constance.py:132 msgid "An entity for storing advertisiment data" msgstr "Subjekt pro ukládání dat inzerátů" -#: schon/settings/constance.py:120 +#: schon/settings/constance.py:140 msgid "An entity for storing analytics data" msgstr "Subjekt pro ukládání analytických dat" -#: schon/settings/constance.py:125 +#: schon/settings/constance.py:145 msgid "Save responses from vendors' APIs" msgstr "Ukládání odpovědí z rozhraní API dodavatelů" -#: schon/settings/constance.py:126 +#: schon/settings/constance.py:146 msgid "Backup database" msgstr "Zálohování databáze" -#: schon/settings/constance.py:127 +#: schon/settings/constance.py:147 msgid "Backup media" msgstr "Záložní média" -#: schon/settings/constance.py:133 +#: schon/settings/constance.py:153 msgid "Legal Options" msgstr "Právní možnosti" -#: schon/settings/constance.py:141 +#: schon/settings/constance.py:161 msgid "Email Options" msgstr "Možnosti e-mailu" -#: schon/settings/constance.py:151 +#: schon/settings/constance.py:171 msgid "Features Options" msgstr "Možnosti funkcí" -#: schon/settings/constance.py:160 +#: schon/settings/constance.py:181 msgid "SEO Options" msgstr "Možnosti SEO" -#: schon/settings/constance.py:164 +#: schon/settings/constance.py:185 msgid "System Options" msgstr "Možnosti systému" -#: schon/settings/drf.py:51 +#: schon/settings/drf.py:59 #, python-brace-format msgid "" "\n" "Welcome to the Schon documentation.\n" "\n" -"Schon is a powerful e-commerce platform that allows you to launch and manage " -"an online store of any kind in just a few clicks.\n" +"Schon is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks.\n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"SCHON-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-SCHON-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {access_lifetime} {access_unit}.\n" "- Refresh token lifetime is {refresh_hours} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -199,7 +192,6 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {version}\n" @@ -207,58 +199,40 @@ msgstr "" "\n" "Vítejte v dokumentaci systému Schon.\n" "\n" -"Schon je výkonná platforma pro elektronické obchodování, která vám umožní " -"spustit a spravovat internetový obchod jakéhokoli druhu na několik " -"kliknutí.\n" +"Schon je výkonná platforma pro elektronické obchodování, která vám umožní spustit a spravovat internetový obchod jakéhokoli druhu na několik kliknutí.\n" "\n" "## Klíčové funkce\n" -"- **Katalog produktů:** Správa podrobností o produktech, cen, skladových " -"zásob a dostupnosti v několika kategoriích.\n" -"- **Správa objednávek:** Zpracovávejte objednávky, sledujte jejich plnění a " -"efektivně vyřizujte požadavky zákazníků.\n" -"- **Ověřování a autorizace:** Komplexní ověřování uživatelů pomocí tokenů " -"JWT a oprávnění na základě rolí.\n" -"- **Zpracování plateb:** Integrace více platebních bran a bezpečná správa " -"transakcí.\n" -"- **Správa blogu a obsahu:** Vytváření a správa příspěvků na blogu a " -"marketingového obsahu pro váš obchod.\n" -"- **Provoz B2B:** Vyhrazené koncové body pro transakce mezi podniky a správu " -"velkoobchodu.\n" -"- **Vícejazyčná podpora:** Obsluhujte zákazníky po celém světě díky plným " -"možnostem internacionalizace (i18n).\n" -"- **Vlastní integrace:** Rozšiřitelná architektura API pro integraci s " -"externími platformami a službami.\n" -"- **Analytika a reporting:** Generování podrobných reportů o prodeji, " -"zásobách a chování zákazníků.\n" -"- **Aktualizace v reálném čase:** Získávejte živé údaje o stavu zásob, stavu " -"objednávek a změnách cen.\n" +"- **Katalog produktů:** Správa podrobností o produktech, cen, skladových zásob a dostupnosti v několika kategoriích.\n" +"- **Správa objednávek:** Zpracovávejte objednávky, sledujte jejich plnění a efektivně vyřizujte požadavky zákazníků.\n" +"- **Ověřování a autorizace:** Komplexní ověřování uživatelů pomocí tokenů JWT a oprávnění na základě rolí.\n" +"- **Zpracování plateb:** Integrace více platebních bran a bezpečná správa transakcí.\n" +"- **Správa blogu a obsahu:** Vytváření a správa příspěvků na blogu a marketingového obsahu pro váš obchod.\n" +"- **Provoz B2B:** Vyhrazené koncové body pro transakce mezi podniky a správu velkoobchodu.\n" +"- **Vícejazyčná podpora:** Obsluhujte zákazníky po celém světě díky plným možnostem internacionalizace (i18n).\n" +"- **Vlastní integrace:** Rozšiřitelná architektura API pro integraci s externími platformami a službami.\n" +"- **Analytika a reporting:** Generování podrobných reportů o prodeji, zásobách a chování zákazníků.\n" +"- **Aktualizace v reálném čase:** Získávejte živé údaje o stavu zásob, stavu objednávek a změnách cen.\n" "\n" "## Dostupná rozhraní API\n" "- **REST API:** Plné rozhraní RESTful (tato dokumentace).\n" -"- **GraphQL API:** K dispozici na adrese `/graphql/` s rozhraním GraphiQL " -"pro interaktivní dotazy.\n" +"- **GraphQL API:** K dispozici na adrese `/graphql/` s rozhraním GraphiQL pro interaktivní dotazy.\n" "\n" "## Ověřování\n" -"- Ověřování se provádí pomocí tokenů JWT. Token zahrňte do hlavičky `X-SCHON-" -"AUTH` svých požadavků ve formátu `Bearer `.\n" +"- Ověřování se provádí pomocí tokenů JWT. Token zahrňte do hlavičky `X-SCHON-AUTH` svých požadavků ve formátu `Bearer `.\n" "- Životnost přístupového tokenu je {access_lifetime}. {access_unit}.\n" "- Životnost tokenu pro obnovení je {refresh_hours} hodin.\n" -"- Tokeny pro obnovení jsou po použití automaticky rotovány a zneplatněny z " -"důvodu vyšší bezpečnosti.\n" +"- Tokeny pro obnovení jsou po použití automaticky rotovány a zneplatněny z důvodu vyšší bezpečnosti.\n" "\n" "## Internacionalizace (i18n)\n" -"- Nastavte hlavičku `Accept-Language` tak, aby určovala preferovaný jazyk " -"(např. `Accept-Language: en-US`).\n" +"- Nastavte hlavičku `Accept-Language` tak, aby určovala preferovaný jazyk (např. `Accept-Language: en-US`).\n" "- Dostupné jazyky lze získat z koncového bodu `/app/languages/`.\n" -"- Veškerý obsah směřující k uživateli podporuje více jazyků hned po vybalení " -"z krabice.\n" +"- Veškerý obsah směřující k uživateli podporuje více jazyků hned po vybalení z krabice.\n" "\n" "## Formáty odpovědí\n" "Rozhraní API podporuje více formátů odpovědí:\n" "- **JSON** (výchozí, formátováno camelCase).\n" "- **XML** (přidejte `?format=xml` nebo nastavte `Accept: application/xml`).\n" -"- **YAML** (přidejte `?format=yaml` nebo nastavte `Accept: application/x-" -"yaml`)\n" +"- **YAML** (přidejte `?format=yaml` nebo nastavte `Accept: application/x-yaml`)\n" "\n" "## Stav a monitorování\n" "- Kontroly stavu: `/health/`\n" @@ -295,38 +269,38 @@ msgstr "Konfigurace" msgid "Periodic Tasks" msgstr "Pravidelné úkoly" -#: schon/settings/unfold.py:134 +#: schon/settings/unfold.py:129 msgid "Taskboard" msgstr "Taskboard" -#: schon/settings/unfold.py:146 +#: schon/settings/unfold.py:141 msgid "Quick Links" msgstr "Rychlé odkazy" -#: schon/settings/unfold.py:151 +#: schon/settings/unfold.py:146 msgid "Users" msgstr "Uživatelé" -#: schon/settings/unfold.py:156 +#: schon/settings/unfold.py:151 msgid "Groups" msgstr "Skupiny" -#: schon/settings/unfold.py:161 +#: schon/settings/unfold.py:156 msgid "Orders" msgstr "Objednávky" -#: schon/settings/unfold.py:166 +#: schon/settings/unfold.py:161 msgid "Products" msgstr "Produkty" -#: schon/settings/unfold.py:171 +#: schon/settings/unfold.py:166 msgid "Categories" msgstr "Kategorie" -#: schon/settings/unfold.py:176 +#: schon/settings/unfold.py:171 msgid "Brands" msgstr "Značky" -#: schon/settings/unfold.py:181 +#: schon/settings/unfold.py:176 msgid "Blogposts" msgstr "Blogposty" diff --git a/schon/locale/da_DK/LC_MESSAGES/django.mo b/schon/locale/da_DK/LC_MESSAGES/django.mo index 125f1550..d4cfd507 100644 Binary files a/schon/locale/da_DK/LC_MESSAGES/django.mo and b/schon/locale/da_DK/LC_MESSAGES/django.mo differ diff --git a/schon/locale/da_DK/LC_MESSAGES/django.po b/schon/locale/da_DK/LC_MESSAGES/django.po index 49bb10c6..5347e03c 100644 --- a/schon/locale/da_DK/LC_MESSAGES/django.po +++ b/schon/locale/da_DK/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:02+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -13,181 +13,174 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: schon/settings/constance.py:24 +#: schon/settings/constance.py:31 msgid "Name of the company" msgstr "Virksomhedens navn" -#: schon/settings/constance.py:25 +#: schon/settings/constance.py:32 msgid "Address of the company" msgstr "Virksomhedens adresse" -#: schon/settings/constance.py:28 +#: schon/settings/constance.py:35 msgid "Phone number of the company" msgstr "Virksomhedens telefonnummer" -#: schon/settings/constance.py:35 +#: schon/settings/constance.py:42 msgid "" "Tax rate in jurisdiction of your company. Leave 0 if you don't want to " "process taxes." msgstr "" -"Skattesats i din virksomheds jurisdiktion. Lad 0 stå, hvis du ikke ønsker at " -"behandle skatter." +"Skattesats i din virksomheds jurisdiktion. Lad 0 stå, hvis du ikke ønsker at" +" behandle skatter." -#: schon/settings/constance.py:44 +#: schon/settings/constance.py:51 msgid "Shows if the taxes are already included in product's selling prices" msgstr "Viser, om afgifterne allerede er inkluderet i produktets salgspris" -#: schon/settings/constance.py:52 +#: schon/settings/constance.py:59 msgid "Exchange rate API key" msgstr "API-nøgle til valutakurs" -#: schon/settings/constance.py:58 +#: schon/settings/constance.py:65 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!SKIFT IKKE!!!" -#: schon/settings/constance.py:60 +#: schon/settings/constance.py:67 msgid "SMTP host" msgstr "SMTP-vært" -#: schon/settings/constance.py:61 +#: schon/settings/constance.py:68 msgid "SMTP port" msgstr "SMTP-port" -#: schon/settings/constance.py:62 +#: schon/settings/constance.py:69 msgid "Use TLS" msgstr "Brug TLS" -#: schon/settings/constance.py:63 +#: schon/settings/constance.py:70 msgid "Use SSL" msgstr "Brug SSL" -#: schon/settings/constance.py:66 +#: schon/settings/constance.py:73 msgid "SMTP username" msgstr "SMTP-brugernavn" -#: schon/settings/constance.py:70 +#: schon/settings/constance.py:79 msgid "SMTP password" msgstr "SMTP-adgangskode" -#: schon/settings/constance.py:72 +#: schon/settings/constance.py:83 msgid "Mail from option" msgstr "Mulighed for mail fra" -#: schon/settings/constance.py:76 +#: schon/settings/constance.py:90 +msgid "" +"Export products to specified marketplaces. Comma-separated list from " +"" +msgstr "" +"Eksporter produkter til specificerede markedspladser. Kommasepareret liste " +"fra " + +#: schon/settings/constance.py:96 msgid "How many days we store messages from anonymous users" msgstr "Hvor mange dage vi gemmer beskeder fra anonyme brugere" -#: schon/settings/constance.py:80 +#: schon/settings/constance.py:100 msgid "How many days we store messages from authenticated users" msgstr "Hvor mange dage vi gemmer beskeder fra godkendte brugere" -#: schon/settings/constance.py:84 +#: schon/settings/constance.py:104 msgid "Disable buy functionality" msgstr "Deaktiver købsfunktionalitet" -#: schon/settings/constance.py:88 +#: schon/settings/constance.py:108 msgid "OpenStreetMap Nominatim API URL" msgstr "OpenStreetMap Nominatim API URL" -#: schon/settings/constance.py:92 +#: schon/settings/constance.py:112 msgid "OpenAI API Key" msgstr "OpenAI API-nøgle" -#: schon/settings/constance.py:96 +#: schon/settings/constance.py:116 msgid "Abstract API Key" msgstr "Abstrakt API-nøgle" -#: schon/settings/constance.py:104 +#: schon/settings/constance.py:124 msgid "HTTP Proxy" msgstr "HTTP-proxy" -#: schon/settings/constance.py:112 +#: schon/settings/constance.py:132 msgid "An entity for storing advertisiment data" msgstr "En enhed til lagring af annonceringsdata" -#: schon/settings/constance.py:120 +#: schon/settings/constance.py:140 msgid "An entity for storing analytics data" msgstr "En enhed til lagring af analysedata" -#: schon/settings/constance.py:125 +#: schon/settings/constance.py:145 msgid "Save responses from vendors' APIs" msgstr "Gem svar fra leverandørers API'er" -#: schon/settings/constance.py:126 +#: schon/settings/constance.py:146 msgid "Backup database" msgstr "Backup af database" -#: schon/settings/constance.py:127 +#: schon/settings/constance.py:147 msgid "Backup media" msgstr "Backup-medier" -#: schon/settings/constance.py:133 +#: schon/settings/constance.py:153 msgid "Legal Options" msgstr "Juridiske muligheder" -#: schon/settings/constance.py:141 +#: schon/settings/constance.py:161 msgid "Email Options" msgstr "Indstillinger for e-mail" -#: schon/settings/constance.py:151 +#: schon/settings/constance.py:171 msgid "Features Options" msgstr "Funktioner Indstillinger" -#: schon/settings/constance.py:160 +#: schon/settings/constance.py:181 msgid "SEO Options" msgstr "SEO-muligheder" -#: schon/settings/constance.py:164 +#: schon/settings/constance.py:185 msgid "System Options" msgstr "Systemindstillinger" -#: schon/settings/drf.py:51 +#: schon/settings/drf.py:59 #, python-brace-format msgid "" "\n" "Welcome to the Schon documentation.\n" "\n" -"Schon is a powerful e-commerce platform that allows you to launch and manage " -"an online store of any kind in just a few clicks.\n" +"Schon is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks.\n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"SCHON-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-SCHON-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {access_lifetime} {access_unit}.\n" "- Refresh token lifetime is {refresh_hours} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -199,7 +192,6 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {version}\n" @@ -207,47 +199,32 @@ msgstr "" "\n" "Velkommen til Schon' dokumentation.\n" "\n" -"Schon er en stærk e-handelsplatform, der giver dig mulighed for at starte og " -"administrere en onlinebutik af enhver art med blot nogle få klik.\n" +"Schon er en stærk e-handelsplatform, der giver dig mulighed for at starte og administrere en onlinebutik af enhver art med blot nogle få klik.\n" "\n" "## Nøglefunktioner\n" -"- Produktkatalog:** Administrer produktdetaljer, priser, lagerbeholdning og " -"tilgængelighed på tværs af flere kategorier.\n" -"- Ordrehåndtering:** Behandl ordrer, spor opfyldelse og håndter " -"kundeanmodninger effektivt.\n" -"- Godkendelse og autorisation:** Omfattende brugergodkendelse med JWT-tokens " -"og rollebaserede tilladelser.\n" -"- **Betalingsbehandling:** Integrer flere betalingsgateways og håndter " -"transaktioner sikkert.\n" -"- Blog- og indholdsstyring: ** Opret og administrer blogindlæg og " -"markedsføringsindhold til din butik.\n" -"- **B2B Operations:** Dedikerede slutpunkter til business-to-business-" -"transaktioner og engrosadministration.\n" -"- Flersproget support:** Betjen kunder over hele verden med fuld " -"internationalisering (i18n).\n" -"- Brugerdefinerede integrationer:** Udvidelig API-arkitektur til integration " -"med eksterne platforme og tjenester.\n" -"- Analyse og rapportering:** Generer detaljerede rapporter om salg, " -"lagerbeholdning og kundeadfærd.\n" -"- Opdateringer i realtid:** Få live-data om lagerniveauer, ordrestatus og " -"prisændringer.\n" +"- Produktkatalog:** Administrer produktdetaljer, priser, lagerbeholdning og tilgængelighed på tværs af flere kategorier.\n" +"- Ordrehåndtering:** Behandl ordrer, spor opfyldelse og håndter kundeanmodninger effektivt.\n" +"- Godkendelse og autorisation:** Omfattende brugergodkendelse med JWT-tokens og rollebaserede tilladelser.\n" +"- **Betalingsbehandling:** Integrer flere betalingsgateways og håndter transaktioner sikkert.\n" +"- Blog- og indholdsstyring: ** Opret og administrer blogindlæg og markedsføringsindhold til din butik.\n" +"- **B2B Operations:** Dedikerede slutpunkter til business-to-business-transaktioner og engrosadministration.\n" +"- Flersproget support:** Betjen kunder over hele verden med fuld internationalisering (i18n).\n" +"- Brugerdefinerede integrationer:** Udvidelig API-arkitektur til integration med eksterne platforme og tjenester.\n" +"- Analyse og rapportering:** Generer detaljerede rapporter om salg, lagerbeholdning og kundeadfærd.\n" +"- Opdateringer i realtid:** Få live-data om lagerniveauer, ordrestatus og prisændringer.\n" "\n" "## Tilgængelige API'er\n" "- **REST API:** Fuld RESTful-grænseflade (denne dokumentation)\n" -"- GraphQL API:** Tilgængelig på `/graphql/` med GraphiQL-grænseflade til " -"interaktive forespørgsler\n" +"- GraphQL API:** Tilgængelig på `/graphql/` med GraphiQL-grænseflade til interaktive forespørgsler\n" "\n" "## Autentificering\n" -"- Autentificering håndteres via JWT-tokens. Inkluder tokenet i `X-SCHON-" -"AUTH`-headeren i dine anmodninger i formatet `Bearer `.\n" +"- Autentificering håndteres via JWT-tokens. Inkluder tokenet i `X-SCHON-AUTH`-headeren i dine anmodninger i formatet `Bearer `.\n" "- Adgangstokenets levetid er {access_lifetime} {access_unit}.\n" "- Opdateringstokenets levetid er {refresh_hours} timer.\n" -"- Refresh-tokens bliver automatisk roteret og ugyldiggjort efter brug for at " -"øge sikkerheden.\n" +"- Refresh-tokens bliver automatisk roteret og ugyldiggjort efter brug for at øge sikkerheden.\n" "\n" "## Internationalisering (i18n)\n" -"- Indstil headeren `Accept-Language` til at angive dit foretrukne sprog (f." -"eks. `Accept-Language: en-US`).\n" +"- Indstil headeren `Accept-Language` til at angive dit foretrukne sprog (f.eks. `Accept-Language: en-US`).\n" "- Tilgængelige sprog kan hentes fra `/app/languages/` endpoint.\n" "- Alt brugervendt indhold understøtter flere sprog fra starten.\n" "\n" @@ -255,8 +232,7 @@ msgstr "" "API'en understøtter flere svarformater:\n" "- **JSON** (standard, camelCase-formateret)\n" "- XML** (tilføj `?format=xml` eller indstil `Accept: application/xml`)\n" -"- **YAML** (tilføj `?format=yaml` eller indstil `Accept: application/x-" -"yaml`)\n" +"- **YAML** (tilføj `?format=yaml` eller indstil `Accept: application/x-yaml`)\n" "\n" "## Sundhed og overvågning\n" "- Sundhedstjek: `/health/`\n" @@ -293,38 +269,38 @@ msgstr "Konfig" msgid "Periodic Tasks" msgstr "Periodiske opgaver" -#: schon/settings/unfold.py:134 +#: schon/settings/unfold.py:129 msgid "Taskboard" msgstr "Opgavetavle" -#: schon/settings/unfold.py:146 +#: schon/settings/unfold.py:141 msgid "Quick Links" msgstr "Hurtige links" -#: schon/settings/unfold.py:151 +#: schon/settings/unfold.py:146 msgid "Users" msgstr "Brugere" -#: schon/settings/unfold.py:156 +#: schon/settings/unfold.py:151 msgid "Groups" msgstr "Grupper" -#: schon/settings/unfold.py:161 +#: schon/settings/unfold.py:156 msgid "Orders" msgstr "Bestillinger" -#: schon/settings/unfold.py:166 +#: schon/settings/unfold.py:161 msgid "Products" msgstr "Produkter" -#: schon/settings/unfold.py:171 +#: schon/settings/unfold.py:166 msgid "Categories" msgstr "Kategorier" -#: schon/settings/unfold.py:176 +#: schon/settings/unfold.py:171 msgid "Brands" msgstr "Mærker" -#: schon/settings/unfold.py:181 +#: schon/settings/unfold.py:176 msgid "Blogposts" msgstr "Blogindlæg" diff --git a/schon/locale/de_DE/LC_MESSAGES/django.mo b/schon/locale/de_DE/LC_MESSAGES/django.mo index 1b94ec63..fe4ee9a5 100644 Binary files a/schon/locale/de_DE/LC_MESSAGES/django.mo and b/schon/locale/de_DE/LC_MESSAGES/django.mo differ diff --git a/schon/locale/de_DE/LC_MESSAGES/django.po b/schon/locale/de_DE/LC_MESSAGES/django.po index bf966f51..d38311cb 100644 --- a/schon/locale/de_DE/LC_MESSAGES/django.po +++ b/schon/locale/de_DE/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 01:44+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -13,19 +13,19 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: schon/settings/constance.py:24 +#: schon/settings/constance.py:31 msgid "Name of the company" msgstr "Name des Unternehmens" -#: schon/settings/constance.py:25 +#: schon/settings/constance.py:32 msgid "Address of the company" msgstr "Anschrift des Unternehmens" -#: schon/settings/constance.py:28 +#: schon/settings/constance.py:35 msgid "Phone number of the company" msgstr "Telefonnummer des Unternehmens" -#: schon/settings/constance.py:35 +#: schon/settings/constance.py:42 msgid "" "Tax rate in jurisdiction of your company. Leave 0 if you don't want to " "process taxes." @@ -33,164 +33,157 @@ msgstr "" "Steuersatz in dem Land, in dem Ihr Unternehmen ansässig ist. Lassen Sie 0 " "stehen, wenn Sie keine Steuern verarbeiten wollen." -#: schon/settings/constance.py:44 +#: schon/settings/constance.py:51 msgid "Shows if the taxes are already included in product's selling prices" msgstr "" "Zeigt an, ob die Steuern bereits in den Verkaufspreisen des Produkts " "enthalten sind" -#: schon/settings/constance.py:52 +#: schon/settings/constance.py:59 msgid "Exchange rate API key" msgstr "Wechselkurs-API-Schlüssel" -#: schon/settings/constance.py:58 +#: schon/settings/constance.py:65 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!NICHT ÄNDERN!!!" -#: schon/settings/constance.py:60 +#: schon/settings/constance.py:67 msgid "SMTP host" msgstr "SMTP-Host" -#: schon/settings/constance.py:61 +#: schon/settings/constance.py:68 msgid "SMTP port" msgstr "SMTP-Port" -#: schon/settings/constance.py:62 +#: schon/settings/constance.py:69 msgid "Use TLS" msgstr "Use TLS" -#: schon/settings/constance.py:63 +#: schon/settings/constance.py:70 msgid "Use SSL" msgstr "Use SSL" -#: schon/settings/constance.py:66 +#: schon/settings/constance.py:73 msgid "SMTP username" msgstr "SMTP-Benutzername" -#: schon/settings/constance.py:70 +#: schon/settings/constance.py:79 msgid "SMTP password" msgstr "SMTP-Kennwort" -#: schon/settings/constance.py:72 +#: schon/settings/constance.py:83 msgid "Mail from option" msgstr "Option Mail von" -#: schon/settings/constance.py:76 +#: schon/settings/constance.py:90 +msgid "" +"Export products to specified marketplaces. Comma-separated list from " +"" +msgstr "" +"Produkte in bestimmte Marktplätze exportieren. Durch Kommas getrennte Liste " +"aus " + +#: schon/settings/constance.py:96 msgid "How many days we store messages from anonymous users" msgstr "Wie viele Tage wir Nachrichten von anonymen Nutzern speichern" -#: schon/settings/constance.py:80 +#: schon/settings/constance.py:100 msgid "How many days we store messages from authenticated users" msgstr "" "Wie viele Tage wir Nachrichten von authentifizierten Benutzern speichern" -#: schon/settings/constance.py:84 +#: schon/settings/constance.py:104 msgid "Disable buy functionality" msgstr "Kauffunktionalität deaktivieren" -#: schon/settings/constance.py:88 +#: schon/settings/constance.py:108 msgid "OpenStreetMap Nominatim API URL" msgstr "OpenStreetMap Nominatim API URL" -#: schon/settings/constance.py:92 +#: schon/settings/constance.py:112 msgid "OpenAI API Key" msgstr "OpenAI API Key" -#: schon/settings/constance.py:96 +#: schon/settings/constance.py:116 msgid "Abstract API Key" msgstr "Abstrakter API-Schlüssel" -#: schon/settings/constance.py:104 +#: schon/settings/constance.py:124 msgid "HTTP Proxy" msgstr "HTTP-Proxy" -#: schon/settings/constance.py:112 +#: schon/settings/constance.py:132 msgid "An entity for storing advertisiment data" msgstr "Eine Einheit zur Speicherung von Werbedaten" -#: schon/settings/constance.py:120 +#: schon/settings/constance.py:140 msgid "An entity for storing analytics data" msgstr "Eine Einheit zur Speicherung von Analysedaten" -#: schon/settings/constance.py:125 +#: schon/settings/constance.py:145 msgid "Save responses from vendors' APIs" msgstr "Speichern von Antworten aus den APIs von Anbietern" -#: schon/settings/constance.py:126 +#: schon/settings/constance.py:146 msgid "Backup database" msgstr "Datenbank sichern" -#: schon/settings/constance.py:127 +#: schon/settings/constance.py:147 msgid "Backup media" msgstr "Sicherungsmedien" -#: schon/settings/constance.py:133 +#: schon/settings/constance.py:153 msgid "Legal Options" msgstr "Rechtliche Optionen" -#: schon/settings/constance.py:141 +#: schon/settings/constance.py:161 msgid "Email Options" msgstr "E-Mail-Optionen" -#: schon/settings/constance.py:151 +#: schon/settings/constance.py:171 msgid "Features Options" msgstr "Merkmale Optionen" -#: schon/settings/constance.py:160 +#: schon/settings/constance.py:181 msgid "SEO Options" msgstr "SEO-Optionen" -#: schon/settings/constance.py:164 +#: schon/settings/constance.py:185 msgid "System Options" msgstr "System Options" -#: schon/settings/drf.py:51 +#: schon/settings/drf.py:59 #, python-brace-format msgid "" "\n" "Welcome to the Schon documentation.\n" "\n" -"Schon is a powerful e-commerce platform that allows you to launch and manage " -"an online store of any kind in just a few clicks.\n" +"Schon is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks.\n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"SCHON-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-SCHON-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {access_lifetime} {access_unit}.\n" "- Refresh token lifetime is {refresh_hours} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -202,7 +195,6 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {version}\n" @@ -210,61 +202,40 @@ msgstr "" "\n" "Willkommen bei der Schon-Dokumentation.\n" "\n" -"Schon ist eine leistungsstarke E-Commerce-Plattform, die es Ihnen " -"ermöglicht, mit nur wenigen Klicks einen Online-Shop jeglicher Art zu " -"eröffnen und zu verwalten.\n" +"Schon ist eine leistungsstarke E-Commerce-Plattform, die es Ihnen ermöglicht, mit nur wenigen Klicks einen Online-Shop jeglicher Art zu eröffnen und zu verwalten.\n" "\n" "## Hauptmerkmale\n" -"- **Produktkatalog:** Verwalten Sie Produktdetails, Preise, Bestand und " -"Verfügbarkeit über mehrere Kategorien hinweg.\n" -"- **Auftragsverwaltung:** Verarbeiten Sie Aufträge, verfolgen Sie die " -"Ausführung und bearbeiten Sie Kundenanfragen effizient.\n" -"- **Authentifizierung & Autorisierung:** Umfassende " -"Benutzerauthentifizierung mit JWT-Tokens und rollenbasierten " -"Berechtigungen.\n" -"- **Zahlungsabwicklung:** Integrieren Sie mehrere Zahlungsgateways und " -"verwalten Sie Transaktionen auf sichere Weise.\n" -"- **Blog & Content Management:** Erstellen und verwalten Sie Blogbeiträge " -"und Marketinginhalte für Ihren Shop.\n" -"- **B2B-Betrieb:** Dedizierte Endpunkte für Business-to-Business-" -"Transaktionen und Großhandelsmanagement.\n" -"- **Mehrsprachige Unterstützung:** Bedienen Sie Kunden auf der ganzen Welt " -"mit vollständigen Internationalisierungsfunktionen (i18n).\n" -"- **Benutzerdefinierte Integrationen:** Erweiterbare API-Architektur für die " -"Integration mit externen Plattformen und Diensten.\n" -"- **Analytik & Reporting:** Generieren Sie detaillierte Berichte über " -"Verkäufe, Bestände und Kundenverhalten.\n" -"- **Echtzeit-Updates:** Erhalten Sie Live-Daten zu Lagerbeständen, " -"Bestellstatus und Preisänderungen.\n" +"- **Produktkatalog:** Verwalten Sie Produktdetails, Preise, Bestand und Verfügbarkeit über mehrere Kategorien hinweg.\n" +"- **Auftragsverwaltung:** Verarbeiten Sie Aufträge, verfolgen Sie die Ausführung und bearbeiten Sie Kundenanfragen effizient.\n" +"- **Authentifizierung & Autorisierung:** Umfassende Benutzerauthentifizierung mit JWT-Tokens und rollenbasierten Berechtigungen.\n" +"- **Zahlungsabwicklung:** Integrieren Sie mehrere Zahlungsgateways und verwalten Sie Transaktionen auf sichere Weise.\n" +"- **Blog & Content Management:** Erstellen und verwalten Sie Blogbeiträge und Marketinginhalte für Ihren Shop.\n" +"- **B2B-Betrieb:** Dedizierte Endpunkte für Business-to-Business-Transaktionen und Großhandelsmanagement.\n" +"- **Mehrsprachige Unterstützung:** Bedienen Sie Kunden auf der ganzen Welt mit vollständigen Internationalisierungsfunktionen (i18n).\n" +"- **Benutzerdefinierte Integrationen:** Erweiterbare API-Architektur für die Integration mit externen Plattformen und Diensten.\n" +"- **Analytik & Reporting:** Generieren Sie detaillierte Berichte über Verkäufe, Bestände und Kundenverhalten.\n" +"- **Echtzeit-Updates:** Erhalten Sie Live-Daten zu Lagerbeständen, Bestellstatus und Preisänderungen.\n" "\n" "## Verfügbare APIs\n" "- **REST API:** Vollständige RESTful-Schnittstelle (diese Dokumentation)\n" -"- **GraphQL API:** Verfügbar unter `/graphql/` mit GraphiQL-Schnittstelle " -"für interaktive Abfragen\n" +"- **GraphQL API:** Verfügbar unter `/graphql/` mit GraphiQL-Schnittstelle für interaktive Abfragen\n" "\n" "## Authentifizierung\n" -"- Die Authentifizierung erfolgt über JWT-Tokens. Fügen Sie das Token in den " -"`X-SCHON-AUTH`-Header Ihrer Anfragen im Format `Bearer ` ein.\n" -"- Die Lebensdauer des Zugangstokens beträgt {access_lifetime} " -"{access_unit}.\n" +"- Die Authentifizierung erfolgt über JWT-Tokens. Fügen Sie das Token in den `X-SCHON-AUTH`-Header Ihrer Anfragen im Format `Bearer ` ein.\n" +"- Die Lebensdauer des Zugangstokens beträgt {access_lifetime} {access_unit}.\n" "- Die Lebensdauer von Auffrischungstoken beträgt {refresh_hours} Stunden.\n" -"- Refresh-Tokens werden automatisch rotiert und nach der Verwendung ungültig " -"gemacht, um die Sicherheit zu erhöhen.\n" +"- Refresh-Tokens werden automatisch rotiert und nach der Verwendung ungültig gemacht, um die Sicherheit zu erhöhen.\n" "\n" "## Internationalisierung (i18n)\n" -"- Setzen Sie den `Accept-Language`-Header, um Ihre bevorzugte Sprache " -"anzugeben (z.B. `Accept-Language: en-US`).\n" -"- Die verfügbaren Sprachen können über den Endpunkt `/app/languages/` " -"abgerufen werden.\n" +"- Setzen Sie den `Accept-Language`-Header, um Ihre bevorzugte Sprache anzugeben (z.B. `Accept-Language: en-US`).\n" +"- Die verfügbaren Sprachen können über den Endpunkt `/app/languages/` abgerufen werden.\n" "- Alle benutzerseitigen Inhalte unterstützen von Haus aus mehrere Sprachen.\n" "\n" "## Antwortformate\n" "Die API unterstützt mehrere Antwortformate:\n" "- **JSON** (Standard, camelCase-formatiert)\n" -"- XML** (fügen Sie `?format=xml` hinzu oder setzen Sie `Accept: application/" -"xml`)\n" -"- **YAML** (fügen Sie `?format=yaml` hinzu oder legen Sie `Accept: " -"application/x-yaml` fest)\n" +"- XML** (fügen Sie `?format=xml` hinzu oder setzen Sie `Accept: application/xml`)\n" +"- **YAML** (fügen Sie `?format=yaml` hinzu oder legen Sie `Accept: application/x-yaml` fest)\n" "\n" "## Gesundheit & Überwachung\n" "- Gesundheitsprüfungen: `/health/`\n" @@ -301,38 +272,38 @@ msgstr "Konfigurieren Sie" msgid "Periodic Tasks" msgstr "Regelmäßige Aufgaben" -#: schon/settings/unfold.py:134 +#: schon/settings/unfold.py:129 msgid "Taskboard" msgstr "Aufgabentafel" -#: schon/settings/unfold.py:146 +#: schon/settings/unfold.py:141 msgid "Quick Links" msgstr "Schnelle Links" -#: schon/settings/unfold.py:151 +#: schon/settings/unfold.py:146 msgid "Users" msgstr "Benutzer" -#: schon/settings/unfold.py:156 +#: schon/settings/unfold.py:151 msgid "Groups" msgstr "Gruppen" -#: schon/settings/unfold.py:161 +#: schon/settings/unfold.py:156 msgid "Orders" msgstr "Bestellungen" -#: schon/settings/unfold.py:166 +#: schon/settings/unfold.py:161 msgid "Products" msgstr "Produkte" -#: schon/settings/unfold.py:171 +#: schon/settings/unfold.py:166 msgid "Categories" msgstr "Kategorien" -#: schon/settings/unfold.py:176 +#: schon/settings/unfold.py:171 msgid "Brands" msgstr "Marken" -#: schon/settings/unfold.py:181 +#: schon/settings/unfold.py:176 msgid "Blogposts" msgstr "Blogposts" diff --git a/schon/locale/en_GB/LC_MESSAGES/django.mo b/schon/locale/en_GB/LC_MESSAGES/django.mo index 57fc7069..cbcffce2 100644 Binary files a/schon/locale/en_GB/LC_MESSAGES/django.mo and b/schon/locale/en_GB/LC_MESSAGES/django.mo differ diff --git a/schon/locale/en_GB/LC_MESSAGES/django.po b/schon/locale/en_GB/LC_MESSAGES/django.po index 414018c0..1bcb1243 100644 --- a/schon/locale/en_GB/LC_MESSAGES/django.po +++ b/schon/locale/en_GB/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: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:16+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,19 +17,19 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: schon/settings/constance.py:24 +#: schon/settings/constance.py:31 msgid "Name of the company" msgstr "Name of the company" -#: schon/settings/constance.py:25 +#: schon/settings/constance.py:32 msgid "Address of the company" msgstr "Address of the company" -#: schon/settings/constance.py:28 +#: schon/settings/constance.py:35 msgid "Phone number of the company" msgstr "Phone number of the company" -#: schon/settings/constance.py:35 +#: schon/settings/constance.py:42 msgid "" "Tax rate in jurisdiction of your company. Leave 0 if you don't want to " "process taxes." @@ -37,161 +37,154 @@ msgstr "" "Tax rate in jurisdiction of your company. Leave 0 if you don't want to " "process taxes." -#: schon/settings/constance.py:44 +#: schon/settings/constance.py:51 msgid "Shows if the taxes are already included in product's selling prices" msgstr "Shows if the taxes are already included in product's selling prices" -#: schon/settings/constance.py:52 +#: schon/settings/constance.py:59 msgid "Exchange rate API key" msgstr "Exchange rate API key" -#: schon/settings/constance.py:58 +#: schon/settings/constance.py:65 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!DO NOT CHANGE!!!" -#: schon/settings/constance.py:60 +#: schon/settings/constance.py:67 msgid "SMTP host" msgstr "SMTP host" -#: schon/settings/constance.py:61 +#: schon/settings/constance.py:68 msgid "SMTP port" msgstr "SMTP port" -#: schon/settings/constance.py:62 +#: schon/settings/constance.py:69 msgid "Use TLS" msgstr "Use TLS" -#: schon/settings/constance.py:63 +#: schon/settings/constance.py:70 msgid "Use SSL" msgstr "Use SSL" -#: schon/settings/constance.py:66 +#: schon/settings/constance.py:73 msgid "SMTP username" msgstr "SMTP username" -#: schon/settings/constance.py:70 +#: schon/settings/constance.py:79 msgid "SMTP password" msgstr "SMTP password" -#: schon/settings/constance.py:72 +#: schon/settings/constance.py:83 msgid "Mail from option" msgstr "Mail from option" -#: schon/settings/constance.py:76 +#: schon/settings/constance.py:90 +msgid "" +"Export products to specified marketplaces. Comma-separated list from " +"" +msgstr "" +"Export products to specified marketplaces. Comma-separated list from " +"" + +#: schon/settings/constance.py:96 msgid "How many days we store messages from anonymous users" msgstr "How many days we store messages from anonymous users" -#: schon/settings/constance.py:80 +#: schon/settings/constance.py:100 msgid "How many days we store messages from authenticated users" msgstr "How many days we store messages from authenticated users" -#: schon/settings/constance.py:84 +#: schon/settings/constance.py:104 msgid "Disable buy functionality" msgstr "Disable buy functionality" -#: schon/settings/constance.py:88 +#: schon/settings/constance.py:108 msgid "OpenStreetMap Nominatim API URL" msgstr "OpenStreetMap Nominatim API URL" -#: schon/settings/constance.py:92 +#: schon/settings/constance.py:112 msgid "OpenAI API Key" msgstr "OpenAI API Key" -#: schon/settings/constance.py:96 +#: schon/settings/constance.py:116 msgid "Abstract API Key" msgstr "Abstract API Key" -#: schon/settings/constance.py:104 +#: schon/settings/constance.py:124 msgid "HTTP Proxy" msgstr "HTTP Proxy" -#: schon/settings/constance.py:112 +#: schon/settings/constance.py:132 msgid "An entity for storing advertisiment data" msgstr "An entity for storing advertisiment data" -#: schon/settings/constance.py:120 +#: schon/settings/constance.py:140 msgid "An entity for storing analytics data" msgstr "An entity for storing analytics data" -#: schon/settings/constance.py:125 +#: schon/settings/constance.py:145 msgid "Save responses from vendors' APIs" msgstr "Save responses from vendors' APIs" -#: schon/settings/constance.py:126 +#: schon/settings/constance.py:146 msgid "Backup database" msgstr "Backup database" -#: schon/settings/constance.py:127 +#: schon/settings/constance.py:147 msgid "Backup media" msgstr "Backup media" -#: schon/settings/constance.py:133 +#: schon/settings/constance.py:153 msgid "Legal Options" msgstr "Legal Options" -#: schon/settings/constance.py:141 +#: schon/settings/constance.py:161 msgid "Email Options" msgstr "Email Options" -#: schon/settings/constance.py:151 +#: schon/settings/constance.py:171 msgid "Features Options" msgstr "Features Options" -#: schon/settings/constance.py:160 +#: schon/settings/constance.py:181 msgid "SEO Options" msgstr "SEO Options" -#: schon/settings/constance.py:164 +#: schon/settings/constance.py:185 msgid "System Options" msgstr "System Options" -#: schon/settings/drf.py:51 +#: schon/settings/drf.py:59 #, python-brace-format msgid "" "\n" "Welcome to the Schon documentation.\n" "\n" -"Schon is a powerful e-commerce platform that allows you to launch and manage " -"an online store of any kind in just a few clicks.\n" +"Schon is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks.\n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"SCHON-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-SCHON-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {access_lifetime} {access_unit}.\n" "- Refresh token lifetime is {refresh_hours} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -203,7 +196,6 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {version}\n" @@ -211,47 +203,32 @@ msgstr "" "\n" "Welcome to the Schon documentation.\n" "\n" -"Schon is a powerful e-commerce platform that allows you to launch and manage " -"an online store of any kind in just a few clicks.\n" +"Schon is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks.\n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"SCHON-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-SCHON-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {access_lifetime} {access_unit}.\n" "- Refresh token lifetime is {refresh_hours} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -296,38 +273,38 @@ msgstr "Config" msgid "Periodic Tasks" msgstr "Periodic Tasks" -#: schon/settings/unfold.py:134 +#: schon/settings/unfold.py:129 msgid "Taskboard" msgstr "Taskboard" -#: schon/settings/unfold.py:146 +#: schon/settings/unfold.py:141 msgid "Quick Links" msgstr "Quick Links" -#: schon/settings/unfold.py:151 +#: schon/settings/unfold.py:146 msgid "Users" msgstr "Users" -#: schon/settings/unfold.py:156 +#: schon/settings/unfold.py:151 msgid "Groups" msgstr "Groups" -#: schon/settings/unfold.py:161 +#: schon/settings/unfold.py:156 msgid "Orders" msgstr "Orders" -#: schon/settings/unfold.py:166 +#: schon/settings/unfold.py:161 msgid "Products" msgstr "Products" -#: schon/settings/unfold.py:171 +#: schon/settings/unfold.py:166 msgid "Categories" msgstr "Categories" -#: schon/settings/unfold.py:176 +#: schon/settings/unfold.py:171 msgid "Brands" msgstr "Brands" -#: schon/settings/unfold.py:181 +#: schon/settings/unfold.py:176 msgid "Blogposts" msgstr "Blogposts" diff --git a/schon/locale/en_US/LC_MESSAGES/django.mo b/schon/locale/en_US/LC_MESSAGES/django.mo index 22e210f4..c5e2429f 100644 Binary files a/schon/locale/en_US/LC_MESSAGES/django.mo and b/schon/locale/en_US/LC_MESSAGES/django.mo differ diff --git a/schon/locale/en_US/LC_MESSAGES/django.po b/schon/locale/en_US/LC_MESSAGES/django.po index cc961a40..42d2894c 100644 --- a/schon/locale/en_US/LC_MESSAGES/django.po +++ b/schon/locale/en_US/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:21+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -13,19 +13,19 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: schon/settings/constance.py:24 +#: schon/settings/constance.py:31 msgid "Name of the company" msgstr "Name of the company" -#: schon/settings/constance.py:25 +#: schon/settings/constance.py:32 msgid "Address of the company" msgstr "Address of the company" -#: schon/settings/constance.py:28 +#: schon/settings/constance.py:35 msgid "Phone number of the company" msgstr "Phone number of the company" -#: schon/settings/constance.py:35 +#: schon/settings/constance.py:42 msgid "" "Tax rate in jurisdiction of your company. Leave 0 if you don't want to " "process taxes." @@ -33,161 +33,154 @@ msgstr "" "Tax rate in jurisdiction of your company. Leave 0 if you don't want to " "process taxes." -#: schon/settings/constance.py:44 +#: schon/settings/constance.py:51 msgid "Shows if the taxes are already included in product's selling prices" msgstr "Shows if the taxes are already included in product's selling prices" -#: schon/settings/constance.py:52 +#: schon/settings/constance.py:59 msgid "Exchange rate API key" msgstr "Exchange rate API key" -#: schon/settings/constance.py:58 +#: schon/settings/constance.py:65 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!DO NOT CHANGE!!!" -#: schon/settings/constance.py:60 +#: schon/settings/constance.py:67 msgid "SMTP host" msgstr "SMTP host" -#: schon/settings/constance.py:61 +#: schon/settings/constance.py:68 msgid "SMTP port" msgstr "SMTP port" -#: schon/settings/constance.py:62 +#: schon/settings/constance.py:69 msgid "Use TLS" msgstr "Use TLS" -#: schon/settings/constance.py:63 +#: schon/settings/constance.py:70 msgid "Use SSL" msgstr "Use SSL" -#: schon/settings/constance.py:66 +#: schon/settings/constance.py:73 msgid "SMTP username" msgstr "SMTP username" -#: schon/settings/constance.py:70 +#: schon/settings/constance.py:79 msgid "SMTP password" msgstr "SMTP password" -#: schon/settings/constance.py:72 +#: schon/settings/constance.py:83 msgid "Mail from option" msgstr "Mail from option" -#: schon/settings/constance.py:76 +#: schon/settings/constance.py:90 +msgid "" +"Export products to specified marketplaces. Comma-separated list from " +"" +msgstr "" +"Export products to specified marketplaces. Comma-separated list from " +"" + +#: schon/settings/constance.py:96 msgid "How many days we store messages from anonymous users" msgstr "How many days we store messages from anonymous users" -#: schon/settings/constance.py:80 +#: schon/settings/constance.py:100 msgid "How many days we store messages from authenticated users" msgstr "How many days we store messages from authenticated users" -#: schon/settings/constance.py:84 +#: schon/settings/constance.py:104 msgid "Disable buy functionality" msgstr "Disable buy functionality" -#: schon/settings/constance.py:88 +#: schon/settings/constance.py:108 msgid "OpenStreetMap Nominatim API URL" msgstr "OpenStreetMap Nominatim API URL" -#: schon/settings/constance.py:92 +#: schon/settings/constance.py:112 msgid "OpenAI API Key" msgstr "OpenAI API Key" -#: schon/settings/constance.py:96 +#: schon/settings/constance.py:116 msgid "Abstract API Key" msgstr "Abstract API Key" -#: schon/settings/constance.py:104 +#: schon/settings/constance.py:124 msgid "HTTP Proxy" msgstr "HTTP Proxy" -#: schon/settings/constance.py:112 +#: schon/settings/constance.py:132 msgid "An entity for storing advertisiment data" msgstr "An entity for storing advertisiment data" -#: schon/settings/constance.py:120 +#: schon/settings/constance.py:140 msgid "An entity for storing analytics data" msgstr "An entity for storing analytics data" -#: schon/settings/constance.py:125 +#: schon/settings/constance.py:145 msgid "Save responses from vendors' APIs" msgstr "Save responses from vendors' APIs" -#: schon/settings/constance.py:126 +#: schon/settings/constance.py:146 msgid "Backup database" msgstr "Backup database" -#: schon/settings/constance.py:127 +#: schon/settings/constance.py:147 msgid "Backup media" msgstr "Backup media" -#: schon/settings/constance.py:133 +#: schon/settings/constance.py:153 msgid "Legal Options" msgstr "Legal Options" -#: schon/settings/constance.py:141 +#: schon/settings/constance.py:161 msgid "Email Options" msgstr "Email Options" -#: schon/settings/constance.py:151 +#: schon/settings/constance.py:171 msgid "Features Options" msgstr "Features Options" -#: schon/settings/constance.py:160 +#: schon/settings/constance.py:181 msgid "SEO Options" msgstr "SEO Options" -#: schon/settings/constance.py:164 +#: schon/settings/constance.py:185 msgid "System Options" msgstr "System Options" -#: schon/settings/drf.py:51 +#: schon/settings/drf.py:59 #, python-brace-format msgid "" "\n" "Welcome to the Schon documentation.\n" "\n" -"Schon is a powerful e-commerce platform that allows you to launch and manage " -"an online store of any kind in just a few clicks.\n" +"Schon is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks.\n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"SCHON-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-SCHON-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {access_lifetime} {access_unit}.\n" "- Refresh token lifetime is {refresh_hours} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -199,7 +192,6 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {version}\n" @@ -207,47 +199,32 @@ msgstr "" "\n" "Welcome to the Schon documentation.\n" "\n" -"Schon is a powerful e-commerce platform that allows you to launch and manage " -"an online store of any kind in just a few clicks.\n" +"Schon is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks.\n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"SCHON-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-SCHON-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {access_lifetime} {access_unit}.\n" "- Refresh token lifetime is {refresh_hours} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -292,38 +269,38 @@ msgstr "Config" msgid "Periodic Tasks" msgstr "Periodic Tasks" -#: schon/settings/unfold.py:134 +#: schon/settings/unfold.py:129 msgid "Taskboard" msgstr "Taskboard" -#: schon/settings/unfold.py:146 +#: schon/settings/unfold.py:141 msgid "Quick Links" msgstr "Quick Links" -#: schon/settings/unfold.py:151 +#: schon/settings/unfold.py:146 msgid "Users" msgstr "Users" -#: schon/settings/unfold.py:156 +#: schon/settings/unfold.py:151 msgid "Groups" msgstr "Groups" -#: schon/settings/unfold.py:161 +#: schon/settings/unfold.py:156 msgid "Orders" msgstr "Orders" -#: schon/settings/unfold.py:166 +#: schon/settings/unfold.py:161 msgid "Products" msgstr "Products" -#: schon/settings/unfold.py:171 +#: schon/settings/unfold.py:166 msgid "Categories" msgstr "Categories" -#: schon/settings/unfold.py:176 +#: schon/settings/unfold.py:171 msgid "Brands" msgstr "Brands" -#: schon/settings/unfold.py:181 +#: schon/settings/unfold.py:176 msgid "Blogposts" msgstr "Blogposts" diff --git a/schon/locale/es_ES/LC_MESSAGES/django.mo b/schon/locale/es_ES/LC_MESSAGES/django.mo index 21df1453..3011b26f 100644 Binary files a/schon/locale/es_ES/LC_MESSAGES/django.mo and b/schon/locale/es_ES/LC_MESSAGES/django.mo differ diff --git a/schon/locale/es_ES/LC_MESSAGES/django.po b/schon/locale/es_ES/LC_MESSAGES/django.po index 313af52e..a5f483f3 100644 --- a/schon/locale/es_ES/LC_MESSAGES/django.po +++ b/schon/locale/es_ES/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 01:44+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -13,19 +13,19 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: schon/settings/constance.py:24 +#: schon/settings/constance.py:31 msgid "Name of the company" msgstr "Nombre de la empresa" -#: schon/settings/constance.py:25 +#: schon/settings/constance.py:32 msgid "Address of the company" msgstr "Dirección de la empresa" -#: schon/settings/constance.py:28 +#: schon/settings/constance.py:35 msgid "Phone number of the company" msgstr "Número de teléfono de la empresa" -#: schon/settings/constance.py:35 +#: schon/settings/constance.py:42 msgid "" "Tax rate in jurisdiction of your company. Leave 0 if you don't want to " "process taxes." @@ -33,163 +33,156 @@ msgstr "" "Tipo impositivo en la jurisdicción de su empresa. Deje 0 si no desea " "procesar los impuestos." -#: schon/settings/constance.py:44 +#: schon/settings/constance.py:51 msgid "Shows if the taxes are already included in product's selling prices" msgstr "" "Muestra si los impuestos ya están incluidos en los precios de venta del " "producto" -#: schon/settings/constance.py:52 +#: schon/settings/constance.py:59 msgid "Exchange rate API key" msgstr "Clave API de tipo de cambio" -#: schon/settings/constance.py:58 +#: schon/settings/constance.py:65 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!NO CAMBIES!!!" -#: schon/settings/constance.py:60 +#: schon/settings/constance.py:67 msgid "SMTP host" msgstr "Host SMTP" -#: schon/settings/constance.py:61 +#: schon/settings/constance.py:68 msgid "SMTP port" msgstr "Puerto SMTP" -#: schon/settings/constance.py:62 +#: schon/settings/constance.py:69 msgid "Use TLS" msgstr "Utilizar TLS" -#: schon/settings/constance.py:63 +#: schon/settings/constance.py:70 msgid "Use SSL" msgstr "Utilizar SSL" -#: schon/settings/constance.py:66 +#: schon/settings/constance.py:73 msgid "SMTP username" msgstr "Nombre de usuario SMTP" -#: schon/settings/constance.py:70 +#: schon/settings/constance.py:79 msgid "SMTP password" msgstr "Contraseña SMTP" -#: schon/settings/constance.py:72 +#: schon/settings/constance.py:83 msgid "Mail from option" msgstr "Opción Correo de" -#: schon/settings/constance.py:76 +#: schon/settings/constance.py:90 +msgid "" +"Export products to specified marketplaces. Comma-separated list from " +"" +msgstr "" +"Exportar productos a mercados específicos. Lista separada por comas de " +"." + +#: schon/settings/constance.py:96 msgid "How many days we store messages from anonymous users" msgstr "Cuántos días almacenamos los mensajes de usuarios anónimos" -#: schon/settings/constance.py:80 +#: schon/settings/constance.py:100 msgid "How many days we store messages from authenticated users" msgstr "Cuántos días almacenamos los mensajes de los usuarios autenticados" -#: schon/settings/constance.py:84 +#: schon/settings/constance.py:104 msgid "Disable buy functionality" msgstr "Desactivar la función de compra" -#: schon/settings/constance.py:88 +#: schon/settings/constance.py:108 msgid "OpenStreetMap Nominatim API URL" msgstr "URL de la API Nominatim de OpenStreetMap" -#: schon/settings/constance.py:92 +#: schon/settings/constance.py:112 msgid "OpenAI API Key" msgstr "Clave API de OpenAI" -#: schon/settings/constance.py:96 +#: schon/settings/constance.py:116 msgid "Abstract API Key" msgstr "Clave API abstracta" -#: schon/settings/constance.py:104 +#: schon/settings/constance.py:124 msgid "HTTP Proxy" msgstr "Proxy HTTP" -#: schon/settings/constance.py:112 +#: schon/settings/constance.py:132 msgid "An entity for storing advertisiment data" msgstr "Una entidad para almacenar datos publicitarios" -#: schon/settings/constance.py:120 +#: schon/settings/constance.py:140 msgid "An entity for storing analytics data" msgstr "Una entidad para almacenar datos analíticos" -#: schon/settings/constance.py:125 +#: schon/settings/constance.py:145 msgid "Save responses from vendors' APIs" msgstr "Guardar las respuestas de las API de los proveedores" -#: schon/settings/constance.py:126 +#: schon/settings/constance.py:146 msgid "Backup database" msgstr "Copia de seguridad de la base de datos" -#: schon/settings/constance.py:127 +#: schon/settings/constance.py:147 msgid "Backup media" msgstr "Medios de copia de seguridad" -#: schon/settings/constance.py:133 +#: schon/settings/constance.py:153 msgid "Legal Options" msgstr "Opciones legales" -#: schon/settings/constance.py:141 +#: schon/settings/constance.py:161 msgid "Email Options" msgstr "Opciones de correo electrónico" -#: schon/settings/constance.py:151 +#: schon/settings/constance.py:171 msgid "Features Options" msgstr "Características Opciones" -#: schon/settings/constance.py:160 +#: schon/settings/constance.py:181 msgid "SEO Options" msgstr "Opciones SEO" -#: schon/settings/constance.py:164 +#: schon/settings/constance.py:185 msgid "System Options" msgstr "Opciones del sistema" -#: schon/settings/drf.py:51 +#: schon/settings/drf.py:59 #, python-brace-format msgid "" "\n" "Welcome to the Schon documentation.\n" "\n" -"Schon is a powerful e-commerce platform that allows you to launch and manage " -"an online store of any kind in just a few clicks.\n" +"Schon is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks.\n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"SCHON-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-SCHON-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {access_lifetime} {access_unit}.\n" "- Refresh token lifetime is {refresh_hours} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -201,7 +194,6 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {version}\n" @@ -209,53 +201,34 @@ msgstr "" "\n" "Bienvenido a la documentación de Schon.\n" "\n" -"Schon es una potente plataforma de comercio electrónico que le permite " -"lanzar y gestionar una tienda en línea de cualquier tipo en tan sólo unos " -"clics.\n" +"Schon es una potente plataforma de comercio electrónico que le permite lanzar y gestionar una tienda en línea de cualquier tipo en tan sólo unos clics.\n" "\n" "## Características principales\n" -"- **Catálogo de productos:** Gestione los detalles de los productos, " -"precios, inventario y disponibilidad en múltiples categorías.\n" -"- **Gestión de Pedidos:** Procesar pedidos, seguimiento de cumplimiento, y " -"manejar las solicitudes de los clientes de manera eficiente.\n" -"- Autenticación y autorización:Autenticación de usuario integral con tokens " -"JWT y permisos basados en roles.\n" -"- **Procesamiento de pagos:** Integre múltiples pasarelas de pago y gestione " -"las transacciones de forma segura.\n" -"- **Blog y gestión de contenidos:** Crear y gestionar entradas de blog y " -"contenido de marketing para su tienda.\n" -"- **Operaciones B2B:** Puntos finales dedicados para transacciones de " -"empresa a empresa y gestión de ventas al por mayor.\n" -"- Soporte multilingüe:** Sirve a clientes de todo el mundo con capacidades " -"de internacionalización completa (i18n).\n" -"- Integraciones personalizadas:** Arquitectura API extensible para la " -"integración con plataformas y servicios externos.\n" -"- Análisis e informes:** Generación de informes detallados sobre ventas, " -"inventario y comportamiento de los clientes.\n" -"- Actualizaciones en tiempo real:** Obtenga datos en tiempo real sobre los " -"niveles de inventario, el estado de los pedidos y los cambios de precios.\n" +"- **Catálogo de productos:** Gestione los detalles de los productos, precios, inventario y disponibilidad en múltiples categorías.\n" +"- **Gestión de Pedidos:** Procesar pedidos, seguimiento de cumplimiento, y manejar las solicitudes de los clientes de manera eficiente.\n" +"- Autenticación y autorización:Autenticación de usuario integral con tokens JWT y permisos basados en roles.\n" +"- **Procesamiento de pagos:** Integre múltiples pasarelas de pago y gestione las transacciones de forma segura.\n" +"- **Blog y gestión de contenidos:** Crear y gestionar entradas de blog y contenido de marketing para su tienda.\n" +"- **Operaciones B2B:** Puntos finales dedicados para transacciones de empresa a empresa y gestión de ventas al por mayor.\n" +"- Soporte multilingüe:** Sirve a clientes de todo el mundo con capacidades de internacionalización completa (i18n).\n" +"- Integraciones personalizadas:** Arquitectura API extensible para la integración con plataformas y servicios externos.\n" +"- Análisis e informes:** Generación de informes detallados sobre ventas, inventario y comportamiento de los clientes.\n" +"- Actualizaciones en tiempo real:** Obtenga datos en tiempo real sobre los niveles de inventario, el estado de los pedidos y los cambios de precios.\n" "\n" "## API disponibles\n" "- API REST:** Interfaz RESTful completa (esta documentación)\n" -"- API GraphQL:** Disponible en `/graphql/` con interfaz GraphiQL para " -"consultas interactivas\n" +"- API GraphQL:** Disponible en `/graphql/` con interfaz GraphiQL para consultas interactivas\n" "\n" "## Autenticación\n" -"- La autenticación se gestiona mediante tokens JWT. Incluya el token en la " -"cabecera `X-SCHON-AUTH` de sus peticiones con el formato `Bearer " -"`.\n" +"- La autenticación se gestiona mediante tokens JWT. Incluya el token en la cabecera `X-SCHON-AUTH` de sus peticiones con el formato `Bearer `.\n" "- La duración del token de acceso es {access_lifetime} {access_unit}.\n" "- La duración del token de actualización es de {refresh_hours} horas.\n" -"- Los tokens de actualización se rotan automáticamente y se invalidan " -"después de su uso para mejorar la seguridad.\n" +"- Los tokens de actualización se rotan automáticamente y se invalidan después de su uso para mejorar la seguridad.\n" "\n" "## Internacionalización (i18n)\n" -"- Establezca la cabecera `Accept-Language` para especificar su idioma " -"preferido (por ejemplo, `Accept-Language: en-US`).\n" -"- Los idiomas disponibles pueden recuperarse desde el punto final `/app/" -"languages/`.\n" -"- Todos los contenidos orientados al usuario son compatibles con varios " -"idiomas.\n" +"- Establezca la cabecera `Accept-Language` para especificar su idioma preferido (por ejemplo, `Accept-Language: en-US`).\n" +"- Los idiomas disponibles pueden recuperarse desde el punto final `/app/languages/`.\n" +"- Todos los contenidos orientados al usuario son compatibles con varios idiomas.\n" "\n" "## Formatos de respuesta\n" "La API admite varios formatos de respuesta:\n" @@ -298,38 +271,38 @@ msgstr "Configurar" msgid "Periodic Tasks" msgstr "Tareas periódicas" -#: schon/settings/unfold.py:134 +#: schon/settings/unfold.py:129 msgid "Taskboard" msgstr "Taskboard" -#: schon/settings/unfold.py:146 +#: schon/settings/unfold.py:141 msgid "Quick Links" msgstr "Enlaces rápidos" -#: schon/settings/unfold.py:151 +#: schon/settings/unfold.py:146 msgid "Users" msgstr "Usuarios" -#: schon/settings/unfold.py:156 +#: schon/settings/unfold.py:151 msgid "Groups" msgstr "Grupos" -#: schon/settings/unfold.py:161 +#: schon/settings/unfold.py:156 msgid "Orders" msgstr "Pedidos" -#: schon/settings/unfold.py:166 +#: schon/settings/unfold.py:161 msgid "Products" msgstr "Productos" -#: schon/settings/unfold.py:171 +#: schon/settings/unfold.py:166 msgid "Categories" msgstr "Categorías" -#: schon/settings/unfold.py:176 +#: schon/settings/unfold.py:171 msgid "Brands" msgstr "Marcas" -#: schon/settings/unfold.py:181 +#: schon/settings/unfold.py:176 msgid "Blogposts" msgstr "Blogposts" diff --git a/schon/locale/fa_IR/LC_MESSAGES/django.po b/schon/locale/fa_IR/LC_MESSAGES/django.po index a906746c..1c94641e 100644 --- a/schon/locale/fa_IR/LC_MESSAGES/django.po +++ b/schon/locale/fa_IR/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 01:44+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,133 +16,139 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: schon/settings/constance.py:24 +#: schon/settings/constance.py:31 msgid "Name of the company" msgstr "" -#: schon/settings/constance.py:25 +#: schon/settings/constance.py:32 msgid "Address of the company" msgstr "" -#: schon/settings/constance.py:28 +#: schon/settings/constance.py:35 msgid "Phone number of the company" msgstr "" -#: schon/settings/constance.py:35 +#: schon/settings/constance.py:42 msgid "" "Tax rate in jurisdiction of your company. Leave 0 if you don't want to " "process taxes." msgstr "" -#: schon/settings/constance.py:44 +#: schon/settings/constance.py:51 msgid "Shows if the taxes are already included in product's selling prices" msgstr "" -#: schon/settings/constance.py:52 +#: schon/settings/constance.py:59 msgid "Exchange rate API key" msgstr "" -#: schon/settings/constance.py:58 +#: schon/settings/constance.py:65 msgid "!!!DO NOT CHANGE!!!" msgstr "" -#: schon/settings/constance.py:60 +#: schon/settings/constance.py:67 msgid "SMTP host" msgstr "" -#: schon/settings/constance.py:61 +#: schon/settings/constance.py:68 msgid "SMTP port" msgstr "" -#: schon/settings/constance.py:62 +#: schon/settings/constance.py:69 msgid "Use TLS" msgstr "" -#: schon/settings/constance.py:63 +#: schon/settings/constance.py:70 msgid "Use SSL" msgstr "" -#: schon/settings/constance.py:66 +#: schon/settings/constance.py:73 msgid "SMTP username" msgstr "" -#: schon/settings/constance.py:70 +#: schon/settings/constance.py:79 msgid "SMTP password" msgstr "" -#: schon/settings/constance.py:72 +#: schon/settings/constance.py:83 msgid "Mail from option" msgstr "" -#: schon/settings/constance.py:76 -msgid "How many days we store messages from anonymous users" -msgstr "" - -#: schon/settings/constance.py:80 -msgid "How many days we store messages from authenticated users" -msgstr "" - -#: schon/settings/constance.py:84 -msgid "Disable buy functionality" -msgstr "" - -#: schon/settings/constance.py:88 -msgid "OpenStreetMap Nominatim API URL" -msgstr "" - -#: schon/settings/constance.py:92 -msgid "OpenAI API Key" +#: schon/settings/constance.py:90 +msgid "" +"Export products to specified marketplaces. Comma-separated list from " +"" msgstr "" #: schon/settings/constance.py:96 -msgid "Abstract API Key" +msgid "How many days we store messages from anonymous users" +msgstr "" + +#: schon/settings/constance.py:100 +msgid "How many days we store messages from authenticated users" msgstr "" #: schon/settings/constance.py:104 -msgid "HTTP Proxy" +msgid "Disable buy functionality" +msgstr "" + +#: schon/settings/constance.py:108 +msgid "OpenStreetMap Nominatim API URL" msgstr "" #: schon/settings/constance.py:112 +msgid "OpenAI API Key" +msgstr "" + +#: schon/settings/constance.py:116 +msgid "Abstract API Key" +msgstr "" + +#: schon/settings/constance.py:124 +msgid "HTTP Proxy" +msgstr "" + +#: schon/settings/constance.py:132 msgid "An entity for storing advertisiment data" msgstr "" -#: schon/settings/constance.py:120 +#: schon/settings/constance.py:140 msgid "An entity for storing analytics data" msgstr "" -#: schon/settings/constance.py:125 +#: schon/settings/constance.py:145 msgid "Save responses from vendors' APIs" msgstr "" -#: schon/settings/constance.py:126 +#: schon/settings/constance.py:146 msgid "Backup database" msgstr "" -#: schon/settings/constance.py:127 +#: schon/settings/constance.py:147 msgid "Backup media" msgstr "" -#: schon/settings/constance.py:133 +#: schon/settings/constance.py:153 msgid "Legal Options" msgstr "" -#: schon/settings/constance.py:141 +#: schon/settings/constance.py:161 msgid "Email Options" msgstr "" -#: schon/settings/constance.py:151 +#: schon/settings/constance.py:171 msgid "Features Options" msgstr "" -#: schon/settings/constance.py:160 +#: schon/settings/constance.py:181 msgid "SEO Options" msgstr "" -#: schon/settings/constance.py:164 +#: schon/settings/constance.py:185 msgid "System Options" msgstr "" -#: schon/settings/drf.py:51 +#: schon/settings/drf.py:59 #, python-brace-format msgid "" "\n" @@ -200,7 +206,6 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {version}\n" @@ -234,38 +239,38 @@ msgstr "" msgid "Periodic Tasks" msgstr "" -#: schon/settings/unfold.py:134 +#: schon/settings/unfold.py:129 msgid "Taskboard" msgstr "" -#: schon/settings/unfold.py:146 +#: schon/settings/unfold.py:141 msgid "Quick Links" msgstr "" -#: schon/settings/unfold.py:151 +#: schon/settings/unfold.py:146 msgid "Users" msgstr "" -#: schon/settings/unfold.py:156 +#: schon/settings/unfold.py:151 msgid "Groups" msgstr "" -#: schon/settings/unfold.py:161 +#: schon/settings/unfold.py:156 msgid "Orders" msgstr "" -#: schon/settings/unfold.py:166 +#: schon/settings/unfold.py:161 msgid "Products" msgstr "" -#: schon/settings/unfold.py:171 +#: schon/settings/unfold.py:166 msgid "Categories" msgstr "" -#: schon/settings/unfold.py:176 +#: schon/settings/unfold.py:171 msgid "Brands" msgstr "" -#: schon/settings/unfold.py:181 +#: schon/settings/unfold.py:176 msgid "Blogposts" msgstr "" diff --git a/schon/locale/fr_FR/LC_MESSAGES/django.mo b/schon/locale/fr_FR/LC_MESSAGES/django.mo index 3bbc9d57..bd10c7a1 100644 Binary files a/schon/locale/fr_FR/LC_MESSAGES/django.mo and b/schon/locale/fr_FR/LC_MESSAGES/django.mo differ diff --git a/schon/locale/fr_FR/LC_MESSAGES/django.po b/schon/locale/fr_FR/LC_MESSAGES/django.po index 51d018f3..aa4639c9 100644 --- a/schon/locale/fr_FR/LC_MESSAGES/django.po +++ b/schon/locale/fr_FR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 01:44+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -13,186 +13,180 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: schon/settings/constance.py:24 +#: schon/settings/constance.py:31 msgid "Name of the company" msgstr "Nom de l'entreprise" -#: schon/settings/constance.py:25 +#: schon/settings/constance.py:32 msgid "Address of the company" msgstr "Adresse de l'entreprise" -#: schon/settings/constance.py:28 +#: schon/settings/constance.py:35 msgid "Phone number of the company" msgstr "Numéro de téléphone de l'entreprise" -#: schon/settings/constance.py:35 +#: schon/settings/constance.py:42 msgid "" "Tax rate in jurisdiction of your company. Leave 0 if you don't want to " "process taxes." msgstr "" -"Taux d'imposition dans la juridiction de votre entreprise. Laissez 0 si vous " -"ne souhaitez pas traiter les taxes." +"Taux d'imposition dans la juridiction de votre entreprise. Laissez 0 si vous" +" ne souhaitez pas traiter les taxes." -#: schon/settings/constance.py:44 +#: schon/settings/constance.py:51 msgid "Shows if the taxes are already included in product's selling prices" msgstr "" "Indique si les taxes sont déjà incluses dans le prix de vente du produit." -#: schon/settings/constance.py:52 +#: schon/settings/constance.py:59 msgid "Exchange rate API key" msgstr "Clé API pour le taux de change" -#: schon/settings/constance.py:58 +#: schon/settings/constance.py:65 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!NE PAS CHANGER !!!" -#: schon/settings/constance.py:60 +#: schon/settings/constance.py:67 msgid "SMTP host" msgstr "Hôte SMTP" -#: schon/settings/constance.py:61 +#: schon/settings/constance.py:68 msgid "SMTP port" msgstr "SMTP port" -#: schon/settings/constance.py:62 +#: schon/settings/constance.py:69 msgid "Use TLS" msgstr "Utiliser TLS" -#: schon/settings/constance.py:63 +#: schon/settings/constance.py:70 msgid "Use SSL" msgstr "Use SSL" -#: schon/settings/constance.py:66 +#: schon/settings/constance.py:73 msgid "SMTP username" msgstr "Nom d'utilisateur SMTP" -#: schon/settings/constance.py:70 +#: schon/settings/constance.py:79 msgid "SMTP password" msgstr "Mot de passe SMTP" -#: schon/settings/constance.py:72 +#: schon/settings/constance.py:83 msgid "Mail from option" msgstr "Option Courrier de" -#: schon/settings/constance.py:76 +#: schon/settings/constance.py:90 +msgid "" +"Export products to specified marketplaces. Comma-separated list from " +"" +msgstr "" +"Exporter les produits vers les marchés spécifiés. Liste séparée par des " +"virgules provenant de " +"." + +#: schon/settings/constance.py:96 msgid "How many days we store messages from anonymous users" msgstr "" "Pendant combien de jours les messages des utilisateurs anonymes sont-ils " "conservés ?" -#: schon/settings/constance.py:80 +#: schon/settings/constance.py:100 msgid "How many days we store messages from authenticated users" msgstr "" -"Pendant combien de jours les messages des utilisateurs authentifiés sont-ils " -"conservés ?" +"Pendant combien de jours les messages des utilisateurs authentifiés sont-ils" +" conservés ?" -#: schon/settings/constance.py:84 +#: schon/settings/constance.py:104 msgid "Disable buy functionality" msgstr "Désactiver la fonctionnalité d'achat" -#: schon/settings/constance.py:88 +#: schon/settings/constance.py:108 msgid "OpenStreetMap Nominatim API URL" msgstr "URL de l'API OpenStreetMap Nominatim" -#: schon/settings/constance.py:92 +#: schon/settings/constance.py:112 msgid "OpenAI API Key" msgstr "OpenAI API Key" -#: schon/settings/constance.py:96 +#: schon/settings/constance.py:116 msgid "Abstract API Key" msgstr "Clé API abstraite" -#: schon/settings/constance.py:104 +#: schon/settings/constance.py:124 msgid "HTTP Proxy" msgstr "HTTP Proxy" -#: schon/settings/constance.py:112 +#: schon/settings/constance.py:132 msgid "An entity for storing advertisiment data" msgstr "Une entité pour stocker des données publicitaires" -#: schon/settings/constance.py:120 +#: schon/settings/constance.py:140 msgid "An entity for storing analytics data" msgstr "Une entité pour stocker des données analytiques" -#: schon/settings/constance.py:125 +#: schon/settings/constance.py:145 msgid "Save responses from vendors' APIs" msgstr "Sauvegarder les réponses des API des fournisseurs" -#: schon/settings/constance.py:126 +#: schon/settings/constance.py:146 msgid "Backup database" msgstr "Sauvegarde de la base de données" -#: schon/settings/constance.py:127 +#: schon/settings/constance.py:147 msgid "Backup media" msgstr "Supports de sauvegarde" -#: schon/settings/constance.py:133 +#: schon/settings/constance.py:153 msgid "Legal Options" msgstr "Options juridiques" -#: schon/settings/constance.py:141 +#: schon/settings/constance.py:161 msgid "Email Options" msgstr "Options de courrier électronique" -#: schon/settings/constance.py:151 +#: schon/settings/constance.py:171 msgid "Features Options" msgstr "Caractéristiques Options" -#: schon/settings/constance.py:160 +#: schon/settings/constance.py:181 msgid "SEO Options" msgstr "Options de référencement" -#: schon/settings/constance.py:164 +#: schon/settings/constance.py:185 msgid "System Options" msgstr "Options du système" -#: schon/settings/drf.py:51 +#: schon/settings/drf.py:59 #, python-brace-format msgid "" "\n" "Welcome to the Schon documentation.\n" "\n" -"Schon is a powerful e-commerce platform that allows you to launch and manage " -"an online store of any kind in just a few clicks.\n" +"Schon is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks.\n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"SCHON-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-SCHON-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {access_lifetime} {access_unit}.\n" "- Refresh token lifetime is {refresh_hours} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -204,7 +198,6 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {version}\n" @@ -212,59 +205,40 @@ msgstr "" "\n" "Bienvenue dans la documentation d'Schon.\n" "\n" -"Schon est une puissante plateforme de commerce électronique qui vous permet " -"de lancer et de gérer une boutique en ligne de tout type en quelques clics.\n" +"Schon est une puissante plateforme de commerce électronique qui vous permet de lancer et de gérer une boutique en ligne de tout type en quelques clics.\n" "\n" "## Fonctionnalités principales\n" -"- Catalogue de produits:** Gérer les détails des produits, les prix, " -"l'inventaire et la disponibilité à travers plusieurs catégories.\n" -"- Gestion des commandes:** Traiter les commandes, suivre l'exécution et " -"traiter les demandes des clients de manière efficace.\n" -"- Authentification et autorisation:** Authentification complète des " -"utilisateurs avec des jetons JWT et des autorisations basées sur les rôles.\n" -"- Traitement des paiements:** Intégration de plusieurs passerelles de " -"paiement et gestion sécurisée des transactions.\n" -"- Gestion de blog et de contenu:** Créez et gérez des articles de blog et du " -"contenu marketing pour votre boutique.\n" -"- Opérations B2B:** Points d'accès dédiés aux transactions interentreprises " -"et à la gestion des ventes en gros.\n" -"- Support multilingue:** Servez vos clients dans le monde entier grâce à des " -"capacités d'internationalisation complètes (i18n).\n" -"- Intégrations personnalisées:** Architecture API extensible pour " -"l'intégration avec des plateformes et des services externes.\n" -"- Analyses et rapports:** Générer des rapports détaillés sur les ventes, les " -"stocks et le comportement des clients.\n" -"- Mises à jour en temps réel:** Obtenez des données en direct sur les " -"niveaux de stock, les statuts des commandes et les changements de prix.\n" +"- Catalogue de produits:** Gérer les détails des produits, les prix, l'inventaire et la disponibilité à travers plusieurs catégories.\n" +"- Gestion des commandes:** Traiter les commandes, suivre l'exécution et traiter les demandes des clients de manière efficace.\n" +"- Authentification et autorisation:** Authentification complète des utilisateurs avec des jetons JWT et des autorisations basées sur les rôles.\n" +"- Traitement des paiements:** Intégration de plusieurs passerelles de paiement et gestion sécurisée des transactions.\n" +"- Gestion de blog et de contenu:** Créez et gérez des articles de blog et du contenu marketing pour votre boutique.\n" +"- Opérations B2B:** Points d'accès dédiés aux transactions interentreprises et à la gestion des ventes en gros.\n" +"- Support multilingue:** Servez vos clients dans le monde entier grâce à des capacités d'internationalisation complètes (i18n).\n" +"- Intégrations personnalisées:** Architecture API extensible pour l'intégration avec des plateformes et des services externes.\n" +"- Analyses et rapports:** Générer des rapports détaillés sur les ventes, les stocks et le comportement des clients.\n" +"- Mises à jour en temps réel:** Obtenez des données en direct sur les niveaux de stock, les statuts des commandes et les changements de prix.\n" "\n" "## API disponibles\n" "- API REST:** Interface RESTful complète (cette documentation)\n" -"- API GraphQL:** Disponible sur `/graphql/` avec l'interface GraphiQL pour " -"les requêtes interactives.\n" +"- API GraphQL:** Disponible sur `/graphql/` avec l'interface GraphiQL pour les requêtes interactives.\n" "\n" "## Authentification\n" -"- L'authentification est gérée par des jetons JWT. Incluez le jeton dans " -"l'en-tête `X-SCHON-AUTH` de vos requêtes au format `Bearer `.\n" +"- L'authentification est gérée par des jetons JWT. Incluez le jeton dans l'en-tête `X-SCHON-AUTH` de vos requêtes au format `Bearer `.\n" "- La durée de vie du jeton d'accès est de {access_lifetime} {access_unit}.\n" -"- La durée de vie du jeton de rafraîchissement est de {refresh_hours} " -"heures.\n" -"- Les jetons de rafraîchissement font l'objet d'une rotation automatique et " -"sont invalidés après utilisation pour une meilleure sécurité.\n" +"- La durée de vie du jeton de rafraîchissement est de {refresh_hours} heures.\n" +"- Les jetons de rafraîchissement font l'objet d'une rotation automatique et sont invalidés après utilisation pour une meilleure sécurité.\n" "\n" "## Internationalisation (i18n)\n" -"- Définissez l'en-tête `Accept-Language` pour spécifier votre langue " -"préférée (par exemple, `Accept-Language : en-US`).\n" -"- Les langues disponibles peuvent être récupérées à partir du point de " -"terminaison `/app/languages/`.\n" -"- Tous les contenus destinés à l'utilisateur supportent d'emblée plusieurs " -"langues.\n" +"- Définissez l'en-tête `Accept-Language` pour spécifier votre langue préférée (par exemple, `Accept-Language : en-US`).\n" +"- Les langues disponibles peuvent être récupérées à partir du point de terminaison `/app/languages/`.\n" +"- Tous les contenus destinés à l'utilisateur supportent d'emblée plusieurs langues.\n" "\n" "## Formats de réponse\n" "L'API prend en charge plusieurs formats de réponse :\n" "- **JSON** (par défaut, formaté en camelCase)\n" "- **XML** (ajoutez `?format=xml` ou définissez `Accept : application/xml`)\n" -"- **YAML** (ajouter `?format=yaml` ou définir `Accept : application/x-" -"yaml`)\n" +"- **YAML** (ajouter `?format=yaml` ou définir `Accept : application/x-yaml`)\n" "\n" "## Santé et surveillance\n" "- Contrôles de santé : `/health/`\n" @@ -301,38 +275,38 @@ msgstr "Config" msgid "Periodic Tasks" msgstr "Tâches périodiques" -#: schon/settings/unfold.py:134 +#: schon/settings/unfold.py:129 msgid "Taskboard" msgstr "Tableau des tâches" -#: schon/settings/unfold.py:146 +#: schon/settings/unfold.py:141 msgid "Quick Links" msgstr "Liens rapides" -#: schon/settings/unfold.py:151 +#: schon/settings/unfold.py:146 msgid "Users" msgstr "Utilisateurs" -#: schon/settings/unfold.py:156 +#: schon/settings/unfold.py:151 msgid "Groups" msgstr "Groupes" -#: schon/settings/unfold.py:161 +#: schon/settings/unfold.py:156 msgid "Orders" msgstr "Commandes" -#: schon/settings/unfold.py:166 +#: schon/settings/unfold.py:161 msgid "Products" msgstr "Produits" -#: schon/settings/unfold.py:171 +#: schon/settings/unfold.py:166 msgid "Categories" msgstr "Catégories" -#: schon/settings/unfold.py:176 +#: schon/settings/unfold.py:171 msgid "Brands" msgstr "Marques" -#: schon/settings/unfold.py:181 +#: schon/settings/unfold.py:176 msgid "Blogposts" msgstr "Blogposts" diff --git a/schon/locale/he_IL/LC_MESSAGES/django.mo b/schon/locale/he_IL/LC_MESSAGES/django.mo index 59fd9364..7e2ffc4c 100644 Binary files a/schon/locale/he_IL/LC_MESSAGES/django.mo and b/schon/locale/he_IL/LC_MESSAGES/django.mo differ diff --git a/schon/locale/he_IL/LC_MESSAGES/django.po b/schon/locale/he_IL/LC_MESSAGES/django.po index 081924d4..21032116 100644 --- a/schon/locale/he_IL/LC_MESSAGES/django.po +++ b/schon/locale/he_IL/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 01:44+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -13,179 +13,173 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: schon/settings/constance.py:24 +#: schon/settings/constance.py:31 msgid "Name of the company" msgstr "שם החברה" -#: schon/settings/constance.py:25 +#: schon/settings/constance.py:32 msgid "Address of the company" msgstr "כתובת החברה" -#: schon/settings/constance.py:28 +#: schon/settings/constance.py:35 msgid "Phone number of the company" msgstr "מספר הטלפון של החברה" -#: schon/settings/constance.py:35 +#: schon/settings/constance.py:42 msgid "" "Tax rate in jurisdiction of your company. Leave 0 if you don't want to " "process taxes." -msgstr "שיעור המס בתחום השיפוט של החברה שלך. השאר 0 אם אינך מעוניין לעבד מסים." +msgstr "" +"שיעור המס בתחום השיפוט של החברה שלך. השאר 0 אם אינך מעוניין לעבד מסים." -#: schon/settings/constance.py:44 +#: schon/settings/constance.py:51 msgid "Shows if the taxes are already included in product's selling prices" msgstr "מציג אם המסים כבר כלולים במחיר המכירה של המוצר." -#: schon/settings/constance.py:52 +#: schon/settings/constance.py:59 msgid "Exchange rate API key" msgstr "מפתח API לשער החליפין" -#: schon/settings/constance.py:58 +#: schon/settings/constance.py:65 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!אין לשנות!!!" -#: schon/settings/constance.py:60 +#: schon/settings/constance.py:67 msgid "SMTP host" msgstr "מארח SMTP" -#: schon/settings/constance.py:61 +#: schon/settings/constance.py:68 msgid "SMTP port" msgstr "יציאת SMTP" -#: schon/settings/constance.py:62 +#: schon/settings/constance.py:69 msgid "Use TLS" msgstr "השתמש ב-TLS" -#: schon/settings/constance.py:63 +#: schon/settings/constance.py:70 msgid "Use SSL" msgstr "השתמש ב-SSL" -#: schon/settings/constance.py:66 +#: schon/settings/constance.py:73 msgid "SMTP username" msgstr "שם משתמש SMTP" -#: schon/settings/constance.py:70 +#: schon/settings/constance.py:79 msgid "SMTP password" msgstr "סיסמת SMTP" -#: schon/settings/constance.py:72 +#: schon/settings/constance.py:83 msgid "Mail from option" msgstr "דואר מאפשרות" -#: schon/settings/constance.py:76 +#: schon/settings/constance.py:90 +msgid "" +"Export products to specified marketplaces. Comma-separated list from " +"" +msgstr "" +"ייצא מוצרים לשווקים ספציפיים. רשימה מופרדת בפסיקים " +"מ-" + +#: schon/settings/constance.py:96 msgid "How many days we store messages from anonymous users" msgstr "כמה ימים אנו שומרים הודעות ממשתמשים אנונימיים" -#: schon/settings/constance.py:80 +#: schon/settings/constance.py:100 msgid "How many days we store messages from authenticated users" msgstr "כמה ימים אנו שומרים הודעות ממשתמשים מאומתים" -#: schon/settings/constance.py:84 +#: schon/settings/constance.py:104 msgid "Disable buy functionality" msgstr "השבת פונקציונליות הרכישה" -#: schon/settings/constance.py:88 +#: schon/settings/constance.py:108 msgid "OpenStreetMap Nominatim API URL" msgstr "כתובת ה-API של OpenStreetMap Nominatim" -#: schon/settings/constance.py:92 +#: schon/settings/constance.py:112 msgid "OpenAI API Key" msgstr "מפתח API של OpenAI" -#: schon/settings/constance.py:96 +#: schon/settings/constance.py:116 msgid "Abstract API Key" msgstr "מפתח API מופשט" -#: schon/settings/constance.py:104 +#: schon/settings/constance.py:124 msgid "HTTP Proxy" msgstr "פרוקסי HTTP" -#: schon/settings/constance.py:112 +#: schon/settings/constance.py:132 msgid "An entity for storing advertisiment data" msgstr "ישות לאחסון נתוני פרסום" -#: schon/settings/constance.py:120 +#: schon/settings/constance.py:140 msgid "An entity for storing analytics data" msgstr "ישות לאחסון נתוני ניתוח" -#: schon/settings/constance.py:125 +#: schon/settings/constance.py:145 msgid "Save responses from vendors' APIs" msgstr "שמור תגובות מ-API של ספקים" -#: schon/settings/constance.py:126 +#: schon/settings/constance.py:146 msgid "Backup database" msgstr "גיבוי מסד נתונים" -#: schon/settings/constance.py:127 +#: schon/settings/constance.py:147 msgid "Backup media" msgstr "מדיה גיבוי" -#: schon/settings/constance.py:133 +#: schon/settings/constance.py:153 msgid "Legal Options" msgstr "אפשרויות משפטיות" -#: schon/settings/constance.py:141 +#: schon/settings/constance.py:161 msgid "Email Options" msgstr "אפשרויות דוא\"ל" -#: schon/settings/constance.py:151 +#: schon/settings/constance.py:171 msgid "Features Options" msgstr "אפשרויות תכונות" -#: schon/settings/constance.py:160 +#: schon/settings/constance.py:181 msgid "SEO Options" msgstr "אפשרויות SEO" -#: schon/settings/constance.py:164 +#: schon/settings/constance.py:185 msgid "System Options" msgstr "אפשרויות מערכת" -#: schon/settings/drf.py:51 +#: schon/settings/drf.py:59 #, python-brace-format msgid "" "\n" "Welcome to the Schon documentation.\n" "\n" -"Schon is a powerful e-commerce platform that allows you to launch and manage " -"an online store of any kind in just a few clicks.\n" +"Schon is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks.\n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"SCHON-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-SCHON-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {access_lifetime} {access_unit}.\n" "- Refresh token lifetime is {refresh_hours} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -197,44 +191,19 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {version}\n" msgstr "" "\n" -"ברוכים הבאים לתיעוד של Schon. Schon היא פלטפורמת מסחר אלקטרוני עוצמתית " -"המאפשרת לכם להקים ולנהל חנות מקוונת מכל סוג שהוא בכמה לחיצות בלבד. ## תכונות " -"עיקריות - **קטלוג מוצרים:** ניהול פרטי מוצרים, מחירים, מלאי וזמינות " -"בקטגוריות מרובות. - **ניהול הזמנות:** עיבוד הזמנות, מעקב אחר ביצוען וטיפול " -"יעיל בבקשות לקוחות.\n" -"- **אימות ואישור:** אימות משתמשים מקיף באמצעות אסימוני JWT והרשאות מבוססות " -"תפקידים. - **עיבוד תשלומים:** שלבו מספר שערי תשלום ונהלו עסקאות בצורה " -"מאובטחת. - **ניהול בלוג ותוכן:** צרו ונהלו פוסטים בבלוג ותוכן שיווקי לחנות " -"שלכם. - **פעולות B2B:** נקודות קצה ייעודיות לעסקאות בין עסקים וניהול " -"סיטונאי.\n" -"- **תמיכה בריבוי שפות:** שירות ללקוחות ברחבי העולם עם יכולות בינלאומיות " -"מלאות (i18n). - **אינטגרציות מותאמות אישית:** ארכיטקטורת API ניתנת להרחבה " -"לשילוב עם פלטפורמות ושירותים חיצוניים. - **ניתוח ודיווח:** יצירת דוחות " -"מפורטים על מכירות, מלאי והתנהגות לקוחות. - **עדכונים בזמן אמת:** קבלת נתונים " -"בזמן אמת על רמות המלאי, סטטוס ההזמנות ושינויים במחירים.\n" +"ברוכים הבאים לתיעוד של Schon. Schon היא פלטפורמת מסחר אלקטרוני עוצמתית המאפשרת לכם להקים ולנהל חנות מקוונת מכל סוג שהוא בכמה לחיצות בלבד. ## תכונות עיקריות - **קטלוג מוצרים:** ניהול פרטי מוצרים, מחירים, מלאי וזמינות בקטגוריות מרובות. - **ניהול הזמנות:** עיבוד הזמנות, מעקב אחר ביצוען וטיפול יעיל בבקשות לקוחות.\n" +"- **אימות ואישור:** אימות משתמשים מקיף באמצעות אסימוני JWT והרשאות מבוססות תפקידים. - **עיבוד תשלומים:** שלבו מספר שערי תשלום ונהלו עסקאות בצורה מאובטחת. - **ניהול בלוג ותוכן:** צרו ונהלו פוסטים בבלוג ותוכן שיווקי לחנות שלכם. - **פעולות B2B:** נקודות קצה ייעודיות לעסקאות בין עסקים וניהול סיטונאי.\n" +"- **תמיכה בריבוי שפות:** שירות ללקוחות ברחבי העולם עם יכולות בינלאומיות מלאות (i18n). - **אינטגרציות מותאמות אישית:** ארכיטקטורת API ניתנת להרחבה לשילוב עם פלטפורמות ושירותים חיצוניים. - **ניתוח ודיווח:** יצירת דוחות מפורטים על מכירות, מלאי והתנהגות לקוחות. - **עדכונים בזמן אמת:** קבלת נתונים בזמן אמת על רמות המלאי, סטטוס ההזמנות ושינויים במחירים.\n" "\n" -"## ממשקי API זמינים - **REST API:** ממשק RESTful מלא (תיעוד זה) - **GraphQL " -"API:** זמין ב-`/graphql/` עם ממשק GraphiQL לשאילתות אינטראקטיביות ## אימות - " -"האימות מתבצע באמצעות אסימוני JWT. כלול את האסימון בכותרת `X-SCHON-AUTH` של " -"בקשותיך בפורמט `Bearer `.\n" -"- אורך חיי אסימון הגישה הוא {access_lifetime} {access_unit}. - אורך חיי " -"אסימון הרענון הוא {refresh_hours} שעות. - אסימוני הרענון מסתובבים באופן " -"אוטומטי ומבוטלים לאחר השימוש לשם אבטחה משופרת. ## בינלאומיות (i18n) - הגדר " -"את הכותרת `Accept-Language` כדי לציין את השפה המועדפת עליך (לדוגמה, `Accept-" -"Language: en-US`).\n" -"- ניתן לאחזר את השפות הזמינות מנקודת הקצה `/app/languages/`. - כל התוכן " -"המוצג למשתמש תומך במספר שפות באופן מובנה. ## פורמטים של תגובה ה-API תומך " -"במספר פורמטים של תגובה: - **JSON** (ברירת מחדל, בפורמט camelCase) - **XML** " -"(הוסף `?format=xml` או הגדר `Accept: application/xml`)\n" -"- **YAML** (הוסף `?format=yaml` או הגדר `Accept: application/x-yaml`) ## " -"תקינות וניטור - בדיקות תקינות: `/health/` - מדדי Prometheus: `/prometheus/" -"metrics/` ## גרסה גרסת ה-API הנוכחית: {version}\n" +"## ממשקי API זמינים - **REST API:** ממשק RESTful מלא (תיעוד זה) - **GraphQL API:** זמין ב-`/graphql/` עם ממשק GraphiQL לשאילתות אינטראקטיביות ## אימות - האימות מתבצע באמצעות אסימוני JWT. כלול את האסימון בכותרת `X-SCHON-AUTH` של בקשותיך בפורמט `Bearer `.\n" +"- אורך חיי אסימון הגישה הוא {access_lifetime} {access_unit}. - אורך חיי אסימון הרענון הוא {refresh_hours} שעות. - אסימוני הרענון מסתובבים באופן אוטומטי ומבוטלים לאחר השימוש לשם אבטחה משופרת. ## בינלאומיות (i18n) - הגדר את הכותרת `Accept-Language` כדי לציין את השפה המועדפת עליך (לדוגמה, `Accept-Language: en-US`).\n" +"- ניתן לאחזר את השפות הזמינות מנקודת הקצה `/app/languages/`. - כל התוכן המוצג למשתמש תומך במספר שפות באופן מובנה. ## פורמטים של תגובה ה-API תומך במספר פורמטים של תגובה: - **JSON** (ברירת מחדל, בפורמט camelCase) - **XML** (הוסף `?format=xml` או הגדר `Accept: application/xml`)\n" +"- **YAML** (הוסף `?format=yaml` או הגדר `Accept: application/x-yaml`) ## תקינות וניטור - בדיקות תקינות: `/health/` - מדדי Prometheus: `/prometheus/metrics/` ## גרסה גרסת ה-API הנוכחית: {version}\n" #: schon/settings/unfold.py:43 msgid "My site" @@ -264,38 +233,38 @@ msgstr "תצורה" msgid "Periodic Tasks" msgstr "משימות תקופתיות" -#: schon/settings/unfold.py:134 +#: schon/settings/unfold.py:129 msgid "Taskboard" msgstr "לוח משימות" -#: schon/settings/unfold.py:146 +#: schon/settings/unfold.py:141 msgid "Quick Links" msgstr "קישורים מהירים" -#: schon/settings/unfold.py:151 +#: schon/settings/unfold.py:146 msgid "Users" msgstr "משתמשים" -#: schon/settings/unfold.py:156 +#: schon/settings/unfold.py:151 msgid "Groups" msgstr "קבוצות" -#: schon/settings/unfold.py:161 +#: schon/settings/unfold.py:156 msgid "Orders" msgstr "הזמנות" -#: schon/settings/unfold.py:166 +#: schon/settings/unfold.py:161 msgid "Products" msgstr "מוצרים" -#: schon/settings/unfold.py:171 +#: schon/settings/unfold.py:166 msgid "Categories" msgstr "קטגוריות" -#: schon/settings/unfold.py:176 +#: schon/settings/unfold.py:171 msgid "Brands" msgstr "מותגים" -#: schon/settings/unfold.py:181 +#: schon/settings/unfold.py:176 msgid "Blogposts" msgstr "פוסטים בבלוג" diff --git a/schon/locale/hi_IN/LC_MESSAGES/django.po b/schon/locale/hi_IN/LC_MESSAGES/django.po index b258780d..1c94641e 100644 --- a/schon/locale/hi_IN/LC_MESSAGES/django.po +++ b/schon/locale/hi_IN/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:26+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,133 +16,139 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: schon/settings/constance.py:24 +#: schon/settings/constance.py:31 msgid "Name of the company" msgstr "" -#: schon/settings/constance.py:25 +#: schon/settings/constance.py:32 msgid "Address of the company" msgstr "" -#: schon/settings/constance.py:28 +#: schon/settings/constance.py:35 msgid "Phone number of the company" msgstr "" -#: schon/settings/constance.py:35 +#: schon/settings/constance.py:42 msgid "" "Tax rate in jurisdiction of your company. Leave 0 if you don't want to " "process taxes." msgstr "" -#: schon/settings/constance.py:44 +#: schon/settings/constance.py:51 msgid "Shows if the taxes are already included in product's selling prices" msgstr "" -#: schon/settings/constance.py:52 +#: schon/settings/constance.py:59 msgid "Exchange rate API key" msgstr "" -#: schon/settings/constance.py:58 +#: schon/settings/constance.py:65 msgid "!!!DO NOT CHANGE!!!" msgstr "" -#: schon/settings/constance.py:60 +#: schon/settings/constance.py:67 msgid "SMTP host" msgstr "" -#: schon/settings/constance.py:61 +#: schon/settings/constance.py:68 msgid "SMTP port" msgstr "" -#: schon/settings/constance.py:62 +#: schon/settings/constance.py:69 msgid "Use TLS" msgstr "" -#: schon/settings/constance.py:63 +#: schon/settings/constance.py:70 msgid "Use SSL" msgstr "" -#: schon/settings/constance.py:66 +#: schon/settings/constance.py:73 msgid "SMTP username" msgstr "" -#: schon/settings/constance.py:70 +#: schon/settings/constance.py:79 msgid "SMTP password" msgstr "" -#: schon/settings/constance.py:72 +#: schon/settings/constance.py:83 msgid "Mail from option" msgstr "" -#: schon/settings/constance.py:76 -msgid "How many days we store messages from anonymous users" -msgstr "" - -#: schon/settings/constance.py:80 -msgid "How many days we store messages from authenticated users" -msgstr "" - -#: schon/settings/constance.py:84 -msgid "Disable buy functionality" -msgstr "" - -#: schon/settings/constance.py:88 -msgid "OpenStreetMap Nominatim API URL" -msgstr "" - -#: schon/settings/constance.py:92 -msgid "OpenAI API Key" +#: schon/settings/constance.py:90 +msgid "" +"Export products to specified marketplaces. Comma-separated list from " +"" msgstr "" #: schon/settings/constance.py:96 -msgid "Abstract API Key" +msgid "How many days we store messages from anonymous users" +msgstr "" + +#: schon/settings/constance.py:100 +msgid "How many days we store messages from authenticated users" msgstr "" #: schon/settings/constance.py:104 -msgid "HTTP Proxy" +msgid "Disable buy functionality" +msgstr "" + +#: schon/settings/constance.py:108 +msgid "OpenStreetMap Nominatim API URL" msgstr "" #: schon/settings/constance.py:112 +msgid "OpenAI API Key" +msgstr "" + +#: schon/settings/constance.py:116 +msgid "Abstract API Key" +msgstr "" + +#: schon/settings/constance.py:124 +msgid "HTTP Proxy" +msgstr "" + +#: schon/settings/constance.py:132 msgid "An entity for storing advertisiment data" msgstr "" -#: schon/settings/constance.py:120 +#: schon/settings/constance.py:140 msgid "An entity for storing analytics data" msgstr "" -#: schon/settings/constance.py:125 +#: schon/settings/constance.py:145 msgid "Save responses from vendors' APIs" msgstr "" -#: schon/settings/constance.py:126 +#: schon/settings/constance.py:146 msgid "Backup database" msgstr "" -#: schon/settings/constance.py:127 +#: schon/settings/constance.py:147 msgid "Backup media" msgstr "" -#: schon/settings/constance.py:133 +#: schon/settings/constance.py:153 msgid "Legal Options" msgstr "" -#: schon/settings/constance.py:141 +#: schon/settings/constance.py:161 msgid "Email Options" msgstr "" -#: schon/settings/constance.py:151 +#: schon/settings/constance.py:171 msgid "Features Options" msgstr "" -#: schon/settings/constance.py:160 +#: schon/settings/constance.py:181 msgid "SEO Options" msgstr "" -#: schon/settings/constance.py:164 +#: schon/settings/constance.py:185 msgid "System Options" msgstr "" -#: schon/settings/drf.py:51 +#: schon/settings/drf.py:59 #, python-brace-format msgid "" "\n" @@ -200,7 +206,6 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {version}\n" @@ -234,38 +239,38 @@ msgstr "" msgid "Periodic Tasks" msgstr "" -#: schon/settings/unfold.py:134 +#: schon/settings/unfold.py:129 msgid "Taskboard" msgstr "" -#: schon/settings/unfold.py:146 +#: schon/settings/unfold.py:141 msgid "Quick Links" msgstr "" -#: schon/settings/unfold.py:151 +#: schon/settings/unfold.py:146 msgid "Users" msgstr "" -#: schon/settings/unfold.py:156 +#: schon/settings/unfold.py:151 msgid "Groups" msgstr "" -#: schon/settings/unfold.py:161 +#: schon/settings/unfold.py:156 msgid "Orders" msgstr "" -#: schon/settings/unfold.py:166 +#: schon/settings/unfold.py:161 msgid "Products" msgstr "" -#: schon/settings/unfold.py:171 +#: schon/settings/unfold.py:166 msgid "Categories" msgstr "" -#: schon/settings/unfold.py:176 +#: schon/settings/unfold.py:171 msgid "Brands" msgstr "" -#: schon/settings/unfold.py:181 +#: schon/settings/unfold.py:176 msgid "Blogposts" msgstr "" diff --git a/schon/locale/hr_HR/LC_MESSAGES/django.po b/schon/locale/hr_HR/LC_MESSAGES/django.po index a906746c..1c94641e 100644 --- a/schon/locale/hr_HR/LC_MESSAGES/django.po +++ b/schon/locale/hr_HR/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 01:44+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,133 +16,139 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: schon/settings/constance.py:24 +#: schon/settings/constance.py:31 msgid "Name of the company" msgstr "" -#: schon/settings/constance.py:25 +#: schon/settings/constance.py:32 msgid "Address of the company" msgstr "" -#: schon/settings/constance.py:28 +#: schon/settings/constance.py:35 msgid "Phone number of the company" msgstr "" -#: schon/settings/constance.py:35 +#: schon/settings/constance.py:42 msgid "" "Tax rate in jurisdiction of your company. Leave 0 if you don't want to " "process taxes." msgstr "" -#: schon/settings/constance.py:44 +#: schon/settings/constance.py:51 msgid "Shows if the taxes are already included in product's selling prices" msgstr "" -#: schon/settings/constance.py:52 +#: schon/settings/constance.py:59 msgid "Exchange rate API key" msgstr "" -#: schon/settings/constance.py:58 +#: schon/settings/constance.py:65 msgid "!!!DO NOT CHANGE!!!" msgstr "" -#: schon/settings/constance.py:60 +#: schon/settings/constance.py:67 msgid "SMTP host" msgstr "" -#: schon/settings/constance.py:61 +#: schon/settings/constance.py:68 msgid "SMTP port" msgstr "" -#: schon/settings/constance.py:62 +#: schon/settings/constance.py:69 msgid "Use TLS" msgstr "" -#: schon/settings/constance.py:63 +#: schon/settings/constance.py:70 msgid "Use SSL" msgstr "" -#: schon/settings/constance.py:66 +#: schon/settings/constance.py:73 msgid "SMTP username" msgstr "" -#: schon/settings/constance.py:70 +#: schon/settings/constance.py:79 msgid "SMTP password" msgstr "" -#: schon/settings/constance.py:72 +#: schon/settings/constance.py:83 msgid "Mail from option" msgstr "" -#: schon/settings/constance.py:76 -msgid "How many days we store messages from anonymous users" -msgstr "" - -#: schon/settings/constance.py:80 -msgid "How many days we store messages from authenticated users" -msgstr "" - -#: schon/settings/constance.py:84 -msgid "Disable buy functionality" -msgstr "" - -#: schon/settings/constance.py:88 -msgid "OpenStreetMap Nominatim API URL" -msgstr "" - -#: schon/settings/constance.py:92 -msgid "OpenAI API Key" +#: schon/settings/constance.py:90 +msgid "" +"Export products to specified marketplaces. Comma-separated list from " +"" msgstr "" #: schon/settings/constance.py:96 -msgid "Abstract API Key" +msgid "How many days we store messages from anonymous users" +msgstr "" + +#: schon/settings/constance.py:100 +msgid "How many days we store messages from authenticated users" msgstr "" #: schon/settings/constance.py:104 -msgid "HTTP Proxy" +msgid "Disable buy functionality" +msgstr "" + +#: schon/settings/constance.py:108 +msgid "OpenStreetMap Nominatim API URL" msgstr "" #: schon/settings/constance.py:112 +msgid "OpenAI API Key" +msgstr "" + +#: schon/settings/constance.py:116 +msgid "Abstract API Key" +msgstr "" + +#: schon/settings/constance.py:124 +msgid "HTTP Proxy" +msgstr "" + +#: schon/settings/constance.py:132 msgid "An entity for storing advertisiment data" msgstr "" -#: schon/settings/constance.py:120 +#: schon/settings/constance.py:140 msgid "An entity for storing analytics data" msgstr "" -#: schon/settings/constance.py:125 +#: schon/settings/constance.py:145 msgid "Save responses from vendors' APIs" msgstr "" -#: schon/settings/constance.py:126 +#: schon/settings/constance.py:146 msgid "Backup database" msgstr "" -#: schon/settings/constance.py:127 +#: schon/settings/constance.py:147 msgid "Backup media" msgstr "" -#: schon/settings/constance.py:133 +#: schon/settings/constance.py:153 msgid "Legal Options" msgstr "" -#: schon/settings/constance.py:141 +#: schon/settings/constance.py:161 msgid "Email Options" msgstr "" -#: schon/settings/constance.py:151 +#: schon/settings/constance.py:171 msgid "Features Options" msgstr "" -#: schon/settings/constance.py:160 +#: schon/settings/constance.py:181 msgid "SEO Options" msgstr "" -#: schon/settings/constance.py:164 +#: schon/settings/constance.py:185 msgid "System Options" msgstr "" -#: schon/settings/drf.py:51 +#: schon/settings/drf.py:59 #, python-brace-format msgid "" "\n" @@ -200,7 +206,6 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {version}\n" @@ -234,38 +239,38 @@ msgstr "" msgid "Periodic Tasks" msgstr "" -#: schon/settings/unfold.py:134 +#: schon/settings/unfold.py:129 msgid "Taskboard" msgstr "" -#: schon/settings/unfold.py:146 +#: schon/settings/unfold.py:141 msgid "Quick Links" msgstr "" -#: schon/settings/unfold.py:151 +#: schon/settings/unfold.py:146 msgid "Users" msgstr "" -#: schon/settings/unfold.py:156 +#: schon/settings/unfold.py:151 msgid "Groups" msgstr "" -#: schon/settings/unfold.py:161 +#: schon/settings/unfold.py:156 msgid "Orders" msgstr "" -#: schon/settings/unfold.py:166 +#: schon/settings/unfold.py:161 msgid "Products" msgstr "" -#: schon/settings/unfold.py:171 +#: schon/settings/unfold.py:166 msgid "Categories" msgstr "" -#: schon/settings/unfold.py:176 +#: schon/settings/unfold.py:171 msgid "Brands" msgstr "" -#: schon/settings/unfold.py:181 +#: schon/settings/unfold.py:176 msgid "Blogposts" msgstr "" diff --git a/schon/locale/id_ID/LC_MESSAGES/django.mo b/schon/locale/id_ID/LC_MESSAGES/django.mo index fc6d5b8b..c601d7ad 100644 Binary files a/schon/locale/id_ID/LC_MESSAGES/django.mo and b/schon/locale/id_ID/LC_MESSAGES/django.mo differ diff --git a/schon/locale/id_ID/LC_MESSAGES/django.po b/schon/locale/id_ID/LC_MESSAGES/django.po index eb415343..f63b7213 100644 --- a/schon/locale/id_ID/LC_MESSAGES/django.po +++ b/schon/locale/id_ID/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 01:44+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -13,19 +13,19 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: schon/settings/constance.py:24 +#: schon/settings/constance.py:31 msgid "Name of the company" msgstr "Nama perusahaan" -#: schon/settings/constance.py:25 +#: schon/settings/constance.py:32 msgid "Address of the company" msgstr "Alamat perusahaan" -#: schon/settings/constance.py:28 +#: schon/settings/constance.py:35 msgid "Phone number of the company" msgstr "Nomor telepon perusahaan" -#: schon/settings/constance.py:35 +#: schon/settings/constance.py:42 msgid "" "Tax rate in jurisdiction of your company. Leave 0 if you don't want to " "process taxes." @@ -33,161 +33,154 @@ msgstr "" "Tarif pajak dalam yurisdiksi perusahaan Anda. Biarkan 0 jika Anda tidak " "ingin memproses pajak." -#: schon/settings/constance.py:44 +#: schon/settings/constance.py:51 msgid "Shows if the taxes are already included in product's selling prices" msgstr "Menunjukkan apakah pajak sudah termasuk dalam harga jual produk" -#: schon/settings/constance.py:52 +#: schon/settings/constance.py:59 msgid "Exchange rate API key" msgstr "Kunci API nilai tukar" -#: schon/settings/constance.py:58 +#: schon/settings/constance.py:65 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!JANGAN BERUBAH!!!" -#: schon/settings/constance.py:60 +#: schon/settings/constance.py:67 msgid "SMTP host" msgstr "Host SMTP" -#: schon/settings/constance.py:61 +#: schon/settings/constance.py:68 msgid "SMTP port" msgstr "Port SMTP" -#: schon/settings/constance.py:62 +#: schon/settings/constance.py:69 msgid "Use TLS" msgstr "Gunakan TLS" -#: schon/settings/constance.py:63 +#: schon/settings/constance.py:70 msgid "Use SSL" msgstr "Gunakan SSL" -#: schon/settings/constance.py:66 +#: schon/settings/constance.py:73 msgid "SMTP username" msgstr "Nama pengguna SMTP" -#: schon/settings/constance.py:70 +#: schon/settings/constance.py:79 msgid "SMTP password" msgstr "Kata sandi SMTP" -#: schon/settings/constance.py:72 +#: schon/settings/constance.py:83 msgid "Mail from option" msgstr "Opsi Mail from (Surat dari)" -#: schon/settings/constance.py:76 +#: schon/settings/constance.py:90 +msgid "" +"Export products to specified marketplaces. Comma-separated list from " +"" +msgstr "" +"Ekspor produk ke pasar yang ditentukan. Daftar yang dipisahkan koma dari " +"" + +#: schon/settings/constance.py:96 msgid "How many days we store messages from anonymous users" msgstr "Berapa hari kami menyimpan pesan dari pengguna anonim" -#: schon/settings/constance.py:80 +#: schon/settings/constance.py:100 msgid "How many days we store messages from authenticated users" msgstr "Berapa hari kami menyimpan pesan dari pengguna yang diautentikasi" -#: schon/settings/constance.py:84 +#: schon/settings/constance.py:104 msgid "Disable buy functionality" msgstr "Menonaktifkan fungsionalitas beli" -#: schon/settings/constance.py:88 +#: schon/settings/constance.py:108 msgid "OpenStreetMap Nominatim API URL" msgstr "URL API OpenStreetMap Nominatim" -#: schon/settings/constance.py:92 +#: schon/settings/constance.py:112 msgid "OpenAI API Key" msgstr "Kunci API OpenAI" -#: schon/settings/constance.py:96 +#: schon/settings/constance.py:116 msgid "Abstract API Key" msgstr "Kunci API Abstrak" -#: schon/settings/constance.py:104 +#: schon/settings/constance.py:124 msgid "HTTP Proxy" msgstr "Proksi HTTP" -#: schon/settings/constance.py:112 +#: schon/settings/constance.py:132 msgid "An entity for storing advertisiment data" msgstr "Entitas untuk menyimpan data iklan" -#: schon/settings/constance.py:120 +#: schon/settings/constance.py:140 msgid "An entity for storing analytics data" msgstr "Entitas untuk menyimpan data analitik" -#: schon/settings/constance.py:125 +#: schon/settings/constance.py:145 msgid "Save responses from vendors' APIs" msgstr "Menyimpan tanggapan dari API vendor" -#: schon/settings/constance.py:126 +#: schon/settings/constance.py:146 msgid "Backup database" msgstr "Mencadangkan basis data" -#: schon/settings/constance.py:127 +#: schon/settings/constance.py:147 msgid "Backup media" msgstr "Media cadangan" -#: schon/settings/constance.py:133 +#: schon/settings/constance.py:153 msgid "Legal Options" msgstr "Opsi Hukum" -#: schon/settings/constance.py:141 +#: schon/settings/constance.py:161 msgid "Email Options" msgstr "Opsi Email" -#: schon/settings/constance.py:151 +#: schon/settings/constance.py:171 msgid "Features Options" msgstr "Opsi Fitur" -#: schon/settings/constance.py:160 +#: schon/settings/constance.py:181 msgid "SEO Options" msgstr "Opsi SEO" -#: schon/settings/constance.py:164 +#: schon/settings/constance.py:185 msgid "System Options" msgstr "Opsi Sistem" -#: schon/settings/drf.py:51 +#: schon/settings/drf.py:59 #, python-brace-format msgid "" "\n" "Welcome to the Schon documentation.\n" "\n" -"Schon is a powerful e-commerce platform that allows you to launch and manage " -"an online store of any kind in just a few clicks.\n" +"Schon is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks.\n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"SCHON-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-SCHON-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {access_lifetime} {access_unit}.\n" "- Refresh token lifetime is {refresh_hours} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -199,7 +192,6 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {version}\n" @@ -207,58 +199,40 @@ msgstr "" "\n" "Selamat datang di dokumentasi Schon.\n" "\n" -"Schon adalah platform e-commerce yang kuat yang memungkinkan Anda untuk " -"meluncurkan dan mengelola toko online dalam bentuk apa pun hanya dengan " -"beberapa klik.\n" +"Schon adalah platform e-commerce yang kuat yang memungkinkan Anda untuk meluncurkan dan mengelola toko online dalam bentuk apa pun hanya dengan beberapa klik.\n" "\n" "## Fitur Utama\n" -"- Katalog Produk:** Kelola detail produk, harga, inventaris, dan " -"ketersediaan di berbagai kategori.\n" -"- Manajemen Pesanan:** Memproses pesanan, melacak pemenuhan pesanan, dan " -"menangani permintaan pelanggan secara efisien.\n" -"- Autentikasi & Otorisasi:** Autentikasi pengguna yang komprehensif dengan " -"token JWT dan izin berbasis peran.\n" -"- Pemrosesan Pembayaran:** Mengintegrasikan beberapa gateway pembayaran dan " -"mengelola transaksi dengan aman.\n" -"- Manajemen Blog & Konten:** Buat dan kelola posting blog dan konten " -"pemasaran untuk toko Anda.\n" -"- ** Operasi B2B:** Titik akhir khusus untuk transaksi bisnis-ke-bisnis dan " -"manajemen grosir.\n" -"- Dukungan Multi-bahasa:** Melayani pelanggan di seluruh dunia dengan " -"kemampuan internasionalisasi penuh (i18n).\n" -"- Integrasi Khusus:** Arsitektur API yang dapat diperluas untuk berintegrasi " -"dengan platform dan layanan eksternal.\n" -"- Analisis & Pelaporan:** Menghasilkan laporan terperinci tentang penjualan, " -"inventaris, dan perilaku pelanggan.\n" -"- **Pembaruan Waktu Nyata:** Dapatkan data langsung tentang tingkat " -"inventaris, status pesanan, dan perubahan harga.\n" +"- Katalog Produk:** Kelola detail produk, harga, inventaris, dan ketersediaan di berbagai kategori.\n" +"- Manajemen Pesanan:** Memproses pesanan, melacak pemenuhan pesanan, dan menangani permintaan pelanggan secara efisien.\n" +"- Autentikasi & Otorisasi:** Autentikasi pengguna yang komprehensif dengan token JWT dan izin berbasis peran.\n" +"- Pemrosesan Pembayaran:** Mengintegrasikan beberapa gateway pembayaran dan mengelola transaksi dengan aman.\n" +"- Manajemen Blog & Konten:** Buat dan kelola posting blog dan konten pemasaran untuk toko Anda.\n" +"- ** Operasi B2B:** Titik akhir khusus untuk transaksi bisnis-ke-bisnis dan manajemen grosir.\n" +"- Dukungan Multi-bahasa:** Melayani pelanggan di seluruh dunia dengan kemampuan internasionalisasi penuh (i18n).\n" +"- Integrasi Khusus:** Arsitektur API yang dapat diperluas untuk berintegrasi dengan platform dan layanan eksternal.\n" +"- Analisis & Pelaporan:** Menghasilkan laporan terperinci tentang penjualan, inventaris, dan perilaku pelanggan.\n" +"- **Pembaruan Waktu Nyata:** Dapatkan data langsung tentang tingkat inventaris, status pesanan, dan perubahan harga.\n" "\n" "## API yang tersedia\n" "- **REST API:** Antarmuka RESTful penuh (dokumentasi ini)\n" -"- API GraphQL:** Tersedia di `/graphql/` dengan antarmuka GraphiQL untuk " -"kueri interaktif\n" +"- API GraphQL:** Tersedia di `/graphql/` dengan antarmuka GraphiQL untuk kueri interaktif\n" "\n" "## Otentikasi\n" -"- Otentikasi ditangani melalui token JWT. Sertakan token di header `X-SCHON-" -"AUTH` pada permintaan Anda dalam format `Bearer `.\n" +"- Otentikasi ditangani melalui token JWT. Sertakan token di header `X-SCHON-AUTH` pada permintaan Anda dalam format `Bearer `.\n" "- Masa berlaku token akses adalah {access_lifetime} {access_unit}.\n" "- Masa berlaku token refresh adalah {refresh_hours} jam.\n" -"- Refresh token secara otomatis dirotasi dan dibatalkan setelah digunakan " -"untuk meningkatkan keamanan.\n" +"- Refresh token secara otomatis dirotasi dan dibatalkan setelah digunakan untuk meningkatkan keamanan.\n" "\n" "## Internasionalisasi (i18n)\n" -"- Atur header `Accept-Language` untuk menentukan bahasa yang Anda inginkan " -"(misalnya, `Accept-Language: en-US`).\n" +"- Atur header `Accept-Language` untuk menentukan bahasa yang Anda inginkan (misalnya, `Accept-Language: en-US`).\n" "- Bahasa yang tersedia dapat diambil dari titik akhir `/app/languages/`.\n" -"- Semua konten yang berhadapan dengan pengguna mendukung beberapa bahasa " -"secara langsung.\n" +"- Semua konten yang berhadapan dengan pengguna mendukung beberapa bahasa secara langsung.\n" "\n" "Format Tanggapan ## Format Tanggapan\n" "API mendukung beberapa format respons:\n" "- **JSON** (default, berformat camelCase)\n" "- **XML** (tambahkan `?format=xml` atau setel `Accept: application/xml`)\n" -"- **YAML** (tambahkan `?format=yaml` atau setel `Accept: application/x-" -"yaml`)\n" +"- **YAML** (tambahkan `?format=yaml` atau setel `Accept: application/x-yaml`)\n" "\n" "## Kesehatan & Pemantauan\n" "- Pemeriksaan kesehatan: `/health/`\n" @@ -295,38 +269,38 @@ msgstr "Konfigurasi" msgid "Periodic Tasks" msgstr "Tugas Berkala" -#: schon/settings/unfold.py:134 +#: schon/settings/unfold.py:129 msgid "Taskboard" msgstr "Papan tugas" -#: schon/settings/unfold.py:146 +#: schon/settings/unfold.py:141 msgid "Quick Links" msgstr "Tautan Cepat" -#: schon/settings/unfold.py:151 +#: schon/settings/unfold.py:146 msgid "Users" msgstr "Pengguna" -#: schon/settings/unfold.py:156 +#: schon/settings/unfold.py:151 msgid "Groups" msgstr "Grup" -#: schon/settings/unfold.py:161 +#: schon/settings/unfold.py:156 msgid "Orders" msgstr "Pesanan" -#: schon/settings/unfold.py:166 +#: schon/settings/unfold.py:161 msgid "Products" msgstr "Produk" -#: schon/settings/unfold.py:171 +#: schon/settings/unfold.py:166 msgid "Categories" msgstr "Kategori" -#: schon/settings/unfold.py:176 +#: schon/settings/unfold.py:171 msgid "Brands" msgstr "Merek" -#: schon/settings/unfold.py:181 +#: schon/settings/unfold.py:176 msgid "Blogposts" msgstr "Posting blog" diff --git a/schon/locale/it_IT/LC_MESSAGES/django.mo b/schon/locale/it_IT/LC_MESSAGES/django.mo index d7a7d3db..15d46ee6 100644 Binary files a/schon/locale/it_IT/LC_MESSAGES/django.mo and b/schon/locale/it_IT/LC_MESSAGES/django.mo differ diff --git a/schon/locale/it_IT/LC_MESSAGES/django.po b/schon/locale/it_IT/LC_MESSAGES/django.po index 3a57c85d..8b44a60d 100644 --- a/schon/locale/it_IT/LC_MESSAGES/django.po +++ b/schon/locale/it_IT/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:02+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -13,182 +13,175 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: schon/settings/constance.py:24 +#: schon/settings/constance.py:31 msgid "Name of the company" msgstr "Nome della società" -#: schon/settings/constance.py:25 +#: schon/settings/constance.py:32 msgid "Address of the company" msgstr "Indirizzo dell'azienda" -#: schon/settings/constance.py:28 +#: schon/settings/constance.py:35 msgid "Phone number of the company" msgstr "Numero di telefono dell'azienda" -#: schon/settings/constance.py:35 +#: schon/settings/constance.py:42 msgid "" "Tax rate in jurisdiction of your company. Leave 0 if you don't want to " "process taxes." msgstr "" -"Aliquota fiscale nella giurisdizione della vostra azienda. Lasciare 0 se non " -"si desidera elaborare le imposte." +"Aliquota fiscale nella giurisdizione della vostra azienda. Lasciare 0 se non" +" si desidera elaborare le imposte." -#: schon/settings/constance.py:44 +#: schon/settings/constance.py:51 msgid "Shows if the taxes are already included in product's selling prices" msgstr "" "Mostra se le tasse sono già incluse nel prezzo di vendita del prodotto." -#: schon/settings/constance.py:52 +#: schon/settings/constance.py:59 msgid "Exchange rate API key" msgstr "Chiave API del tasso di cambio" -#: schon/settings/constance.py:58 +#: schon/settings/constance.py:65 msgid "!!!DO NOT CHANGE!!!" msgstr "!!! NON CAMBIARE!!!" -#: schon/settings/constance.py:60 +#: schon/settings/constance.py:67 msgid "SMTP host" msgstr "Host SMTP" -#: schon/settings/constance.py:61 +#: schon/settings/constance.py:68 msgid "SMTP port" msgstr "Porta SMTP" -#: schon/settings/constance.py:62 +#: schon/settings/constance.py:69 msgid "Use TLS" msgstr "Utilizzare TLS" -#: schon/settings/constance.py:63 +#: schon/settings/constance.py:70 msgid "Use SSL" msgstr "Utilizzare SSL" -#: schon/settings/constance.py:66 +#: schon/settings/constance.py:73 msgid "SMTP username" msgstr "Nome utente SMTP" -#: schon/settings/constance.py:70 +#: schon/settings/constance.py:79 msgid "SMTP password" msgstr "Password SMTP" -#: schon/settings/constance.py:72 +#: schon/settings/constance.py:83 msgid "Mail from option" msgstr "Opzione Posta da" -#: schon/settings/constance.py:76 +#: schon/settings/constance.py:90 +msgid "" +"Export products to specified marketplaces. Comma-separated list from " +"" +msgstr "" +"Esporta i prodotti nei mercati specificati. Elenco separato da virgola da " +"" + +#: schon/settings/constance.py:96 msgid "How many days we store messages from anonymous users" msgstr "Per quanti giorni conserviamo i messaggi degli utenti anonimi" -#: schon/settings/constance.py:80 +#: schon/settings/constance.py:100 msgid "How many days we store messages from authenticated users" msgstr "Per quanti giorni conserviamo i messaggi degli utenti autenticati" -#: schon/settings/constance.py:84 +#: schon/settings/constance.py:104 msgid "Disable buy functionality" msgstr "Disattivare la funzionalità di acquisto" -#: schon/settings/constance.py:88 +#: schon/settings/constance.py:108 msgid "OpenStreetMap Nominatim API URL" msgstr "URL dell'API OpenStreetMap Nominatim" -#: schon/settings/constance.py:92 +#: schon/settings/constance.py:112 msgid "OpenAI API Key" msgstr "Chiave API OpenAI" -#: schon/settings/constance.py:96 +#: schon/settings/constance.py:116 msgid "Abstract API Key" msgstr "Chiave API astratta" -#: schon/settings/constance.py:104 +#: schon/settings/constance.py:124 msgid "HTTP Proxy" msgstr "Proxy HTTP" -#: schon/settings/constance.py:112 +#: schon/settings/constance.py:132 msgid "An entity for storing advertisiment data" msgstr "Un'entità per la memorizzazione dei dati pubblicitari" -#: schon/settings/constance.py:120 +#: schon/settings/constance.py:140 msgid "An entity for storing analytics data" msgstr "Un'entità per la memorizzazione dei dati analitici" -#: schon/settings/constance.py:125 +#: schon/settings/constance.py:145 msgid "Save responses from vendors' APIs" msgstr "Salvare le risposte dalle API dei fornitori" -#: schon/settings/constance.py:126 +#: schon/settings/constance.py:146 msgid "Backup database" msgstr "Database di backup" -#: schon/settings/constance.py:127 +#: schon/settings/constance.py:147 msgid "Backup media" msgstr "Supporti di backup" -#: schon/settings/constance.py:133 +#: schon/settings/constance.py:153 msgid "Legal Options" msgstr "Opzioni legali" -#: schon/settings/constance.py:141 +#: schon/settings/constance.py:161 msgid "Email Options" msgstr "Opzioni e-mail" -#: schon/settings/constance.py:151 +#: schon/settings/constance.py:171 msgid "Features Options" msgstr "Caratteristiche Opzioni" -#: schon/settings/constance.py:160 +#: schon/settings/constance.py:181 msgid "SEO Options" msgstr "Opzioni SEO" -#: schon/settings/constance.py:164 +#: schon/settings/constance.py:185 msgid "System Options" msgstr "Opzioni di sistema" -#: schon/settings/drf.py:51 +#: schon/settings/drf.py:59 #, python-brace-format msgid "" "\n" "Welcome to the Schon documentation.\n" "\n" -"Schon is a powerful e-commerce platform that allows you to launch and manage " -"an online store of any kind in just a few clicks.\n" +"Schon is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks.\n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"SCHON-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-SCHON-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {access_lifetime} {access_unit}.\n" "- Refresh token lifetime is {refresh_hours} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -200,7 +193,6 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {version}\n" @@ -208,59 +200,40 @@ msgstr "" "\n" "Benvenuti nella documentazione di Schon.\n" "\n" -"Schon è una potente piattaforma di e-commerce che consente di lanciare e " -"gestire un negozio online di qualsiasi tipo in pochi clic.\n" +"Schon è una potente piattaforma di e-commerce che consente di lanciare e gestire un negozio online di qualsiasi tipo in pochi clic.\n" "\n" "## Caratteristiche principali\n" -"- **Catalogo dei prodotti:** Gestione dei dettagli dei prodotti, dei prezzi, " -"delle scorte e della disponibilità di più categorie.\n" -"- Gestione degli ordini:** Elaborazione degli ordini, monitoraggio " -"dell'evasione e gestione efficiente delle richieste dei clienti.\n" -"- Autenticazione e autorizzazione:** Autenticazione completa degli utenti " -"con token JWT e autorizzazioni basate sui ruoli.\n" -"- Elaborazione dei pagamenti:** Integrazione di più gateway di pagamento e " -"gestione sicura delle transazioni.\n" -"- Gestione di blog e contenuti:** Creazione e gestione di post sul blog e di " -"contenuti di marketing per il vostro negozio.\n" -"- Operazioni B2B:** Endpoint dedicati per le transazioni business-to-" -"business e la gestione della vendita all'ingrosso.\n" -"- Supporto multilingue:** Servite i clienti in tutto il mondo con " -"funzionalità di internazionalizzazione completa (i18n).\n" -"- Integrazioni personalizzate:** Architettura API estensibile per " -"l'integrazione con piattaforme e servizi esterni.\n" -"- **Analitica e reportistica:** Generazione di report dettagliati su " -"vendite, inventario e comportamento dei clienti.\n" -"- Aggiornamenti in tempo reale:** Ottenete dati in tempo reale sui livelli " -"di inventario, sullo stato degli ordini e sulle modifiche dei prezzi.\n" +"- **Catalogo dei prodotti:** Gestione dei dettagli dei prodotti, dei prezzi, delle scorte e della disponibilità di più categorie.\n" +"- Gestione degli ordini:** Elaborazione degli ordini, monitoraggio dell'evasione e gestione efficiente delle richieste dei clienti.\n" +"- Autenticazione e autorizzazione:** Autenticazione completa degli utenti con token JWT e autorizzazioni basate sui ruoli.\n" +"- Elaborazione dei pagamenti:** Integrazione di più gateway di pagamento e gestione sicura delle transazioni.\n" +"- Gestione di blog e contenuti:** Creazione e gestione di post sul blog e di contenuti di marketing per il vostro negozio.\n" +"- Operazioni B2B:** Endpoint dedicati per le transazioni business-to-business e la gestione della vendita all'ingrosso.\n" +"- Supporto multilingue:** Servite i clienti in tutto il mondo con funzionalità di internazionalizzazione completa (i18n).\n" +"- Integrazioni personalizzate:** Architettura API estensibile per l'integrazione con piattaforme e servizi esterni.\n" +"- **Analitica e reportistica:** Generazione di report dettagliati su vendite, inventario e comportamento dei clienti.\n" +"- Aggiornamenti in tempo reale:** Ottenete dati in tempo reale sui livelli di inventario, sullo stato degli ordini e sulle modifiche dei prezzi.\n" "\n" "## API disponibili\n" "- API REST:** Interfaccia REST completa (questa documentazione)\n" -"- API **GraphQL:** Disponibile su `/graphql/` con interfaccia GraphiQL per " -"le query interattive.\n" +"- API **GraphQL:** Disponibile su `/graphql/` con interfaccia GraphiQL per le query interattive.\n" "\n" "## Autenticazione\n" -"- L'autenticazione è gestita tramite token JWT. Includere il token " -"nell'intestazione `X-SCHON-AUTH` delle richieste nel formato `Bearer " -"`.\n" +"- L'autenticazione è gestita tramite token JWT. Includere il token nell'intestazione `X-SCHON-AUTH` delle richieste nel formato `Bearer `.\n" "- La durata di vita del token di accesso è {access_lifetime} {access_unit}.\n" "- La durata del token di aggiornamento è di {refresh_hours} ore.\n" -"- I token di aggiornamento vengono ruotati e invalidati automaticamente dopo " -"l'uso per una maggiore sicurezza.\n" +"- I token di aggiornamento vengono ruotati e invalidati automaticamente dopo l'uso per una maggiore sicurezza.\n" "\n" "## Internazionalizzazione (i18n)\n" -"- Impostare l'intestazione `Accept-Language` per specificare la lingua " -"preferita (ad esempio, `Accept-Language: en-US`).\n" -"- Le lingue disponibili possono essere recuperate dall'endpoint `/app/" -"languages/`.\n" -"- Tutti i contenuti rivolti all'utente supportano immediatamente più " -"lingue.\n" +"- Impostare l'intestazione `Accept-Language` per specificare la lingua preferita (ad esempio, `Accept-Language: en-US`).\n" +"- Le lingue disponibili possono essere recuperate dall'endpoint `/app/languages/`.\n" +"- Tutti i contenuti rivolti all'utente supportano immediatamente più lingue.\n" "\n" "## Formati di risposta\n" "L'API supporta diversi formati di risposta:\n" "- **JSON** (predefinito, formattato in camelCase)\n" "- **XML** (aggiungere `?format=xml` o impostare `Accept: application/xml`)\n" -"- **YAML** (aggiungere `?format=yaml` o impostare `Accept: application/x-" -"yaml`)\n" +"- **YAML** (aggiungere `?format=yaml` o impostare `Accept: application/x-yaml`)\n" "\n" "## Salute e monitoraggio\n" "- Controlli sulla salute: `/salute/`\n" @@ -297,38 +270,38 @@ msgstr "Configurazione" msgid "Periodic Tasks" msgstr "Compiti periodici" -#: schon/settings/unfold.py:134 +#: schon/settings/unfold.py:129 msgid "Taskboard" msgstr "Lavagna" -#: schon/settings/unfold.py:146 +#: schon/settings/unfold.py:141 msgid "Quick Links" msgstr "Collegamenti rapidi" -#: schon/settings/unfold.py:151 +#: schon/settings/unfold.py:146 msgid "Users" msgstr "Utenti" -#: schon/settings/unfold.py:156 +#: schon/settings/unfold.py:151 msgid "Groups" msgstr "Gruppi" -#: schon/settings/unfold.py:161 +#: schon/settings/unfold.py:156 msgid "Orders" msgstr "Ordini" -#: schon/settings/unfold.py:166 +#: schon/settings/unfold.py:161 msgid "Products" msgstr "Prodotti" -#: schon/settings/unfold.py:171 +#: schon/settings/unfold.py:166 msgid "Categories" msgstr "Categorie" -#: schon/settings/unfold.py:176 +#: schon/settings/unfold.py:171 msgid "Brands" msgstr "Marche" -#: schon/settings/unfold.py:181 +#: schon/settings/unfold.py:176 msgid "Blogposts" msgstr "Blogposts" diff --git a/schon/locale/ja_JP/LC_MESSAGES/django.mo b/schon/locale/ja_JP/LC_MESSAGES/django.mo index 3d6458eb..28836acf 100644 Binary files a/schon/locale/ja_JP/LC_MESSAGES/django.mo and b/schon/locale/ja_JP/LC_MESSAGES/django.mo differ diff --git a/schon/locale/ja_JP/LC_MESSAGES/django.po b/schon/locale/ja_JP/LC_MESSAGES/django.po index 5c5abf3f..969897c7 100644 --- a/schon/locale/ja_JP/LC_MESSAGES/django.po +++ b/schon/locale/ja_JP/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:19+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -13,179 +13,171 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: schon/settings/constance.py:24 +#: schon/settings/constance.py:31 msgid "Name of the company" msgstr "会社名" -#: schon/settings/constance.py:25 +#: schon/settings/constance.py:32 msgid "Address of the company" msgstr "会社住所" -#: schon/settings/constance.py:28 +#: schon/settings/constance.py:35 msgid "Phone number of the company" msgstr "会社の電話番号" -#: schon/settings/constance.py:35 +#: schon/settings/constance.py:42 msgid "" "Tax rate in jurisdiction of your company. Leave 0 if you don't want to " "process taxes." msgstr "貴社管轄の税率。税務処理を行わない場合は「0」のままにしてください。" -#: schon/settings/constance.py:44 +#: schon/settings/constance.py:51 msgid "Shows if the taxes are already included in product's selling prices" msgstr "商品の販売価格に税金が含まれているかどうかを表示します。" -#: schon/settings/constance.py:52 +#: schon/settings/constance.py:59 msgid "Exchange rate API key" msgstr "為替レートAPIキー" -#: schon/settings/constance.py:58 +#: schon/settings/constance.py:65 msgid "!!!DO NOT CHANGE!!!" msgstr "変えないでくれ" -#: schon/settings/constance.py:60 +#: schon/settings/constance.py:67 msgid "SMTP host" msgstr "SMTPホスト" -#: schon/settings/constance.py:61 +#: schon/settings/constance.py:68 msgid "SMTP port" msgstr "SMTPポート" -#: schon/settings/constance.py:62 +#: schon/settings/constance.py:69 msgid "Use TLS" msgstr "TLSを使用する" -#: schon/settings/constance.py:63 +#: schon/settings/constance.py:70 msgid "Use SSL" msgstr "SSLの使用" -#: schon/settings/constance.py:66 +#: schon/settings/constance.py:73 msgid "SMTP username" msgstr "SMTPユーザー名" -#: schon/settings/constance.py:70 +#: schon/settings/constance.py:79 msgid "SMTP password" msgstr "SMTPパスワード" -#: schon/settings/constance.py:72 +#: schon/settings/constance.py:83 msgid "Mail from option" msgstr "オプションからのメール" -#: schon/settings/constance.py:76 +#: schon/settings/constance.py:90 +msgid "" +"Export products to specified marketplaces. Comma-separated list from " +"" +msgstr "" +"指定されたマーケットプレイスへ商品をエクスポートします。カンマ区切りリスト()" + +#: schon/settings/constance.py:96 msgid "How many days we store messages from anonymous users" msgstr "匿名ユーザーからのメッセージの保存日数" -#: schon/settings/constance.py:80 +#: schon/settings/constance.py:100 msgid "How many days we store messages from authenticated users" msgstr "認証されたユーザーからのメッセージを何日間保存するか" -#: schon/settings/constance.py:84 +#: schon/settings/constance.py:104 msgid "Disable buy functionality" msgstr "購入機能を無効にする" -#: schon/settings/constance.py:88 +#: schon/settings/constance.py:108 msgid "OpenStreetMap Nominatim API URL" msgstr "OpenStreetMap Nominatim API URL" -#: schon/settings/constance.py:92 +#: schon/settings/constance.py:112 msgid "OpenAI API Key" msgstr "OpenAI APIキー" -#: schon/settings/constance.py:96 +#: schon/settings/constance.py:116 msgid "Abstract API Key" msgstr "抽象APIキー" -#: schon/settings/constance.py:104 +#: schon/settings/constance.py:124 msgid "HTTP Proxy" msgstr "HTTPプロキシ" -#: schon/settings/constance.py:112 +#: schon/settings/constance.py:132 msgid "An entity for storing advertisiment data" msgstr "広告データを保存するエンティティ" -#: schon/settings/constance.py:120 +#: schon/settings/constance.py:140 msgid "An entity for storing analytics data" msgstr "分析データを保存するエンティティ" -#: schon/settings/constance.py:125 +#: schon/settings/constance.py:145 msgid "Save responses from vendors' APIs" msgstr "ベンダーのAPIからの応答を保存する" -#: schon/settings/constance.py:126 +#: schon/settings/constance.py:146 msgid "Backup database" msgstr "データベースのバックアップ" -#: schon/settings/constance.py:127 +#: schon/settings/constance.py:147 msgid "Backup media" msgstr "バックアップ・メディア" -#: schon/settings/constance.py:133 +#: schon/settings/constance.py:153 msgid "Legal Options" msgstr "法的オプション" -#: schon/settings/constance.py:141 +#: schon/settings/constance.py:161 msgid "Email Options" msgstr "Eメールオプション" -#: schon/settings/constance.py:151 +#: schon/settings/constance.py:171 msgid "Features Options" msgstr "機能オプション" -#: schon/settings/constance.py:160 +#: schon/settings/constance.py:181 msgid "SEO Options" msgstr "SEOオプション" -#: schon/settings/constance.py:164 +#: schon/settings/constance.py:185 msgid "System Options" msgstr "システムオプション" -#: schon/settings/drf.py:51 +#: schon/settings/drf.py:59 #, python-brace-format msgid "" "\n" "Welcome to the Schon documentation.\n" "\n" -"Schon is a powerful e-commerce platform that allows you to launch and manage " -"an online store of any kind in just a few clicks.\n" +"Schon is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks.\n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"SCHON-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-SCHON-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {access_lifetime} {access_unit}.\n" "- Refresh token lifetime is {refresh_hours} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -197,7 +189,6 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {version}\n" @@ -205,42 +196,32 @@ msgstr "" "\n" "Schon のドキュメントへようこそ。\n" "\n" -"Schonは、数クリックであらゆる種類のオンラインストアを立ち上げ、管理できる強力" -"なeコマースプラットフォームです。\n" +"Schonは、数クリックであらゆる種類のオンラインストアを立ち上げ、管理できる強力なeコマースプラットフォームです。\n" "\n" "## 主な機能\n" -"- 商品カタログ:** 複数のカテゴリにまたがる商品の詳細、価格、在庫、在庫状況を" -"管理します。\n" +"- 商品カタログ:** 複数のカテゴリにまたがる商品の詳細、価格、在庫、在庫状況を管理します。\n" "- 注文管理:**注文を処理し、履行を追跡し、顧客の要求を効率的に処理します。\n" "- JWT トークンとロールベースの権限による包括的なユーザー認証。\n" "- 複数の決済ゲートウェイを統合し、トランザクションを安全に管理します。\n" -"- ブログ・コンテンツ管理:** ブログ記事やマーケティングコンテンツを作成・管理" -"できます。\n" +"- ブログ・コンテンツ管理:** ブログ記事やマーケティングコンテンツを作成・管理できます。\n" "- B2B オペレーション:** 企業間取引と卸売管理のための専用エンドポイント。\n" -"- **多言語サポート:**完全な国際化(国際化)機能で世界中の顧客にサービスを提供" -"します。\n" -"- カスタム統合:**外部プラットフォームやサービスと統合するための拡張可能なAPI" -"アーキテクチャ。\n" +"- **多言語サポート:**完全な国際化(国際化)機能で世界中の顧客にサービスを提供します。\n" +"- カスタム統合:**外部プラットフォームやサービスと統合するための拡張可能なAPIアーキテクチャ。\n" "- 分析&レポート:**売上、在庫、顧客行動に関する詳細なレポートを生成します。\n" -"- リアルタイム更新:**在庫レベル、注文状況、価格変更に関するライブデータを取" -"得します。\n" +"- リアルタイム更新:**在庫レベル、注文状況、価格変更に関するライブデータを取得します。\n" "\n" "## 利用可能なAPI\n" "- **REST API:** 完全なRESTfulインターフェース(このドキュメント)\n" -"- **GraphQL API:** `/graphql/` で利用可能で、対話的なクエリのための GraphiQL " -"インターフェースがある。\n" +"- **GraphQL API:** `/graphql/` で利用可能で、対話的なクエリのための GraphiQL インターフェースがある。\n" "\n" "## 認証\n" -"- 認証はJWTトークンで行われる。リクエストの `X-SCHON-AUTH` ヘッダーに " -"`Bearer ` という形式でトークンを含めてください。\n" +"- 認証はJWTトークンで行われる。リクエストの `X-SCHON-AUTH` ヘッダーに `Bearer ` という形式でトークンを含めてください。\n" "- アクセストークンの有効期限は {access_lifetime} です。{access_unit}です。\n" "- リフレッシュ・トークンの有効期限は {refresh_hours} 時間です。\n" -"- リフレッシュ・トークンはセキュリティ強化のため、使用後に自動的にローテー" -"ションされ無効化されます。\n" +"- リフレッシュ・トークンはセキュリティ強化のため、使用後に自動的にローテーションされ無効化されます。\n" "\n" "## 国際化 (i18n)\n" -"- Accept-Language`ヘッダを設定して、希望する言語を指定する (例: `Accept-" -"Language: en-US`) 。\n" +"- Accept-Language`ヘッダを設定して、希望する言語を指定する (例: `Accept-Language: en-US`) 。\n" "- 利用可能な言語は `/app/languages/` エンドポイントから取得できます。\n" "- すべてのユーザー向けコンテンツは、すぐに多言語をサポートします。\n" "\n" @@ -248,8 +229,7 @@ msgstr "" "APIは複数のレスポンスフォーマットをサポートしています:\n" "- JSON** (デフォルト、キャメルケースフォーマット)\n" "- XML** (`?format=xml` を追加するか、`Accept: application/xml` を設定する)\n" -"- YAML** (`?format=yaml` を追加するか、`Accept: application/x-yaml` を設定し" -"てください)\n" +"- YAML** (`?format=yaml` を追加するか、`Accept: application/x-yaml` を設定してください)\n" "\n" "## ヘルス&モニタリング\n" "- ヘルスチェックヘルスチェック: `/health/`\n" @@ -286,38 +266,38 @@ msgstr "コンフィグ" msgid "Periodic Tasks" msgstr "定期的なタスク" -#: schon/settings/unfold.py:134 +#: schon/settings/unfold.py:129 msgid "Taskboard" msgstr "タスクボード" -#: schon/settings/unfold.py:146 +#: schon/settings/unfold.py:141 msgid "Quick Links" msgstr "クイックリンク" -#: schon/settings/unfold.py:151 +#: schon/settings/unfold.py:146 msgid "Users" msgstr "ユーザー" -#: schon/settings/unfold.py:156 +#: schon/settings/unfold.py:151 msgid "Groups" msgstr "グループ" -#: schon/settings/unfold.py:161 +#: schon/settings/unfold.py:156 msgid "Orders" msgstr "受注状況" -#: schon/settings/unfold.py:166 +#: schon/settings/unfold.py:161 msgid "Products" msgstr "製品紹介" -#: schon/settings/unfold.py:171 +#: schon/settings/unfold.py:166 msgid "Categories" msgstr "カテゴリー" -#: schon/settings/unfold.py:176 +#: schon/settings/unfold.py:171 msgid "Brands" msgstr "ブランド" -#: schon/settings/unfold.py:181 +#: schon/settings/unfold.py:176 msgid "Blogposts" msgstr "ブログ記事" diff --git a/schon/locale/kk_KZ/LC_MESSAGES/django.po b/schon/locale/kk_KZ/LC_MESSAGES/django.po index 4a758980..1c94641e 100644 --- a/schon/locale/kk_KZ/LC_MESSAGES/django.po +++ b/schon/locale/kk_KZ/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:13+0300\n" +"POT-Creation-Date: 2026-03-05 16:16+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,133 +16,139 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: schon/settings/constance.py:24 +#: schon/settings/constance.py:31 msgid "Name of the company" msgstr "" -#: schon/settings/constance.py:25 +#: schon/settings/constance.py:32 msgid "Address of the company" msgstr "" -#: schon/settings/constance.py:28 +#: schon/settings/constance.py:35 msgid "Phone number of the company" msgstr "" -#: schon/settings/constance.py:35 +#: schon/settings/constance.py:42 msgid "" "Tax rate in jurisdiction of your company. Leave 0 if you don't want to " "process taxes." msgstr "" -#: schon/settings/constance.py:44 +#: schon/settings/constance.py:51 msgid "Shows if the taxes are already included in product's selling prices" msgstr "" -#: schon/settings/constance.py:52 +#: schon/settings/constance.py:59 msgid "Exchange rate API key" msgstr "" -#: schon/settings/constance.py:58 +#: schon/settings/constance.py:65 msgid "!!!DO NOT CHANGE!!!" msgstr "" -#: schon/settings/constance.py:60 +#: schon/settings/constance.py:67 msgid "SMTP host" msgstr "" -#: schon/settings/constance.py:61 +#: schon/settings/constance.py:68 msgid "SMTP port" msgstr "" -#: schon/settings/constance.py:62 +#: schon/settings/constance.py:69 msgid "Use TLS" msgstr "" -#: schon/settings/constance.py:63 +#: schon/settings/constance.py:70 msgid "Use SSL" msgstr "" -#: schon/settings/constance.py:66 +#: schon/settings/constance.py:73 msgid "SMTP username" msgstr "" -#: schon/settings/constance.py:70 +#: schon/settings/constance.py:79 msgid "SMTP password" msgstr "" -#: schon/settings/constance.py:72 +#: schon/settings/constance.py:83 msgid "Mail from option" msgstr "" -#: schon/settings/constance.py:76 -msgid "How many days we store messages from anonymous users" -msgstr "" - -#: schon/settings/constance.py:80 -msgid "How many days we store messages from authenticated users" -msgstr "" - -#: schon/settings/constance.py:84 -msgid "Disable buy functionality" -msgstr "" - -#: schon/settings/constance.py:88 -msgid "OpenStreetMap Nominatim API URL" -msgstr "" - -#: schon/settings/constance.py:92 -msgid "OpenAI API Key" +#: schon/settings/constance.py:90 +msgid "" +"Export products to specified marketplaces. Comma-separated list from " +"" msgstr "" #: schon/settings/constance.py:96 -msgid "Abstract API Key" +msgid "How many days we store messages from anonymous users" +msgstr "" + +#: schon/settings/constance.py:100 +msgid "How many days we store messages from authenticated users" msgstr "" #: schon/settings/constance.py:104 -msgid "HTTP Proxy" +msgid "Disable buy functionality" +msgstr "" + +#: schon/settings/constance.py:108 +msgid "OpenStreetMap Nominatim API URL" msgstr "" #: schon/settings/constance.py:112 +msgid "OpenAI API Key" +msgstr "" + +#: schon/settings/constance.py:116 +msgid "Abstract API Key" +msgstr "" + +#: schon/settings/constance.py:124 +msgid "HTTP Proxy" +msgstr "" + +#: schon/settings/constance.py:132 msgid "An entity for storing advertisiment data" msgstr "" -#: schon/settings/constance.py:120 +#: schon/settings/constance.py:140 msgid "An entity for storing analytics data" msgstr "" -#: schon/settings/constance.py:125 +#: schon/settings/constance.py:145 msgid "Save responses from vendors' APIs" msgstr "" -#: schon/settings/constance.py:126 +#: schon/settings/constance.py:146 msgid "Backup database" msgstr "" -#: schon/settings/constance.py:127 +#: schon/settings/constance.py:147 msgid "Backup media" msgstr "" -#: schon/settings/constance.py:133 +#: schon/settings/constance.py:153 msgid "Legal Options" msgstr "" -#: schon/settings/constance.py:141 +#: schon/settings/constance.py:161 msgid "Email Options" msgstr "" -#: schon/settings/constance.py:151 +#: schon/settings/constance.py:171 msgid "Features Options" msgstr "" -#: schon/settings/constance.py:160 +#: schon/settings/constance.py:181 msgid "SEO Options" msgstr "" -#: schon/settings/constance.py:164 +#: schon/settings/constance.py:185 msgid "System Options" msgstr "" -#: schon/settings/drf.py:51 +#: schon/settings/drf.py:59 #, python-brace-format msgid "" "\n" @@ -200,7 +206,6 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {version}\n" @@ -234,38 +239,38 @@ msgstr "" msgid "Periodic Tasks" msgstr "" -#: schon/settings/unfold.py:134 +#: schon/settings/unfold.py:129 msgid "Taskboard" msgstr "" -#: schon/settings/unfold.py:146 +#: schon/settings/unfold.py:141 msgid "Quick Links" msgstr "" -#: schon/settings/unfold.py:151 +#: schon/settings/unfold.py:146 msgid "Users" msgstr "" -#: schon/settings/unfold.py:156 +#: schon/settings/unfold.py:151 msgid "Groups" msgstr "" -#: schon/settings/unfold.py:161 +#: schon/settings/unfold.py:156 msgid "Orders" msgstr "" -#: schon/settings/unfold.py:166 +#: schon/settings/unfold.py:161 msgid "Products" msgstr "" -#: schon/settings/unfold.py:171 +#: schon/settings/unfold.py:166 msgid "Categories" msgstr "" -#: schon/settings/unfold.py:176 +#: schon/settings/unfold.py:171 msgid "Brands" msgstr "" -#: schon/settings/unfold.py:181 +#: schon/settings/unfold.py:176 msgid "Blogposts" msgstr "" diff --git a/schon/locale/ko_KR/LC_MESSAGES/django.mo b/schon/locale/ko_KR/LC_MESSAGES/django.mo index 7f2258a9..09ec072a 100644 Binary files a/schon/locale/ko_KR/LC_MESSAGES/django.mo and b/schon/locale/ko_KR/LC_MESSAGES/django.mo differ diff --git a/schon/locale/ko_KR/LC_MESSAGES/django.po b/schon/locale/ko_KR/LC_MESSAGES/django.po index c1cfa31b..96e0827e 100644 --- a/schon/locale/ko_KR/LC_MESSAGES/django.po +++ b/schon/locale/ko_KR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 01:50+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -13,180 +13,172 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: schon/settings/constance.py:24 +#: schon/settings/constance.py:31 msgid "Name of the company" msgstr "회사 이름" -#: schon/settings/constance.py:25 +#: schon/settings/constance.py:32 msgid "Address of the company" msgstr "회사 주소" -#: schon/settings/constance.py:28 +#: schon/settings/constance.py:35 msgid "Phone number of the company" msgstr "회사 전화번호" -#: schon/settings/constance.py:35 +#: schon/settings/constance.py:42 msgid "" "Tax rate in jurisdiction of your company. Leave 0 if you don't want to " "process taxes." -msgstr "" -"회사 관할 지역의 세율입니다. 세금을 처리하지 않으려면 0을 그대로 둡니다." +msgstr "회사 관할 지역의 세율입니다. 세금을 처리하지 않으려면 0을 그대로 둡니다." -#: schon/settings/constance.py:44 +#: schon/settings/constance.py:51 msgid "Shows if the taxes are already included in product's selling prices" msgstr "제품 판매 가격에 세금이 이미 포함되어 있는지 표시합니다." -#: schon/settings/constance.py:52 +#: schon/settings/constance.py:59 msgid "Exchange rate API key" msgstr "환율 API 키" -#: schon/settings/constance.py:58 +#: schon/settings/constance.py:65 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!변경하지 마세요!!!" -#: schon/settings/constance.py:60 +#: schon/settings/constance.py:67 msgid "SMTP host" msgstr "SMTP 호스트" -#: schon/settings/constance.py:61 +#: schon/settings/constance.py:68 msgid "SMTP port" msgstr "SMTP 포트" -#: schon/settings/constance.py:62 +#: schon/settings/constance.py:69 msgid "Use TLS" msgstr "TLS 사용" -#: schon/settings/constance.py:63 +#: schon/settings/constance.py:70 msgid "Use SSL" msgstr "SSL 사용" -#: schon/settings/constance.py:66 +#: schon/settings/constance.py:73 msgid "SMTP username" msgstr "SMTP 사용자 이름" -#: schon/settings/constance.py:70 +#: schon/settings/constance.py:79 msgid "SMTP password" msgstr "SMTP 비밀번호" -#: schon/settings/constance.py:72 +#: schon/settings/constance.py:83 msgid "Mail from option" msgstr "메일 발신자 옵션" -#: schon/settings/constance.py:76 +#: schon/settings/constance.py:90 +msgid "" +"Export products to specified marketplaces. Comma-separated list from " +"" +msgstr "" +"지정된 마켓플레이스로 제품을 내보냅니다. " +"에서 쉼표로 구분된 목록" + +#: schon/settings/constance.py:96 msgid "How many days we store messages from anonymous users" msgstr "익명 사용자의 메시지를 보관하는 일수" -#: schon/settings/constance.py:80 +#: schon/settings/constance.py:100 msgid "How many days we store messages from authenticated users" msgstr "인증된 사용자의 메시지를 보관하는 일수" -#: schon/settings/constance.py:84 +#: schon/settings/constance.py:104 msgid "Disable buy functionality" msgstr "구매 기능 비활성화" -#: schon/settings/constance.py:88 +#: schon/settings/constance.py:108 msgid "OpenStreetMap Nominatim API URL" msgstr "오픈스트리트맵 노미나팀 API URL" -#: schon/settings/constance.py:92 +#: schon/settings/constance.py:112 msgid "OpenAI API Key" msgstr "OpenAI API 키" -#: schon/settings/constance.py:96 +#: schon/settings/constance.py:116 msgid "Abstract API Key" msgstr "추상 API 키" -#: schon/settings/constance.py:104 +#: schon/settings/constance.py:124 msgid "HTTP Proxy" msgstr "HTTP 프록시" -#: schon/settings/constance.py:112 +#: schon/settings/constance.py:132 msgid "An entity for storing advertisiment data" msgstr "광고 데이터를 저장하는 엔티티" -#: schon/settings/constance.py:120 +#: schon/settings/constance.py:140 msgid "An entity for storing analytics data" msgstr "분석 데이터를 저장하는 엔티티" -#: schon/settings/constance.py:125 +#: schon/settings/constance.py:145 msgid "Save responses from vendors' APIs" msgstr "공급업체 API의 응답 저장하기" -#: schon/settings/constance.py:126 +#: schon/settings/constance.py:146 msgid "Backup database" msgstr "백업 데이터베이스" -#: schon/settings/constance.py:127 +#: schon/settings/constance.py:147 msgid "Backup media" msgstr "백업 미디어" -#: schon/settings/constance.py:133 +#: schon/settings/constance.py:153 msgid "Legal Options" msgstr "법적 옵션" -#: schon/settings/constance.py:141 +#: schon/settings/constance.py:161 msgid "Email Options" msgstr "이메일 옵션" -#: schon/settings/constance.py:151 +#: schon/settings/constance.py:171 msgid "Features Options" msgstr "기능 옵션" -#: schon/settings/constance.py:160 +#: schon/settings/constance.py:181 msgid "SEO Options" msgstr "SEO 옵션" -#: schon/settings/constance.py:164 +#: schon/settings/constance.py:185 msgid "System Options" msgstr "시스템 옵션" -#: schon/settings/drf.py:51 +#: schon/settings/drf.py:59 #, python-brace-format msgid "" "\n" "Welcome to the Schon documentation.\n" "\n" -"Schon is a powerful e-commerce platform that allows you to launch and manage " -"an online store of any kind in just a few clicks.\n" +"Schon is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks.\n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"SCHON-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-SCHON-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {access_lifetime} {access_unit}.\n" "- Refresh token lifetime is {refresh_hours} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -198,7 +190,6 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {version}\n" @@ -206,44 +197,32 @@ msgstr "" "\n" "Schon 문서에 오신 것을 환영합니다.\n" "\n" -"Schon는 클릭 몇 번으로 모든 종류의 온라인 스토어를 시작하고 관리할 수 있는 강" -"력한 전자상거래 플랫폼입니다.\n" +"Schon는 클릭 몇 번으로 모든 종류의 온라인 스토어를 시작하고 관리할 수 있는 강력한 전자상거래 플랫폼입니다.\n" "\n" "주요 기능 ## 주요 기능\n" -"- **제품 카탈로그:** 여러 카테고리에서 제품 세부 정보, 가격, 재고 및 가용성" -"을 관리합니다.\n" -"- 주문 관리:** 주문을 처리하고, 주문 이행을 추적하고, 고객 요청을 효율적으로 " -"처리하세요.\n" -"- 인증 및 권한 부여:** JWT 토큰 및 역할 기반 권한으로 포괄적인 사용자 인증을 " -"수행합니다.\n" +"- **제품 카탈로그:** 여러 카테고리에서 제품 세부 정보, 가격, 재고 및 가용성을 관리합니다.\n" +"- 주문 관리:** 주문을 처리하고, 주문 이행을 추적하고, 고객 요청을 효율적으로 처리하세요.\n" +"- 인증 및 권한 부여:** JWT 토큰 및 역할 기반 권한으로 포괄적인 사용자 인증을 수행합니다.\n" "- 결제 처리:** 여러 결제 게이트웨이를 통합하고 거래를 안전하게 관리하세요.\n" -"- **블로그 및 콘텐츠 관리:** 스토어용 블로그 게시물과 마케팅 콘텐츠를 생성하" -"고 관리합니다.\n" +"- **블로그 및 콘텐츠 관리:** 스토어용 블로그 게시물과 마케팅 콘텐츠를 생성하고 관리합니다.\n" "- B2B 운영:** B2B 거래 및 도매 관리를 위한 전용 엔드포인트.\n" -"- 다국어 지원:** 완전한 국제화(i18n) 기능으로 전 세계 고객에게 서비스를 제공" -"합니다.\n" -"- **맞춤형 통합:** 외부 플랫폼 및 서비스와의 통합을 위한 확장 가능한 API 아키" -"텍처.\n" -"- **분석 및 보고:** 판매, 재고, 고객 행동에 대한 상세한 보고서를 생성합니" -"다.\n" -"- **실시간 업데이트:** 재고 수준, 주문 상태, 가격 변동에 대한 실시간 데이터" -"를 받아보세요.\n" +"- 다국어 지원:** 완전한 국제화(i18n) 기능으로 전 세계 고객에게 서비스를 제공합니다.\n" +"- **맞춤형 통합:** 외부 플랫폼 및 서비스와의 통합을 위한 확장 가능한 API 아키텍처.\n" +"- **분석 및 보고:** 판매, 재고, 고객 행동에 대한 상세한 보고서를 생성합니다.\n" +"- **실시간 업데이트:** 재고 수준, 주문 상태, 가격 변동에 대한 실시간 데이터를 받아보세요.\n" "\n" "## 사용 가능한 API\n" "- **REST API:** 전체 RESTful 인터페이스(이 문서)\n" -"- GraphQL API:** 대화형 쿼리를 위한 GraphiQL 인터페이스로 `/graphql/`에서 사" -"용 가능\n" +"- GraphQL API:** 대화형 쿼리를 위한 GraphiQL 인터페이스로 `/graphql/`에서 사용 가능\n" "\n" "## 인증\n" -"- 인증은 JWT 토큰을 통해 처리됩니다. 토큰을 요청의 `X-SCHON-AUTH` 헤더에 " -"`Bearer ` 형식으로 포함하세요.\n" +"- 인증은 JWT 토큰을 통해 처리됩니다. 토큰을 요청의 `X-SCHON-AUTH` 헤더에 `Bearer ` 형식으로 포함하세요.\n" "- 액세스 토큰 수명은 {access_lifetime}입니다. {access_unit}입니다.\n" "- 새로 고침 토큰 수명은 {refresh_hours} 시간입니다.\n" "- 새로 고침 토큰은 보안 강화를 위해 사용 후 자동으로 교체되고 무효화됩니다.\n" "\n" "## 국제화(i18n)\n" -"- 수락 언어` 헤더를 설정하여 선호하는 언어를 지정합니다(예: `수락 언어: en-" -"US`).\n" +"- 수락 언어` 헤더를 설정하여 선호하는 언어를 지정합니다(예: `수락 언어: en-US`).\n" "- 사용 가능한 언어는 `/app/languages/` 엔드포인트에서 검색할 수 있습니다.\n" "- 모든 사용자 대상 콘텐츠는 기본적으로 여러 언어를 지원합니다.\n" "\n" @@ -288,38 +267,38 @@ msgstr "구성" msgid "Periodic Tasks" msgstr "정기 작업" -#: schon/settings/unfold.py:134 +#: schon/settings/unfold.py:129 msgid "Taskboard" msgstr "작업 보드" -#: schon/settings/unfold.py:146 +#: schon/settings/unfold.py:141 msgid "Quick Links" msgstr "빠른 링크" -#: schon/settings/unfold.py:151 +#: schon/settings/unfold.py:146 msgid "Users" msgstr "사용자" -#: schon/settings/unfold.py:156 +#: schon/settings/unfold.py:151 msgid "Groups" msgstr "그룹" -#: schon/settings/unfold.py:161 +#: schon/settings/unfold.py:156 msgid "Orders" msgstr "주문" -#: schon/settings/unfold.py:166 +#: schon/settings/unfold.py:161 msgid "Products" msgstr "제품" -#: schon/settings/unfold.py:171 +#: schon/settings/unfold.py:166 msgid "Categories" msgstr "카테고리" -#: schon/settings/unfold.py:176 +#: schon/settings/unfold.py:171 msgid "Brands" msgstr "브랜드" -#: schon/settings/unfold.py:181 +#: schon/settings/unfold.py:176 msgid "Blogposts" msgstr "블로그 게시물" diff --git a/schon/locale/nl_NL/LC_MESSAGES/django.mo b/schon/locale/nl_NL/LC_MESSAGES/django.mo index cdf31aef..b10af0f1 100644 Binary files a/schon/locale/nl_NL/LC_MESSAGES/django.mo and b/schon/locale/nl_NL/LC_MESSAGES/django.mo differ diff --git a/schon/locale/nl_NL/LC_MESSAGES/django.po b/schon/locale/nl_NL/LC_MESSAGES/django.po index 3b74587d..90063af9 100644 --- a/schon/locale/nl_NL/LC_MESSAGES/django.po +++ b/schon/locale/nl_NL/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 01:44+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -13,183 +13,177 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: schon/settings/constance.py:24 +#: schon/settings/constance.py:31 msgid "Name of the company" msgstr "Naam van het bedrijf" -#: schon/settings/constance.py:25 +#: schon/settings/constance.py:32 msgid "Address of the company" msgstr "Adres van het bedrijf" -#: schon/settings/constance.py:28 +#: schon/settings/constance.py:35 msgid "Phone number of the company" msgstr "Telefoonnummer van het bedrijf" -#: schon/settings/constance.py:35 +#: schon/settings/constance.py:42 msgid "" "Tax rate in jurisdiction of your company. Leave 0 if you don't want to " "process taxes." msgstr "" -"Belastingtarief in het rechtsgebied van je bedrijf. Laat 0 staan als je geen " -"belastingen wilt verwerken." +"Belastingtarief in het rechtsgebied van je bedrijf. Laat 0 staan als je geen" +" belastingen wilt verwerken." -#: schon/settings/constance.py:44 +#: schon/settings/constance.py:51 msgid "Shows if the taxes are already included in product's selling prices" msgstr "" "Geeft aan of de belastingen al zijn opgenomen in de verkoopprijzen van het " "product" -#: schon/settings/constance.py:52 +#: schon/settings/constance.py:59 msgid "Exchange rate API key" msgstr "Wisselkoers API sleutel" -#: schon/settings/constance.py:58 +#: schon/settings/constance.py:65 msgid "!!!DO NOT CHANGE!!!" msgstr "NIET VERANDEREN!!!" -#: schon/settings/constance.py:60 +#: schon/settings/constance.py:67 msgid "SMTP host" msgstr "SMTP host" -#: schon/settings/constance.py:61 +#: schon/settings/constance.py:68 msgid "SMTP port" msgstr "SMTP poort" -#: schon/settings/constance.py:62 +#: schon/settings/constance.py:69 msgid "Use TLS" msgstr "TLS gebruiken" -#: schon/settings/constance.py:63 +#: schon/settings/constance.py:70 msgid "Use SSL" msgstr "SSL gebruiken" -#: schon/settings/constance.py:66 +#: schon/settings/constance.py:73 msgid "SMTP username" msgstr "SMTP gebruikersnaam" -#: schon/settings/constance.py:70 +#: schon/settings/constance.py:79 msgid "SMTP password" msgstr "SMTP wachtwoord" -#: schon/settings/constance.py:72 +#: schon/settings/constance.py:83 msgid "Mail from option" msgstr "Mail van optie" -#: schon/settings/constance.py:76 +#: schon/settings/constance.py:90 +msgid "" +"Export products to specified marketplaces. Comma-separated list from " +"" +msgstr "" +"Exporteer producten naar gespecificeerde marktplaatsen. Door komma's " +"gescheiden lijst van " +"" + +#: schon/settings/constance.py:96 msgid "How many days we store messages from anonymous users" msgstr "Hoeveel dagen we berichten van anonieme gebruikers bewaren" -#: schon/settings/constance.py:80 +#: schon/settings/constance.py:100 msgid "How many days we store messages from authenticated users" msgstr "Hoeveel dagen we berichten van geverifieerde gebruikers bewaren" -#: schon/settings/constance.py:84 +#: schon/settings/constance.py:104 msgid "Disable buy functionality" msgstr "Koopfunctie uitschakelen" -#: schon/settings/constance.py:88 +#: schon/settings/constance.py:108 msgid "OpenStreetMap Nominatim API URL" msgstr "OpenStreetMap Nominatim API URL" -#: schon/settings/constance.py:92 +#: schon/settings/constance.py:112 msgid "OpenAI API Key" msgstr "OpenAI API sleutel" -#: schon/settings/constance.py:96 +#: schon/settings/constance.py:116 msgid "Abstract API Key" msgstr "Abstracte API-sleutel" -#: schon/settings/constance.py:104 +#: schon/settings/constance.py:124 msgid "HTTP Proxy" msgstr "HTTP-proxy" -#: schon/settings/constance.py:112 +#: schon/settings/constance.py:132 msgid "An entity for storing advertisiment data" msgstr "Een entiteit voor het opslaan van adverteerdersgegevens" -#: schon/settings/constance.py:120 +#: schon/settings/constance.py:140 msgid "An entity for storing analytics data" msgstr "Een entiteit voor het opslaan van analytische gegevens" -#: schon/settings/constance.py:125 +#: schon/settings/constance.py:145 msgid "Save responses from vendors' APIs" msgstr "Reacties opslaan van API's van leveranciers" -#: schon/settings/constance.py:126 +#: schon/settings/constance.py:146 msgid "Backup database" msgstr "Back-up database" -#: schon/settings/constance.py:127 +#: schon/settings/constance.py:147 msgid "Backup media" msgstr "Back-up media" -#: schon/settings/constance.py:133 +#: schon/settings/constance.py:153 msgid "Legal Options" msgstr "Juridische opties" -#: schon/settings/constance.py:141 +#: schon/settings/constance.py:161 msgid "Email Options" msgstr "E-mailopties" -#: schon/settings/constance.py:151 +#: schon/settings/constance.py:171 msgid "Features Options" msgstr "Functies Opties" -#: schon/settings/constance.py:160 +#: schon/settings/constance.py:181 msgid "SEO Options" msgstr "SEO Opties" -#: schon/settings/constance.py:164 +#: schon/settings/constance.py:185 msgid "System Options" msgstr "Systeemopties" -#: schon/settings/drf.py:51 +#: schon/settings/drf.py:59 #, python-brace-format msgid "" "\n" "Welcome to the Schon documentation.\n" "\n" -"Schon is a powerful e-commerce platform that allows you to launch and manage " -"an online store of any kind in just a few clicks.\n" +"Schon is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks.\n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"SCHON-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-SCHON-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {access_lifetime} {access_unit}.\n" "- Refresh token lifetime is {refresh_hours} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -201,7 +195,6 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {version}\n" @@ -209,57 +202,40 @@ msgstr "" "\n" "Welkom bij de Schon documentatie.\n" "\n" -"Schon is een krachtig e-commerce platform waarmee je in een paar klikken een " -"online winkel van elk type kunt starten en beheren.\n" +"Schon is een krachtig e-commerce platform waarmee je in een paar klikken een online winkel van elk type kunt starten en beheren.\n" "\n" "## Belangrijkste functies\n" -"- **Productcatalogus:**Beheer productgegevens, prijzen, voorraad en " -"beschikbaarheid in meerdere categorieën.\n" -"- **Order Management:** Verwerk bestellingen, volg de leveringen en behandel " -"verzoeken van klanten efficiënt.\n" -"- **Authenticatie en autorisatie:**Uitgebreide gebruikersverificatie met JWT " -"tokens en rolgebaseerde rechten.\n" -"- **Betalingsverwerking:** Integreer meerdere betalingsgateways en beheer " -"transacties veilig.\n" -"- **Blog & Content Management:** Creëer en beheer blog posts en marketing " -"content voor uw winkel.\n" -"- **B2B Operations:** Specifieke eindpunten voor business-to-business " -"transacties en groothandelsbeheer.\n" -"- Ondersteuning voor meerdere talen:** Bedien klanten wereldwijd met " -"volledige internationalisatiemogelijkheden (i18n).\n" -"- Aangepaste integraties:** Extensibele API-architectuur voor integratie met " -"externe platforms en diensten.\n" -"- Analyse en rapportage:** Genereer gedetailleerde rapporten over verkoop, " -"voorraad en klantgedrag.\n" -"- Realtime updates:** Ontvang live gegevens over voorraadniveaus, " -"orderstatussen en prijswijzigingen.\n" +"- **Productcatalogus:**Beheer productgegevens, prijzen, voorraad en beschikbaarheid in meerdere categorieën.\n" +"- **Order Management:** Verwerk bestellingen, volg de leveringen en behandel verzoeken van klanten efficiënt.\n" +"- **Authenticatie en autorisatie:**Uitgebreide gebruikersverificatie met JWT tokens en rolgebaseerde rechten.\n" +"- **Betalingsverwerking:** Integreer meerdere betalingsgateways en beheer transacties veilig.\n" +"- **Blog & Content Management:** Creëer en beheer blog posts en marketing content voor uw winkel.\n" +"- **B2B Operations:** Specifieke eindpunten voor business-to-business transacties en groothandelsbeheer.\n" +"- Ondersteuning voor meerdere talen:** Bedien klanten wereldwijd met volledige internationalisatiemogelijkheden (i18n).\n" +"- Aangepaste integraties:** Extensibele API-architectuur voor integratie met externe platforms en diensten.\n" +"- Analyse en rapportage:** Genereer gedetailleerde rapporten over verkoop, voorraad en klantgedrag.\n" +"- Realtime updates:** Ontvang live gegevens over voorraadniveaus, orderstatussen en prijswijzigingen.\n" "\n" "## Beschikbare API's\n" "- **REST API:** Volledige RESTful interface (deze documentatie)\n" -"- **GraphQL API:** Beschikbaar op `/graphql/` met GraphiQL interface voor " -"interactieve queries\n" +"- **GraphQL API:** Beschikbaar op `/graphql/` met GraphiQL interface voor interactieve queries\n" "\n" "## Authenticatie\n" -"- Authenticatie wordt afgehandeld via JWT tokens. Neem het token op in de `X-" -"SCHON-AUTH` header van je verzoeken in het formaat `Bearer `.\n" +"- Authenticatie wordt afgehandeld via JWT tokens. Neem het token op in de `X-SCHON-AUTH` header van je verzoeken in het formaat `Bearer `.\n" "- De levensduur van het toegangstoken is {access_lifetime} {access_unit}.\n" "- De levensduur van een verversingstoken is {refresh_hours} uur.\n" -"- Refresh tokens worden automatisch geroteerd en ongeldig gemaakt na gebruik " -"voor een betere beveiliging.\n" +"- Refresh tokens worden automatisch geroteerd en ongeldig gemaakt na gebruik voor een betere beveiliging.\n" "\n" "## Internationalisatie (i18n)\n" -"- Stel de `Accept-Language` header in om uw voorkeurstaal op te geven " -"(bijvoorbeeld `Accept-Language: en-US`).\n" -"- Beschikbare talen kunnen worden opgehaald van het `/app/languages/` " -"eindpunt.\n" +"- Stel de `Accept-Language` header in om uw voorkeurstaal op te geven (bijvoorbeeld `Accept-Language: en-US`).\n" +"- Beschikbare talen kunnen worden opgehaald van het `/app/languages/` eindpunt.\n" "- Alle gebruikerscontent ondersteunt standaard meerdere talen.\n" "\n" "## Antwoordformaten\n" "De API ondersteunt meerdere antwoordformaten:\n" "- **JSON** (standaard, camelCase geformatteerd)\n" "- **XML** (voeg `?format=xml` toe of stel `Accept: application/xml` in)\n" -"- **YAML** (voeg `?format=yaml` toe of stel `Accept: application/x-yaml` " -"in)\n" +"- **YAML** (voeg `?format=yaml` toe of stel `Accept: application/x-yaml` in)\n" "\n" "## Gezondheid en bewaking\n" "- Gezondheidscontroles: `/health/`\n" @@ -296,38 +272,38 @@ msgstr "Config" msgid "Periodic Tasks" msgstr "Periodieke taken" -#: schon/settings/unfold.py:134 +#: schon/settings/unfold.py:129 msgid "Taskboard" msgstr "Taakbord" -#: schon/settings/unfold.py:146 +#: schon/settings/unfold.py:141 msgid "Quick Links" msgstr "Snelle links" -#: schon/settings/unfold.py:151 +#: schon/settings/unfold.py:146 msgid "Users" msgstr "Gebruikers" -#: schon/settings/unfold.py:156 +#: schon/settings/unfold.py:151 msgid "Groups" msgstr "Groepen" -#: schon/settings/unfold.py:161 +#: schon/settings/unfold.py:156 msgid "Orders" msgstr "Bestellingen" -#: schon/settings/unfold.py:166 +#: schon/settings/unfold.py:161 msgid "Products" msgstr "Producten" -#: schon/settings/unfold.py:171 +#: schon/settings/unfold.py:166 msgid "Categories" msgstr "Categorieën" -#: schon/settings/unfold.py:176 +#: schon/settings/unfold.py:171 msgid "Brands" msgstr "Merken" -#: schon/settings/unfold.py:181 +#: schon/settings/unfold.py:176 msgid "Blogposts" msgstr "Blogposts" diff --git a/schon/locale/no_NO/LC_MESSAGES/django.mo b/schon/locale/no_NO/LC_MESSAGES/django.mo index 82bfd566..b1524d05 100644 Binary files a/schon/locale/no_NO/LC_MESSAGES/django.mo and b/schon/locale/no_NO/LC_MESSAGES/django.mo differ diff --git a/schon/locale/no_NO/LC_MESSAGES/django.po b/schon/locale/no_NO/LC_MESSAGES/django.po index 76202e8a..389a6da7 100644 --- a/schon/locale/no_NO/LC_MESSAGES/django.po +++ b/schon/locale/no_NO/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 01:44+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -13,181 +13,174 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: schon/settings/constance.py:24 +#: schon/settings/constance.py:31 msgid "Name of the company" msgstr "Selskapets navn" -#: schon/settings/constance.py:25 +#: schon/settings/constance.py:32 msgid "Address of the company" msgstr "Selskapets adresse" -#: schon/settings/constance.py:28 +#: schon/settings/constance.py:35 msgid "Phone number of the company" msgstr "Telefonnummer til selskapet" -#: schon/settings/constance.py:35 +#: schon/settings/constance.py:42 msgid "" "Tax rate in jurisdiction of your company. Leave 0 if you don't want to " "process taxes." msgstr "" -"Skattesats i jurisdiksjonen til selskapet ditt. La 0 stå hvis du ikke ønsker " -"å behandle skatter." +"Skattesats i jurisdiksjonen til selskapet ditt. La 0 stå hvis du ikke ønsker" +" å behandle skatter." -#: schon/settings/constance.py:44 +#: schon/settings/constance.py:51 msgid "Shows if the taxes are already included in product's selling prices" msgstr "Viser om avgiftene allerede er inkludert i produktets salgspris" -#: schon/settings/constance.py:52 +#: schon/settings/constance.py:59 msgid "Exchange rate API key" msgstr "API-nøkkel for valutakurs" -#: schon/settings/constance.py:58 +#: schon/settings/constance.py:65 msgid "!!!DO NOT CHANGE!!!" msgstr "!!! IKKE ENDRE !!!!" -#: schon/settings/constance.py:60 +#: schon/settings/constance.py:67 msgid "SMTP host" msgstr "SMTP-vert" -#: schon/settings/constance.py:61 +#: schon/settings/constance.py:68 msgid "SMTP port" msgstr "SMTP-port" -#: schon/settings/constance.py:62 +#: schon/settings/constance.py:69 msgid "Use TLS" msgstr "Bruk TLS" -#: schon/settings/constance.py:63 +#: schon/settings/constance.py:70 msgid "Use SSL" msgstr "Bruk SSL" -#: schon/settings/constance.py:66 +#: schon/settings/constance.py:73 msgid "SMTP username" msgstr "SMTP-brukernavn" -#: schon/settings/constance.py:70 +#: schon/settings/constance.py:79 msgid "SMTP password" msgstr "SMTP-passord" -#: schon/settings/constance.py:72 +#: schon/settings/constance.py:83 msgid "Mail from option" msgstr "Alternativet Mail fra" -#: schon/settings/constance.py:76 +#: schon/settings/constance.py:90 +msgid "" +"Export products to specified marketplaces. Comma-separated list from " +"" +msgstr "" +"Eksporter produkter til spesifiserte markedsplasser. Kommaseparert liste fra" +" " + +#: schon/settings/constance.py:96 msgid "How many days we store messages from anonymous users" msgstr "Hvor mange dager vi lagrer meldinger fra anonyme brukere" -#: schon/settings/constance.py:80 +#: schon/settings/constance.py:100 msgid "How many days we store messages from authenticated users" msgstr "Hvor mange dager vi lagrer meldinger fra autentiserte brukere" -#: schon/settings/constance.py:84 +#: schon/settings/constance.py:104 msgid "Disable buy functionality" msgstr "Deaktiver kjøpsfunksjonalitet" -#: schon/settings/constance.py:88 +#: schon/settings/constance.py:108 msgid "OpenStreetMap Nominatim API URL" msgstr "OpenStreetMap Nominatim API URL" -#: schon/settings/constance.py:92 +#: schon/settings/constance.py:112 msgid "OpenAI API Key" msgstr "OpenAI API-nøkkel" -#: schon/settings/constance.py:96 +#: schon/settings/constance.py:116 msgid "Abstract API Key" msgstr "Abstrakt API-nøkkel" -#: schon/settings/constance.py:104 +#: schon/settings/constance.py:124 msgid "HTTP Proxy" msgstr "HTTP-proxy" -#: schon/settings/constance.py:112 +#: schon/settings/constance.py:132 msgid "An entity for storing advertisiment data" msgstr "En enhet for lagring av annonseringsdata" -#: schon/settings/constance.py:120 +#: schon/settings/constance.py:140 msgid "An entity for storing analytics data" msgstr "En enhet for lagring av analysedata" -#: schon/settings/constance.py:125 +#: schon/settings/constance.py:145 msgid "Save responses from vendors' APIs" msgstr "Lagre svar fra leverandørers API-er" -#: schon/settings/constance.py:126 +#: schon/settings/constance.py:146 msgid "Backup database" msgstr "Sikkerhetskopiering av database" -#: schon/settings/constance.py:127 +#: schon/settings/constance.py:147 msgid "Backup media" msgstr "Backup-medier" -#: schon/settings/constance.py:133 +#: schon/settings/constance.py:153 msgid "Legal Options" msgstr "Juridiske alternativer" -#: schon/settings/constance.py:141 +#: schon/settings/constance.py:161 msgid "Email Options" msgstr "E-postalternativer" -#: schon/settings/constance.py:151 +#: schon/settings/constance.py:171 msgid "Features Options" msgstr "Funksjoner Alternativer" -#: schon/settings/constance.py:160 +#: schon/settings/constance.py:181 msgid "SEO Options" msgstr "SEO-alternativer" -#: schon/settings/constance.py:164 +#: schon/settings/constance.py:185 msgid "System Options" msgstr "Systemalternativer" -#: schon/settings/drf.py:51 +#: schon/settings/drf.py:59 #, python-brace-format msgid "" "\n" "Welcome to the Schon documentation.\n" "\n" -"Schon is a powerful e-commerce platform that allows you to launch and manage " -"an online store of any kind in just a few clicks.\n" +"Schon is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks.\n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"SCHON-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-SCHON-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {access_lifetime} {access_unit}.\n" "- Refresh token lifetime is {refresh_hours} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -199,7 +192,6 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {version}\n" @@ -207,47 +199,32 @@ msgstr "" "\n" "Velkommen til Schon-dokumentasjonen.\n" "\n" -"Schon er en kraftig e-handelsplattform som lar deg starte og administrere en " -"hvilken som helst type nettbutikk med bare noen få klikk.\n" +"Schon er en kraftig e-handelsplattform som lar deg starte og administrere en hvilken som helst type nettbutikk med bare noen få klikk.\n" "\n" "## Nøkkelfunksjoner\n" -"- Produktkatalog:** Administrer produktdetaljer, priser, lagerbeholdning og " -"tilgjengelighet på tvers av flere kategorier.\n" -"- Ordrehåndtering:** Behandle bestillinger, spore oppfyllelse og håndtere " -"kundeforespørsler effektivt.\n" -"- Autentisering og autorisasjon:** Omfattende brukerautentisering med JWT-" -"tokens og rollebaserte tillatelser.\n" -"- Betalingsbehandling: ** Integrer flere betalingsportaler og håndter " -"transaksjoner på en sikker måte.\n" -"- Blogg- og innholdsadministrasjon: ** Opprett og administrer blogginnlegg " -"og markedsføringsinnhold for butikken din.\n" -"- B2B-drift: ** Dedikerte endepunkter for business-to-business-transaksjoner " -"og grossistadministrasjon.\n" -"- Flerspråklig støtte:** Betjen kunder over hele verden med full " -"internasjonaliseringsfunksjonalitet (i18n).\n" -"- **Tilpassede integrasjoner:** Utvidbar API-arkitektur for integrering med " -"eksterne plattformer og tjenester.\n" -"- Analyse og rapportering:** Generer detaljerte rapporter om salg, " -"lagerbeholdning og kundeatferd.\n" -"- Sanntidsoppdateringer:** Få sanntidsdata om lagernivåer, ordrestatus og " -"prisendringer.\n" +"- Produktkatalog:** Administrer produktdetaljer, priser, lagerbeholdning og tilgjengelighet på tvers av flere kategorier.\n" +"- Ordrehåndtering:** Behandle bestillinger, spore oppfyllelse og håndtere kundeforespørsler effektivt.\n" +"- Autentisering og autorisasjon:** Omfattende brukerautentisering med JWT-tokens og rollebaserte tillatelser.\n" +"- Betalingsbehandling: ** Integrer flere betalingsportaler og håndter transaksjoner på en sikker måte.\n" +"- Blogg- og innholdsadministrasjon: ** Opprett og administrer blogginnlegg og markedsføringsinnhold for butikken din.\n" +"- B2B-drift: ** Dedikerte endepunkter for business-to-business-transaksjoner og grossistadministrasjon.\n" +"- Flerspråklig støtte:** Betjen kunder over hele verden med full internasjonaliseringsfunksjonalitet (i18n).\n" +"- **Tilpassede integrasjoner:** Utvidbar API-arkitektur for integrering med eksterne plattformer og tjenester.\n" +"- Analyse og rapportering:** Generer detaljerte rapporter om salg, lagerbeholdning og kundeatferd.\n" +"- Sanntidsoppdateringer:** Få sanntidsdata om lagernivåer, ordrestatus og prisendringer.\n" "\n" "## Tilgjengelige API-er\n" "- **REST API:** Fullt REST-grensesnitt (denne dokumentasjonen)\n" -"- GraphiQL API:** Tilgjengelig på `/graphql/` med GraphiQL-grensesnitt for " -"interaktive spørringer\n" +"- GraphiQL API:** Tilgjengelig på `/graphql/` med GraphiQL-grensesnitt for interaktive spørringer\n" "\n" "## Autentisering\n" -"- Autentisering håndteres via JWT-tokens. Inkluder tokenet i `X-SCHON-AUTH`-" -"overskriften i forespørslene dine i formatet `Bearer `.\n" +"- Autentisering håndteres via JWT-tokens. Inkluder tokenet i `X-SCHON-AUTH`-overskriften i forespørslene dine i formatet `Bearer `.\n" "- Levetiden for tilgangstoken er {access_lifetime}. {access_unit}.\n" "- Levetiden for oppdateringstoken er {refresh_hours} timer.\n" -"- Oppdateringstokener roteres automatisk og ugyldiggjøres etter bruk for økt " -"sikkerhet.\n" +"- Oppdateringstokener roteres automatisk og ugyldiggjøres etter bruk for økt sikkerhet.\n" "\n" "## Internasjonalisering (i18n)\n" -"- Angi `Accept-Language`-overskriften for å spesifisere ditt foretrukne " -"språk (f.eks. `Accept-Language: en-US`).\n" +"- Angi `Accept-Language`-overskriften for å spesifisere ditt foretrukne språk (f.eks. `Accept-Language: en-US`).\n" "- Tilgjengelige språk kan hentes fra endepunktet `/app/languages/`.\n" "- Alt brukerrettet innhold støtter flere språk uten videre.\n" "\n" @@ -255,8 +232,7 @@ msgstr "" "API-et støtter flere svarformater:\n" "- **JSON** (standard, camelCase-formatert)\n" "- XML** (legg til `?format=xml` eller angi `Accept: application/xml`)\n" -"- **YAML** (legg til `?format=yaml` eller angi `Accept: application/x-" -"yaml`)\n" +"- **YAML** (legg til `?format=yaml` eller angi `Accept: application/x-yaml`)\n" "\n" "## Helse og overvåking\n" "- Helsesjekker: `/health/`\n" @@ -293,38 +269,38 @@ msgstr "Konfigurer" msgid "Periodic Tasks" msgstr "Periodiske oppgaver" -#: schon/settings/unfold.py:134 +#: schon/settings/unfold.py:129 msgid "Taskboard" msgstr "Oppgavetavle" -#: schon/settings/unfold.py:146 +#: schon/settings/unfold.py:141 msgid "Quick Links" msgstr "Hurtigkoblinger" -#: schon/settings/unfold.py:151 +#: schon/settings/unfold.py:146 msgid "Users" msgstr "Brukere" -#: schon/settings/unfold.py:156 +#: schon/settings/unfold.py:151 msgid "Groups" msgstr "Grupper" -#: schon/settings/unfold.py:161 +#: schon/settings/unfold.py:156 msgid "Orders" msgstr "Bestillinger" -#: schon/settings/unfold.py:166 +#: schon/settings/unfold.py:161 msgid "Products" msgstr "Produkter" -#: schon/settings/unfold.py:171 +#: schon/settings/unfold.py:166 msgid "Categories" msgstr "Kategorier" -#: schon/settings/unfold.py:176 +#: schon/settings/unfold.py:171 msgid "Brands" msgstr "Merkevarer" -#: schon/settings/unfold.py:181 +#: schon/settings/unfold.py:176 msgid "Blogposts" msgstr "Blogginnlegg" diff --git a/schon/locale/pl_PL/LC_MESSAGES/django.mo b/schon/locale/pl_PL/LC_MESSAGES/django.mo index 152783dd..8f3169e0 100644 Binary files a/schon/locale/pl_PL/LC_MESSAGES/django.mo and b/schon/locale/pl_PL/LC_MESSAGES/django.mo differ diff --git a/schon/locale/pl_PL/LC_MESSAGES/django.po b/schon/locale/pl_PL/LC_MESSAGES/django.po index 7c4ad2d5..6bbba5f3 100644 --- a/schon/locale/pl_PL/LC_MESSAGES/django.po +++ b/schon/locale/pl_PL/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 01:44+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -13,19 +13,19 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: schon/settings/constance.py:24 +#: schon/settings/constance.py:31 msgid "Name of the company" msgstr "Nazwa firmy" -#: schon/settings/constance.py:25 +#: schon/settings/constance.py:32 msgid "Address of the company" msgstr "Adres spółki" -#: schon/settings/constance.py:28 +#: schon/settings/constance.py:35 msgid "Phone number of the company" msgstr "Numer telefonu firmy" -#: schon/settings/constance.py:35 +#: schon/settings/constance.py:42 msgid "" "Tax rate in jurisdiction of your company. Leave 0 if you don't want to " "process taxes." @@ -33,161 +33,154 @@ msgstr "" "Stawka podatku w jurysdykcji Twojej firmy. Pozostaw 0, jeśli nie chcesz " "przetwarzać podatków." -#: schon/settings/constance.py:44 +#: schon/settings/constance.py:51 msgid "Shows if the taxes are already included in product's selling prices" msgstr "Pokazuje, czy podatki są już uwzględnione w cenie sprzedaży produktu." -#: schon/settings/constance.py:52 +#: schon/settings/constance.py:59 msgid "Exchange rate API key" msgstr "Klucz API kursu wymiany" -#: schon/settings/constance.py:58 +#: schon/settings/constance.py:65 msgid "!!!DO NOT CHANGE!!!" msgstr "!!! NIE ZMIENIAJ !!!" -#: schon/settings/constance.py:60 +#: schon/settings/constance.py:67 msgid "SMTP host" msgstr "Host SMTP" -#: schon/settings/constance.py:61 +#: schon/settings/constance.py:68 msgid "SMTP port" msgstr "Port SMTP" -#: schon/settings/constance.py:62 +#: schon/settings/constance.py:69 msgid "Use TLS" msgstr "Używanie TLS" -#: schon/settings/constance.py:63 +#: schon/settings/constance.py:70 msgid "Use SSL" msgstr "Używanie protokołu SSL" -#: schon/settings/constance.py:66 +#: schon/settings/constance.py:73 msgid "SMTP username" msgstr "Nazwa użytkownika SMTP" -#: schon/settings/constance.py:70 +#: schon/settings/constance.py:79 msgid "SMTP password" msgstr "Hasło SMTP" -#: schon/settings/constance.py:72 +#: schon/settings/constance.py:83 msgid "Mail from option" msgstr "Poczta z opcji" -#: schon/settings/constance.py:76 +#: schon/settings/constance.py:90 +msgid "" +"Export products to specified marketplaces. Comma-separated list from " +"" +msgstr "" +"Eksportuj produkty do określonych rynków. Lista rozdzielona przecinkami z " +"" + +#: schon/settings/constance.py:96 msgid "How many days we store messages from anonymous users" msgstr "Ile dni przechowujemy wiadomości od anonimowych użytkowników?" -#: schon/settings/constance.py:80 +#: schon/settings/constance.py:100 msgid "How many days we store messages from authenticated users" msgstr "Ile dni przechowujemy wiadomości od uwierzytelnionych użytkowników?" -#: schon/settings/constance.py:84 +#: schon/settings/constance.py:104 msgid "Disable buy functionality" msgstr "Wyłączenie funkcji kupowania" -#: schon/settings/constance.py:88 +#: schon/settings/constance.py:108 msgid "OpenStreetMap Nominatim API URL" msgstr "Adres URL interfejsu API OpenStreetMap Nominatim" -#: schon/settings/constance.py:92 +#: schon/settings/constance.py:112 msgid "OpenAI API Key" msgstr "Klucz API OpenAI" -#: schon/settings/constance.py:96 +#: schon/settings/constance.py:116 msgid "Abstract API Key" msgstr "Abstrakcyjny klucz API" -#: schon/settings/constance.py:104 +#: schon/settings/constance.py:124 msgid "HTTP Proxy" msgstr "Serwer proxy HTTP" -#: schon/settings/constance.py:112 +#: schon/settings/constance.py:132 msgid "An entity for storing advertisiment data" msgstr "Jednostka do przechowywania danych reklamowych" -#: schon/settings/constance.py:120 +#: schon/settings/constance.py:140 msgid "An entity for storing analytics data" msgstr "Jednostka do przechowywania danych analitycznych" -#: schon/settings/constance.py:125 +#: schon/settings/constance.py:145 msgid "Save responses from vendors' APIs" msgstr "Zapisywanie odpowiedzi z interfejsów API dostawców" -#: schon/settings/constance.py:126 +#: schon/settings/constance.py:146 msgid "Backup database" msgstr "Kopia zapasowa bazy danych" -#: schon/settings/constance.py:127 +#: schon/settings/constance.py:147 msgid "Backup media" msgstr "Nośniki kopii zapasowych" -#: schon/settings/constance.py:133 +#: schon/settings/constance.py:153 msgid "Legal Options" msgstr "Opcje prawne" -#: schon/settings/constance.py:141 +#: schon/settings/constance.py:161 msgid "Email Options" msgstr "Opcje e-mail" -#: schon/settings/constance.py:151 +#: schon/settings/constance.py:171 msgid "Features Options" msgstr "Opcje funkcji" -#: schon/settings/constance.py:160 +#: schon/settings/constance.py:181 msgid "SEO Options" msgstr "Opcje SEO" -#: schon/settings/constance.py:164 +#: schon/settings/constance.py:185 msgid "System Options" msgstr "Opcje systemowe" -#: schon/settings/drf.py:51 +#: schon/settings/drf.py:59 #, python-brace-format msgid "" "\n" "Welcome to the Schon documentation.\n" "\n" -"Schon is a powerful e-commerce platform that allows you to launch and manage " -"an online store of any kind in just a few clicks.\n" +"Schon is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks.\n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"SCHON-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-SCHON-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {access_lifetime} {access_unit}.\n" "- Refresh token lifetime is {refresh_hours} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -199,7 +192,6 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {version}\n" @@ -207,51 +199,34 @@ msgstr "" "\n" "Witamy w dokumentacji Schon.\n" "\n" -"Schon to potężna platforma e-commerce, która umożliwia uruchomienie i " -"zarządzanie sklepem internetowym dowolnego rodzaju za pomocą zaledwie kilku " -"kliknięć.\n" +"Schon to potężna platforma e-commerce, która umożliwia uruchomienie i zarządzanie sklepem internetowym dowolnego rodzaju za pomocą zaledwie kilku kliknięć.\n" "\n" "## Kluczowe funkcje\n" -"- Katalog produktów:** Zarządzanie szczegółami produktów, cenami, zapasami i " -"dostępnością w wielu kategoriach.\n" -"- **Zarządzanie zamówieniami:** Przetwarzanie zamówień, śledzenie realizacji " -"i efektywna obsługa zgłoszeń klientów.\n" -"- Uwierzytelnianie i autoryzacja:** Kompleksowe uwierzytelnianie " -"użytkowników za pomocą tokenów JWT i uprawnień opartych na rolach.\n" -"- Przetwarzanie płatności:** Integracja wielu bramek płatniczych i " -"bezpieczne zarządzanie transakcjami.\n" -"- Blog i zarządzanie treścią:** Tworzenie i zarządzanie postami na blogu i " -"treściami marketingowymi dla sklepu.\n" -"- Operacje B2B:** Dedykowane punkty końcowe dla transakcji między firmami i " -"zarządzania sprzedażą hurtową.\n" -"- Obsługa wielu języków:** Obsługa klientów na całym świecie dzięki pełnym " -"możliwościom internacjonalizacji (i18n).\n" -"- Integracje niestandardowe:** Rozszerzalna architektura API do integracji z " -"zewnętrznymi platformami i usługami.\n" -"- Analityka i raportowanie:** Generowanie szczegółowych raportów dotyczących " -"sprzedaży, zapasów i zachowań klientów.\n" -"- Aktualizacje w czasie rzeczywistym:** Uzyskaj dane na żywo o poziomach " -"zapasów, statusach zamówień i zmianach cen.\n" +"- Katalog produktów:** Zarządzanie szczegółami produktów, cenami, zapasami i dostępnością w wielu kategoriach.\n" +"- **Zarządzanie zamówieniami:** Przetwarzanie zamówień, śledzenie realizacji i efektywna obsługa zgłoszeń klientów.\n" +"- Uwierzytelnianie i autoryzacja:** Kompleksowe uwierzytelnianie użytkowników za pomocą tokenów JWT i uprawnień opartych na rolach.\n" +"- Przetwarzanie płatności:** Integracja wielu bramek płatniczych i bezpieczne zarządzanie transakcjami.\n" +"- Blog i zarządzanie treścią:** Tworzenie i zarządzanie postami na blogu i treściami marketingowymi dla sklepu.\n" +"- Operacje B2B:** Dedykowane punkty końcowe dla transakcji między firmami i zarządzania sprzedażą hurtową.\n" +"- Obsługa wielu języków:** Obsługa klientów na całym świecie dzięki pełnym możliwościom internacjonalizacji (i18n).\n" +"- Integracje niestandardowe:** Rozszerzalna architektura API do integracji z zewnętrznymi platformami i usługami.\n" +"- Analityka i raportowanie:** Generowanie szczegółowych raportów dotyczących sprzedaży, zapasów i zachowań klientów.\n" +"- Aktualizacje w czasie rzeczywistym:** Uzyskaj dane na żywo o poziomach zapasów, statusach zamówień i zmianach cen.\n" "\n" "## Dostępne API\n" "- **REST API:** Pełny interfejs RESTful (ta dokumentacja)\n" -"- API GraphQL:** Dostępne pod adresem `/graphql/` z interfejsem GraphiQL do " -"interaktywnych zapytań.\n" +"- API GraphQL:** Dostępne pod adresem `/graphql/` z interfejsem GraphiQL do interaktywnych zapytań.\n" "\n" "## Uwierzytelnianie\n" -"- Uwierzytelnianie jest obsługiwane za pomocą tokenów JWT. Dołącz token w " -"nagłówku `X-SCHON-AUTH` swoich żądań w formacie `Bearer `.\n" +"- Uwierzytelnianie jest obsługiwane za pomocą tokenów JWT. Dołącz token w nagłówku `X-SCHON-AUTH` swoich żądań w formacie `Bearer `.\n" "- Okres ważności tokenu dostępu wynosi {access_lifetime} {access_unit}.\n" "- Okres ważności tokenu odświeżania wynosi {refresh_hours} godzin.\n" -"- Tokeny odświeżania są automatycznie obracane i unieważniane po użyciu w " -"celu zwiększenia bezpieczeństwa.\n" +"- Tokeny odświeżania są automatycznie obracane i unieważniane po użyciu w celu zwiększenia bezpieczeństwa.\n" "\n" "## Internacjonalizacja (i18n)\n" -"- Ustaw nagłówek `Accept-Language`, aby określić preferowany język (np. " -"`Accept-Language: en-US`).\n" +"- Ustaw nagłówek `Accept-Language`, aby określić preferowany język (np. `Accept-Language: en-US`).\n" "- Dostępne języki można pobrać z punktu końcowego `/app/languages/`.\n" -"- Cała zawartość skierowana do użytkownika obsługuje wiele języków od razu " -"po wyjęciu z pudełka.\n" +"- Cała zawartość skierowana do użytkownika obsługuje wiele języków od razu po wyjęciu z pudełka.\n" "\n" "## Formaty odpowiedzi\n" "API obsługuje wiele formatów odpowiedzi:\n" @@ -294,38 +269,38 @@ msgstr "Konfiguracja" msgid "Periodic Tasks" msgstr "Zadania okresowe" -#: schon/settings/unfold.py:134 +#: schon/settings/unfold.py:129 msgid "Taskboard" msgstr "Tablica zadań" -#: schon/settings/unfold.py:146 +#: schon/settings/unfold.py:141 msgid "Quick Links" msgstr "Szybkie łącza" -#: schon/settings/unfold.py:151 +#: schon/settings/unfold.py:146 msgid "Users" msgstr "Użytkownicy" -#: schon/settings/unfold.py:156 +#: schon/settings/unfold.py:151 msgid "Groups" msgstr "Grupy" -#: schon/settings/unfold.py:161 +#: schon/settings/unfold.py:156 msgid "Orders" msgstr "Zamówienia" -#: schon/settings/unfold.py:166 +#: schon/settings/unfold.py:161 msgid "Products" msgstr "Produkty" -#: schon/settings/unfold.py:171 +#: schon/settings/unfold.py:166 msgid "Categories" msgstr "Kategorie" -#: schon/settings/unfold.py:176 +#: schon/settings/unfold.py:171 msgid "Brands" msgstr "Marki" -#: schon/settings/unfold.py:181 +#: schon/settings/unfold.py:176 msgid "Blogposts" msgstr "Blogposts" diff --git a/schon/locale/pt_BR/LC_MESSAGES/django.mo b/schon/locale/pt_BR/LC_MESSAGES/django.mo index 6230678e..91c62ff5 100644 Binary files a/schon/locale/pt_BR/LC_MESSAGES/django.mo and b/schon/locale/pt_BR/LC_MESSAGES/django.mo differ diff --git a/schon/locale/pt_BR/LC_MESSAGES/django.po b/schon/locale/pt_BR/LC_MESSAGES/django.po index 2fe9705b..26c4dcc2 100644 --- a/schon/locale/pt_BR/LC_MESSAGES/django.po +++ b/schon/locale/pt_BR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 01:44+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -13,19 +13,19 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: schon/settings/constance.py:24 +#: schon/settings/constance.py:31 msgid "Name of the company" msgstr "Nome da empresa" -#: schon/settings/constance.py:25 +#: schon/settings/constance.py:32 msgid "Address of the company" msgstr "Endereço da empresa" -#: schon/settings/constance.py:28 +#: schon/settings/constance.py:35 msgid "Phone number of the company" msgstr "Número de telefone da empresa" -#: schon/settings/constance.py:35 +#: schon/settings/constance.py:42 msgid "" "Tax rate in jurisdiction of your company. Leave 0 if you don't want to " "process taxes." @@ -33,162 +33,155 @@ msgstr "" "Taxa de imposto na jurisdição de sua empresa. Deixe 0 se você não quiser " "processar impostos." -#: schon/settings/constance.py:44 +#: schon/settings/constance.py:51 msgid "Shows if the taxes are already included in product's selling prices" msgstr "" "Mostra se os impostos já estão incluídos nos preços de venda do produto" -#: schon/settings/constance.py:52 +#: schon/settings/constance.py:59 msgid "Exchange rate API key" msgstr "Chave da API de taxa de câmbio" -#: schon/settings/constance.py:58 +#: schon/settings/constance.py:65 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!NÃO MUDE!!!" -#: schon/settings/constance.py:60 +#: schon/settings/constance.py:67 msgid "SMTP host" msgstr "Host SMTP" -#: schon/settings/constance.py:61 +#: schon/settings/constance.py:68 msgid "SMTP port" msgstr "Porta SMTP" -#: schon/settings/constance.py:62 +#: schon/settings/constance.py:69 msgid "Use TLS" msgstr "Usar TLS" -#: schon/settings/constance.py:63 +#: schon/settings/constance.py:70 msgid "Use SSL" msgstr "Usar SSL" -#: schon/settings/constance.py:66 +#: schon/settings/constance.py:73 msgid "SMTP username" msgstr "Nome de usuário SMTP" -#: schon/settings/constance.py:70 +#: schon/settings/constance.py:79 msgid "SMTP password" msgstr "Senha SMTP" -#: schon/settings/constance.py:72 +#: schon/settings/constance.py:83 msgid "Mail from option" msgstr "Opção de correio eletrônico de" -#: schon/settings/constance.py:76 +#: schon/settings/constance.py:90 +msgid "" +"Export products to specified marketplaces. Comma-separated list from " +"" +msgstr "" +"Exportar produtos para mercados específicos. Lista separada por vírgulas de " +"." + +#: schon/settings/constance.py:96 msgid "How many days we store messages from anonymous users" msgstr "Por quantos dias armazenamos mensagens de usuários anônimos" -#: schon/settings/constance.py:80 +#: schon/settings/constance.py:100 msgid "How many days we store messages from authenticated users" msgstr "Por quantos dias armazenamos mensagens de usuários autenticados" -#: schon/settings/constance.py:84 +#: schon/settings/constance.py:104 msgid "Disable buy functionality" msgstr "Desativar a funcionalidade de compra" -#: schon/settings/constance.py:88 +#: schon/settings/constance.py:108 msgid "OpenStreetMap Nominatim API URL" msgstr "URL da API do OpenStreetMap Nominatim" -#: schon/settings/constance.py:92 +#: schon/settings/constance.py:112 msgid "OpenAI API Key" msgstr "Chave da API da OpenAI" -#: schon/settings/constance.py:96 +#: schon/settings/constance.py:116 msgid "Abstract API Key" msgstr "Chave abstrata da API" -#: schon/settings/constance.py:104 +#: schon/settings/constance.py:124 msgid "HTTP Proxy" msgstr "Proxy HTTP" -#: schon/settings/constance.py:112 +#: schon/settings/constance.py:132 msgid "An entity for storing advertisiment data" msgstr "Uma entidade para armazenar dados de propaganda" -#: schon/settings/constance.py:120 +#: schon/settings/constance.py:140 msgid "An entity for storing analytics data" msgstr "Uma entidade para armazenar dados analíticos" -#: schon/settings/constance.py:125 +#: schon/settings/constance.py:145 msgid "Save responses from vendors' APIs" msgstr "Salvar respostas das APIs dos fornecedores" -#: schon/settings/constance.py:126 +#: schon/settings/constance.py:146 msgid "Backup database" msgstr "Banco de dados de backup" -#: schon/settings/constance.py:127 +#: schon/settings/constance.py:147 msgid "Backup media" msgstr "Mídia de backup" -#: schon/settings/constance.py:133 +#: schon/settings/constance.py:153 msgid "Legal Options" msgstr "Opções legais" -#: schon/settings/constance.py:141 +#: schon/settings/constance.py:161 msgid "Email Options" msgstr "Opções de e-mail" -#: schon/settings/constance.py:151 +#: schon/settings/constance.py:171 msgid "Features Options" msgstr "Opções de recursos" -#: schon/settings/constance.py:160 +#: schon/settings/constance.py:181 msgid "SEO Options" msgstr "Opções de SEO" -#: schon/settings/constance.py:164 +#: schon/settings/constance.py:185 msgid "System Options" msgstr "Opções do sistema" -#: schon/settings/drf.py:51 +#: schon/settings/drf.py:59 #, python-brace-format msgid "" "\n" "Welcome to the Schon documentation.\n" "\n" -"Schon is a powerful e-commerce platform that allows you to launch and manage " -"an online store of any kind in just a few clicks.\n" +"Schon is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks.\n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"SCHON-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-SCHON-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {access_lifetime} {access_unit}.\n" "- Refresh token lifetime is {refresh_hours} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -200,7 +193,6 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {version}\n" @@ -208,53 +200,34 @@ msgstr "" "\n" "Bem-vindo à documentação do Schon.\n" "\n" -"O Schon é uma poderosa plataforma de comércio eletrônico que lhe permite " -"lançar e gerenciar uma loja on-line de qualquer tipo com apenas alguns " -"cliques.\n" +"O Schon é uma poderosa plataforma de comércio eletrônico que lhe permite lançar e gerenciar uma loja on-line de qualquer tipo com apenas alguns cliques.\n" "\n" "## Principais recursos\n" -"- Catálogo de produtos:** Gerencie detalhes, preços, estoque e " -"disponibilidade de produtos em várias categorias.\n" -"- Gerenciamento de pedidos:** Processe pedidos, acompanhe o atendimento e " -"trate as solicitações dos clientes com eficiência.\n" -"- Autenticação e autorização:** Autenticação abrangente de usuários com " -"tokens JWT e permissões baseadas em funções.\n" -"- Processamento de pagamentos: integre vários gateways de pagamento e " -"gerencie as transações com segurança.\n" -"- **Gerenciamento de blogs e conteúdo:** Crie e gerencie postagens de blogs " -"e conteúdo de marketing para sua loja.\n" -"- Operações B2B:** Pontos de extremidade dedicados para transações business-" -"to-business e gerenciamento de atacado.\n" -"- Suporte a vários idiomas:** Atenda a clientes em todo o mundo com recursos " -"completos de internacionalização (i18n).\n" -"- Integrações personalizadas:** Arquitetura de API extensível para " -"integração com plataformas e serviços externos.\n" -"- Análises e relatórios:** Gerar relatórios detalhados sobre vendas, estoque " -"e comportamento do cliente.\n" -"- Atualizações em tempo real:** Obtenha dados em tempo real sobre níveis de " -"estoque, status de pedidos e alterações de preços.\n" +"- Catálogo de produtos:** Gerencie detalhes, preços, estoque e disponibilidade de produtos em várias categorias.\n" +"- Gerenciamento de pedidos:** Processe pedidos, acompanhe o atendimento e trate as solicitações dos clientes com eficiência.\n" +"- Autenticação e autorização:** Autenticação abrangente de usuários com tokens JWT e permissões baseadas em funções.\n" +"- Processamento de pagamentos: integre vários gateways de pagamento e gerencie as transações com segurança.\n" +"- **Gerenciamento de blogs e conteúdo:** Crie e gerencie postagens de blogs e conteúdo de marketing para sua loja.\n" +"- Operações B2B:** Pontos de extremidade dedicados para transações business-to-business e gerenciamento de atacado.\n" +"- Suporte a vários idiomas:** Atenda a clientes em todo o mundo com recursos completos de internacionalização (i18n).\n" +"- Integrações personalizadas:** Arquitetura de API extensível para integração com plataformas e serviços externos.\n" +"- Análises e relatórios:** Gerar relatórios detalhados sobre vendas, estoque e comportamento do cliente.\n" +"- Atualizações em tempo real:** Obtenha dados em tempo real sobre níveis de estoque, status de pedidos e alterações de preços.\n" "\n" "## APIs disponíveis\n" "- API REST:** Interface RESTful completa (esta documentação)\n" -"- API GraphQL:** Disponível em `/graphql/` com interface GraphiQL para " -"consultas interativas\n" +"- API GraphQL:** Disponível em `/graphql/` com interface GraphiQL para consultas interativas\n" "\n" "## Autenticação\n" -"- A autenticação é tratada por meio de tokens JWT. Inclua o token no " -"cabeçalho `X-SCHON-AUTH` de suas solicitações no formato `Bearer " -"`.\n" +"- A autenticação é tratada por meio de tokens JWT. Inclua o token no cabeçalho `X-SCHON-AUTH` de suas solicitações no formato `Bearer `.\n" "- O tempo de vida do token de acesso é {access_lifetime} {access_unit}.\n" "- A vida útil do token de atualização é de {refresh_hours} horas.\n" -"- Os tokens de atualização são automaticamente girados e invalidados após o " -"uso para aumentar a segurança.\n" +"- Os tokens de atualização são automaticamente girados e invalidados após o uso para aumentar a segurança.\n" "\n" "## Internacionalização (i18n)\n" -"- Defina o cabeçalho `Accept-Language` para especificar seu idioma preferido " -"(por exemplo, `Accept-Language: en-US`).\n" -"- Os idiomas disponíveis podem ser recuperados no ponto de extremidade `/app/" -"languages/`.\n" -"- Todo o conteúdo voltado para o usuário é compatível com vários idiomas " -"desde o início.\n" +"- Defina o cabeçalho `Accept-Language` para especificar seu idioma preferido (por exemplo, `Accept-Language: en-US`).\n" +"- Os idiomas disponíveis podem ser recuperados no ponto de extremidade `/app/languages/`.\n" +"- Todo o conteúdo voltado para o usuário é compatível com vários idiomas desde o início.\n" "\n" "## Formatos de resposta\n" "A API oferece suporte a vários formatos de resposta:\n" @@ -297,38 +270,38 @@ msgstr "Configuração" msgid "Periodic Tasks" msgstr "Tarefas periódicas" -#: schon/settings/unfold.py:134 +#: schon/settings/unfold.py:129 msgid "Taskboard" msgstr "Quadro de tarefas" -#: schon/settings/unfold.py:146 +#: schon/settings/unfold.py:141 msgid "Quick Links" msgstr "Links rápidos" -#: schon/settings/unfold.py:151 +#: schon/settings/unfold.py:146 msgid "Users" msgstr "Usuários" -#: schon/settings/unfold.py:156 +#: schon/settings/unfold.py:151 msgid "Groups" msgstr "Grupos" -#: schon/settings/unfold.py:161 +#: schon/settings/unfold.py:156 msgid "Orders" msgstr "Pedidos" -#: schon/settings/unfold.py:166 +#: schon/settings/unfold.py:161 msgid "Products" msgstr "Produtos" -#: schon/settings/unfold.py:171 +#: schon/settings/unfold.py:166 msgid "Categories" msgstr "Categorias" -#: schon/settings/unfold.py:176 +#: schon/settings/unfold.py:171 msgid "Brands" msgstr "Marcas" -#: schon/settings/unfold.py:181 +#: schon/settings/unfold.py:176 msgid "Blogposts" msgstr "Postagens em blogs" diff --git a/schon/locale/ro_RO/LC_MESSAGES/django.mo b/schon/locale/ro_RO/LC_MESSAGES/django.mo index 9be58001..1daec230 100644 Binary files a/schon/locale/ro_RO/LC_MESSAGES/django.mo and b/schon/locale/ro_RO/LC_MESSAGES/django.mo differ diff --git a/schon/locale/ro_RO/LC_MESSAGES/django.po b/schon/locale/ro_RO/LC_MESSAGES/django.po index 2d4d87f7..88a5072b 100644 --- a/schon/locale/ro_RO/LC_MESSAGES/django.po +++ b/schon/locale/ro_RO/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:19+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -13,19 +13,19 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: schon/settings/constance.py:24 +#: schon/settings/constance.py:31 msgid "Name of the company" msgstr "Denumirea societății" -#: schon/settings/constance.py:25 +#: schon/settings/constance.py:32 msgid "Address of the company" msgstr "Adresa societății" -#: schon/settings/constance.py:28 +#: schon/settings/constance.py:35 msgid "Phone number of the company" msgstr "Numărul de telefon al societății" -#: schon/settings/constance.py:35 +#: schon/settings/constance.py:42 msgid "" "Tax rate in jurisdiction of your company. Leave 0 if you don't want to " "process taxes." @@ -33,162 +33,155 @@ msgstr "" "Cota de impozitare în jurisdicția companiei dumneavoastră. Lăsați 0 dacă nu " "doriți să procesați taxele." -#: schon/settings/constance.py:44 +#: schon/settings/constance.py:51 msgid "Shows if the taxes are already included in product's selling prices" msgstr "" "Arată dacă taxele sunt deja incluse în prețurile de vânzare ale produsului" -#: schon/settings/constance.py:52 +#: schon/settings/constance.py:59 msgid "Exchange rate API key" msgstr "Cheie API pentru rata de schimb" -#: schon/settings/constance.py:58 +#: schon/settings/constance.py:65 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!NU SCHIMBAȚI!!!" -#: schon/settings/constance.py:60 +#: schon/settings/constance.py:67 msgid "SMTP host" msgstr "Gazdă SMTP" -#: schon/settings/constance.py:61 +#: schon/settings/constance.py:68 msgid "SMTP port" msgstr "Portul SMTP" -#: schon/settings/constance.py:62 +#: schon/settings/constance.py:69 msgid "Use TLS" msgstr "Utilizați TLS" -#: schon/settings/constance.py:63 +#: schon/settings/constance.py:70 msgid "Use SSL" msgstr "Utilizați SSL" -#: schon/settings/constance.py:66 +#: schon/settings/constance.py:73 msgid "SMTP username" msgstr "Nume utilizator SMTP" -#: schon/settings/constance.py:70 +#: schon/settings/constance.py:79 msgid "SMTP password" msgstr "Parola SMTP" -#: schon/settings/constance.py:72 +#: schon/settings/constance.py:83 msgid "Mail from option" msgstr "Posta de la opțiune" -#: schon/settings/constance.py:76 +#: schon/settings/constance.py:90 +msgid "" +"Export products to specified marketplaces. Comma-separated list from " +"" +msgstr "" +"Exportați produsele către piețele specificate. Listă separată prin virgule " +"din " + +#: schon/settings/constance.py:96 msgid "How many days we store messages from anonymous users" msgstr "Câte zile păstrăm mesajele de la utilizatorii anonimi" -#: schon/settings/constance.py:80 +#: schon/settings/constance.py:100 msgid "How many days we store messages from authenticated users" msgstr "Câte zile stocăm mesajele de la utilizatorii autentificați" -#: schon/settings/constance.py:84 +#: schon/settings/constance.py:104 msgid "Disable buy functionality" msgstr "Dezactivați funcționalitatea de cumpărare" -#: schon/settings/constance.py:88 +#: schon/settings/constance.py:108 msgid "OpenStreetMap Nominatim API URL" msgstr "OpenStreetMap Nominatim API URL" -#: schon/settings/constance.py:92 +#: schon/settings/constance.py:112 msgid "OpenAI API Key" msgstr "Cheie API OpenAI" -#: schon/settings/constance.py:96 +#: schon/settings/constance.py:116 msgid "Abstract API Key" msgstr "Cheie API abstractă" -#: schon/settings/constance.py:104 +#: schon/settings/constance.py:124 msgid "HTTP Proxy" msgstr "Proxy HTTP" -#: schon/settings/constance.py:112 +#: schon/settings/constance.py:132 msgid "An entity for storing advertisiment data" msgstr "O entitate pentru stocarea datelor privind publicitatea" -#: schon/settings/constance.py:120 +#: schon/settings/constance.py:140 msgid "An entity for storing analytics data" msgstr "O entitate pentru stocarea datelor analitice" -#: schon/settings/constance.py:125 +#: schon/settings/constance.py:145 msgid "Save responses from vendors' APIs" msgstr "Salvați răspunsurile de la API-urile furnizorilor" -#: schon/settings/constance.py:126 +#: schon/settings/constance.py:146 msgid "Backup database" msgstr "Backup bază de date" -#: schon/settings/constance.py:127 +#: schon/settings/constance.py:147 msgid "Backup media" msgstr "Suporturi de rezervă" -#: schon/settings/constance.py:133 +#: schon/settings/constance.py:153 msgid "Legal Options" msgstr "Opțiuni juridice" -#: schon/settings/constance.py:141 +#: schon/settings/constance.py:161 msgid "Email Options" msgstr "Opțiuni de e-mail" -#: schon/settings/constance.py:151 +#: schon/settings/constance.py:171 msgid "Features Options" msgstr "Caracteristici Opțiuni" -#: schon/settings/constance.py:160 +#: schon/settings/constance.py:181 msgid "SEO Options" msgstr "Opțiuni SEO" -#: schon/settings/constance.py:164 +#: schon/settings/constance.py:185 msgid "System Options" msgstr "Opțiuni de sistem" -#: schon/settings/drf.py:51 +#: schon/settings/drf.py:59 #, python-brace-format msgid "" "\n" "Welcome to the Schon documentation.\n" "\n" -"Schon is a powerful e-commerce platform that allows you to launch and manage " -"an online store of any kind in just a few clicks.\n" +"Schon is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks.\n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"SCHON-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-SCHON-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {access_lifetime} {access_unit}.\n" "- Refresh token lifetime is {refresh_hours} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -200,7 +193,6 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {version}\n" @@ -208,60 +200,40 @@ msgstr "" "\n" "Bine ați venit la documentația Schon.\n" "\n" -"Schon este o platformă puternică de comerț electronic care vă permite să " -"lansați și să gestionați un magazin online de orice tip în doar câteva " -"clicuri.\n" +"Schon este o platformă puternică de comerț electronic care vă permite să lansați și să gestionați un magazin online de orice tip în doar câteva clicuri.\n" "\n" "## Caracteristici principale\n" -"- **Product Catalog:** Gestionați detaliile produselor, prețurile, " -"inventarul și disponibilitatea în mai multe categorii.\n" -"- **Order Management:** Procesați comenzile, urmăriți îndeplinirea și " -"gestionați eficient cererile clienților.\n" -"- **Autentificare și autorizare: ** Autentificare cuprinzătoare a " -"utilizatorilor cu token-uri JWT și permisiuni bazate pe roluri.\n" -"- **Payment Processing:** Integrați mai multe gateway-uri de plată și " -"gestionați tranzacțiile în siguranță.\n" -"- **Blog & Content Management:** Creați și gestionați postări pe blog și " -"conținut de marketing pentru magazinul dvs.\n" -"- **B2B Operations:** Puncte finale dedicate pentru tranzacțiile business-to-" -"business și gestionarea comerțului cu ridicata.\n" -"- **Suport multilingv:** Serviți clienții din întreaga lume cu capacități " -"complete de internaționalizare (i18n).\n" -"- **Integrații personalizate:** Arhitectură API extensibilă pentru " -"integrarea cu platforme și servicii externe.\n" -"- **Analytics & Reporting:** Generați rapoarte detaliate privind vânzările, " -"stocurile și comportamentul clienților.\n" -"- **Actualizări în timp real:** Obțineți date în timp real privind " -"nivelurile stocurilor, starea comenzilor și modificările prețurilor.\n" +"- **Product Catalog:** Gestionați detaliile produselor, prețurile, inventarul și disponibilitatea în mai multe categorii.\n" +"- **Order Management:** Procesați comenzile, urmăriți îndeplinirea și gestionați eficient cererile clienților.\n" +"- **Autentificare și autorizare: ** Autentificare cuprinzătoare a utilizatorilor cu token-uri JWT și permisiuni bazate pe roluri.\n" +"- **Payment Processing:** Integrați mai multe gateway-uri de plată și gestionați tranzacțiile în siguranță.\n" +"- **Blog & Content Management:** Creați și gestionați postări pe blog și conținut de marketing pentru magazinul dvs.\n" +"- **B2B Operations:** Puncte finale dedicate pentru tranzacțiile business-to-business și gestionarea comerțului cu ridicata.\n" +"- **Suport multilingv:** Serviți clienții din întreaga lume cu capacități complete de internaționalizare (i18n).\n" +"- **Integrații personalizate:** Arhitectură API extensibilă pentru integrarea cu platforme și servicii externe.\n" +"- **Analytics & Reporting:** Generați rapoarte detaliate privind vânzările, stocurile și comportamentul clienților.\n" +"- **Actualizări în timp real:** Obțineți date în timp real privind nivelurile stocurilor, starea comenzilor și modificările prețurilor.\n" "\n" "## API-uri disponibile\n" "- **REST API:** Interfață RESTful completă (această documentație)\n" -"- **GraphQL API:** Disponibil la `/graphql/` cu interfața GraphiQL pentru " -"interogări interactive\n" +"- **GraphQL API:** Disponibil la `/graphql/` cu interfața GraphiQL pentru interogări interactive\n" "\n" "## Autentificare\n" -"- Autentificarea este gestionată prin jetoane JWT. Includeți tokenul în " -"antetul `X-SCHON-AUTH` al cererilor dvs. în formatul `Bearer `.\n" -"- Durata de viață a jetonului de acces este {access_lifetime} " -"{access_unit}.\n" +"- Autentificarea este gestionată prin jetoane JWT. Includeți tokenul în antetul `X-SCHON-AUTH` al cererilor dvs. în formatul `Bearer `.\n" +"- Durata de viață a jetonului de acces este {access_lifetime} {access_unit}.\n" "- Durata de viață a jetonului de reînnoire este de {refresh_hours} ore.\n" -"- Jetoanele de reîmprospătare sunt rotite automat și invalidate după " -"utilizare pentru o securitate sporită.\n" +"- Jetoanele de reîmprospătare sunt rotite automat și invalidate după utilizare pentru o securitate sporită.\n" "\n" "## Internaționalizare (i18n)\n" -"- Setați antetul `Accept-Language` pentru a specifica limba preferată (de " -"exemplu, `Accept-Language: en-US`).\n" -"- Limbile disponibile pot fi preluate de la punctul final `/app/languages/" -"`.\n" -"- Toate conținuturile destinate utilizatorilor acceptă din start mai multe " -"limbi.\n" +"- Setați antetul `Accept-Language` pentru a specifica limba preferată (de exemplu, `Accept-Language: en-US`).\n" +"- Limbile disponibile pot fi preluate de la punctul final `/app/languages/`.\n" +"- Toate conținuturile destinate utilizatorilor acceptă din start mai multe limbi.\n" "\n" "## Formate de răspuns\n" "API acceptă mai multe formate de răspuns:\n" "- **JSON** (implicit, formatat camelCase)\n" "- **XML** (adăugați `?format=xml` sau setați `Accept: application/xml`)\n" -"- **YAML** (adăugați `?format=yaml` sau setați `Accept: application/x-" -"yaml`)\n" +"- **YAML** (adăugați `?format=yaml` sau setați `Accept: application/x-yaml`)\n" "\n" "## Sănătate și monitorizare\n" "- Verificări de sănătate: `/health/`\n" @@ -298,38 +270,38 @@ msgstr "Configurare" msgid "Periodic Tasks" msgstr "Sarcini periodice" -#: schon/settings/unfold.py:134 +#: schon/settings/unfold.py:129 msgid "Taskboard" msgstr "Tablou de sarcini" -#: schon/settings/unfold.py:146 +#: schon/settings/unfold.py:141 msgid "Quick Links" msgstr "Linkuri rapide" -#: schon/settings/unfold.py:151 +#: schon/settings/unfold.py:146 msgid "Users" msgstr "Utilizatori" -#: schon/settings/unfold.py:156 +#: schon/settings/unfold.py:151 msgid "Groups" msgstr "Grupuri" -#: schon/settings/unfold.py:161 +#: schon/settings/unfold.py:156 msgid "Orders" msgstr "Ordine" -#: schon/settings/unfold.py:166 +#: schon/settings/unfold.py:161 msgid "Products" msgstr "Produse" -#: schon/settings/unfold.py:171 +#: schon/settings/unfold.py:166 msgid "Categories" msgstr "Categorii" -#: schon/settings/unfold.py:176 +#: schon/settings/unfold.py:171 msgid "Brands" msgstr "Mărci" -#: schon/settings/unfold.py:181 +#: schon/settings/unfold.py:176 msgid "Blogposts" msgstr "Blogposturi" diff --git a/schon/locale/ru_RU/LC_MESSAGES/django.mo b/schon/locale/ru_RU/LC_MESSAGES/django.mo index 8a69fb64..af886d23 100644 Binary files a/schon/locale/ru_RU/LC_MESSAGES/django.mo and b/schon/locale/ru_RU/LC_MESSAGES/django.mo differ diff --git a/schon/locale/ru_RU/LC_MESSAGES/django.po b/schon/locale/ru_RU/LC_MESSAGES/django.po index 2138f0c1..2e153f02 100644 --- a/schon/locale/ru_RU/LC_MESSAGES/django.po +++ b/schon/locale/ru_RU/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 01:47+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -13,19 +13,19 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: schon/settings/constance.py:24 +#: schon/settings/constance.py:31 msgid "Name of the company" msgstr "Название компании" -#: schon/settings/constance.py:25 +#: schon/settings/constance.py:32 msgid "Address of the company" msgstr "Адрес компании" -#: schon/settings/constance.py:28 +#: schon/settings/constance.py:35 msgid "Phone number of the company" msgstr "Номер телефона компании" -#: schon/settings/constance.py:35 +#: schon/settings/constance.py:42 msgid "" "Tax rate in jurisdiction of your company. Leave 0 if you don't want to " "process taxes." @@ -33,161 +33,154 @@ msgstr "" "Ставка налога в юрисдикции вашей компании. Оставьте 0, если вы не хотите " "обрабатывать налоги." -#: schon/settings/constance.py:44 +#: schon/settings/constance.py:51 msgid "Shows if the taxes are already included in product's selling prices" msgstr "Показывает, включены ли налоги в отпускную цену продукта." -#: schon/settings/constance.py:52 +#: schon/settings/constance.py:59 msgid "Exchange rate API key" msgstr "Ключ API обменного курса" -#: schon/settings/constance.py:58 +#: schon/settings/constance.py:65 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!НЕ МЕНЯЙТЕ!!!" -#: schon/settings/constance.py:60 +#: schon/settings/constance.py:67 msgid "SMTP host" msgstr "SMTP-хост" -#: schon/settings/constance.py:61 +#: schon/settings/constance.py:68 msgid "SMTP port" msgstr "Порт SMTP" -#: schon/settings/constance.py:62 +#: schon/settings/constance.py:69 msgid "Use TLS" msgstr "Используйте TLS" -#: schon/settings/constance.py:63 +#: schon/settings/constance.py:70 msgid "Use SSL" msgstr "Используйте SSL" -#: schon/settings/constance.py:66 +#: schon/settings/constance.py:73 msgid "SMTP username" msgstr "Имя пользователя SMTP" -#: schon/settings/constance.py:70 +#: schon/settings/constance.py:79 msgid "SMTP password" msgstr "Пароль SMTP" -#: schon/settings/constance.py:72 +#: schon/settings/constance.py:83 msgid "Mail from option" msgstr "Почта из опции" -#: schon/settings/constance.py:76 +#: schon/settings/constance.py:90 +msgid "" +"Export products to specified marketplaces. Comma-separated list from " +"" +msgstr "" +"Экспорт продуктов на указанные торговые площадки. Список, разделенный " +"запятыми, из " + +#: schon/settings/constance.py:96 msgid "How many days we store messages from anonymous users" msgstr "Сколько дней мы храним сообщения от анонимных пользователей" -#: schon/settings/constance.py:80 +#: schon/settings/constance.py:100 msgid "How many days we store messages from authenticated users" msgstr "Сколько дней мы храним сообщения от аутентифицированных пользователей" -#: schon/settings/constance.py:84 +#: schon/settings/constance.py:104 msgid "Disable buy functionality" msgstr "Отключить функцию покупки" -#: schon/settings/constance.py:88 +#: schon/settings/constance.py:108 msgid "OpenStreetMap Nominatim API URL" msgstr "URL-адрес API OpenStreetMap Nominatim" -#: schon/settings/constance.py:92 +#: schon/settings/constance.py:112 msgid "OpenAI API Key" msgstr "Ключ API OpenAI" -#: schon/settings/constance.py:96 +#: schon/settings/constance.py:116 msgid "Abstract API Key" msgstr "Абстрактный ключ API" -#: schon/settings/constance.py:104 +#: schon/settings/constance.py:124 msgid "HTTP Proxy" msgstr "HTTP-прокси" -#: schon/settings/constance.py:112 +#: schon/settings/constance.py:132 msgid "An entity for storing advertisiment data" msgstr "Сущность для хранения данных о рекламе" -#: schon/settings/constance.py:120 +#: schon/settings/constance.py:140 msgid "An entity for storing analytics data" msgstr "Сущность для хранения аналитических данных" -#: schon/settings/constance.py:125 +#: schon/settings/constance.py:145 msgid "Save responses from vendors' APIs" msgstr "Сохраняйте ответы от API поставщиков" -#: schon/settings/constance.py:126 +#: schon/settings/constance.py:146 msgid "Backup database" msgstr "Резервная копия базы данных" -#: schon/settings/constance.py:127 +#: schon/settings/constance.py:147 msgid "Backup media" msgstr "Резервные носители" -#: schon/settings/constance.py:133 +#: schon/settings/constance.py:153 msgid "Legal Options" msgstr "Юридические возможности" -#: schon/settings/constance.py:141 +#: schon/settings/constance.py:161 msgid "Email Options" msgstr "Параметры электронной почты" -#: schon/settings/constance.py:151 +#: schon/settings/constance.py:171 msgid "Features Options" msgstr "Характеристики Опции" -#: schon/settings/constance.py:160 +#: schon/settings/constance.py:181 msgid "SEO Options" msgstr "Параметры SEO" -#: schon/settings/constance.py:164 +#: schon/settings/constance.py:185 msgid "System Options" msgstr "Параметры системы" -#: schon/settings/drf.py:51 +#: schon/settings/drf.py:59 #, python-brace-format msgid "" "\n" "Welcome to the Schon documentation.\n" "\n" -"Schon is a powerful e-commerce platform that allows you to launch and manage " -"an online store of any kind in just a few clicks.\n" +"Schon is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks.\n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"SCHON-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-SCHON-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {access_lifetime} {access_unit}.\n" "- Refresh token lifetime is {refresh_hours} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -199,7 +192,6 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {version}\n" @@ -207,58 +199,40 @@ msgstr "" "\n" "Добро пожаловать в документацию Schon.\n" "\n" -"Schon - это мощная платформа для электронной коммерции, которая позволяет " -"запустить и управлять интернет-магазином любого типа всего за несколько " -"кликов.\n" +"Schon - это мощная платформа для электронной коммерции, которая позволяет запустить и управлять интернет-магазином любого типа всего за несколько кликов.\n" "\n" "## Ключевые особенности.\n" -"- **Каталог товаров:** Управление информацией о товарах, ценами, запасами и " -"наличием товаров в нескольких категориях.\n" -"- **Управление заказами:** Обработка заказов, отслеживание выполнения и " -"эффективная обработка запросов клиентов.\n" -"- **Аутентификация и авторизация:** Комплексная аутентификация пользователей " -"с помощью JWT-токенов и ролевых разрешений.\n" -"- **Обработка платежей:** Интеграция нескольких платежных шлюзов и " -"безопасное управление транзакциями.\n" -"- **Управление блогом и контентом:** Создание и управление записями в блоге " -"и маркетинговым контентом для вашего магазина.\n" -"- **B2B-операции:** Выделенные конечные точки для транзакций между " -"предпринимателями и управления оптовыми продажами.\n" -"- **Мультиязыковая поддержка:** Обслуживайте клиентов по всему миру, " -"используя возможности полной интернационализации (i18n).\n" -"- **Заказные интеграции:** Расширяемая архитектура API для интеграции с " -"внешними платформами и сервисами.\n" -"- **Аналитика и отчетность:** Генерируйте подробные отчеты о продажах, " -"запасах и поведении клиентов.\n" -"- **Обновления в режиме реального времени:** Получайте данные об уровне " -"запасов, состоянии заказов и изменениях цен в режиме реального времени.\n" +"- **Каталог товаров:** Управление информацией о товарах, ценами, запасами и наличием товаров в нескольких категориях.\n" +"- **Управление заказами:** Обработка заказов, отслеживание выполнения и эффективная обработка запросов клиентов.\n" +"- **Аутентификация и авторизация:** Комплексная аутентификация пользователей с помощью JWT-токенов и ролевых разрешений.\n" +"- **Обработка платежей:** Интеграция нескольких платежных шлюзов и безопасное управление транзакциями.\n" +"- **Управление блогом и контентом:** Создание и управление записями в блоге и маркетинговым контентом для вашего магазина.\n" +"- **B2B-операции:** Выделенные конечные точки для транзакций между предпринимателями и управления оптовыми продажами.\n" +"- **Мультиязыковая поддержка:** Обслуживайте клиентов по всему миру, используя возможности полной интернационализации (i18n).\n" +"- **Заказные интеграции:** Расширяемая архитектура API для интеграции с внешними платформами и сервисами.\n" +"- **Аналитика и отчетность:** Генерируйте подробные отчеты о продажах, запасах и поведении клиентов.\n" +"- **Обновления в режиме реального времени:** Получайте данные об уровне запасов, состоянии заказов и изменениях цен в режиме реального времени.\n" "\n" "## Доступные API\n" "- **REST API:** Полный REST-интерфейс (данная документация)\n" -"- **GraphQL API:** Доступен по адресу `/graphql/` с интерфейсом GraphiQL для " -"интерактивных запросов\n" +"- **GraphQL API:** Доступен по адресу `/graphql/` с интерфейсом GraphiQL для интерактивных запросов\n" "\n" "## Аутентификация\n" -"- Аутентификация осуществляется с помощью JWT-токенов. Включите токен в " -"заголовок `X-SCHON-AUTH` ваших запросов в формате `Bearer <ваш_токен>`.\n" +"- Аутентификация осуществляется с помощью JWT-токенов. Включите токен в заголовок `X-SCHON-AUTH` ваших запросов в формате `Bearer <ваш_токен>`.\n" "- Срок действия токена доступа составляет {access_lifetime} {access_unit}.\n" "- Время жизни токена обновления составляет {refresh_hours} часов.\n" -"- Для повышения безопасности маркеры доступа автоматически аннулируются " -"после использования.\n" +"- Для повышения безопасности маркеры доступа автоматически аннулируются после использования.\n" "\n" "## Интернационализация (i18n)\n" -"- В заголовке `Accept-Language` укажите предпочтительный язык (например, " -"`Accept-Language: en-US`).\n" +"- В заголовке `Accept-Language` укажите предпочтительный язык (например, `Accept-Language: en-US`).\n" "- Доступные языки можно получить из `/app/languages/`.\n" -"- Весь контент, предназначенный для пользователей, изначально поддерживает " -"несколько языков.\n" +"- Весь контент, предназначенный для пользователей, изначально поддерживает несколько языков.\n" "\n" "## Форматы ответов\n" "API поддерживает несколько форматов ответов:\n" "- **JSON** (по умолчанию, с форматированием в camelCase)\n" "- **XML** (добавьте `?format=xml` или установите `Accept: application/xml`)\n" -"- **YAML** (добавьте `?format=yaml` или установите `Accept: application/x-" -"yaml`)\n" +"- **YAML** (добавьте `?format=yaml` или установите `Accept: application/x-yaml`)\n" "\n" "## Здоровье и мониторинг\n" "- Проверка здоровья: `/health/`\n" @@ -295,38 +269,38 @@ msgstr "Конфигурация" msgid "Periodic Tasks" msgstr "Периодические задания" -#: schon/settings/unfold.py:134 +#: schon/settings/unfold.py:129 msgid "Taskboard" msgstr "Доска задач" -#: schon/settings/unfold.py:146 +#: schon/settings/unfold.py:141 msgid "Quick Links" msgstr "Быстрые ссылки" -#: schon/settings/unfold.py:151 +#: schon/settings/unfold.py:146 msgid "Users" msgstr "Пользователи" -#: schon/settings/unfold.py:156 +#: schon/settings/unfold.py:151 msgid "Groups" msgstr "Группы" -#: schon/settings/unfold.py:161 +#: schon/settings/unfold.py:156 msgid "Orders" msgstr "Заказы" -#: schon/settings/unfold.py:166 +#: schon/settings/unfold.py:161 msgid "Products" msgstr "Продукция" -#: schon/settings/unfold.py:171 +#: schon/settings/unfold.py:166 msgid "Categories" msgstr "Категории" -#: schon/settings/unfold.py:176 +#: schon/settings/unfold.py:171 msgid "Brands" msgstr "Бренды" -#: schon/settings/unfold.py:181 +#: schon/settings/unfold.py:176 msgid "Blogposts" msgstr "Записи в блогах" diff --git a/schon/locale/sv_SE/LC_MESSAGES/django.mo b/schon/locale/sv_SE/LC_MESSAGES/django.mo index fae72a8a..0912e3d5 100644 Binary files a/schon/locale/sv_SE/LC_MESSAGES/django.mo and b/schon/locale/sv_SE/LC_MESSAGES/django.mo differ diff --git a/schon/locale/sv_SE/LC_MESSAGES/django.po b/schon/locale/sv_SE/LC_MESSAGES/django.po index f83cf40a..e2ca014a 100644 --- a/schon/locale/sv_SE/LC_MESSAGES/django.po +++ b/schon/locale/sv_SE/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 02:04+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -13,19 +13,19 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: schon/settings/constance.py:24 +#: schon/settings/constance.py:31 msgid "Name of the company" msgstr "Företagets namn" -#: schon/settings/constance.py:25 +#: schon/settings/constance.py:32 msgid "Address of the company" msgstr "Företagets adress" -#: schon/settings/constance.py:28 +#: schon/settings/constance.py:35 msgid "Phone number of the company" msgstr "Telefonnummer till företaget" -#: schon/settings/constance.py:35 +#: schon/settings/constance.py:42 msgid "" "Tax rate in jurisdiction of your company. Leave 0 if you don't want to " "process taxes." @@ -33,161 +33,154 @@ msgstr "" "Skattesats i ditt företags jurisdiktion. Lämna 0 om du inte vill behandla " "skatter." -#: schon/settings/constance.py:44 +#: schon/settings/constance.py:51 msgid "Shows if the taxes are already included in product's selling prices" msgstr "Visar om skatterna redan är inkluderade i produktens försäljningspris" -#: schon/settings/constance.py:52 +#: schon/settings/constance.py:59 msgid "Exchange rate API key" msgstr "API-nyckel för växelkurs" -#: schon/settings/constance.py:58 +#: schon/settings/constance.py:65 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!ÄNDRA INTE!!!!" -#: schon/settings/constance.py:60 +#: schon/settings/constance.py:67 msgid "SMTP host" msgstr "SMTP-värd" -#: schon/settings/constance.py:61 +#: schon/settings/constance.py:68 msgid "SMTP port" msgstr "SMTP-port" -#: schon/settings/constance.py:62 +#: schon/settings/constance.py:69 msgid "Use TLS" msgstr "Använd TLS" -#: schon/settings/constance.py:63 +#: schon/settings/constance.py:70 msgid "Use SSL" msgstr "Använd SSL" -#: schon/settings/constance.py:66 +#: schon/settings/constance.py:73 msgid "SMTP username" msgstr "SMTP-användarnamn" -#: schon/settings/constance.py:70 +#: schon/settings/constance.py:79 msgid "SMTP password" msgstr "SMTP-lösenord" -#: schon/settings/constance.py:72 +#: schon/settings/constance.py:83 msgid "Mail from option" msgstr "Mail från alternativ" -#: schon/settings/constance.py:76 +#: schon/settings/constance.py:90 +msgid "" +"Export products to specified marketplaces. Comma-separated list from " +"" +msgstr "" +"Exportera produkter till angivna marknadsplatser. Kommaseparerad lista från " +"" + +#: schon/settings/constance.py:96 msgid "How many days we store messages from anonymous users" msgstr "Hur många dagar vi lagrar meddelanden från anonyma användare" -#: schon/settings/constance.py:80 +#: schon/settings/constance.py:100 msgid "How many days we store messages from authenticated users" msgstr "Hur många dagar vi lagrar meddelanden från autentiserade användare" -#: schon/settings/constance.py:84 +#: schon/settings/constance.py:104 msgid "Disable buy functionality" msgstr "Inaktivera köpfunktionalitet" -#: schon/settings/constance.py:88 +#: schon/settings/constance.py:108 msgid "OpenStreetMap Nominatim API URL" msgstr "OpenStreetMap Nominatim API URL" -#: schon/settings/constance.py:92 +#: schon/settings/constance.py:112 msgid "OpenAI API Key" msgstr "OpenAI API-nyckel" -#: schon/settings/constance.py:96 +#: schon/settings/constance.py:116 msgid "Abstract API Key" msgstr "Abstrakt API-nyckel" -#: schon/settings/constance.py:104 +#: schon/settings/constance.py:124 msgid "HTTP Proxy" msgstr "HTTP-proxy" -#: schon/settings/constance.py:112 +#: schon/settings/constance.py:132 msgid "An entity for storing advertisiment data" msgstr "En enhet för lagring av annonseringsdata" -#: schon/settings/constance.py:120 +#: schon/settings/constance.py:140 msgid "An entity for storing analytics data" msgstr "En enhet för lagring av analysdata" -#: schon/settings/constance.py:125 +#: schon/settings/constance.py:145 msgid "Save responses from vendors' APIs" msgstr "Spara svar från leverantörers API:er" -#: schon/settings/constance.py:126 +#: schon/settings/constance.py:146 msgid "Backup database" msgstr "Säkerhetskopiera databas" -#: schon/settings/constance.py:127 +#: schon/settings/constance.py:147 msgid "Backup media" msgstr "Backup media" -#: schon/settings/constance.py:133 +#: schon/settings/constance.py:153 msgid "Legal Options" msgstr "Juridiska alternativ" -#: schon/settings/constance.py:141 +#: schon/settings/constance.py:161 msgid "Email Options" msgstr "Alternativ för e-post" -#: schon/settings/constance.py:151 +#: schon/settings/constance.py:171 msgid "Features Options" msgstr "Funktioner Alternativ" -#: schon/settings/constance.py:160 +#: schon/settings/constance.py:181 msgid "SEO Options" msgstr "SEO-alternativ" -#: schon/settings/constance.py:164 +#: schon/settings/constance.py:185 msgid "System Options" msgstr "Systemalternativ" -#: schon/settings/drf.py:51 +#: schon/settings/drf.py:59 #, python-brace-format msgid "" "\n" "Welcome to the Schon documentation.\n" "\n" -"Schon is a powerful e-commerce platform that allows you to launch and manage " -"an online store of any kind in just a few clicks.\n" +"Schon is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks.\n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"SCHON-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-SCHON-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {access_lifetime} {access_unit}.\n" "- Refresh token lifetime is {refresh_hours} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -199,7 +192,6 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {version}\n" @@ -207,57 +199,40 @@ msgstr "" "\n" "Välkommen till Schon dokumentation.\n" "\n" -"Schon är en kraftfull e-handelsplattform som gör att du kan starta och " -"hantera en onlinebutik av alla slag med bara några få klick.\n" +"Schon är en kraftfull e-handelsplattform som gör att du kan starta och hantera en onlinebutik av alla slag med bara några få klick.\n" "\n" "## Viktiga funktioner\n" -"- Produktkatalog:** Hantera produktinformation, priser, lager och " -"tillgänglighet i flera kategorier.\n" -"- ** Orderhantering:** Behandla beställningar, spåra uppfyllande och hantera " -"kundförfrågningar effektivt.\n" -"- Autentisering och auktorisering: ** Omfattande användarautentisering med " -"JWT-tokens och rollbaserade behörigheter.\n" -"- **Betalningshantering:** Integrera flera betalningsgateways och hantera " -"transaktioner på ett säkert sätt.\n" -"- **Blogg & Content Management:** Skapa och hantera blogginlägg och " -"marknadsföringsinnehåll för din butik.\n" -"- **B2B Operations:** Dedikerade slutpunkter för transaktioner mellan " -"företag och grossisthantering.\n" -"- Stöd för flera språk: ** Betjäna kunder över hela världen med fullständiga " -"internationaliseringsfunktioner (i18n).\n" -"- **Kundanpassade integrationer:** Utökad API-arkitektur för integrering med " -"externa plattformar och tjänster.\n" -"- **Analys och rapportering:** Generera detaljerade rapporter om " -"försäljning, lager och kundbeteende.\n" -"- Uppdateringar i realtid: ** Få live-data om lagernivåer, orderstatus och " -"prisändringar.\n" +"- Produktkatalog:** Hantera produktinformation, priser, lager och tillgänglighet i flera kategorier.\n" +"- ** Orderhantering:** Behandla beställningar, spåra uppfyllande och hantera kundförfrågningar effektivt.\n" +"- Autentisering och auktorisering: ** Omfattande användarautentisering med JWT-tokens och rollbaserade behörigheter.\n" +"- **Betalningshantering:** Integrera flera betalningsgateways och hantera transaktioner på ett säkert sätt.\n" +"- **Blogg & Content Management:** Skapa och hantera blogginlägg och marknadsföringsinnehåll för din butik.\n" +"- **B2B Operations:** Dedikerade slutpunkter för transaktioner mellan företag och grossisthantering.\n" +"- Stöd för flera språk: ** Betjäna kunder över hela världen med fullständiga internationaliseringsfunktioner (i18n).\n" +"- **Kundanpassade integrationer:** Utökad API-arkitektur för integrering med externa plattformar och tjänster.\n" +"- **Analys och rapportering:** Generera detaljerade rapporter om försäljning, lager och kundbeteende.\n" +"- Uppdateringar i realtid: ** Få live-data om lagernivåer, orderstatus och prisändringar.\n" "\n" "## Tillgängliga API:er\n" "- **REST API:** Fullständigt RESTful-gränssnitt (denna dokumentation)\n" -"- **GraphQL API:** Tillgängligt på `/graphql/` med GraphiQL-gränssnitt för " -"interaktiva frågor\n" +"- **GraphQL API:** Tillgängligt på `/graphql/` med GraphiQL-gränssnitt för interaktiva frågor\n" "\n" "## Autentisering\n" -"- Autentisering hanteras via JWT-tokens. Inkludera token i `X-SCHON-AUTH`-" -"huvudet för dina förfrågningar i formatet `Bearer `.\n" +"- Autentisering hanteras via JWT-tokens. Inkludera token i `X-SCHON-AUTH`-huvudet för dina förfrågningar i formatet `Bearer `.\n" "- Åtkomsttokenens livstid är {access_lifetime} {access_unit}.\n" "- Uppdateringstokenens livslängd är {refresh_hours} timmar.\n" -"- Uppdateringstokens roteras automatiskt och ogiltigförklaras efter " -"användning för ökad säkerhet.\n" +"- Uppdateringstokens roteras automatiskt och ogiltigförklaras efter användning för ökad säkerhet.\n" "\n" "## Internationalisering (i18n)\n" -"- Ange önskat språk i rubriken `Accept-Language` (t.ex. `Accept-Language: en-" -"US`).\n" +"- Ange önskat språk i rubriken `Accept-Language` (t.ex. `Accept-Language: en-US`).\n" "- Tillgängliga språk kan hämtas från slutpunkten `/app/languages/`.\n" "- Allt innehåll som vänder sig till användare stöder flera språk direkt.\n" "\n" "## Svarsformat\n" "API:et stöder flera olika svarsformat:\n" "- **JSON** (standard, camelCase-formaterad)\n" -"- **XML** (lägg till `?format=xml` eller ställ in `Accept: application/" -"xml`)\n" -"- **YAML** (lägg till `?format=yaml` eller ställ in `Accept: application/x-" -"yaml`)\n" +"- **XML** (lägg till `?format=xml` eller ställ in `Accept: application/xml`)\n" +"- **YAML** (lägg till `?format=yaml` eller ställ in `Accept: application/x-yaml`)\n" "\n" "## Hälsa och övervakning\n" "- Hälsokontroller: `/hälsa/`\n" @@ -294,38 +269,38 @@ msgstr "Konfig" msgid "Periodic Tasks" msgstr "Periodiska uppgifter" -#: schon/settings/unfold.py:134 +#: schon/settings/unfold.py:129 msgid "Taskboard" msgstr "Uppgiftstavla" -#: schon/settings/unfold.py:146 +#: schon/settings/unfold.py:141 msgid "Quick Links" msgstr "Snabblänkar" -#: schon/settings/unfold.py:151 +#: schon/settings/unfold.py:146 msgid "Users" msgstr "Användare" -#: schon/settings/unfold.py:156 +#: schon/settings/unfold.py:151 msgid "Groups" msgstr "Grupper" -#: schon/settings/unfold.py:161 +#: schon/settings/unfold.py:156 msgid "Orders" msgstr "Beställningar" -#: schon/settings/unfold.py:166 +#: schon/settings/unfold.py:161 msgid "Products" msgstr "Produkter" -#: schon/settings/unfold.py:171 +#: schon/settings/unfold.py:166 msgid "Categories" msgstr "Kategorier" -#: schon/settings/unfold.py:176 +#: schon/settings/unfold.py:171 msgid "Brands" msgstr "Brands" -#: schon/settings/unfold.py:181 +#: schon/settings/unfold.py:176 msgid "Blogposts" msgstr "Blogginlägg" diff --git a/schon/locale/th_TH/LC_MESSAGES/django.mo b/schon/locale/th_TH/LC_MESSAGES/django.mo index 9f36cdd2..d52e8ec4 100644 Binary files a/schon/locale/th_TH/LC_MESSAGES/django.mo and b/schon/locale/th_TH/LC_MESSAGES/django.mo differ diff --git a/schon/locale/th_TH/LC_MESSAGES/django.po b/schon/locale/th_TH/LC_MESSAGES/django.po index 59eb6502..581325a8 100644 --- a/schon/locale/th_TH/LC_MESSAGES/django.po +++ b/schon/locale/th_TH/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 01:44+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -13,179 +13,174 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: schon/settings/constance.py:24 +#: schon/settings/constance.py:31 msgid "Name of the company" msgstr "ชื่อบริษัท" -#: schon/settings/constance.py:25 +#: schon/settings/constance.py:32 msgid "Address of the company" msgstr "ที่อยู่ของบริษัท" -#: schon/settings/constance.py:28 +#: schon/settings/constance.py:35 msgid "Phone number of the company" msgstr "หมายเลขโทรศัพท์ของบริษัท" -#: schon/settings/constance.py:35 +#: schon/settings/constance.py:42 msgid "" "Tax rate in jurisdiction of your company. Leave 0 if you don't want to " "process taxes." -msgstr "อัตราภาษีในเขตอำนาจศาลของบริษัทของคุณ. ให้เป็น 0 หากคุณไม่ต้องการดำเนินการภาษี." +msgstr "" +"อัตราภาษีในเขตอำนาจศาลของบริษัทของคุณ. ให้เป็น 0 " +"หากคุณไม่ต้องการดำเนินการภาษี." -#: schon/settings/constance.py:44 +#: schon/settings/constance.py:51 msgid "Shows if the taxes are already included in product's selling prices" msgstr "แสดงว่าภาษีรวมอยู่ในราคาขายของสินค้าแล้วหรือไม่" -#: schon/settings/constance.py:52 +#: schon/settings/constance.py:59 msgid "Exchange rate API key" msgstr "คีย์ API อัตราแลกเปลี่ยน" -#: schon/settings/constance.py:58 +#: schon/settings/constance.py:65 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!ห้ามเปลี่ยนแปลง!!!" -#: schon/settings/constance.py:60 +#: schon/settings/constance.py:67 msgid "SMTP host" msgstr "โฮสต์ SMTP" -#: schon/settings/constance.py:61 +#: schon/settings/constance.py:68 msgid "SMTP port" msgstr "พอร์ต SMTP" -#: schon/settings/constance.py:62 +#: schon/settings/constance.py:69 msgid "Use TLS" msgstr "ใช้ TLS" -#: schon/settings/constance.py:63 +#: schon/settings/constance.py:70 msgid "Use SSL" msgstr "ใช้ SSL" -#: schon/settings/constance.py:66 +#: schon/settings/constance.py:73 msgid "SMTP username" msgstr "ชื่อผู้ใช้ SMTP" -#: schon/settings/constance.py:70 +#: schon/settings/constance.py:79 msgid "SMTP password" msgstr "รหัสผ่าน SMTP" -#: schon/settings/constance.py:72 +#: schon/settings/constance.py:83 msgid "Mail from option" msgstr "จดหมายจากตัวเลือก" -#: schon/settings/constance.py:76 +#: schon/settings/constance.py:90 +msgid "" +"Export products to specified marketplaces. Comma-separated list from " +"" +msgstr "" +"ส่งออกสินค้าไปยังตลาดที่กำหนดไว้. รายการที่คั่นด้วยเครื่องหมายจุลภาคจาก " +"" + +#: schon/settings/constance.py:96 msgid "How many days we store messages from anonymous users" msgstr "เราเก็บข้อความจากผู้ใช้ที่ไม่ระบุตัวตนไว้กี่วัน" -#: schon/settings/constance.py:80 +#: schon/settings/constance.py:100 msgid "How many days we store messages from authenticated users" msgstr "เราเก็บข้อความจากผู้ใช้ที่ผ่านการยืนยันตัวตนไว้กี่วัน" -#: schon/settings/constance.py:84 +#: schon/settings/constance.py:104 msgid "Disable buy functionality" msgstr "ปิดการใช้งานฟังก์ชันการซื้อ" -#: schon/settings/constance.py:88 +#: schon/settings/constance.py:108 msgid "OpenStreetMap Nominatim API URL" msgstr "URL ของ API OpenStreetMap Nominatim" -#: schon/settings/constance.py:92 +#: schon/settings/constance.py:112 msgid "OpenAI API Key" msgstr "คีย์ API ของ OpenAI" -#: schon/settings/constance.py:96 +#: schon/settings/constance.py:116 msgid "Abstract API Key" msgstr "คีย์ API แบบนามธรรม" -#: schon/settings/constance.py:104 +#: schon/settings/constance.py:124 msgid "HTTP Proxy" msgstr "HTTP พร็อกซี" -#: schon/settings/constance.py:112 +#: schon/settings/constance.py:132 msgid "An entity for storing advertisiment data" msgstr "หน่วยงานสำหรับเก็บข้อมูลโฆษณา" -#: schon/settings/constance.py:120 +#: schon/settings/constance.py:140 msgid "An entity for storing analytics data" msgstr "หน่วยงานสำหรับเก็บข้อมูลการวิเคราะห์" -#: schon/settings/constance.py:125 +#: schon/settings/constance.py:145 msgid "Save responses from vendors' APIs" msgstr "บันทึกการตอบกลับจาก API ของผู้ขาย" -#: schon/settings/constance.py:126 +#: schon/settings/constance.py:146 msgid "Backup database" msgstr "ฐานข้อมูลสำรอง" -#: schon/settings/constance.py:127 +#: schon/settings/constance.py:147 msgid "Backup media" msgstr "สื่อสำรองข้อมูล" -#: schon/settings/constance.py:133 +#: schon/settings/constance.py:153 msgid "Legal Options" msgstr "ทางเลือกทางกฎหมาย" -#: schon/settings/constance.py:141 +#: schon/settings/constance.py:161 msgid "Email Options" msgstr "ตัวเลือกอีเมล" -#: schon/settings/constance.py:151 +#: schon/settings/constance.py:171 msgid "Features Options" msgstr "คุณสมบัติ ตัวเลือก" -#: schon/settings/constance.py:160 +#: schon/settings/constance.py:181 msgid "SEO Options" msgstr "ตัวเลือก SEO" -#: schon/settings/constance.py:164 +#: schon/settings/constance.py:185 msgid "System Options" msgstr "ตัวเลือกระบบ" -#: schon/settings/drf.py:51 +#: schon/settings/drf.py:59 #, python-brace-format msgid "" "\n" "Welcome to the Schon documentation.\n" "\n" -"Schon is a powerful e-commerce platform that allows you to launch and manage " -"an online store of any kind in just a few clicks.\n" +"Schon is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks.\n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"SCHON-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-SCHON-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {access_lifetime} {access_unit}.\n" "- Refresh token lifetime is {refresh_hours} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -197,47 +192,19 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {version}\n" msgstr "" "\n" -"ยินดีต้อนรับสู่เอกสารคู่มือของ Schon Schon " -"เป็นแพลตฟอร์มอีคอมเมิร์ซที่ทรงพลังซึ่งช่วยให้คุณสามารถเปิดตัวและจัดการร้านค้าออนไลน์ได้ทุกประเภทเพียงแค่ไม่กี่คลิก " -"## คุณสมบัติหลัก - **แคตตาล็อกสินค้า:** จัดการรายละเอียดสินค้า ราคาสินค้า สินค้าคงคลัง " -"และความพร้อมจำหน่ายในหลายหมวดหมู่ - **การจัดการคำสั่งซื้อ:** ประมวลผลคำสั่งซื้อ " -"ติดตามการจัดส่ง และจัดการคำขอของลูกค้าอย่างมีประสิทธิภาพ\n" -"- **การตรวจสอบสิทธิ์และการอนุญาต:** การตรวจสอบสิทธิ์ผู้ใช้อย่างครอบคลุมด้วยโทเค็น JWT " -"และสิทธิ์ตามบทบาท - **การประมวลผลการชำระเงิน:** " -"ผสานรวมเกตเวย์การชำระเงินหลายช่องทางและจัดการธุรกรรมอย่างปลอดภัย - " -"**การจัดการบล็อกและเนื้อหา:** สร้างและจัดการโพสต์บล็อกและเนื้อหาการตลาดสำหรับร้านค้าของคุณ " -"- **การดำเนินงาน B2B:** " -"จุดสิ้นสุดเฉพาะสำหรับการทำธุรกรรมระหว่างธุรกิจและการจัดการขายส่ง\n" -"- **รองรับหลายภาษา:** " -"ให้บริการลูกค้าทั่วโลกด้วยความสามารถในการรองรับภาษาสากลอย่างเต็มรูปแบบ (i18n) - " -"**การผสานระบบแบบกำหนดเอง:** สถาปัตยกรรม API " -"ที่สามารถขยายได้สำหรับการผสานกับแพลตฟอร์มและบริการภายนอก - **การวิเคราะห์และรายงาน:** " -"สร้างรายงานละเอียดเกี่ยวกับยอดขาย, สินค้าคงคลัง, และพฤติกรรมของลูกค้า - " -"**การอัปเดตแบบเรียลไทม์:** รับข้อมูลสดเกี่ยวกับระดับสินค้าคงคลัง, สถานะการสั่งซื้อ, " -"และการเปลี่ยนแปลงราคา\n" +"ยินดีต้อนรับสู่เอกสารคู่มือของ Schon Schon เป็นแพลตฟอร์มอีคอมเมิร์ซที่ทรงพลังซึ่งช่วยให้คุณสามารถเปิดตัวและจัดการร้านค้าออนไลน์ได้ทุกประเภทเพียงแค่ไม่กี่คลิก ## คุณสมบัติหลัก - **แคตตาล็อกสินค้า:** จัดการรายละเอียดสินค้า ราคาสินค้า สินค้าคงคลัง และความพร้อมจำหน่ายในหลายหมวดหมู่ - **การจัดการคำสั่งซื้อ:** ประมวลผลคำสั่งซื้อ ติดตามการจัดส่ง และจัดการคำขอของลูกค้าอย่างมีประสิทธิภาพ\n" +"- **การตรวจสอบสิทธิ์และการอนุญาต:** การตรวจสอบสิทธิ์ผู้ใช้อย่างครอบคลุมด้วยโทเค็น JWT และสิทธิ์ตามบทบาท - **การประมวลผลการชำระเงิน:** ผสานรวมเกตเวย์การชำระเงินหลายช่องทางและจัดการธุรกรรมอย่างปลอดภัย - **การจัดการบล็อกและเนื้อหา:** สร้างและจัดการโพสต์บล็อกและเนื้อหาการตลาดสำหรับร้านค้าของคุณ - **การดำเนินงาน B2B:** จุดสิ้นสุดเฉพาะสำหรับการทำธุรกรรมระหว่างธุรกิจและการจัดการขายส่ง\n" +"- **รองรับหลายภาษา:** ให้บริการลูกค้าทั่วโลกด้วยความสามารถในการรองรับภาษาสากลอย่างเต็มรูปแบบ (i18n) - **การผสานระบบแบบกำหนดเอง:** สถาปัตยกรรม API ที่สามารถขยายได้สำหรับการผสานกับแพลตฟอร์มและบริการภายนอก - **การวิเคราะห์และรายงาน:** สร้างรายงานละเอียดเกี่ยวกับยอดขาย, สินค้าคงคลัง, และพฤติกรรมของลูกค้า - **การอัปเดตแบบเรียลไทม์:** รับข้อมูลสดเกี่ยวกับระดับสินค้าคงคลัง, สถานะการสั่งซื้อ, และการเปลี่ยนแปลงราคา\n" "\n" -"## API ที่มีให้บริการ - **REST API:** อินเทอร์เฟซ RESTful แบบเต็มรูปแบบ (เอกสารนี้) - " -"**GraphQL API:** สามารถใช้งานได้ที่ `/graphql/` พร้อมอินเทอร์เฟซ GraphiQL " -"สำหรับการสืบค้นแบบโต้ตอบ ## การยืนยันตัวตน - การยืนยันตัวตนดำเนินการผ่านโทเค็น JWT " -"โปรดใส่โทเค็นในหัวข้อ `X-SCHON-AUTH` ของคำขอของคุณในรูปแบบ `Bearer `\n" -"- ระยะเวลาการใช้งานของโทเค็นการเข้าถึงคือ {access_lifetime} {access_unit}. - " -"ระยะเวลาการใช้งานของโทเค็นการรีเฟรชคือ {refresh_hours} ชั่วโมง. - " -"โทเค็นการรีเฟรชจะถูกหมุนเวียนและยกเลิกการใช้งานโดยอัตโนมัติหลังการใช้งานเพื่อเพิ่มความปลอดภัย. " -"## การแปลภาษา (i18n) - ตั้งค่าหัวข้อ `Accept-Language` เพื่อระบุภาษาที่คุณต้องการ (เช่น " -"`Accept-Language: en-US`).\n" -"- ภาษาที่มีให้บริการสามารถดึงข้อมูลได้จากจุดสิ้นสุด `/app/languages/` - " -"เนื้อหาที่แสดงต่อผู้ใช้ทั้งหมดรองรับหลายภาษาโดยอัตโนมัติ ## รูปแบบการตอบกลับ API " -"รองรับรูปแบบการตอบกลับหลายรูปแบบ: - **JSON** (ค่าเริ่มต้น, รูปแบบ camelCase) - " -"**XML** (เพิ่ม `?format=xml` หรือตั้งค่า `Accept: application/xml`)\n" -"- **YAML** (เพิ่ม `?format=yaml` หรือตั้งค่า `Accept: application/x-yaml`) ## " -"สุขภาพและการตรวจสอบ - การตรวจสอบสุขภาพ: `/health/` - เมตริก Prometheus: `/" -"prometheus/metrics/` ## เวอร์ชัน เวอร์ชัน API ปัจจุบัน: {version}\n" +"## API ที่มีให้บริการ - **REST API:** อินเทอร์เฟซ RESTful แบบเต็มรูปแบบ (เอกสารนี้) - **GraphQL API:** สามารถใช้งานได้ที่ `/graphql/` พร้อมอินเทอร์เฟซ GraphiQL สำหรับการสืบค้นแบบโต้ตอบ ## การยืนยันตัวตน - การยืนยันตัวตนดำเนินการผ่านโทเค็น JWT โปรดใส่โทเค็นในหัวข้อ `X-SCHON-AUTH` ของคำขอของคุณในรูปแบบ `Bearer `\n" +"- ระยะเวลาการใช้งานของโทเค็นการเข้าถึงคือ {access_lifetime} {access_unit}. - ระยะเวลาการใช้งานของโทเค็นการรีเฟรชคือ {refresh_hours} ชั่วโมง. - โทเค็นการรีเฟรชจะถูกหมุนเวียนและยกเลิกการใช้งานโดยอัตโนมัติหลังการใช้งานเพื่อเพิ่มความปลอดภัย. ## การแปลภาษา (i18n) - ตั้งค่าหัวข้อ `Accept-Language` เพื่อระบุภาษาที่คุณต้องการ (เช่น `Accept-Language: en-US`).\n" +"- ภาษาที่มีให้บริการสามารถดึงข้อมูลได้จากจุดสิ้นสุด `/app/languages/` - เนื้อหาที่แสดงต่อผู้ใช้ทั้งหมดรองรับหลายภาษาโดยอัตโนมัติ ## รูปแบบการตอบกลับ API รองรับรูปแบบการตอบกลับหลายรูปแบบ: - **JSON** (ค่าเริ่มต้น, รูปแบบ camelCase) - **XML** (เพิ่ม `?format=xml` หรือตั้งค่า `Accept: application/xml`)\n" +"- **YAML** (เพิ่ม `?format=yaml` หรือตั้งค่า `Accept: application/x-yaml`) ## สุขภาพและการตรวจสอบ - การตรวจสอบสุขภาพ: `/health/` - เมตริก Prometheus: `/prometheus/metrics/` ## เวอร์ชัน เวอร์ชัน API ปัจจุบัน: {version}\n" #: schon/settings/unfold.py:43 msgid "My site" @@ -267,38 +234,38 @@ msgstr "การกำหนดค่า" msgid "Periodic Tasks" msgstr "งานประจำ" -#: schon/settings/unfold.py:134 +#: schon/settings/unfold.py:129 msgid "Taskboard" msgstr "กระดานงาน" -#: schon/settings/unfold.py:146 +#: schon/settings/unfold.py:141 msgid "Quick Links" msgstr "ลิงก์ด่วน" -#: schon/settings/unfold.py:151 +#: schon/settings/unfold.py:146 msgid "Users" msgstr "ผู้ใช้" -#: schon/settings/unfold.py:156 +#: schon/settings/unfold.py:151 msgid "Groups" msgstr "กลุ่ม" -#: schon/settings/unfold.py:161 +#: schon/settings/unfold.py:156 msgid "Orders" msgstr "คำสั่ง" -#: schon/settings/unfold.py:166 +#: schon/settings/unfold.py:161 msgid "Products" msgstr "ผลิตภัณฑ์" -#: schon/settings/unfold.py:171 +#: schon/settings/unfold.py:166 msgid "Categories" msgstr "หมวดหมู่" -#: schon/settings/unfold.py:176 +#: schon/settings/unfold.py:171 msgid "Brands" msgstr "แบรนด์" -#: schon/settings/unfold.py:181 +#: schon/settings/unfold.py:176 msgid "Blogposts" msgstr "บทความบล็อก" diff --git a/schon/locale/tr_TR/LC_MESSAGES/django.mo b/schon/locale/tr_TR/LC_MESSAGES/django.mo index e8b44f64..b5d4f772 100644 Binary files a/schon/locale/tr_TR/LC_MESSAGES/django.mo and b/schon/locale/tr_TR/LC_MESSAGES/django.mo differ diff --git a/schon/locale/tr_TR/LC_MESSAGES/django.po b/schon/locale/tr_TR/LC_MESSAGES/django.po index bb8aba40..c304e483 100644 --- a/schon/locale/tr_TR/LC_MESSAGES/django.po +++ b/schon/locale/tr_TR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 01:44+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -13,19 +13,19 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: schon/settings/constance.py:24 +#: schon/settings/constance.py:31 msgid "Name of the company" msgstr "Şirketin adı" -#: schon/settings/constance.py:25 +#: schon/settings/constance.py:32 msgid "Address of the company" msgstr "Şirketin adresi" -#: schon/settings/constance.py:28 +#: schon/settings/constance.py:35 msgid "Phone number of the company" msgstr "Şirketin telefon numarası" -#: schon/settings/constance.py:35 +#: schon/settings/constance.py:42 msgid "" "Tax rate in jurisdiction of your company. Leave 0 if you don't want to " "process taxes." @@ -33,161 +33,156 @@ msgstr "" "Şirketinizin yetki alanındaki vergi oranı. Vergi işlemek istemiyorsanız 0 " "bırakın." -#: schon/settings/constance.py:44 +#: schon/settings/constance.py:51 msgid "Shows if the taxes are already included in product's selling prices" msgstr "Vergilerin ürünün satış fiyatına dahil edilip edilmediğini gösterir" -#: schon/settings/constance.py:52 +#: schon/settings/constance.py:59 msgid "Exchange rate API key" msgstr "Döviz kuru API anahtarı" -#: schon/settings/constance.py:58 +#: schon/settings/constance.py:65 msgid "!!!DO NOT CHANGE!!!" msgstr "!!! DEĞIŞTIRMEYIN!!!" -#: schon/settings/constance.py:60 +#: schon/settings/constance.py:67 msgid "SMTP host" msgstr "SMTP ana bilgisayarı" -#: schon/settings/constance.py:61 +#: schon/settings/constance.py:68 msgid "SMTP port" msgstr "SMTP bağlantı noktası" -#: schon/settings/constance.py:62 +#: schon/settings/constance.py:69 msgid "Use TLS" msgstr "TLS kullanın" -#: schon/settings/constance.py:63 +#: schon/settings/constance.py:70 msgid "Use SSL" msgstr "SSL kullanın" -#: schon/settings/constance.py:66 +#: schon/settings/constance.py:73 msgid "SMTP username" msgstr "SMTP kullanıcı adı" -#: schon/settings/constance.py:70 +#: schon/settings/constance.py:79 msgid "SMTP password" msgstr "SMTP şifresi" -#: schon/settings/constance.py:72 +#: schon/settings/constance.py:83 msgid "Mail from option" msgstr "Posta seçeneği" -#: schon/settings/constance.py:76 +#: schon/settings/constance.py:90 +msgid "" +"Export products to specified marketplaces. Comma-separated list from " +"" +msgstr "" +"Ürünleri belirli pazarlara ihraç edin. " +" adresinden " +"virgülle ayrılmış liste." + +#: schon/settings/constance.py:96 msgid "How many days we store messages from anonymous users" msgstr "Anonim kullanıcılardan gelen mesajları kaç gün saklıyoruz" -#: schon/settings/constance.py:80 +#: schon/settings/constance.py:100 msgid "How many days we store messages from authenticated users" -msgstr "Kimliği doğrulanmış kullanıcılardan gelen mesajları kaç gün saklıyoruz" +msgstr "" +"Kimliği doğrulanmış kullanıcılardan gelen mesajları kaç gün saklıyoruz" -#: schon/settings/constance.py:84 +#: schon/settings/constance.py:104 msgid "Disable buy functionality" msgstr "Satın alma işlevini devre dışı bırakın" -#: schon/settings/constance.py:88 +#: schon/settings/constance.py:108 msgid "OpenStreetMap Nominatim API URL" msgstr "OpenStreetMap Nominatim API URL'si" -#: schon/settings/constance.py:92 +#: schon/settings/constance.py:112 msgid "OpenAI API Key" msgstr "OpenAI API Anahtarı" -#: schon/settings/constance.py:96 +#: schon/settings/constance.py:116 msgid "Abstract API Key" msgstr "Soyut API Anahtarı" -#: schon/settings/constance.py:104 +#: schon/settings/constance.py:124 msgid "HTTP Proxy" msgstr "HTTP Proxy" -#: schon/settings/constance.py:112 +#: schon/settings/constance.py:132 msgid "An entity for storing advertisiment data" msgstr "Reklam verilerini depolamak için bir varlık" -#: schon/settings/constance.py:120 +#: schon/settings/constance.py:140 msgid "An entity for storing analytics data" msgstr "Analitik verileri depolamak için bir varlık" -#: schon/settings/constance.py:125 +#: schon/settings/constance.py:145 msgid "Save responses from vendors' APIs" msgstr "Satıcıların API'lerinden gelen yanıtları kaydedin" -#: schon/settings/constance.py:126 +#: schon/settings/constance.py:146 msgid "Backup database" msgstr "Yedek veritabanı" -#: schon/settings/constance.py:127 +#: schon/settings/constance.py:147 msgid "Backup media" msgstr "Yedekleme ortamı" -#: schon/settings/constance.py:133 +#: schon/settings/constance.py:153 msgid "Legal Options" msgstr "Yasal Seçenekler" -#: schon/settings/constance.py:141 +#: schon/settings/constance.py:161 msgid "Email Options" msgstr "E-posta Seçenekleri" -#: schon/settings/constance.py:151 +#: schon/settings/constance.py:171 msgid "Features Options" msgstr "Özellikler Seçenekler" -#: schon/settings/constance.py:160 +#: schon/settings/constance.py:181 msgid "SEO Options" msgstr "SEO Seçenekleri" -#: schon/settings/constance.py:164 +#: schon/settings/constance.py:185 msgid "System Options" msgstr "Sistem Seçenekleri" -#: schon/settings/drf.py:51 +#: schon/settings/drf.py:59 #, python-brace-format msgid "" "\n" "Welcome to the Schon documentation.\n" "\n" -"Schon is a powerful e-commerce platform that allows you to launch and manage " -"an online store of any kind in just a few clicks.\n" +"Schon is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks.\n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"SCHON-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-SCHON-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {access_lifetime} {access_unit}.\n" "- Refresh token lifetime is {refresh_hours} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -199,7 +194,6 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {version}\n" @@ -207,59 +201,40 @@ msgstr "" "\n" "Schon belgelerine hoş geldiniz.\n" "\n" -"Schon, sadece birkaç tıklamayla her türlü çevrimiçi mağazayı açmanıza ve " -"yönetmenize olanak tanıyan güçlü bir e-ticaret platformudur.\n" +"Schon, sadece birkaç tıklamayla her türlü çevrimiçi mağazayı açmanıza ve yönetmenize olanak tanıyan güçlü bir e-ticaret platformudur.\n" "\n" "## Temel Özellikler\n" -"- Ürün Kataloğu:** Birden fazla kategoride ürün ayrıntılarını, " -"fiyatlandırmayı, envanteri ve kullanılabilirliği yönetin.\n" -"- Sipariş Yönetimi:** Siparişleri işleyin, gönderimi takip edin ve müşteri " -"taleplerini verimli bir şekilde ele alın.\n" -"- Kimlik Doğrulama ve Yetkilendirme:** JWT belirteçleri ve rol tabanlı " -"izinler ile kapsamlı kullanıcı kimlik doğrulaması.\n" -"- **Ödeme İşleme:** Birden fazla ödeme ağ geçidini entegre edin ve işlemleri " -"güvenli bir şekilde yönetin.\n" -"- **Blog ve İçerik Yönetimi:** Mağazanız için blog gönderileri ve pazarlama " -"içeriği oluşturun ve yönetin.\n" -"- **B2B İşlemleri:** İşletmeler arası işlemler ve toptan satış yönetimi için " -"özel uç noktalar.\n" -"- Çoklu Dil Desteği:** Tam uluslararasılaştırma (i18n) yetenekleri ile dünya " -"çapındaki müşterilere hizmet verin.\n" -"- Özel Entegrasyonlar:** Harici platformlar ve hizmetlerle entegrasyon için " -"genişletilebilir API mimarisi.\n" -"- Analitik ve Raporlama:** Satış, envanter ve müşteri davranışları hakkında " -"ayrıntılı raporlar oluşturun.\n" -"- Gerçek Zamanlı Güncellemeler:** Envanter seviyeleri, sipariş durumları ve " -"fiyat değişiklikleri hakkında canlı veriler alın.\n" +"- Ürün Kataloğu:** Birden fazla kategoride ürün ayrıntılarını, fiyatlandırmayı, envanteri ve kullanılabilirliği yönetin.\n" +"- Sipariş Yönetimi:** Siparişleri işleyin, gönderimi takip edin ve müşteri taleplerini verimli bir şekilde ele alın.\n" +"- Kimlik Doğrulama ve Yetkilendirme:** JWT belirteçleri ve rol tabanlı izinler ile kapsamlı kullanıcı kimlik doğrulaması.\n" +"- **Ödeme İşleme:** Birden fazla ödeme ağ geçidini entegre edin ve işlemleri güvenli bir şekilde yönetin.\n" +"- **Blog ve İçerik Yönetimi:** Mağazanız için blog gönderileri ve pazarlama içeriği oluşturun ve yönetin.\n" +"- **B2B İşlemleri:** İşletmeler arası işlemler ve toptan satış yönetimi için özel uç noktalar.\n" +"- Çoklu Dil Desteği:** Tam uluslararasılaştırma (i18n) yetenekleri ile dünya çapındaki müşterilere hizmet verin.\n" +"- Özel Entegrasyonlar:** Harici platformlar ve hizmetlerle entegrasyon için genişletilebilir API mimarisi.\n" +"- Analitik ve Raporlama:** Satış, envanter ve müşteri davranışları hakkında ayrıntılı raporlar oluşturun.\n" +"- Gerçek Zamanlı Güncellemeler:** Envanter seviyeleri, sipariş durumları ve fiyat değişiklikleri hakkında canlı veriler alın.\n" "\n" "## Mevcut API'ler\n" "- **REST API:** Tam RESTful arayüz (bu dokümantasyon)\n" -"- **GraphQL API:** Etkileşimli sorgular için GraphiQL arayüzü ile `/graphql/" -"` adresinde mevcuttur\n" +"- **GraphQL API:** Etkileşimli sorgular için GraphiQL arayüzü ile `/graphql/` adresinde mevcuttur\n" "\n" "## Kimlik Doğrulama\n" -"- Kimlik doğrulama JWT belirteçleri aracılığıyla gerçekleştirilir. " -"Belirteci, isteklerinizin `X-SCHON-AUTH` başlığına `Bearer ` " -"biçiminde ekleyin.\n" +"- Kimlik doğrulama JWT belirteçleri aracılığıyla gerçekleştirilir. Belirteci, isteklerinizin `X-SCHON-AUTH` başlığına `Bearer ` biçiminde ekleyin.\n" "- Erişim belirteci ömrü {access_lifetime} {access_unit}.\n" "- Yenileme belirteci ömrü {refresh_hours} saattir.\n" -"- Yenileme belirteçleri, gelişmiş güvenlik için kullanımdan sonra otomatik " -"olarak döndürülür ve geçersiz kılınır.\n" +"- Yenileme belirteçleri, gelişmiş güvenlik için kullanımdan sonra otomatik olarak döndürülür ve geçersiz kılınır.\n" "\n" "## Uluslararasılaştırma (i18n)\n" -"- Tercih ettiğiniz dili belirtmek için `Accept-Language` başlığını ayarlayın " -"(örneğin, `Accept-Language: en-US`).\n" +"- Tercih ettiğiniz dili belirtmek için `Accept-Language` başlığını ayarlayın (örneğin, `Accept-Language: en-US`).\n" "- Mevcut diller `/app/languages/` uç noktasından alınabilir.\n" -"- Kullanıcıya yönelik tüm içerikler kutudan çıkar çıkmaz birden fazla dili " -"destekler.\n" +"- Kullanıcıya yönelik tüm içerikler kutudan çıkar çıkmaz birden fazla dili destekler.\n" "\n" "## Yanıt Biçimleri\n" "API birden fazla yanıt biçimini destekler:\n" "- **JSON** (varsayılan, camelCase biçimlendirilmiş)\n" -"- **XML** (`?format=xml` ekleyin veya `Accept: application/xml` olarak " -"ayarlayın)\n" -"- **YAML** (`?format=yaml` ekleyin veya `Accept: application/x-yaml` olarak " -"ayarlayın)\n" +"- **XML** (`?format=xml` ekleyin veya `Accept: application/xml` olarak ayarlayın)\n" +"- **YAML** (`?format=yaml` ekleyin veya `Accept: application/x-yaml` olarak ayarlayın)\n" "\n" "## Sağlık ve İzleme\n" "- Sağlık kontrolleri: `/health/`\n" @@ -296,38 +271,38 @@ msgstr "Konfigürasyon" msgid "Periodic Tasks" msgstr "Periyodik Görevler" -#: schon/settings/unfold.py:134 +#: schon/settings/unfold.py:129 msgid "Taskboard" msgstr "Görev Panosu" -#: schon/settings/unfold.py:146 +#: schon/settings/unfold.py:141 msgid "Quick Links" msgstr "Hızlı Bağlantılar" -#: schon/settings/unfold.py:151 +#: schon/settings/unfold.py:146 msgid "Users" msgstr "Kullanıcılar" -#: schon/settings/unfold.py:156 +#: schon/settings/unfold.py:151 msgid "Groups" msgstr "Gruplar" -#: schon/settings/unfold.py:161 +#: schon/settings/unfold.py:156 msgid "Orders" msgstr "Siparişler" -#: schon/settings/unfold.py:166 +#: schon/settings/unfold.py:161 msgid "Products" msgstr "Ürünler" -#: schon/settings/unfold.py:171 +#: schon/settings/unfold.py:166 msgid "Categories" msgstr "Kategoriler" -#: schon/settings/unfold.py:176 +#: schon/settings/unfold.py:171 msgid "Brands" msgstr "Markalar" -#: schon/settings/unfold.py:181 +#: schon/settings/unfold.py:176 msgid "Blogposts" msgstr "Blog Yazıları" diff --git a/schon/locale/vi_VN/LC_MESSAGES/django.mo b/schon/locale/vi_VN/LC_MESSAGES/django.mo index 43cddcb1..05b20cc0 100644 Binary files a/schon/locale/vi_VN/LC_MESSAGES/django.mo and b/schon/locale/vi_VN/LC_MESSAGES/django.mo differ diff --git a/schon/locale/vi_VN/LC_MESSAGES/django.po b/schon/locale/vi_VN/LC_MESSAGES/django.po index 191f9f88..3562042d 100644 --- a/schon/locale/vi_VN/LC_MESSAGES/django.po +++ b/schon/locale/vi_VN/LC_MESSAGES/django.po @@ -1,8 +1,9 @@ +# msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 01:44+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,182 +13,177 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: schon/settings/constance.py:24 +#: schon/settings/constance.py:31 msgid "Name of the company" msgstr "Tên công ty" -#: schon/settings/constance.py:25 +#: schon/settings/constance.py:32 msgid "Address of the company" msgstr "Địa chỉ của công ty" -#: schon/settings/constance.py:28 +#: schon/settings/constance.py:35 msgid "Phone number of the company" msgstr "Số điện thoại của công ty" -#: schon/settings/constance.py:35 +#: schon/settings/constance.py:42 msgid "" "Tax rate in jurisdiction of your company. Leave 0 if you don't want to " "process taxes." msgstr "" -"Tỷ lệ thuế tại khu vực pháp lý của công ty bạn. Để trống ô này nếu bạn không " -"muốn xử lý thuế." +"Tỷ lệ thuế tại khu vực pháp lý của công ty bạn. Để trống ô này nếu bạn không" +" muốn xử lý thuế." -#: schon/settings/constance.py:44 +#: schon/settings/constance.py:51 msgid "Shows if the taxes are already included in product's selling prices" msgstr "Hiển thị xem thuế đã được tính vào giá bán của sản phẩm hay chưa." -#: schon/settings/constance.py:52 +#: schon/settings/constance.py:59 msgid "Exchange rate API key" msgstr "Khóa API tỷ giá hối đoái" -#: schon/settings/constance.py:58 +#: schon/settings/constance.py:65 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!KHÔNG THAY ĐỔI!!!" -#: schon/settings/constance.py:60 +#: schon/settings/constance.py:67 msgid "SMTP host" msgstr "Máy chủ SMTP" -#: schon/settings/constance.py:61 +#: schon/settings/constance.py:68 msgid "SMTP port" msgstr "Cổng SMTP" -#: schon/settings/constance.py:62 +#: schon/settings/constance.py:69 msgid "Use TLS" msgstr "Sử dụng TLS" -#: schon/settings/constance.py:63 +#: schon/settings/constance.py:70 msgid "Use SSL" msgstr "Sử dụng SSL" -#: schon/settings/constance.py:66 +#: schon/settings/constance.py:73 msgid "SMTP username" msgstr "Tên người dùng SMTP" -#: schon/settings/constance.py:70 +#: schon/settings/constance.py:79 msgid "SMTP password" msgstr "Mật khẩu SMTP" -#: schon/settings/constance.py:72 +#: schon/settings/constance.py:83 msgid "Mail from option" msgstr "Thư từ tùy chọn" -#: schon/settings/constance.py:76 -msgid "How many days we store messages from anonymous users" -msgstr "Chúng tôi lưu trữ tin nhắn từ người dùng ẩn danh trong bao nhiêu ngày?" +#: schon/settings/constance.py:90 +msgid "" +"Export products to specified marketplaces. Comma-separated list from " +"" +msgstr "" +"Xuất khẩu sản phẩm sang các thị trường được chỉ định. Danh sách các thị " +"trường được phân tách bằng dấu phẩy từ " +"" -#: schon/settings/constance.py:80 +#: schon/settings/constance.py:96 +msgid "How many days we store messages from anonymous users" +msgstr "" +"Chúng tôi lưu trữ tin nhắn từ người dùng ẩn danh trong bao nhiêu ngày?" + +#: schon/settings/constance.py:100 msgid "How many days we store messages from authenticated users" msgstr "" "Chúng tôi lưu trữ tin nhắn từ người dùng đã xác thực trong bao nhiêu ngày?" -#: schon/settings/constance.py:84 +#: schon/settings/constance.py:104 msgid "Disable buy functionality" msgstr "Vô hiệu hóa chức năng mua hàng" -#: schon/settings/constance.py:88 +#: schon/settings/constance.py:108 msgid "OpenStreetMap Nominatim API URL" msgstr "Địa chỉ URL API Nominatim của OpenStreetMap" -#: schon/settings/constance.py:92 +#: schon/settings/constance.py:112 msgid "OpenAI API Key" msgstr "Khóa API OpenAI" -#: schon/settings/constance.py:96 +#: schon/settings/constance.py:116 msgid "Abstract API Key" msgstr "Tóm tắt Khóa API" -#: schon/settings/constance.py:104 +#: schon/settings/constance.py:124 msgid "HTTP Proxy" msgstr "Proxy HTTP" -#: schon/settings/constance.py:112 +#: schon/settings/constance.py:132 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" -#: schon/settings/constance.py:120 +#: schon/settings/constance.py:140 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." -#: schon/settings/constance.py:125 +#: schon/settings/constance.py:145 msgid "Save responses from vendors' APIs" msgstr "Lưu trữ các phản hồi từ API của nhà cung cấp" -#: schon/settings/constance.py:126 +#: schon/settings/constance.py:146 msgid "Backup database" msgstr "Sao lưu cơ sở dữ liệu" -#: schon/settings/constance.py:127 +#: schon/settings/constance.py:147 msgid "Backup media" msgstr "Phương tiện sao lưu" -#: schon/settings/constance.py:133 +#: schon/settings/constance.py:153 msgid "Legal Options" msgstr "Các lựa chọn pháp lý" -#: schon/settings/constance.py:141 +#: schon/settings/constance.py:161 msgid "Email Options" msgstr "Tùy chọn email" -#: schon/settings/constance.py:151 +#: schon/settings/constance.py:171 msgid "Features Options" msgstr "Tính năng và tùy chọn" -#: schon/settings/constance.py:160 +#: schon/settings/constance.py:181 msgid "SEO Options" msgstr "Các tùy chọn SEO" -#: schon/settings/constance.py:164 +#: schon/settings/constance.py:185 msgid "System Options" msgstr "Tùy chọn hệ thống" -#: schon/settings/drf.py:51 +#: schon/settings/drf.py:59 #, python-brace-format msgid "" "\n" "Welcome to the Schon documentation.\n" "\n" -"Schon is a powerful e-commerce platform that allows you to launch and manage " -"an online store of any kind in just a few clicks.\n" +"Schon is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks.\n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"SCHON-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-SCHON-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {access_lifetime} {access_unit}.\n" "- Refresh token lifetime is {refresh_hours} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -199,49 +195,19 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {version}\n" msgstr "" "\n" -"Chào mừng đến với tài liệu hướng dẫn của Schon. Schon là một nền tảng thương " -"mại điện tử mạnh mẽ cho phép bạn khởi chạy và quản lý cửa hàng trực tuyến " -"bất kỳ loại nào chỉ với vài cú nhấp chuột. ## Tính năng chính - **Danh mục " -"sản phẩm:** Quản lý chi tiết sản phẩm, giá cả, tồn kho và tình trạng sẵn có " -"trên nhiều danh mục. - **Quản lý đơn hàng:** Xử lý đơn hàng, theo dõi quá " -"trình giao hàng và xử lý yêu cầu của khách hàng một cách hiệu quả.\n" -"- **Xác thực & Quyền truy cập:** Hệ thống xác thực người dùng toàn diện với " -"token JWT và quyền truy cập dựa trên vai trò. - **Xử lý thanh toán:** Tích " -"hợp nhiều cổng thanh toán và quản lý giao dịch an toàn. - **Quản lý blog và " -"nội dung:** Tạo và quản lý bài viết blog và nội dung tiếp thị cho cửa hàng " -"của bạn. - **Hoạt động B2B:** Các điểm cuối chuyên dụng cho giao dịch giữa " -"doanh nghiệp và quản lý bán buôn.\n" -"- **Hỗ trợ đa ngôn ngữ:** Phục vụ khách hàng toàn cầu với khả năng quốc tế " -"hóa (i18n) đầy đủ. - **Tích hợp tùy chỉnh:** Kiến trúc API mở rộng để tích " -"hợp với các nền tảng và dịch vụ bên ngoài. - **Phân tích & Báo cáo:** Tạo " -"báo cáo chi tiết về doanh số, hàng tồn kho và hành vi khách hàng. - **Cập " -"nhật thời gian thực:** Nhận dữ liệu trực tiếp về mức tồn kho, trạng thái đơn " -"hàng và thay đổi giá cả.\n" +"Chào mừng đến với tài liệu hướng dẫn của Schon. Schon là một nền tảng thương mại điện tử mạnh mẽ cho phép bạn khởi chạy và quản lý cửa hàng trực tuyến bất kỳ loại nào chỉ với vài cú nhấp chuột. ## Tính năng chính - **Danh mục sản phẩm:** Quản lý chi tiết sản phẩm, giá cả, tồn kho và tình trạng sẵn có trên nhiều danh mục. - **Quản lý đơn hàng:** Xử lý đơn hàng, theo dõi quá trình giao hàng và xử lý yêu cầu của khách hàng một cách hiệu quả.\n" +"- **Xác thực & Quyền truy cập:** Hệ thống xác thực người dùng toàn diện với token JWT và quyền truy cập dựa trên vai trò. - **Xử lý thanh toán:** Tích hợp nhiều cổng thanh toán và quản lý giao dịch an toàn. - **Quản lý blog và nội dung:** Tạo và quản lý bài viết blog và nội dung tiếp thị cho cửa hàng của bạn. - **Hoạt động B2B:** Các điểm cuối chuyên dụng cho giao dịch giữa doanh nghiệp và quản lý bán buôn.\n" +"- **Hỗ trợ đa ngôn ngữ:** Phục vụ khách hàng toàn cầu với khả năng quốc tế hóa (i18n) đầy đủ. - **Tích hợp tùy chỉnh:** Kiến trúc API mở rộng để tích hợp với các nền tảng và dịch vụ bên ngoài. - **Phân tích & Báo cáo:** Tạo báo cáo chi tiết về doanh số, hàng tồn kho và hành vi khách hàng. - **Cập nhật thời gian thực:** Nhận dữ liệu trực tiếp về mức tồn kho, trạng thái đơn hàng và thay đổi giá cả.\n" "\n" -"## Các API có sẵn - **REST API:** Giao diện RESTful đầy đủ (tài liệu này) - " -"**GraphQL API:** Có sẵn tại `/graphql/` với giao diện GraphiQL cho các truy " -"vấn tương tác ## Xác thực - Xác thực được xử lý thông qua token JWT. Bao gồm " -"token trong tiêu đề `X-SCHON-AUTH` của yêu cầu của bạn theo định dạng " -"`Bearer `.\n" -"- Thời hạn sử dụng của token truy cập là {access_lifetime} {access_unit}. - " -"Thời hạn sử dụng của token làm mới là {refresh_hours} giờ. - Token làm mới " -"được tự động xoay vòng và vô hiệu hóa sau khi sử dụng để tăng cường bảo mật. " -"## Quốc tế hóa (i18n) - Đặt tiêu đề `Accept-Language` để chỉ định ngôn ngữ " -"ưa thích của bạn (ví dụ: `Accept-Language: en-US`).\n" -"- Các ngôn ngữ có sẵn có thể được lấy từ điểm cuối `/app/languages/`. - Tất " -"cả nội dung hiển thị cho người dùng đều hỗ trợ nhiều ngôn ngữ ngay từ đầu. " -"## Định dạng phản hồi API hỗ trợ nhiều định dạng phản hồi: - **JSON** (mặc " -"định, định dạng camelCase) - **XML** (thêm `?format=xml` hoặc đặt `Accept: " -"application/xml`)\n" -"- **YAML** (thêm `?format=yaml` hoặc đặt `Accept: application/x-yaml`) ## " -"Sức khỏe & Giám sát - Kiểm tra sức khỏe: `/health/` - Chỉ số Prometheus: `/" -"prometheus/metrics/` ## Phiên bản Phiên bản API hiện tại: {version}\n" +"## Các API có sẵn - **REST API:** Giao diện RESTful đầy đủ (tài liệu này) - **GraphQL API:** Có sẵn tại `/graphql/` với giao diện GraphiQL cho các truy vấn tương tác ## Xác thực - Xác thực được xử lý thông qua token JWT. Bao gồm token trong tiêu đề `X-SCHON-AUTH` của yêu cầu của bạn theo định dạng `Bearer `.\n" +"- Thời hạn sử dụng của token truy cập là {access_lifetime} {access_unit}. - Thời hạn sử dụng của token làm mới là {refresh_hours} giờ. - Token làm mới được tự động xoay vòng và vô hiệu hóa sau khi sử dụng để tăng cường bảo mật. ## Quốc tế hóa (i18n) - Đặt tiêu đề `Accept-Language` để chỉ định ngôn ngữ ưa thích của bạn (ví dụ: `Accept-Language: en-US`).\n" +"- Các ngôn ngữ có sẵn có thể được lấy từ điểm cuối `/app/languages/`. - Tất cả nội dung hiển thị cho người dùng đều hỗ trợ nhiều ngôn ngữ ngay từ đầu. ## Định dạng phản hồi API hỗ trợ nhiều định dạng phản hồi: - **JSON** (mặc định, định dạng camelCase) - **XML** (thêm `?format=xml` hoặc đặt `Accept: application/xml`)\n" +"- **YAML** (thêm `?format=yaml` hoặc đặt `Accept: application/x-yaml`) ## Sức khỏe & Giám sát - Kiểm tra sức khỏe: `/health/` - Chỉ số Prometheus: `/prometheus/metrics/` ## Phiên bản Phiên bản API hiện tại: {version}\n" #: schon/settings/unfold.py:43 msgid "My site" @@ -271,38 +237,38 @@ msgstr "Cấu hình" msgid "Periodic Tasks" msgstr "Các tác vụ định kỳ" -#: schon/settings/unfold.py:134 +#: schon/settings/unfold.py:129 msgid "Taskboard" msgstr "Bảng nhiệm vụ" -#: schon/settings/unfold.py:146 +#: schon/settings/unfold.py:141 msgid "Quick Links" msgstr "Liên kết nhanh" -#: schon/settings/unfold.py:151 +#: schon/settings/unfold.py:146 msgid "Users" msgstr "Người dùng" -#: schon/settings/unfold.py:156 +#: schon/settings/unfold.py:151 msgid "Groups" msgstr "Nhóm" -#: schon/settings/unfold.py:161 +#: schon/settings/unfold.py:156 msgid "Orders" msgstr "Đơn hàng" -#: schon/settings/unfold.py:166 +#: schon/settings/unfold.py:161 msgid "Products" msgstr "Sản phẩm" -#: schon/settings/unfold.py:171 +#: schon/settings/unfold.py:166 msgid "Categories" msgstr "Các danh mục" -#: schon/settings/unfold.py:176 +#: schon/settings/unfold.py:171 msgid "Brands" msgstr "Thương hiệu" -#: schon/settings/unfold.py:181 +#: schon/settings/unfold.py:176 msgid "Blogposts" msgstr "Bài viết trên blog" diff --git a/schon/locale/zh_Hans/LC_MESSAGES/django.mo b/schon/locale/zh_Hans/LC_MESSAGES/django.mo index 78414c3e..2b96508d 100644 Binary files a/schon/locale/zh_Hans/LC_MESSAGES/django.mo and b/schon/locale/zh_Hans/LC_MESSAGES/django.mo differ diff --git a/schon/locale/zh_Hans/LC_MESSAGES/django.po b/schon/locale/zh_Hans/LC_MESSAGES/django.po index 92932e86..038c2597 100644 --- a/schon/locale/zh_Hans/LC_MESSAGES/django.po +++ b/schon/locale/zh_Hans/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: SCHON 2026.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-26 01:44+0300\n" +"POT-Creation-Date: 2026-03-05 16:31+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -13,179 +13,172 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: schon/settings/constance.py:24 +#: schon/settings/constance.py:31 msgid "Name of the company" msgstr "公司名称" -#: schon/settings/constance.py:25 +#: schon/settings/constance.py:32 msgid "Address of the company" msgstr "公司地址" -#: schon/settings/constance.py:28 +#: schon/settings/constance.py:35 msgid "Phone number of the company" msgstr "公司电话号码" -#: schon/settings/constance.py:35 +#: schon/settings/constance.py:42 msgid "" "Tax rate in jurisdiction of your company. Leave 0 if you don't want to " "process taxes." msgstr "贵公司所在地区的税率。如果不想处理税款,请留下 0。" -#: schon/settings/constance.py:44 +#: schon/settings/constance.py:51 msgid "Shows if the taxes are already included in product's selling prices" msgstr "显示税费是否已包含在产品售价中" -#: schon/settings/constance.py:52 +#: schon/settings/constance.py:59 msgid "Exchange rate API key" msgstr "汇率 API 密钥" -#: schon/settings/constance.py:58 +#: schon/settings/constance.py:65 msgid "!!!DO NOT CHANGE!!!" msgstr "不要换" -#: schon/settings/constance.py:60 +#: schon/settings/constance.py:67 msgid "SMTP host" msgstr "SMTP 主机" -#: schon/settings/constance.py:61 +#: schon/settings/constance.py:68 msgid "SMTP port" msgstr "SMTP 端口" -#: schon/settings/constance.py:62 +#: schon/settings/constance.py:69 msgid "Use TLS" msgstr "使用 TLS" -#: schon/settings/constance.py:63 +#: schon/settings/constance.py:70 msgid "Use SSL" msgstr "使用 SSL" -#: schon/settings/constance.py:66 +#: schon/settings/constance.py:73 msgid "SMTP username" msgstr "SMTP 用户名" -#: schon/settings/constance.py:70 +#: schon/settings/constance.py:79 msgid "SMTP password" msgstr "SMTP 密码" -#: schon/settings/constance.py:72 +#: schon/settings/constance.py:83 msgid "Mail from option" msgstr "从选项发送邮件" -#: schon/settings/constance.py:76 +#: schon/settings/constance.py:90 +msgid "" +"Export products to specified marketplaces. Comma-separated list from " +"" +msgstr "" +"将产品导出至指定市场平台。以逗号分隔的列表来自 " +"" + +#: schon/settings/constance.py:96 msgid "How many days we store messages from anonymous users" msgstr "我们将匿名用户的信息保存多少天" -#: schon/settings/constance.py:80 +#: schon/settings/constance.py:100 msgid "How many days we store messages from authenticated users" msgstr "我们会将已验证用户的信息保存多少天" -#: schon/settings/constance.py:84 +#: schon/settings/constance.py:104 msgid "Disable buy functionality" msgstr "禁用购买功能" -#: schon/settings/constance.py:88 +#: schon/settings/constance.py:108 msgid "OpenStreetMap Nominatim API URL" msgstr "OpenStreetMap Nominatim API URL" -#: schon/settings/constance.py:92 +#: schon/settings/constance.py:112 msgid "OpenAI API Key" msgstr "OpenAI API 密钥" -#: schon/settings/constance.py:96 +#: schon/settings/constance.py:116 msgid "Abstract API Key" msgstr "抽象应用程序接口密钥" -#: schon/settings/constance.py:104 +#: schon/settings/constance.py:124 msgid "HTTP Proxy" msgstr "HTTP 代理服务器" -#: schon/settings/constance.py:112 +#: schon/settings/constance.py:132 msgid "An entity for storing advertisiment data" msgstr "存储广告数据的实体" -#: schon/settings/constance.py:120 +#: schon/settings/constance.py:140 msgid "An entity for storing analytics data" msgstr "存储分析数据的实体" -#: schon/settings/constance.py:125 +#: schon/settings/constance.py:145 msgid "Save responses from vendors' APIs" msgstr "保存来自供应商应用程序接口的响应" -#: schon/settings/constance.py:126 +#: schon/settings/constance.py:146 msgid "Backup database" msgstr "备份数据库" -#: schon/settings/constance.py:127 +#: schon/settings/constance.py:147 msgid "Backup media" msgstr "备份介质" -#: schon/settings/constance.py:133 +#: schon/settings/constance.py:153 msgid "Legal Options" msgstr "法律选择" -#: schon/settings/constance.py:141 +#: schon/settings/constance.py:161 msgid "Email Options" msgstr "电子邮件选项" -#: schon/settings/constance.py:151 +#: schon/settings/constance.py:171 msgid "Features Options" msgstr "功能选项" -#: schon/settings/constance.py:160 +#: schon/settings/constance.py:181 msgid "SEO Options" msgstr "搜索引擎优化选项" -#: schon/settings/constance.py:164 +#: schon/settings/constance.py:185 msgid "System Options" msgstr "系统选项" -#: schon/settings/drf.py:51 +#: schon/settings/drf.py:59 #, python-brace-format msgid "" "\n" "Welcome to the Schon documentation.\n" "\n" -"Schon is a powerful e-commerce platform that allows you to launch and manage " -"an online store of any kind in just a few clicks.\n" +"Schon is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks.\n" "\n" "## Key Features\n" -"- **Product Catalog:** Manage product details, pricing, inventory, and " -"availability across multiple categories.\n" -"- **Order Management:** Process orders, track fulfillment, and handle " -"customer requests efficiently.\n" -"- **Authentication & Authorization:** Comprehensive user authentication with " -"JWT tokens and role-based permissions.\n" -"- **Payment Processing:** Integrate multiple payment gateways and manage " -"transactions securely.\n" -"- **Blog & Content Management:** Create and manage blog posts and marketing " -"content for your store.\n" -"- **B2B Operations:** Dedicated endpoints for business-to-business " -"transactions and wholesale management.\n" -"- **Multi-language Support:** Serve customers worldwide with full " -"internationalization (i18n) capabilities.\n" -"- **Custom Integrations:** Extensible API architecture for integrating with " -"external platforms and services.\n" -"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " -"and customer behavior.\n" -"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " -"and pricing changes.\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" "\n" "## Available APIs\n" "- **REST API:** Full RESTful interface (this documentation)\n" -"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " -"interactive queries\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" "\n" "## Authentication\n" -"- Authentication is handled via JWT tokens. Include the token in the `X-" -"SCHON-AUTH` header of your requests in the format `Bearer `.\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-SCHON-AUTH` header of your requests in the format `Bearer `.\n" "- Access token lifetime is {access_lifetime} {access_unit}.\n" "- Refresh token lifetime is {refresh_hours} hours.\n" -"- Refresh tokens are automatically rotated and invalidated after usage for " -"enhanced security.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" "\n" "## Internationalization (i18n)\n" -"- Set the `Accept-Language` header to specify your preferred language (e.g., " -"`Accept-Language: en-US`).\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" "- Available languages can be retrieved from the `/app/languages/` endpoint.\n" "- All user-facing content supports multiple languages out of the box.\n" "\n" @@ -197,7 +190,6 @@ msgid "" "\n" "## Health & Monitoring\n" "- Health checks: `/health/`\n" -"- Prometheus metrics: `/prometheus/metrics/`\n" "\n" "## Version\n" "Current API version: {version}\n" @@ -205,8 +197,7 @@ msgstr "" "\n" "欢迎使用 Schon 文档。\n" "\n" -"Schon 是一个功能强大的电子商务平台,只需点击几下,您就可以创建和管理任何类型" -"的网上商店。\n" +"Schon 是一个功能强大的电子商务平台,只需点击几下,您就可以创建和管理任何类型的网上商店。\n" "\n" "## 关键功能\n" "- 产品目录:** 管理多个类别的产品详情、定价、库存和可用性。\n" @@ -222,19 +213,16 @@ msgstr "" "\n" "## 可用的应用程序接口\n" "- REST API:** 完整的 REST 接口(本文档)\n" -"- **GraphQL 应用程序接口:** 可在 `/graphql/`使用 GraphiQL 接口进行交互式查" -"询\n" +"- **GraphQL 应用程序接口:** 可在 `/graphql/`使用 GraphiQL 接口进行交互式查询\n" "\n" "## 验证\n" -"- 通过 JWT 标记进行身份验证。在请求的 `X-SCHON-AUTH` 头中包含令牌,格式为 " -"`Bearer `。\n" +"- 通过 JWT 标记进行身份验证。在请求的 `X-SCHON-AUTH` 头中包含令牌,格式为 `Bearer `。\n" "- 访问令牌的有效期为 {access_lifetime} {access_unit}。\n" "- 刷新令牌的有效期为 {refresh_hours} 小时。\n" "- 刷新令牌在使用后会自动轮换和失效,以增强安全性。\n" "\n" "### 国际化(i18n)\n" -"- 设置 `Accept-Language` 标头,指定首选语言(例如,`Accept-Language: en-" -"US`)。\n" +"- 设置 `Accept-Language` 标头,指定首选语言(例如,`Accept-Language: en-US`)。\n" "- 可从 `/app/languages/` 端点检索可用语言。\n" "- 所有面向用户的内容均支持多种语言。\n" "\n" @@ -279,38 +267,38 @@ msgstr "配置" msgid "Periodic Tasks" msgstr "定期任务" -#: schon/settings/unfold.py:134 +#: schon/settings/unfold.py:129 msgid "Taskboard" msgstr "任务板" -#: schon/settings/unfold.py:146 +#: schon/settings/unfold.py:141 msgid "Quick Links" msgstr "快速链接" -#: schon/settings/unfold.py:151 +#: schon/settings/unfold.py:146 msgid "Users" msgstr "用户" -#: schon/settings/unfold.py:156 +#: schon/settings/unfold.py:151 msgid "Groups" msgstr "组别" -#: schon/settings/unfold.py:161 +#: schon/settings/unfold.py:156 msgid "Orders" msgstr "订单" -#: schon/settings/unfold.py:166 +#: schon/settings/unfold.py:161 msgid "Products" msgstr "产品" -#: schon/settings/unfold.py:171 +#: schon/settings/unfold.py:166 msgid "Categories" msgstr "类别" -#: schon/settings/unfold.py:176 +#: schon/settings/unfold.py:171 msgid "Brands" msgstr "品牌" -#: schon/settings/unfold.py:181 +#: schon/settings/unfold.py:176 msgid "Blogposts" msgstr "博客文章"