Merge branch 'main' into storefront-nuxt
This commit is contained in:
commit
3191220ee9
236 changed files with 28294 additions and 27507 deletions
|
|
@ -1,6 +1,8 @@
|
||||||
from django.contrib.admin import register
|
from django.contrib.admin import register
|
||||||
from django.db.models import TextField
|
from django.db.models import TextField
|
||||||
from django_summernote.admin import SummernoteModelAdminMixin
|
from django_summernote.admin import (
|
||||||
|
SummernoteModelAdminMixin,
|
||||||
|
)
|
||||||
from unfold.admin import ModelAdmin
|
from unfold.admin import ModelAdmin
|
||||||
from unfold_markdown import MarkdownWidget
|
from unfold_markdown import MarkdownWidget
|
||||||
|
|
||||||
|
|
@ -11,7 +13,7 @@ from engine.core.admin import ActivationActionsMixin, FieldsetsMixin
|
||||||
@register(Post)
|
@register(Post)
|
||||||
class PostAdmin(
|
class PostAdmin(
|
||||||
SummernoteModelAdminMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin
|
SummernoteModelAdminMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin
|
||||||
): # type: ignore [misc, type-arg]
|
):
|
||||||
list_display = ("title", "author", "slug", "created", "modified")
|
list_display = ("title", "author", "slug", "created", "modified")
|
||||||
list_filter = ("author", "tags", "created", "modified")
|
list_filter = ("author", "tags", "created", "modified")
|
||||||
search_fields = ("title", "content", "slug")
|
search_fields = ("title", "content", "slug")
|
||||||
|
|
@ -40,7 +42,7 @@ class PostAdmin(
|
||||||
|
|
||||||
|
|
||||||
@register(PostTag)
|
@register(PostTag)
|
||||||
class PostTagAdmin(ModelAdmin): # type: ignore [type-arg]
|
class PostTagAdmin(ModelAdmin):
|
||||||
list_display = ("tag_name", "name")
|
list_display = ("tag_name", "name")
|
||||||
search_fields = ("tag_name", "name")
|
search_fields = ("tag_name", "name")
|
||||||
ordering = ("tag_name",)
|
ordering = ("tag_name",)
|
||||||
|
|
|
||||||
|
|
@ -9,5 +9,5 @@ class BlogConfig(AppConfig):
|
||||||
|
|
||||||
# noinspection PyUnresolvedReferences
|
# noinspection PyUnresolvedReferences
|
||||||
def ready(self) -> None:
|
def ready(self) -> None:
|
||||||
import engine.blog.elasticsearch.documents
|
import engine.blog.elasticsearch.documents # noqa: F401
|
||||||
import engine.blog.signals # noqa: F401
|
import engine.blog.signals # noqa: F401
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ from engine.core.elasticsearch import (
|
||||||
from engine.core.elasticsearch.documents import BaseDocument
|
from engine.core.elasticsearch.documents import BaseDocument
|
||||||
|
|
||||||
|
|
||||||
class PostDocument(ActiveOnlyMixin, BaseDocument): # type: ignore [misc]
|
class PostDocument(ActiveOnlyMixin, BaseDocument):
|
||||||
title = fields.TextField(
|
title = fields.TextField(
|
||||||
attr="title",
|
attr="title",
|
||||||
analyzer="standard",
|
analyzer="standard",
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ from engine.blog.models import Post
|
||||||
from engine.core.filters import CaseInsensitiveListFilter
|
from engine.core.filters import CaseInsensitiveListFilter
|
||||||
|
|
||||||
|
|
||||||
class PostFilter(FilterSet): # type: ignore [misc]
|
class PostFilter(FilterSet):
|
||||||
uuid = UUIDFilter(field_name="uuid", lookup_expr="exact")
|
uuid = UUIDFilter(field_name="uuid", lookup_expr="exact")
|
||||||
slug = CharFilter(field_name="slug", lookup_expr="exact")
|
slug = CharFilter(field_name="slug", lookup_expr="exact")
|
||||||
author = UUIDFilter(field_name="author__uuid", lookup_expr="exact")
|
author = UUIDFilter(field_name="author__uuid", lookup_expr="exact")
|
||||||
|
|
|
||||||
|
|
@ -1,20 +1,20 @@
|
||||||
import graphene
|
from django.http import HttpRequest
|
||||||
from graphene import relay
|
from graphene import List, String, relay
|
||||||
from graphene_django import DjangoObjectType
|
from graphene_django import DjangoObjectType
|
||||||
|
|
||||||
from engine.blog.models import Post, PostTag
|
from engine.blog.models import Post, PostTag
|
||||||
|
|
||||||
|
|
||||||
class PostType(DjangoObjectType):
|
class PostType(DjangoObjectType):
|
||||||
tags = graphene.List(lambda: PostTagType)
|
tags = List(lambda: PostTagType)
|
||||||
content = graphene.String()
|
content = String()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Post
|
model = Post
|
||||||
fields = ["tags", "content", "title", "slug"]
|
fields = ["tags", "content", "title", "slug"]
|
||||||
interfaces = (relay.Node,)
|
interfaces = (relay.Node,)
|
||||||
|
|
||||||
def resolve_content(self: Post, _info):
|
def resolve_content(self: Post, _info: HttpRequest) -> str:
|
||||||
return self.content.html.replace("\n", "<br/>")
|
return self.content.html.replace("\n", "<br/>")
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2025.4\n"
|
"Project-Id-Version: EVIBES 2025.4\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-12-10 21:44+0300\n"
|
"POT-Creation-Date: 2025-12-18 17:19+0300\n"
|
||||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||||
|
|
@ -25,7 +25,7 @@ msgstr "سرد جميع المشاركات (للقراءة فقط)"
|
||||||
msgid "retrieve a single post (read-only)"
|
msgid "retrieve a single post (read-only)"
|
||||||
msgstr "استرداد منشور واحد (للقراءة فقط)"
|
msgstr "استرداد منشور واحد (للقراءة فقط)"
|
||||||
|
|
||||||
#: engine/blog/models.py:13
|
#: engine/blog/models.py:20
|
||||||
msgid ""
|
msgid ""
|
||||||
"Represents a blog post model. The Post class defines the structure and "
|
"Represents a blog post model. The Post class defines the structure and "
|
||||||
"behavior of a blog post. It includes attributes for author, title, content, "
|
"behavior of a blog post. It includes attributes for author, title, content, "
|
||||||
|
|
@ -39,62 +39,62 @@ msgstr ""
|
||||||
"والعلامات المرتبطة بها. يفرض الصنف قيودًا مثل طلب إما محتوى أو مرفق ملف ولكن "
|
"والعلامات المرتبطة بها. يفرض الصنف قيودًا مثل طلب إما محتوى أو مرفق ملف ولكن "
|
||||||
"ليس كلاهما في نفس الوقت. كما أنها تدعم إنشاء سبيكة تلقائية بناءً على العنوان."
|
"ليس كلاهما في نفس الوقت. كما أنها تدعم إنشاء سبيكة تلقائية بناءً على العنوان."
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:41
|
||||||
msgid "post title"
|
msgid "post title"
|
||||||
msgstr "عنوان المنشور"
|
msgstr "عنوان المنشور"
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:42
|
||||||
msgid "title"
|
msgid "title"
|
||||||
msgstr "العنوان"
|
msgstr "العنوان"
|
||||||
|
|
||||||
#: engine/blog/models.py:69
|
#: engine/blog/models.py:89
|
||||||
msgid "is static page"
|
msgid "is static page"
|
||||||
msgstr "هي صفحة ثابتة"
|
msgstr "هي صفحة ثابتة"
|
||||||
|
|
||||||
#: engine/blog/models.py:70
|
#: engine/blog/models.py:91
|
||||||
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"هل هذا منشور لصفحة ذات عنوان URL ثابت (على سبيل المثال '/مساعدة/التسليم'؟)"
|
"هل هذا منشور لصفحة ذات عنوان URL ثابت (على سبيل المثال '/مساعدة/التسليم'؟)"
|
||||||
|
|
||||||
#: engine/blog/models.py:77
|
#: engine/blog/models.py:99
|
||||||
msgid "post"
|
msgid "post"
|
||||||
msgstr "المنشور"
|
msgstr "المنشور"
|
||||||
|
|
||||||
#: engine/blog/models.py:78
|
#: engine/blog/models.py:100
|
||||||
msgid "posts"
|
msgid "posts"
|
||||||
msgstr "المنشورات"
|
msgstr "المنشورات"
|
||||||
|
|
||||||
#: engine/blog/models.py:82
|
#: engine/blog/models.py:105
|
||||||
msgid "markdown files are not supported yet - use markdown content instead"
|
msgid "markdown files are not supported yet - use markdown content instead"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"ملفات تخفيض السعر غير مدعومة Yer - استخدم محتوى تخفيض السعر بدلاً من ذلك!"
|
"ملفات تخفيض السعر غير مدعومة Yer - استخدم محتوى تخفيض السعر بدلاً من ذلك!"
|
||||||
|
|
||||||
#: engine/blog/models.py:84
|
#: engine/blog/models.py:110
|
||||||
msgid ""
|
msgid ""
|
||||||
"a markdown file or markdown content must be provided - mutually exclusive"
|
"a markdown file or markdown content must be provided - mutually exclusive"
|
||||||
msgstr "يجب توفير ملف ترميز أو محتوى ترميز مخفض - متنافيان"
|
msgstr "يجب توفير ملف ترميز أو محتوى ترميز مخفض - متنافيان"
|
||||||
|
|
||||||
#: engine/blog/models.py:116
|
#: engine/blog/models.py:144
|
||||||
msgid "internal tag identifier for the post tag"
|
msgid "internal tag identifier for the post tag"
|
||||||
msgstr "معرّف العلامة الداخلي لعلامة المنشور"
|
msgstr "معرّف العلامة الداخلي لعلامة المنشور"
|
||||||
|
|
||||||
#: engine/blog/models.py:117
|
#: engine/blog/models.py:145
|
||||||
msgid "tag name"
|
msgid "tag name"
|
||||||
msgstr "اسم العلامة"
|
msgstr "اسم العلامة"
|
||||||
|
|
||||||
#: engine/blog/models.py:121
|
#: engine/blog/models.py:149
|
||||||
msgid "user-friendly name for the post tag"
|
msgid "user-friendly name for the post tag"
|
||||||
msgstr "اسم سهل الاستخدام لعلامة المنشور"
|
msgstr "اسم سهل الاستخدام لعلامة المنشور"
|
||||||
|
|
||||||
#: engine/blog/models.py:122
|
#: engine/blog/models.py:150
|
||||||
msgid "tag display name"
|
msgid "tag display name"
|
||||||
msgstr "اسم عرض العلامة"
|
msgstr "اسم عرض العلامة"
|
||||||
|
|
||||||
#: engine/blog/models.py:130
|
#: engine/blog/models.py:158
|
||||||
msgid "post tag"
|
msgid "post tag"
|
||||||
msgstr "علامة المشاركة"
|
msgstr "علامة المشاركة"
|
||||||
|
|
||||||
#: engine/blog/models.py:131
|
#: engine/blog/models.py:159
|
||||||
msgid "post tags"
|
msgid "post tags"
|
||||||
msgstr "علامات المشاركة"
|
msgstr "علامات المشاركة"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2025.4\n"
|
"Project-Id-Version: EVIBES 2025.4\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-12-10 21:44+0300\n"
|
"POT-Creation-Date: 2025-12-18 17:19+0300\n"
|
||||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||||
|
|
@ -25,7 +25,7 @@ msgstr "Seznam všech příspěvků (pouze pro čtení)"
|
||||||
msgid "retrieve a single post (read-only)"
|
msgid "retrieve a single post (read-only)"
|
||||||
msgstr "Získání jednoho příspěvku (pouze pro čtení)"
|
msgstr "Získání jednoho příspěvku (pouze pro čtení)"
|
||||||
|
|
||||||
#: engine/blog/models.py:13
|
#: engine/blog/models.py:20
|
||||||
msgid ""
|
msgid ""
|
||||||
"Represents a blog post model. The Post class defines the structure and "
|
"Represents a blog post model. The Post class defines the structure and "
|
||||||
"behavior of a blog post. It includes attributes for author, title, content, "
|
"behavior of a blog post. It includes attributes for author, title, content, "
|
||||||
|
|
@ -40,65 +40,65 @@ msgstr ""
|
||||||
"je požadavek na obsah nebo přílohu souboru, ale ne obojí současně. Podporuje "
|
"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."
|
"také automatické generování slugu na základě názvu."
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:41
|
||||||
msgid "post title"
|
msgid "post title"
|
||||||
msgstr "Název příspěvku"
|
msgstr "Název příspěvku"
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:42
|
||||||
msgid "title"
|
msgid "title"
|
||||||
msgstr "Název"
|
msgstr "Název"
|
||||||
|
|
||||||
#: engine/blog/models.py:69
|
#: engine/blog/models.py:89
|
||||||
msgid "is static page"
|
msgid "is static page"
|
||||||
msgstr "je statická stránka"
|
msgstr "je statická stránka"
|
||||||
|
|
||||||
#: engine/blog/models.py:70
|
#: engine/blog/models.py:91
|
||||||
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"je to příspěvek pro stránku se statickou adresou URL (např. `/help/"
|
"je to příspěvek pro stránku se statickou adresou URL (např. `/help/"
|
||||||
"delivery`)?"
|
"delivery`)?"
|
||||||
|
|
||||||
#: engine/blog/models.py:77
|
#: engine/blog/models.py:99
|
||||||
msgid "post"
|
msgid "post"
|
||||||
msgstr "Příspěvek"
|
msgstr "Příspěvek"
|
||||||
|
|
||||||
#: engine/blog/models.py:78
|
#: engine/blog/models.py:100
|
||||||
msgid "posts"
|
msgid "posts"
|
||||||
msgstr "Příspěvky"
|
msgstr "Příspěvky"
|
||||||
|
|
||||||
#: engine/blog/models.py:82
|
#: engine/blog/models.py:105
|
||||||
msgid "markdown files are not supported yet - use markdown content instead"
|
msgid "markdown files are not supported yet - use markdown content instead"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Soubory Markdown nejsou podporovány - místo toho použijte obsah Markdown!"
|
"Soubory Markdown nejsou podporovány - místo toho použijte obsah Markdown!"
|
||||||
|
|
||||||
#: engine/blog/models.py:84
|
#: engine/blog/models.py:110
|
||||||
msgid ""
|
msgid ""
|
||||||
"a markdown file or markdown content must be provided - mutually exclusive"
|
"a markdown file or markdown content must be provided - mutually exclusive"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"musí být poskytnut soubor markdown nebo obsah markdown - vzájemně se "
|
"musí být poskytnut soubor markdown nebo obsah markdown - vzájemně se "
|
||||||
"vylučují."
|
"vylučují."
|
||||||
|
|
||||||
#: engine/blog/models.py:116
|
#: engine/blog/models.py:144
|
||||||
msgid "internal tag identifier for the post tag"
|
msgid "internal tag identifier for the post tag"
|
||||||
msgstr "interní identifikátor tagu pro tag příspěvku"
|
msgstr "interní identifikátor tagu pro tag příspěvku"
|
||||||
|
|
||||||
#: engine/blog/models.py:117
|
#: engine/blog/models.py:145
|
||||||
msgid "tag name"
|
msgid "tag name"
|
||||||
msgstr "Název štítku"
|
msgstr "Název štítku"
|
||||||
|
|
||||||
#: engine/blog/models.py:121
|
#: engine/blog/models.py:149
|
||||||
msgid "user-friendly name for the post tag"
|
msgid "user-friendly name for the post tag"
|
||||||
msgstr "Uživatelsky přívětivý název pro značku příspěvku"
|
msgstr "Uživatelsky přívětivý název pro značku příspěvku"
|
||||||
|
|
||||||
#: engine/blog/models.py:122
|
#: engine/blog/models.py:150
|
||||||
msgid "tag display name"
|
msgid "tag display name"
|
||||||
msgstr "Zobrazení názvu štítku"
|
msgstr "Zobrazení názvu štítku"
|
||||||
|
|
||||||
#: engine/blog/models.py:130
|
#: engine/blog/models.py:158
|
||||||
msgid "post tag"
|
msgid "post tag"
|
||||||
msgstr "Označení příspěvku"
|
msgstr "Označení příspěvku"
|
||||||
|
|
||||||
#: engine/blog/models.py:131
|
#: engine/blog/models.py:159
|
||||||
msgid "post tags"
|
msgid "post tags"
|
||||||
msgstr "Štítky příspěvků"
|
msgstr "Štítky příspěvků"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2025.4\n"
|
"Project-Id-Version: EVIBES 2025.4\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-12-10 21:44+0300\n"
|
"POT-Creation-Date: 2025-12-18 17:19+0300\n"
|
||||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||||
|
|
@ -25,7 +25,7 @@ msgstr "Vis alle indlæg (skrivebeskyttet)"
|
||||||
msgid "retrieve a single post (read-only)"
|
msgid "retrieve a single post (read-only)"
|
||||||
msgstr "Hent et enkelt indlæg (skrivebeskyttet)"
|
msgstr "Hent et enkelt indlæg (skrivebeskyttet)"
|
||||||
|
|
||||||
#: engine/blog/models.py:13
|
#: engine/blog/models.py:20
|
||||||
msgid ""
|
msgid ""
|
||||||
"Represents a blog post model. The Post class defines the structure and "
|
"Represents a blog post model. The Post class defines the structure and "
|
||||||
"behavior of a blog post. It includes attributes for author, title, content, "
|
"behavior of a blog post. It includes attributes for author, title, content, "
|
||||||
|
|
@ -41,62 +41,62 @@ msgstr ""
|
||||||
"ikke begge dele på samme tid. Den understøtter også automatisk generering af "
|
"ikke begge dele på samme tid. Den understøtter også automatisk generering af "
|
||||||
"slugs baseret på titlen."
|
"slugs baseret på titlen."
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:41
|
||||||
msgid "post title"
|
msgid "post title"
|
||||||
msgstr "Indlæggets titel"
|
msgstr "Indlæggets titel"
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:42
|
||||||
msgid "title"
|
msgid "title"
|
||||||
msgstr "Titel"
|
msgstr "Titel"
|
||||||
|
|
||||||
#: engine/blog/models.py:69
|
#: engine/blog/models.py:89
|
||||||
msgid "is static page"
|
msgid "is static page"
|
||||||
msgstr "er en statisk side"
|
msgstr "er en statisk side"
|
||||||
|
|
||||||
#: engine/blog/models.py:70
|
#: engine/blog/models.py:91
|
||||||
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Er dette et indlæg til en side med statisk URL (f.eks. `/help/delivery`)?"
|
"Er dette et indlæg til en side med statisk URL (f.eks. `/help/delivery`)?"
|
||||||
|
|
||||||
#: engine/blog/models.py:77
|
#: engine/blog/models.py:99
|
||||||
msgid "post"
|
msgid "post"
|
||||||
msgstr "Indlæg"
|
msgstr "Indlæg"
|
||||||
|
|
||||||
#: engine/blog/models.py:78
|
#: engine/blog/models.py:100
|
||||||
msgid "posts"
|
msgid "posts"
|
||||||
msgstr "Indlæg"
|
msgstr "Indlæg"
|
||||||
|
|
||||||
#: engine/blog/models.py:82
|
#: engine/blog/models.py:105
|
||||||
msgid "markdown files are not supported yet - use markdown content instead"
|
msgid "markdown files are not supported yet - use markdown content instead"
|
||||||
msgstr "Markdown-filer understøttes ikke - brug markdown-indhold i stedet!"
|
msgstr "Markdown-filer understøttes ikke - brug markdown-indhold i stedet!"
|
||||||
|
|
||||||
#: engine/blog/models.py:84
|
#: engine/blog/models.py:110
|
||||||
msgid ""
|
msgid ""
|
||||||
"a markdown file or markdown content must be provided - mutually exclusive"
|
"a markdown file or markdown content must be provided - mutually exclusive"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"en markdown-fil eller markdown-indhold skal leveres - gensidigt udelukkende"
|
"en markdown-fil eller markdown-indhold skal leveres - gensidigt udelukkende"
|
||||||
|
|
||||||
#: engine/blog/models.py:116
|
#: engine/blog/models.py:144
|
||||||
msgid "internal tag identifier for the post tag"
|
msgid "internal tag identifier for the post tag"
|
||||||
msgstr "intern tag-identifikator for indlægs-tagget"
|
msgstr "intern tag-identifikator for indlægs-tagget"
|
||||||
|
|
||||||
#: engine/blog/models.py:117
|
#: engine/blog/models.py:145
|
||||||
msgid "tag name"
|
msgid "tag name"
|
||||||
msgstr "Tag-navn"
|
msgstr "Tag-navn"
|
||||||
|
|
||||||
#: engine/blog/models.py:121
|
#: engine/blog/models.py:149
|
||||||
msgid "user-friendly name for the post tag"
|
msgid "user-friendly name for the post tag"
|
||||||
msgstr "Brugervenligt navn til posttagget"
|
msgstr "Brugervenligt navn til posttagget"
|
||||||
|
|
||||||
#: engine/blog/models.py:122
|
#: engine/blog/models.py:150
|
||||||
msgid "tag display name"
|
msgid "tag display name"
|
||||||
msgstr "Navn på tag-visning"
|
msgstr "Navn på tag-visning"
|
||||||
|
|
||||||
#: engine/blog/models.py:130
|
#: engine/blog/models.py:158
|
||||||
msgid "post tag"
|
msgid "post tag"
|
||||||
msgstr "Tag til indlæg"
|
msgstr "Tag til indlæg"
|
||||||
|
|
||||||
#: engine/blog/models.py:131
|
#: engine/blog/models.py:159
|
||||||
msgid "post tags"
|
msgid "post tags"
|
||||||
msgstr "Tags til indlæg"
|
msgstr "Tags til indlæg"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2025.4\n"
|
"Project-Id-Version: EVIBES 2025.4\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-12-10 21:44+0300\n"
|
"POT-Creation-Date: 2025-12-18 17:19+0300\n"
|
||||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||||
|
|
@ -25,7 +25,7 @@ msgstr "Alle Beiträge auflisten (schreibgeschützt)"
|
||||||
msgid "retrieve a single post (read-only)"
|
msgid "retrieve a single post (read-only)"
|
||||||
msgstr "Einen einzelnen Beitrag abrufen (schreibgeschützt)"
|
msgstr "Einen einzelnen Beitrag abrufen (schreibgeschützt)"
|
||||||
|
|
||||||
#: engine/blog/models.py:13
|
#: engine/blog/models.py:20
|
||||||
msgid ""
|
msgid ""
|
||||||
"Represents a blog post model. The Post class defines the structure and "
|
"Represents a blog post model. The Post class defines the structure and "
|
||||||
"behavior of a blog post. It includes attributes for author, title, content, "
|
"behavior of a blog post. It includes attributes for author, title, content, "
|
||||||
|
|
@ -42,66 +42,66 @@ msgstr ""
|
||||||
"unterstützt auch die automatische Slug-Generierung auf der Grundlage des "
|
"unterstützt auch die automatische Slug-Generierung auf der Grundlage des "
|
||||||
"Titels."
|
"Titels."
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:41
|
||||||
msgid "post title"
|
msgid "post title"
|
||||||
msgstr "Titel des Beitrags"
|
msgstr "Titel des Beitrags"
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:42
|
||||||
msgid "title"
|
msgid "title"
|
||||||
msgstr "Titel"
|
msgstr "Titel"
|
||||||
|
|
||||||
#: engine/blog/models.py:69
|
#: engine/blog/models.py:89
|
||||||
msgid "is static page"
|
msgid "is static page"
|
||||||
msgstr "ist eine statische Seite"
|
msgstr "ist eine statische Seite"
|
||||||
|
|
||||||
#: engine/blog/models.py:70
|
#: engine/blog/models.py:91
|
||||||
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Ist dies ein Beitrag für eine Seite mit statischer URL (z. B. `/help/"
|
"Ist dies ein Beitrag für eine Seite mit statischer URL (z. B. `/help/"
|
||||||
"delivery`)?"
|
"delivery`)?"
|
||||||
|
|
||||||
#: engine/blog/models.py:77
|
#: engine/blog/models.py:99
|
||||||
msgid "post"
|
msgid "post"
|
||||||
msgstr "Beitrag"
|
msgstr "Beitrag"
|
||||||
|
|
||||||
#: engine/blog/models.py:78
|
#: engine/blog/models.py:100
|
||||||
msgid "posts"
|
msgid "posts"
|
||||||
msgstr "Beiträge"
|
msgstr "Beiträge"
|
||||||
|
|
||||||
#: engine/blog/models.py:82
|
#: engine/blog/models.py:105
|
||||||
msgid "markdown files are not supported yet - use markdown content instead"
|
msgid "markdown files are not supported yet - use markdown content instead"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Markdown-Dateien werden nicht unterstützt - verwenden Sie stattdessen "
|
"Markdown-Dateien werden nicht unterstützt - verwenden Sie stattdessen "
|
||||||
"Markdown-Inhalte!"
|
"Markdown-Inhalte!"
|
||||||
|
|
||||||
#: engine/blog/models.py:84
|
#: engine/blog/models.py:110
|
||||||
msgid ""
|
msgid ""
|
||||||
"a markdown file or markdown content must be provided - mutually exclusive"
|
"a markdown file or markdown content must be provided - mutually exclusive"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"eine Markdown-Datei oder ein Markdown-Inhalt muss bereitgestellt werden - "
|
"eine Markdown-Datei oder ein Markdown-Inhalt muss bereitgestellt werden - "
|
||||||
"beide schließen sich gegenseitig aus"
|
"beide schließen sich gegenseitig aus"
|
||||||
|
|
||||||
#: engine/blog/models.py:116
|
#: engine/blog/models.py:144
|
||||||
msgid "internal tag identifier for the post tag"
|
msgid "internal tag identifier for the post tag"
|
||||||
msgstr "interner Tag-Bezeichner für den Post-Tag"
|
msgstr "interner Tag-Bezeichner für den Post-Tag"
|
||||||
|
|
||||||
#: engine/blog/models.py:117
|
#: engine/blog/models.py:145
|
||||||
msgid "tag name"
|
msgid "tag name"
|
||||||
msgstr "Tag name"
|
msgstr "Tag name"
|
||||||
|
|
||||||
#: engine/blog/models.py:121
|
#: engine/blog/models.py:149
|
||||||
msgid "user-friendly name for the post tag"
|
msgid "user-friendly name for the post tag"
|
||||||
msgstr "Benutzerfreundlicher Name für das Post-Tag"
|
msgstr "Benutzerfreundlicher Name für das Post-Tag"
|
||||||
|
|
||||||
#: engine/blog/models.py:122
|
#: engine/blog/models.py:150
|
||||||
msgid "tag display name"
|
msgid "tag display name"
|
||||||
msgstr "Tag-Anzeigename"
|
msgstr "Tag-Anzeigename"
|
||||||
|
|
||||||
#: engine/blog/models.py:130
|
#: engine/blog/models.py:158
|
||||||
msgid "post tag"
|
msgid "post tag"
|
||||||
msgstr "Tag eintragen"
|
msgstr "Tag eintragen"
|
||||||
|
|
||||||
#: engine/blog/models.py:131
|
#: engine/blog/models.py:159
|
||||||
msgid "post tags"
|
msgid "post tags"
|
||||||
msgstr "Tags eintragen"
|
msgstr "Tags eintragen"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2025.4\n"
|
"Project-Id-Version: EVIBES 2025.4\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-12-10 21:44+0300\n"
|
"POT-Creation-Date: 2025-12-18 17:19+0300\n"
|
||||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||||
|
|
@ -29,7 +29,7 @@ msgstr "List all posts (read-only)"
|
||||||
msgid "retrieve a single post (read-only)"
|
msgid "retrieve a single post (read-only)"
|
||||||
msgstr "Retrieve a single post (read-only)"
|
msgstr "Retrieve a single post (read-only)"
|
||||||
|
|
||||||
#: engine/blog/models.py:13
|
#: engine/blog/models.py:20
|
||||||
msgid ""
|
msgid ""
|
||||||
"Represents a blog post model. The Post class defines the structure and "
|
"Represents a blog post model. The Post class defines the structure and "
|
||||||
"behavior of a blog post. It includes attributes for author, title, content, "
|
"behavior of a blog post. It includes attributes for author, title, content, "
|
||||||
|
|
@ -45,61 +45,61 @@ msgstr ""
|
||||||
"both simultaneously. It also supports automatic slug generation based on the "
|
"both simultaneously. It also supports automatic slug generation based on the "
|
||||||
"title."
|
"title."
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:41
|
||||||
msgid "post title"
|
msgid "post title"
|
||||||
msgstr "Post's title"
|
msgstr "Post's title"
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:42
|
||||||
msgid "title"
|
msgid "title"
|
||||||
msgstr "Title"
|
msgstr "Title"
|
||||||
|
|
||||||
#: engine/blog/models.py:69
|
#: engine/blog/models.py:89
|
||||||
msgid "is static page"
|
msgid "is static page"
|
||||||
msgstr "is static page"
|
msgstr "is static page"
|
||||||
|
|
||||||
#: engine/blog/models.py:70
|
#: engine/blog/models.py:91
|
||||||
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
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`)?"
|
msgstr "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
||||||
|
|
||||||
#: engine/blog/models.py:77
|
#: engine/blog/models.py:99
|
||||||
msgid "post"
|
msgid "post"
|
||||||
msgstr "Post"
|
msgstr "Post"
|
||||||
|
|
||||||
#: engine/blog/models.py:78
|
#: engine/blog/models.py:100
|
||||||
msgid "posts"
|
msgid "posts"
|
||||||
msgstr "Posts"
|
msgstr "Posts"
|
||||||
|
|
||||||
#: engine/blog/models.py:82
|
#: engine/blog/models.py:105
|
||||||
msgid "markdown files are not supported yet - use markdown content instead"
|
msgid "markdown files are not supported yet - use markdown content instead"
|
||||||
msgstr "Markdown files are not supported yer - use markdown content instead!"
|
msgstr "Markdown files are not supported yer - use markdown content instead!"
|
||||||
|
|
||||||
#: engine/blog/models.py:84
|
#: engine/blog/models.py:110
|
||||||
msgid ""
|
msgid ""
|
||||||
"a markdown file or markdown content must be provided - mutually exclusive"
|
"a markdown file or markdown content must be provided - mutually exclusive"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"a markdown file or markdown content must be provided - mutually exclusive"
|
"a markdown file or markdown content must be provided - mutually exclusive"
|
||||||
|
|
||||||
#: engine/blog/models.py:116
|
#: engine/blog/models.py:144
|
||||||
msgid "internal tag identifier for the post tag"
|
msgid "internal tag identifier for the post tag"
|
||||||
msgstr "internal tag identifier for the post tag"
|
msgstr "internal tag identifier for the post tag"
|
||||||
|
|
||||||
#: engine/blog/models.py:117
|
#: engine/blog/models.py:145
|
||||||
msgid "tag name"
|
msgid "tag name"
|
||||||
msgstr "Tag name"
|
msgstr "Tag name"
|
||||||
|
|
||||||
#: engine/blog/models.py:121
|
#: engine/blog/models.py:149
|
||||||
msgid "user-friendly name for the post tag"
|
msgid "user-friendly name for the post tag"
|
||||||
msgstr "User-friendly name for the post tag"
|
msgstr "User-friendly name for the post tag"
|
||||||
|
|
||||||
#: engine/blog/models.py:122
|
#: engine/blog/models.py:150
|
||||||
msgid "tag display name"
|
msgid "tag display name"
|
||||||
msgstr "Tag display name"
|
msgstr "Tag display name"
|
||||||
|
|
||||||
#: engine/blog/models.py:130
|
#: engine/blog/models.py:158
|
||||||
msgid "post tag"
|
msgid "post tag"
|
||||||
msgstr "Post tag"
|
msgstr "Post tag"
|
||||||
|
|
||||||
#: engine/blog/models.py:131
|
#: engine/blog/models.py:159
|
||||||
msgid "post tags"
|
msgid "post tags"
|
||||||
msgstr "Post tags"
|
msgstr "Post tags"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2025.4\n"
|
"Project-Id-Version: EVIBES 2025.4\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-12-10 21:44+0300\n"
|
"POT-Creation-Date: 2025-12-18 17:19+0300\n"
|
||||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||||
|
|
@ -25,7 +25,7 @@ msgstr "List all posts (read-only)"
|
||||||
msgid "retrieve a single post (read-only)"
|
msgid "retrieve a single post (read-only)"
|
||||||
msgstr "Retrieve a single post (read-only)"
|
msgstr "Retrieve a single post (read-only)"
|
||||||
|
|
||||||
#: engine/blog/models.py:13
|
#: engine/blog/models.py:20
|
||||||
msgid ""
|
msgid ""
|
||||||
"Represents a blog post model. The Post class defines the structure and "
|
"Represents a blog post model. The Post class defines the structure and "
|
||||||
"behavior of a blog post. It includes attributes for author, title, content, "
|
"behavior of a blog post. It includes attributes for author, title, content, "
|
||||||
|
|
@ -41,61 +41,61 @@ msgstr ""
|
||||||
"both simultaneously. It also supports automatic slug generation based on the "
|
"both simultaneously. It also supports automatic slug generation based on the "
|
||||||
"title."
|
"title."
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:41
|
||||||
msgid "post title"
|
msgid "post title"
|
||||||
msgstr "Post's title"
|
msgstr "Post's title"
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:42
|
||||||
msgid "title"
|
msgid "title"
|
||||||
msgstr "Title"
|
msgstr "Title"
|
||||||
|
|
||||||
#: engine/blog/models.py:69
|
#: engine/blog/models.py:89
|
||||||
msgid "is static page"
|
msgid "is static page"
|
||||||
msgstr "is static page"
|
msgstr "is static page"
|
||||||
|
|
||||||
#: engine/blog/models.py:70
|
#: engine/blog/models.py:91
|
||||||
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
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`)?"
|
msgstr "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
||||||
|
|
||||||
#: engine/blog/models.py:77
|
#: engine/blog/models.py:99
|
||||||
msgid "post"
|
msgid "post"
|
||||||
msgstr "Post"
|
msgstr "Post"
|
||||||
|
|
||||||
#: engine/blog/models.py:78
|
#: engine/blog/models.py:100
|
||||||
msgid "posts"
|
msgid "posts"
|
||||||
msgstr "Posts"
|
msgstr "Posts"
|
||||||
|
|
||||||
#: engine/blog/models.py:82
|
#: engine/blog/models.py:105
|
||||||
msgid "markdown files are not supported yet - use markdown content instead"
|
msgid "markdown files are not supported yet - use markdown content instead"
|
||||||
msgstr "Markdown files are not supported yer - use markdown content instead!"
|
msgstr "Markdown files are not supported yer - use markdown content instead!"
|
||||||
|
|
||||||
#: engine/blog/models.py:84
|
#: engine/blog/models.py:110
|
||||||
msgid ""
|
msgid ""
|
||||||
"a markdown file or markdown content must be provided - mutually exclusive"
|
"a markdown file or markdown content must be provided - mutually exclusive"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"a markdown file or markdown content must be provided - mutually exclusive"
|
"a markdown file or markdown content must be provided - mutually exclusive"
|
||||||
|
|
||||||
#: engine/blog/models.py:116
|
#: engine/blog/models.py:144
|
||||||
msgid "internal tag identifier for the post tag"
|
msgid "internal tag identifier for the post tag"
|
||||||
msgstr "internal tag identifier for the post tag"
|
msgstr "internal tag identifier for the post tag"
|
||||||
|
|
||||||
#: engine/blog/models.py:117
|
#: engine/blog/models.py:145
|
||||||
msgid "tag name"
|
msgid "tag name"
|
||||||
msgstr "Tag name"
|
msgstr "Tag name"
|
||||||
|
|
||||||
#: engine/blog/models.py:121
|
#: engine/blog/models.py:149
|
||||||
msgid "user-friendly name for the post tag"
|
msgid "user-friendly name for the post tag"
|
||||||
msgstr "User-friendly name for the post tag"
|
msgstr "User-friendly name for the post tag"
|
||||||
|
|
||||||
#: engine/blog/models.py:122
|
#: engine/blog/models.py:150
|
||||||
msgid "tag display name"
|
msgid "tag display name"
|
||||||
msgstr "Tag display name"
|
msgstr "Tag display name"
|
||||||
|
|
||||||
#: engine/blog/models.py:130
|
#: engine/blog/models.py:158
|
||||||
msgid "post tag"
|
msgid "post tag"
|
||||||
msgstr "Post tag"
|
msgstr "Post tag"
|
||||||
|
|
||||||
#: engine/blog/models.py:131
|
#: engine/blog/models.py:159
|
||||||
msgid "post tags"
|
msgid "post tags"
|
||||||
msgstr "Post tags"
|
msgstr "Post tags"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2025.4\n"
|
"Project-Id-Version: EVIBES 2025.4\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-12-10 21:44+0300\n"
|
"POT-Creation-Date: 2025-12-18 17:19+0300\n"
|
||||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||||
|
|
@ -25,7 +25,7 @@ msgstr "Listar todos los mensajes (sólo lectura)"
|
||||||
msgid "retrieve a single post (read-only)"
|
msgid "retrieve a single post (read-only)"
|
||||||
msgstr "Recuperar una única entrada (sólo lectura)"
|
msgstr "Recuperar una única entrada (sólo lectura)"
|
||||||
|
|
||||||
#: engine/blog/models.py:13
|
#: engine/blog/models.py:20
|
||||||
msgid ""
|
msgid ""
|
||||||
"Represents a blog post model. The Post class defines the structure and "
|
"Represents a blog post model. The Post class defines the structure and "
|
||||||
"behavior of a blog post. It includes attributes for author, title, content, "
|
"behavior of a blog post. It includes attributes for author, title, content, "
|
||||||
|
|
@ -41,65 +41,65 @@ msgstr ""
|
||||||
"adjunto, pero no ambos simultáneamente. También admite la generación "
|
"adjunto, pero no ambos simultáneamente. También admite la generación "
|
||||||
"automática de slug a partir del título."
|
"automática de slug a partir del título."
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:41
|
||||||
msgid "post title"
|
msgid "post title"
|
||||||
msgstr "Título del mensaje"
|
msgstr "Título del mensaje"
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:42
|
||||||
msgid "title"
|
msgid "title"
|
||||||
msgstr "Título"
|
msgstr "Título"
|
||||||
|
|
||||||
#: engine/blog/models.py:69
|
#: engine/blog/models.py:89
|
||||||
msgid "is static page"
|
msgid "is static page"
|
||||||
msgstr "es una página estática"
|
msgstr "es una página estática"
|
||||||
|
|
||||||
#: engine/blog/models.py:70
|
#: engine/blog/models.py:91
|
||||||
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"¿se trata de una entrada para una página con URL estática (por ejemplo, `/"
|
"¿se trata de una entrada para una página con URL estática (por ejemplo, `/"
|
||||||
"help/delivery`)?"
|
"help/delivery`)?"
|
||||||
|
|
||||||
#: engine/blog/models.py:77
|
#: engine/blog/models.py:99
|
||||||
msgid "post"
|
msgid "post"
|
||||||
msgstr "Publicar en"
|
msgstr "Publicar en"
|
||||||
|
|
||||||
#: engine/blog/models.py:78
|
#: engine/blog/models.py:100
|
||||||
msgid "posts"
|
msgid "posts"
|
||||||
msgstr "Puestos"
|
msgstr "Puestos"
|
||||||
|
|
||||||
#: engine/blog/models.py:82
|
#: engine/blog/models.py:105
|
||||||
msgid "markdown files are not supported yet - use markdown content instead"
|
msgid "markdown files are not supported yet - use markdown content instead"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"No se admiten archivos Markdown - ¡utiliza contenido Markdown en su lugar!"
|
"No se admiten archivos Markdown - ¡utiliza contenido Markdown en su lugar!"
|
||||||
|
|
||||||
#: engine/blog/models.py:84
|
#: engine/blog/models.py:110
|
||||||
msgid ""
|
msgid ""
|
||||||
"a markdown file or markdown content must be provided - mutually exclusive"
|
"a markdown file or markdown content must be provided - mutually exclusive"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"se debe proporcionar un archivo markdown o contenido markdown - mutuamente "
|
"se debe proporcionar un archivo markdown o contenido markdown - mutuamente "
|
||||||
"excluyentes"
|
"excluyentes"
|
||||||
|
|
||||||
#: engine/blog/models.py:116
|
#: engine/blog/models.py:144
|
||||||
msgid "internal tag identifier for the post tag"
|
msgid "internal tag identifier for the post tag"
|
||||||
msgstr "identificador interno de la etiqueta post"
|
msgstr "identificador interno de la etiqueta post"
|
||||||
|
|
||||||
#: engine/blog/models.py:117
|
#: engine/blog/models.py:145
|
||||||
msgid "tag name"
|
msgid "tag name"
|
||||||
msgstr "Nombre de la etiqueta"
|
msgstr "Nombre de la etiqueta"
|
||||||
|
|
||||||
#: engine/blog/models.py:121
|
#: engine/blog/models.py:149
|
||||||
msgid "user-friendly name for the post tag"
|
msgid "user-friendly name for the post tag"
|
||||||
msgstr "Nombre fácil de usar para la etiqueta de la entrada"
|
msgstr "Nombre fácil de usar para la etiqueta de la entrada"
|
||||||
|
|
||||||
#: engine/blog/models.py:122
|
#: engine/blog/models.py:150
|
||||||
msgid "tag display name"
|
msgid "tag display name"
|
||||||
msgstr "Nombre de la etiqueta"
|
msgstr "Nombre de la etiqueta"
|
||||||
|
|
||||||
#: engine/blog/models.py:130
|
#: engine/blog/models.py:158
|
||||||
msgid "post tag"
|
msgid "post tag"
|
||||||
msgstr "Etiqueta postal"
|
msgstr "Etiqueta postal"
|
||||||
|
|
||||||
#: engine/blog/models.py:131
|
#: engine/blog/models.py:159
|
||||||
msgid "post tags"
|
msgid "post tags"
|
||||||
msgstr "Etiquetas"
|
msgstr "Etiquetas"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-12-10 21:44+0300\n"
|
"POT-Creation-Date: 2025-12-18 17:19+0300\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
|
@ -28,7 +28,7 @@ msgstr ""
|
||||||
msgid "retrieve a single post (read-only)"
|
msgid "retrieve a single post (read-only)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:13
|
#: engine/blog/models.py:20
|
||||||
msgid ""
|
msgid ""
|
||||||
"Represents a blog post model. The Post class defines the structure and "
|
"Represents a blog post model. The Post class defines the structure and "
|
||||||
"behavior of a blog post. It includes attributes for author, title, content, "
|
"behavior of a blog post. It includes attributes for author, title, content, "
|
||||||
|
|
@ -38,60 +38,60 @@ msgid ""
|
||||||
"title."
|
"title."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:41
|
||||||
msgid "post title"
|
msgid "post title"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:42
|
||||||
msgid "title"
|
msgid "title"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:69
|
#: engine/blog/models.py:89
|
||||||
msgid "is static page"
|
msgid "is static page"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:70
|
#: engine/blog/models.py:91
|
||||||
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:77
|
#: engine/blog/models.py:99
|
||||||
msgid "post"
|
msgid "post"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:78
|
#: engine/blog/models.py:100
|
||||||
msgid "posts"
|
msgid "posts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:82
|
#: engine/blog/models.py:105
|
||||||
msgid "markdown files are not supported yet - use markdown content instead"
|
msgid "markdown files are not supported yet - use markdown content instead"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:84
|
#: engine/blog/models.py:110
|
||||||
msgid ""
|
msgid ""
|
||||||
"a markdown file or markdown content must be provided - mutually exclusive"
|
"a markdown file or markdown content must be provided - mutually exclusive"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:116
|
#: engine/blog/models.py:144
|
||||||
msgid "internal tag identifier for the post tag"
|
msgid "internal tag identifier for the post tag"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:117
|
#: engine/blog/models.py:145
|
||||||
msgid "tag name"
|
msgid "tag name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:121
|
#: engine/blog/models.py:149
|
||||||
msgid "user-friendly name for the post tag"
|
msgid "user-friendly name for the post tag"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:122
|
#: engine/blog/models.py:150
|
||||||
msgid "tag display name"
|
msgid "tag display name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:130
|
#: engine/blog/models.py:158
|
||||||
msgid "post tag"
|
msgid "post tag"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:131
|
#: engine/blog/models.py:159
|
||||||
msgid "post tags"
|
msgid "post tags"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2025.4\n"
|
"Project-Id-Version: EVIBES 2025.4\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-12-10 21:44+0300\n"
|
"POT-Creation-Date: 2025-12-18 17:19+0300\n"
|
||||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||||
|
|
@ -25,7 +25,7 @@ msgstr "Liste de tous les messages (en lecture seule)"
|
||||||
msgid "retrieve a single post (read-only)"
|
msgid "retrieve a single post (read-only)"
|
||||||
msgstr "Récupérer un seul message (en lecture seule)"
|
msgstr "Récupérer un seul message (en lecture seule)"
|
||||||
|
|
||||||
#: engine/blog/models.py:13
|
#: engine/blog/models.py:20
|
||||||
msgid ""
|
msgid ""
|
||||||
"Represents a blog post model. The Post class defines the structure and "
|
"Represents a blog post model. The Post class defines the structure and "
|
||||||
"behavior of a blog post. It includes attributes for author, title, content, "
|
"behavior of a blog post. It includes attributes for author, title, content, "
|
||||||
|
|
@ -42,66 +42,66 @@ msgstr ""
|
||||||
"simultanément. Elle prend également en charge la génération automatique "
|
"simultanément. Elle prend également en charge la génération automatique "
|
||||||
"d'une balise en fonction du titre."
|
"d'une balise en fonction du titre."
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:41
|
||||||
msgid "post title"
|
msgid "post title"
|
||||||
msgstr "Titre du message"
|
msgstr "Titre du message"
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:42
|
||||||
msgid "title"
|
msgid "title"
|
||||||
msgstr "Titre"
|
msgstr "Titre"
|
||||||
|
|
||||||
#: engine/blog/models.py:69
|
#: engine/blog/models.py:89
|
||||||
msgid "is static page"
|
msgid "is static page"
|
||||||
msgstr "est une page statique"
|
msgstr "est une page statique"
|
||||||
|
|
||||||
#: engine/blog/models.py:70
|
#: engine/blog/models.py:91
|
||||||
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"s'agit-il d'un message pour une page dont l'URL est statique (par exemple `/"
|
"s'agit-il d'un message pour une page dont l'URL est statique (par exemple `/"
|
||||||
"help/delivery`) ?"
|
"help/delivery`) ?"
|
||||||
|
|
||||||
#: engine/blog/models.py:77
|
#: engine/blog/models.py:99
|
||||||
msgid "post"
|
msgid "post"
|
||||||
msgstr "Poste"
|
msgstr "Poste"
|
||||||
|
|
||||||
#: engine/blog/models.py:78
|
#: engine/blog/models.py:100
|
||||||
msgid "posts"
|
msgid "posts"
|
||||||
msgstr "Postes"
|
msgstr "Postes"
|
||||||
|
|
||||||
#: engine/blog/models.py:82
|
#: engine/blog/models.py:105
|
||||||
msgid "markdown files are not supported yet - use markdown content instead"
|
msgid "markdown files are not supported yet - use markdown content instead"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Les fichiers Markdown ne sont pas pris en charge - utilisez plutôt du "
|
"Les fichiers Markdown ne sont pas pris en charge - utilisez plutôt du "
|
||||||
"contenu Markdown !"
|
"contenu Markdown !"
|
||||||
|
|
||||||
#: engine/blog/models.py:84
|
#: engine/blog/models.py:110
|
||||||
msgid ""
|
msgid ""
|
||||||
"a markdown file or markdown content must be provided - mutually exclusive"
|
"a markdown file or markdown content must be provided - mutually exclusive"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"un fichier markdown ou un contenu markdown doit être fourni - ils s'excluent "
|
"un fichier markdown ou un contenu markdown doit être fourni - ils s'excluent "
|
||||||
"mutuellement"
|
"mutuellement"
|
||||||
|
|
||||||
#: engine/blog/models.py:116
|
#: engine/blog/models.py:144
|
||||||
msgid "internal tag identifier for the post tag"
|
msgid "internal tag identifier for the post tag"
|
||||||
msgstr "identifiant interne de la balise post"
|
msgstr "identifiant interne de la balise post"
|
||||||
|
|
||||||
#: engine/blog/models.py:117
|
#: engine/blog/models.py:145
|
||||||
msgid "tag name"
|
msgid "tag name"
|
||||||
msgstr "Nom du jour"
|
msgstr "Nom du jour"
|
||||||
|
|
||||||
#: engine/blog/models.py:121
|
#: engine/blog/models.py:149
|
||||||
msgid "user-friendly name for the post tag"
|
msgid "user-friendly name for the post tag"
|
||||||
msgstr "Nom convivial pour la balise post"
|
msgstr "Nom convivial pour la balise post"
|
||||||
|
|
||||||
#: engine/blog/models.py:122
|
#: engine/blog/models.py:150
|
||||||
msgid "tag display name"
|
msgid "tag display name"
|
||||||
msgstr "Nom d'affichage de l'étiquette"
|
msgstr "Nom d'affichage de l'étiquette"
|
||||||
|
|
||||||
#: engine/blog/models.py:130
|
#: engine/blog/models.py:158
|
||||||
msgid "post tag"
|
msgid "post tag"
|
||||||
msgstr "Tag de poste"
|
msgstr "Tag de poste"
|
||||||
|
|
||||||
#: engine/blog/models.py:131
|
#: engine/blog/models.py:159
|
||||||
msgid "post tags"
|
msgid "post tags"
|
||||||
msgstr "Tags de la poste"
|
msgstr "Tags de la poste"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2025.4\n"
|
"Project-Id-Version: EVIBES 2025.4\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-12-10 21:44+0300\n"
|
"POT-Creation-Date: 2025-12-18 17:19+0300\n"
|
||||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||||
|
|
@ -25,7 +25,7 @@ msgstr "הצג את כל ההודעות (לקריאה בלבד)"
|
||||||
msgid "retrieve a single post (read-only)"
|
msgid "retrieve a single post (read-only)"
|
||||||
msgstr "איתור פוסט בודד (לקריאה בלבד)"
|
msgstr "איתור פוסט בודד (לקריאה בלבד)"
|
||||||
|
|
||||||
#: engine/blog/models.py:13
|
#: engine/blog/models.py:20
|
||||||
msgid ""
|
msgid ""
|
||||||
"Represents a blog post model. The Post class defines the structure and "
|
"Represents a blog post model. The Post class defines the structure and "
|
||||||
"behavior of a blog post. It includes attributes for author, title, content, "
|
"behavior of a blog post. It includes attributes for author, title, content, "
|
||||||
|
|
@ -39,60 +39,60 @@ msgstr ""
|
||||||
"ותגיות נלוות. המחלקה אוכפת אילוצים כגון דרישה לתוכן או לקובץ מצורף, אך לא "
|
"ותגיות נלוות. המחלקה אוכפת אילוצים כגון דרישה לתוכן או לקובץ מצורף, אך לא "
|
||||||
"לשניהם בו-זמנית. היא תומכת גם ביצירה אוטומטית של slug על סמך הכותרת."
|
"לשניהם בו-זמנית. היא תומכת גם ביצירה אוטומטית של slug על סמך הכותרת."
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:41
|
||||||
msgid "post title"
|
msgid "post title"
|
||||||
msgstr "כותרת הפוסט"
|
msgstr "כותרת הפוסט"
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:42
|
||||||
msgid "title"
|
msgid "title"
|
||||||
msgstr "כותרת"
|
msgstr "כותרת"
|
||||||
|
|
||||||
#: engine/blog/models.py:69
|
#: engine/blog/models.py:89
|
||||||
msgid "is static page"
|
msgid "is static page"
|
||||||
msgstr "הוא דף סטטי"
|
msgstr "הוא דף סטטי"
|
||||||
|
|
||||||
#: engine/blog/models.py:70
|
#: engine/blog/models.py:91
|
||||||
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
||||||
msgstr "האם זו הודעה לדף עם כתובת URL סטטית (למשל `/help/delivery`)?"
|
msgstr "האם זו הודעה לדף עם כתובת URL סטטית (למשל `/help/delivery`)?"
|
||||||
|
|
||||||
#: engine/blog/models.py:77
|
#: engine/blog/models.py:99
|
||||||
msgid "post"
|
msgid "post"
|
||||||
msgstr "פוסט"
|
msgstr "פוסט"
|
||||||
|
|
||||||
#: engine/blog/models.py:78
|
#: engine/blog/models.py:100
|
||||||
msgid "posts"
|
msgid "posts"
|
||||||
msgstr "פוסטים"
|
msgstr "פוסטים"
|
||||||
|
|
||||||
#: engine/blog/models.py:82
|
#: engine/blog/models.py:105
|
||||||
msgid "markdown files are not supported yet - use markdown content instead"
|
msgid "markdown files are not supported yet - use markdown content instead"
|
||||||
msgstr "קובצי Markdown אינם נתמכים עדיין - השתמש בתוכן Markdown במקום!"
|
msgstr "קובצי Markdown אינם נתמכים עדיין - השתמש בתוכן Markdown במקום!"
|
||||||
|
|
||||||
#: engine/blog/models.py:84
|
#: engine/blog/models.py:110
|
||||||
msgid ""
|
msgid ""
|
||||||
"a markdown file or markdown content must be provided - mutually exclusive"
|
"a markdown file or markdown content must be provided - mutually exclusive"
|
||||||
msgstr "יש לספק קובץ markdown או תוכן markdown - באופן בלעדי"
|
msgstr "יש לספק קובץ markdown או תוכן markdown - באופן בלעדי"
|
||||||
|
|
||||||
#: engine/blog/models.py:116
|
#: engine/blog/models.py:144
|
||||||
msgid "internal tag identifier for the post tag"
|
msgid "internal tag identifier for the post tag"
|
||||||
msgstr "מזהה תגיות פנימי עבור תגיות הפוסט"
|
msgstr "מזהה תגיות פנימי עבור תגיות הפוסט"
|
||||||
|
|
||||||
#: engine/blog/models.py:117
|
#: engine/blog/models.py:145
|
||||||
msgid "tag name"
|
msgid "tag name"
|
||||||
msgstr "שם היום"
|
msgstr "שם היום"
|
||||||
|
|
||||||
#: engine/blog/models.py:121
|
#: engine/blog/models.py:149
|
||||||
msgid "user-friendly name for the post tag"
|
msgid "user-friendly name for the post tag"
|
||||||
msgstr "שם ידידותי למשתמש עבור תגיות הפוסט"
|
msgstr "שם ידידותי למשתמש עבור תגיות הפוסט"
|
||||||
|
|
||||||
#: engine/blog/models.py:122
|
#: engine/blog/models.py:150
|
||||||
msgid "tag display name"
|
msgid "tag display name"
|
||||||
msgstr "שם תצוגה של התג"
|
msgstr "שם תצוגה של התג"
|
||||||
|
|
||||||
#: engine/blog/models.py:130
|
#: engine/blog/models.py:158
|
||||||
msgid "post tag"
|
msgid "post tag"
|
||||||
msgstr "תגית פוסט"
|
msgstr "תגית פוסט"
|
||||||
|
|
||||||
#: engine/blog/models.py:131
|
#: engine/blog/models.py:159
|
||||||
msgid "post tags"
|
msgid "post tags"
|
||||||
msgstr "תגיות פוסט"
|
msgstr "תגיות פוסט"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2025.4\n"
|
"Project-Id-Version: EVIBES 2025.4\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-12-10 21:44+0300\n"
|
"POT-Creation-Date: 2025-12-18 17:19+0300\n"
|
||||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||||
|
|
@ -28,7 +28,7 @@ msgstr ""
|
||||||
msgid "retrieve a single post (read-only)"
|
msgid "retrieve a single post (read-only)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:13
|
#: engine/blog/models.py:20
|
||||||
msgid ""
|
msgid ""
|
||||||
"Represents a blog post model. The Post class defines the structure and "
|
"Represents a blog post model. The Post class defines the structure and "
|
||||||
"behavior of a blog post. It includes attributes for author, title, content, "
|
"behavior of a blog post. It includes attributes for author, title, content, "
|
||||||
|
|
@ -38,60 +38,60 @@ msgid ""
|
||||||
"title."
|
"title."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:41
|
||||||
msgid "post title"
|
msgid "post title"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:42
|
||||||
msgid "title"
|
msgid "title"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:69
|
#: engine/blog/models.py:89
|
||||||
msgid "is static page"
|
msgid "is static page"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:70
|
#: engine/blog/models.py:91
|
||||||
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:77
|
#: engine/blog/models.py:99
|
||||||
msgid "post"
|
msgid "post"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:78
|
#: engine/blog/models.py:100
|
||||||
msgid "posts"
|
msgid "posts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:82
|
#: engine/blog/models.py:105
|
||||||
msgid "markdown files are not supported yet - use markdown content instead"
|
msgid "markdown files are not supported yet - use markdown content instead"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:84
|
#: engine/blog/models.py:110
|
||||||
msgid ""
|
msgid ""
|
||||||
"a markdown file or markdown content must be provided - mutually exclusive"
|
"a markdown file or markdown content must be provided - mutually exclusive"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:116
|
#: engine/blog/models.py:144
|
||||||
msgid "internal tag identifier for the post tag"
|
msgid "internal tag identifier for the post tag"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:117
|
#: engine/blog/models.py:145
|
||||||
msgid "tag name"
|
msgid "tag name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:121
|
#: engine/blog/models.py:149
|
||||||
msgid "user-friendly name for the post tag"
|
msgid "user-friendly name for the post tag"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:122
|
#: engine/blog/models.py:150
|
||||||
msgid "tag display name"
|
msgid "tag display name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:130
|
#: engine/blog/models.py:158
|
||||||
msgid "post tag"
|
msgid "post tag"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:131
|
#: engine/blog/models.py:159
|
||||||
msgid "post tags"
|
msgid "post tags"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-12-10 21:44+0300\n"
|
"POT-Creation-Date: 2025-12-18 17:19+0300\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
|
@ -28,7 +28,7 @@ msgstr ""
|
||||||
msgid "retrieve a single post (read-only)"
|
msgid "retrieve a single post (read-only)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:13
|
#: engine/blog/models.py:20
|
||||||
msgid ""
|
msgid ""
|
||||||
"Represents a blog post model. The Post class defines the structure and "
|
"Represents a blog post model. The Post class defines the structure and "
|
||||||
"behavior of a blog post. It includes attributes for author, title, content, "
|
"behavior of a blog post. It includes attributes for author, title, content, "
|
||||||
|
|
@ -38,60 +38,60 @@ msgid ""
|
||||||
"title."
|
"title."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:41
|
||||||
msgid "post title"
|
msgid "post title"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:42
|
||||||
msgid "title"
|
msgid "title"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:69
|
#: engine/blog/models.py:89
|
||||||
msgid "is static page"
|
msgid "is static page"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:70
|
#: engine/blog/models.py:91
|
||||||
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:77
|
#: engine/blog/models.py:99
|
||||||
msgid "post"
|
msgid "post"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:78
|
#: engine/blog/models.py:100
|
||||||
msgid "posts"
|
msgid "posts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:82
|
#: engine/blog/models.py:105
|
||||||
msgid "markdown files are not supported yet - use markdown content instead"
|
msgid "markdown files are not supported yet - use markdown content instead"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:84
|
#: engine/blog/models.py:110
|
||||||
msgid ""
|
msgid ""
|
||||||
"a markdown file or markdown content must be provided - mutually exclusive"
|
"a markdown file or markdown content must be provided - mutually exclusive"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:116
|
#: engine/blog/models.py:144
|
||||||
msgid "internal tag identifier for the post tag"
|
msgid "internal tag identifier for the post tag"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:117
|
#: engine/blog/models.py:145
|
||||||
msgid "tag name"
|
msgid "tag name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:121
|
#: engine/blog/models.py:149
|
||||||
msgid "user-friendly name for the post tag"
|
msgid "user-friendly name for the post tag"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:122
|
#: engine/blog/models.py:150
|
||||||
msgid "tag display name"
|
msgid "tag display name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:130
|
#: engine/blog/models.py:158
|
||||||
msgid "post tag"
|
msgid "post tag"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:131
|
#: engine/blog/models.py:159
|
||||||
msgid "post tags"
|
msgid "post tags"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2025.4\n"
|
"Project-Id-Version: EVIBES 2025.4\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-12-10 21:44+0300\n"
|
"POT-Creation-Date: 2025-12-18 17:19+0300\n"
|
||||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||||
|
|
@ -25,7 +25,7 @@ msgstr "Daftar semua postingan (hanya-baca)"
|
||||||
msgid "retrieve a single post (read-only)"
|
msgid "retrieve a single post (read-only)"
|
||||||
msgstr "Mengambil satu postingan (hanya-baca)"
|
msgstr "Mengambil satu postingan (hanya-baca)"
|
||||||
|
|
||||||
#: engine/blog/models.py:13
|
#: engine/blog/models.py:20
|
||||||
msgid ""
|
msgid ""
|
||||||
"Represents a blog post model. The Post class defines the structure and "
|
"Represents a blog post model. The Post class defines the structure and "
|
||||||
"behavior of a blog post. It includes attributes for author, title, content, "
|
"behavior of a blog post. It includes attributes for author, title, content, "
|
||||||
|
|
@ -41,66 +41,66 @@ msgstr ""
|
||||||
"secara bersamaan. Kelas ini juga mendukung pembuatan slug otomatis "
|
"secara bersamaan. Kelas ini juga mendukung pembuatan slug otomatis "
|
||||||
"berdasarkan judul."
|
"berdasarkan judul."
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:41
|
||||||
msgid "post title"
|
msgid "post title"
|
||||||
msgstr "Judul postingan"
|
msgstr "Judul postingan"
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:42
|
||||||
msgid "title"
|
msgid "title"
|
||||||
msgstr "Judul"
|
msgstr "Judul"
|
||||||
|
|
||||||
#: engine/blog/models.py:69
|
#: engine/blog/models.py:89
|
||||||
msgid "is static page"
|
msgid "is static page"
|
||||||
msgstr "adalah halaman statis"
|
msgstr "adalah halaman statis"
|
||||||
|
|
||||||
#: engine/blog/models.py:70
|
#: engine/blog/models.py:91
|
||||||
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"apakah ini adalah postingan untuk halaman dengan URL statis (misalnya `/help/"
|
"apakah ini adalah postingan untuk halaman dengan URL statis (misalnya `/help/"
|
||||||
"pengiriman`)?"
|
"pengiriman`)?"
|
||||||
|
|
||||||
#: engine/blog/models.py:77
|
#: engine/blog/models.py:99
|
||||||
msgid "post"
|
msgid "post"
|
||||||
msgstr "Pos"
|
msgstr "Pos"
|
||||||
|
|
||||||
#: engine/blog/models.py:78
|
#: engine/blog/models.py:100
|
||||||
msgid "posts"
|
msgid "posts"
|
||||||
msgstr "Posting"
|
msgstr "Posting"
|
||||||
|
|
||||||
#: engine/blog/models.py:82
|
#: engine/blog/models.py:105
|
||||||
msgid "markdown files are not supported yet - use markdown content instead"
|
msgid "markdown files are not supported yet - use markdown content instead"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"File penurunan harga tidak didukung - gunakan konten penurunan harga sebagai "
|
"File penurunan harga tidak didukung - gunakan konten penurunan harga sebagai "
|
||||||
"gantinya!"
|
"gantinya!"
|
||||||
|
|
||||||
#: engine/blog/models.py:84
|
#: engine/blog/models.py:110
|
||||||
msgid ""
|
msgid ""
|
||||||
"a markdown file or markdown content must be provided - mutually exclusive"
|
"a markdown file or markdown content must be provided - mutually exclusive"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"file penurunan harga atau konten penurunan harga harus disediakan - tidak "
|
"file penurunan harga atau konten penurunan harga harus disediakan - tidak "
|
||||||
"boleh ada yang sama"
|
"boleh ada yang sama"
|
||||||
|
|
||||||
#: engine/blog/models.py:116
|
#: engine/blog/models.py:144
|
||||||
msgid "internal tag identifier for the post tag"
|
msgid "internal tag identifier for the post tag"
|
||||||
msgstr "pengidentifikasi tag internal untuk tag pos"
|
msgstr "pengidentifikasi tag internal untuk tag pos"
|
||||||
|
|
||||||
#: engine/blog/models.py:117
|
#: engine/blog/models.py:145
|
||||||
msgid "tag name"
|
msgid "tag name"
|
||||||
msgstr "Nama tag"
|
msgstr "Nama tag"
|
||||||
|
|
||||||
#: engine/blog/models.py:121
|
#: engine/blog/models.py:149
|
||||||
msgid "user-friendly name for the post tag"
|
msgid "user-friendly name for the post tag"
|
||||||
msgstr "Nama yang mudah digunakan untuk tag postingan"
|
msgstr "Nama yang mudah digunakan untuk tag postingan"
|
||||||
|
|
||||||
#: engine/blog/models.py:122
|
#: engine/blog/models.py:150
|
||||||
msgid "tag display name"
|
msgid "tag display name"
|
||||||
msgstr "Nama tampilan tag"
|
msgstr "Nama tampilan tag"
|
||||||
|
|
||||||
#: engine/blog/models.py:130
|
#: engine/blog/models.py:158
|
||||||
msgid "post tag"
|
msgid "post tag"
|
||||||
msgstr "Tag pos"
|
msgstr "Tag pos"
|
||||||
|
|
||||||
#: engine/blog/models.py:131
|
#: engine/blog/models.py:159
|
||||||
msgid "post tags"
|
msgid "post tags"
|
||||||
msgstr "Tag pos"
|
msgstr "Tag pos"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2025.4\n"
|
"Project-Id-Version: EVIBES 2025.4\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-12-10 21:44+0300\n"
|
"POT-Creation-Date: 2025-12-18 17:19+0300\n"
|
||||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||||
|
|
@ -25,7 +25,7 @@ msgstr "Elenco di tutti i messaggi (solo lettura)"
|
||||||
msgid "retrieve a single post (read-only)"
|
msgid "retrieve a single post (read-only)"
|
||||||
msgstr "Recuperare un singolo post (solo lettura)"
|
msgstr "Recuperare un singolo post (solo lettura)"
|
||||||
|
|
||||||
#: engine/blog/models.py:13
|
#: engine/blog/models.py:20
|
||||||
msgid ""
|
msgid ""
|
||||||
"Represents a blog post model. The Post class defines the structure and "
|
"Represents a blog post model. The Post class defines the structure and "
|
||||||
"behavior of a blog post. It includes attributes for author, title, content, "
|
"behavior of a blog post. It includes attributes for author, title, content, "
|
||||||
|
|
@ -41,64 +41,64 @@ msgstr ""
|
||||||
"di un file allegato, ma non di entrambi contemporaneamente. Supporta anche "
|
"di un file allegato, ma non di entrambi contemporaneamente. Supporta anche "
|
||||||
"la generazione automatica dello slug in base al titolo."
|
"la generazione automatica dello slug in base al titolo."
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:41
|
||||||
msgid "post title"
|
msgid "post title"
|
||||||
msgstr "Titolo del post"
|
msgstr "Titolo del post"
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:42
|
||||||
msgid "title"
|
msgid "title"
|
||||||
msgstr "Titolo"
|
msgstr "Titolo"
|
||||||
|
|
||||||
#: engine/blog/models.py:69
|
#: engine/blog/models.py:89
|
||||||
msgid "is static page"
|
msgid "is static page"
|
||||||
msgstr "è una pagina statica"
|
msgstr "è una pagina statica"
|
||||||
|
|
||||||
#: engine/blog/models.py:70
|
#: engine/blog/models.py:91
|
||||||
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Si tratta di un post per una pagina con URL statico (ad esempio `/help/"
|
"Si tratta di un post per una pagina con URL statico (ad esempio `/help/"
|
||||||
"delivery`)?"
|
"delivery`)?"
|
||||||
|
|
||||||
#: engine/blog/models.py:77
|
#: engine/blog/models.py:99
|
||||||
msgid "post"
|
msgid "post"
|
||||||
msgstr "Posta"
|
msgstr "Posta"
|
||||||
|
|
||||||
#: engine/blog/models.py:78
|
#: engine/blog/models.py:100
|
||||||
msgid "posts"
|
msgid "posts"
|
||||||
msgstr "Messaggi"
|
msgstr "Messaggi"
|
||||||
|
|
||||||
#: engine/blog/models.py:82
|
#: engine/blog/models.py:105
|
||||||
msgid "markdown files are not supported yet - use markdown content instead"
|
msgid "markdown files are not supported yet - use markdown content instead"
|
||||||
msgstr "I file Markdown non sono supportati: usa invece i contenuti Markdown!"
|
msgstr "I file Markdown non sono supportati: usa invece i contenuti Markdown!"
|
||||||
|
|
||||||
#: engine/blog/models.py:84
|
#: engine/blog/models.py:110
|
||||||
msgid ""
|
msgid ""
|
||||||
"a markdown file or markdown content must be provided - mutually exclusive"
|
"a markdown file or markdown content must be provided - mutually exclusive"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"deve essere fornito un file markdown o un contenuto markdown - si escludono "
|
"deve essere fornito un file markdown o un contenuto markdown - si escludono "
|
||||||
"a vicenda"
|
"a vicenda"
|
||||||
|
|
||||||
#: engine/blog/models.py:116
|
#: engine/blog/models.py:144
|
||||||
msgid "internal tag identifier for the post tag"
|
msgid "internal tag identifier for the post tag"
|
||||||
msgstr "identificatore interno del tag post"
|
msgstr "identificatore interno del tag post"
|
||||||
|
|
||||||
#: engine/blog/models.py:117
|
#: engine/blog/models.py:145
|
||||||
msgid "tag name"
|
msgid "tag name"
|
||||||
msgstr "Nome del tag"
|
msgstr "Nome del tag"
|
||||||
|
|
||||||
#: engine/blog/models.py:121
|
#: engine/blog/models.py:149
|
||||||
msgid "user-friendly name for the post tag"
|
msgid "user-friendly name for the post tag"
|
||||||
msgstr "Nome intuitivo per il tag del post"
|
msgstr "Nome intuitivo per il tag del post"
|
||||||
|
|
||||||
#: engine/blog/models.py:122
|
#: engine/blog/models.py:150
|
||||||
msgid "tag display name"
|
msgid "tag display name"
|
||||||
msgstr "Nome del tag"
|
msgstr "Nome del tag"
|
||||||
|
|
||||||
#: engine/blog/models.py:130
|
#: engine/blog/models.py:158
|
||||||
msgid "post tag"
|
msgid "post tag"
|
||||||
msgstr "Post tag"
|
msgstr "Post tag"
|
||||||
|
|
||||||
#: engine/blog/models.py:131
|
#: engine/blog/models.py:159
|
||||||
msgid "post tags"
|
msgid "post tags"
|
||||||
msgstr "Tag dei post"
|
msgstr "Tag dei post"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2025.4\n"
|
"Project-Id-Version: EVIBES 2025.4\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-12-10 21:44+0300\n"
|
"POT-Creation-Date: 2025-12-18 17:19+0300\n"
|
||||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||||
|
|
@ -25,7 +25,7 @@ msgstr "すべての投稿をリストアップする(読み取り専用)"
|
||||||
msgid "retrieve a single post (read-only)"
|
msgid "retrieve a single post (read-only)"
|
||||||
msgstr "単一の投稿を取得する(読み取り専用)"
|
msgstr "単一の投稿を取得する(読み取り専用)"
|
||||||
|
|
||||||
#: engine/blog/models.py:13
|
#: engine/blog/models.py:20
|
||||||
msgid ""
|
msgid ""
|
||||||
"Represents a blog post model. The Post class defines the structure and "
|
"Represents a blog post model. The Post class defines the structure and "
|
||||||
"behavior of a blog post. It includes attributes for author, title, content, "
|
"behavior of a blog post. It includes attributes for author, title, content, "
|
||||||
|
|
@ -40,64 +40,64 @@ msgstr ""
|
||||||
"時に要求しないといった制約を強制します。また、タイトルに基づくスラッグの自動"
|
"時に要求しないといった制約を強制します。また、タイトルに基づくスラッグの自動"
|
||||||
"生成もサポートしています。"
|
"生成もサポートしています。"
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:41
|
||||||
msgid "post title"
|
msgid "post title"
|
||||||
msgstr "投稿タイトル"
|
msgstr "投稿タイトル"
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:42
|
||||||
msgid "title"
|
msgid "title"
|
||||||
msgstr "タイトル"
|
msgstr "タイトル"
|
||||||
|
|
||||||
#: engine/blog/models.py:69
|
#: engine/blog/models.py:89
|
||||||
msgid "is static page"
|
msgid "is static page"
|
||||||
msgstr "は静的ページ"
|
msgstr "は静的ページ"
|
||||||
|
|
||||||
#: engine/blog/models.py:70
|
#: engine/blog/models.py:91
|
||||||
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
||||||
msgstr "これは静的URLのページ(例:`/help/delivery`)への投稿ですか?"
|
msgstr "これは静的URLのページ(例:`/help/delivery`)への投稿ですか?"
|
||||||
|
|
||||||
#: engine/blog/models.py:77
|
#: engine/blog/models.py:99
|
||||||
msgid "post"
|
msgid "post"
|
||||||
msgstr "ポスト"
|
msgstr "ポスト"
|
||||||
|
|
||||||
#: engine/blog/models.py:78
|
#: engine/blog/models.py:100
|
||||||
msgid "posts"
|
msgid "posts"
|
||||||
msgstr "投稿"
|
msgstr "投稿"
|
||||||
|
|
||||||
#: engine/blog/models.py:82
|
#: engine/blog/models.py:105
|
||||||
msgid "markdown files are not supported yet - use markdown content instead"
|
msgid "markdown files are not supported yet - use markdown content instead"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"マークダウン・ファイルはサポートされていません - 代わりにマークダウン・コンテ"
|
"マークダウン・ファイルはサポートされていません - 代わりにマークダウン・コンテ"
|
||||||
"ンツを使用してください!"
|
"ンツを使用してください!"
|
||||||
|
|
||||||
#: engine/blog/models.py:84
|
#: engine/blog/models.py:110
|
||||||
msgid ""
|
msgid ""
|
||||||
"a markdown file or markdown content must be provided - mutually exclusive"
|
"a markdown file or markdown content must be provided - mutually exclusive"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"マークダウン・ファイルまたはマークダウン・コンテンツを提供しなければならな"
|
"マークダウン・ファイルまたはマークダウン・コンテンツを提供しなければならな"
|
||||||
"い。"
|
"い。"
|
||||||
|
|
||||||
#: engine/blog/models.py:116
|
#: engine/blog/models.py:144
|
||||||
msgid "internal tag identifier for the post tag"
|
msgid "internal tag identifier for the post tag"
|
||||||
msgstr "投稿タグの内部タグ識別子"
|
msgstr "投稿タグの内部タグ識別子"
|
||||||
|
|
||||||
#: engine/blog/models.py:117
|
#: engine/blog/models.py:145
|
||||||
msgid "tag name"
|
msgid "tag name"
|
||||||
msgstr "タグ名"
|
msgstr "タグ名"
|
||||||
|
|
||||||
#: engine/blog/models.py:121
|
#: engine/blog/models.py:149
|
||||||
msgid "user-friendly name for the post tag"
|
msgid "user-friendly name for the post tag"
|
||||||
msgstr "投稿タグのユーザーフレンドリーな名前"
|
msgstr "投稿タグのユーザーフレンドリーな名前"
|
||||||
|
|
||||||
#: engine/blog/models.py:122
|
#: engine/blog/models.py:150
|
||||||
msgid "tag display name"
|
msgid "tag display name"
|
||||||
msgstr "タグ表示名"
|
msgstr "タグ表示名"
|
||||||
|
|
||||||
#: engine/blog/models.py:130
|
#: engine/blog/models.py:158
|
||||||
msgid "post tag"
|
msgid "post tag"
|
||||||
msgstr "投稿タグ"
|
msgstr "投稿タグ"
|
||||||
|
|
||||||
#: engine/blog/models.py:131
|
#: engine/blog/models.py:159
|
||||||
msgid "post tags"
|
msgid "post tags"
|
||||||
msgstr "投稿タグ"
|
msgstr "投稿タグ"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2025.4\n"
|
"Project-Id-Version: EVIBES 2025.4\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-12-10 21:44+0300\n"
|
"POT-Creation-Date: 2025-12-18 17:19+0300\n"
|
||||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||||
|
|
@ -28,7 +28,7 @@ msgstr ""
|
||||||
msgid "retrieve a single post (read-only)"
|
msgid "retrieve a single post (read-only)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:13
|
#: engine/blog/models.py:20
|
||||||
msgid ""
|
msgid ""
|
||||||
"Represents a blog post model. The Post class defines the structure and "
|
"Represents a blog post model. The Post class defines the structure and "
|
||||||
"behavior of a blog post. It includes attributes for author, title, content, "
|
"behavior of a blog post. It includes attributes for author, title, content, "
|
||||||
|
|
@ -38,60 +38,60 @@ msgid ""
|
||||||
"title."
|
"title."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:41
|
||||||
msgid "post title"
|
msgid "post title"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:42
|
||||||
msgid "title"
|
msgid "title"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:69
|
#: engine/blog/models.py:89
|
||||||
msgid "is static page"
|
msgid "is static page"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:70
|
#: engine/blog/models.py:91
|
||||||
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:77
|
#: engine/blog/models.py:99
|
||||||
msgid "post"
|
msgid "post"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:78
|
#: engine/blog/models.py:100
|
||||||
msgid "posts"
|
msgid "posts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:82
|
#: engine/blog/models.py:105
|
||||||
msgid "markdown files are not supported yet - use markdown content instead"
|
msgid "markdown files are not supported yet - use markdown content instead"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:84
|
#: engine/blog/models.py:110
|
||||||
msgid ""
|
msgid ""
|
||||||
"a markdown file or markdown content must be provided - mutually exclusive"
|
"a markdown file or markdown content must be provided - mutually exclusive"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:116
|
#: engine/blog/models.py:144
|
||||||
msgid "internal tag identifier for the post tag"
|
msgid "internal tag identifier for the post tag"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:117
|
#: engine/blog/models.py:145
|
||||||
msgid "tag name"
|
msgid "tag name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:121
|
#: engine/blog/models.py:149
|
||||||
msgid "user-friendly name for the post tag"
|
msgid "user-friendly name for the post tag"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:122
|
#: engine/blog/models.py:150
|
||||||
msgid "tag display name"
|
msgid "tag display name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:130
|
#: engine/blog/models.py:158
|
||||||
msgid "post tag"
|
msgid "post tag"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: engine/blog/models.py:131
|
#: engine/blog/models.py:159
|
||||||
msgid "post tags"
|
msgid "post tags"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2025.4\n"
|
"Project-Id-Version: EVIBES 2025.4\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-12-10 21:44+0300\n"
|
"POT-Creation-Date: 2025-12-18 17:19+0300\n"
|
||||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||||
|
|
@ -25,7 +25,7 @@ msgstr "모든 게시물 나열(읽기 전용)"
|
||||||
msgid "retrieve a single post (read-only)"
|
msgid "retrieve a single post (read-only)"
|
||||||
msgstr "단일 게시물 검색(읽기 전용)"
|
msgstr "단일 게시물 검색(읽기 전용)"
|
||||||
|
|
||||||
#: engine/blog/models.py:13
|
#: engine/blog/models.py:20
|
||||||
msgid ""
|
msgid ""
|
||||||
"Represents a blog post model. The Post class defines the structure and "
|
"Represents a blog post model. The Post class defines the structure and "
|
||||||
"behavior of a blog post. It includes attributes for author, title, content, "
|
"behavior of a blog post. It includes attributes for author, title, content, "
|
||||||
|
|
@ -40,61 +40,61 @@ msgstr ""
|
||||||
"둘 다 동시에 요구하지 않는 등의 제약 조건을 적용합니다. 또한 제목에 따른 자"
|
"둘 다 동시에 요구하지 않는 등의 제약 조건을 적용합니다. 또한 제목에 따른 자"
|
||||||
"동 슬러그 생성도 지원합니다."
|
"동 슬러그 생성도 지원합니다."
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:41
|
||||||
msgid "post title"
|
msgid "post title"
|
||||||
msgstr "게시물 제목"
|
msgstr "게시물 제목"
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:42
|
||||||
msgid "title"
|
msgid "title"
|
||||||
msgstr "제목"
|
msgstr "제목"
|
||||||
|
|
||||||
#: engine/blog/models.py:69
|
#: engine/blog/models.py:89
|
||||||
msgid "is static page"
|
msgid "is static page"
|
||||||
msgstr "는 정적 페이지입니다."
|
msgstr "는 정적 페이지입니다."
|
||||||
|
|
||||||
#: engine/blog/models.py:70
|
#: engine/blog/models.py:91
|
||||||
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
||||||
msgstr "정적 URL(예: `/help/delivery`)이 있는 페이지의 게시물인가요?"
|
msgstr "정적 URL(예: `/help/delivery`)이 있는 페이지의 게시물인가요?"
|
||||||
|
|
||||||
#: engine/blog/models.py:77
|
#: engine/blog/models.py:99
|
||||||
msgid "post"
|
msgid "post"
|
||||||
msgstr "게시물"
|
msgstr "게시물"
|
||||||
|
|
||||||
#: engine/blog/models.py:78
|
#: engine/blog/models.py:100
|
||||||
msgid "posts"
|
msgid "posts"
|
||||||
msgstr "게시물"
|
msgstr "게시물"
|
||||||
|
|
||||||
#: engine/blog/models.py:82
|
#: engine/blog/models.py:105
|
||||||
msgid "markdown files are not supported yet - use markdown content instead"
|
msgid "markdown files are not supported yet - use markdown content instead"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"마크다운 파일은 지원되지 않습니다 예 - 대신 마크다운 콘텐츠를 사용하세요!"
|
"마크다운 파일은 지원되지 않습니다 예 - 대신 마크다운 콘텐츠를 사용하세요!"
|
||||||
|
|
||||||
#: engine/blog/models.py:84
|
#: engine/blog/models.py:110
|
||||||
msgid ""
|
msgid ""
|
||||||
"a markdown file or markdown content must be provided - mutually exclusive"
|
"a markdown file or markdown content must be provided - mutually exclusive"
|
||||||
msgstr "마크다운 파일 또는 마크다운 콘텐츠가 제공되어야 합니다."
|
msgstr "마크다운 파일 또는 마크다운 콘텐츠가 제공되어야 합니다."
|
||||||
|
|
||||||
#: engine/blog/models.py:116
|
#: engine/blog/models.py:144
|
||||||
msgid "internal tag identifier for the post tag"
|
msgid "internal tag identifier for the post tag"
|
||||||
msgstr "게시물 태그의 내부 태그 식별자"
|
msgstr "게시물 태그의 내부 태그 식별자"
|
||||||
|
|
||||||
#: engine/blog/models.py:117
|
#: engine/blog/models.py:145
|
||||||
msgid "tag name"
|
msgid "tag name"
|
||||||
msgstr "태그 이름"
|
msgstr "태그 이름"
|
||||||
|
|
||||||
#: engine/blog/models.py:121
|
#: engine/blog/models.py:149
|
||||||
msgid "user-friendly name for the post tag"
|
msgid "user-friendly name for the post tag"
|
||||||
msgstr "게시물 태그의 사용자 친화적인 이름"
|
msgstr "게시물 태그의 사용자 친화적인 이름"
|
||||||
|
|
||||||
#: engine/blog/models.py:122
|
#: engine/blog/models.py:150
|
||||||
msgid "tag display name"
|
msgid "tag display name"
|
||||||
msgstr "태그 표시 이름"
|
msgstr "태그 표시 이름"
|
||||||
|
|
||||||
#: engine/blog/models.py:130
|
#: engine/blog/models.py:158
|
||||||
msgid "post tag"
|
msgid "post tag"
|
||||||
msgstr "게시물 태그"
|
msgstr "게시물 태그"
|
||||||
|
|
||||||
#: engine/blog/models.py:131
|
#: engine/blog/models.py:159
|
||||||
msgid "post tags"
|
msgid "post tags"
|
||||||
msgstr "게시물 태그"
|
msgstr "게시물 태그"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2025.4\n"
|
"Project-Id-Version: EVIBES 2025.4\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-12-10 21:44+0300\n"
|
"POT-Creation-Date: 2025-12-18 17:19+0300\n"
|
||||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||||
|
|
@ -25,7 +25,7 @@ msgstr "Alle berichten weergeven (alleen-lezen)"
|
||||||
msgid "retrieve a single post (read-only)"
|
msgid "retrieve a single post (read-only)"
|
||||||
msgstr "Een enkel bericht ophalen (alleen-lezen)"
|
msgstr "Een enkel bericht ophalen (alleen-lezen)"
|
||||||
|
|
||||||
#: engine/blog/models.py:13
|
#: engine/blog/models.py:20
|
||||||
msgid ""
|
msgid ""
|
||||||
"Represents a blog post model. The Post class defines the structure and "
|
"Represents a blog post model. The Post class defines the structure and "
|
||||||
"behavior of a blog post. It includes attributes for author, title, content, "
|
"behavior of a blog post. It includes attributes for author, title, content, "
|
||||||
|
|
@ -41,66 +41,66 @@ msgstr ""
|
||||||
"maar niet beide tegelijk. Het ondersteunt ook het automatisch genereren van "
|
"maar niet beide tegelijk. Het ondersteunt ook het automatisch genereren van "
|
||||||
"slugs op basis van de titel."
|
"slugs op basis van de titel."
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:41
|
||||||
msgid "post title"
|
msgid "post title"
|
||||||
msgstr "Titel van de post"
|
msgstr "Titel van de post"
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:42
|
||||||
msgid "title"
|
msgid "title"
|
||||||
msgstr "Titel"
|
msgstr "Titel"
|
||||||
|
|
||||||
#: engine/blog/models.py:69
|
#: engine/blog/models.py:89
|
||||||
msgid "is static page"
|
msgid "is static page"
|
||||||
msgstr "is statische pagina"
|
msgstr "is statische pagina"
|
||||||
|
|
||||||
#: engine/blog/models.py:70
|
#: engine/blog/models.py:91
|
||||||
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Is dit een bericht voor een pagina met een statische URL (bijv. `/help/"
|
"Is dit een bericht voor een pagina met een statische URL (bijv. `/help/"
|
||||||
"delivery`)?"
|
"delivery`)?"
|
||||||
|
|
||||||
#: engine/blog/models.py:77
|
#: engine/blog/models.py:99
|
||||||
msgid "post"
|
msgid "post"
|
||||||
msgstr "Plaats"
|
msgstr "Plaats"
|
||||||
|
|
||||||
#: engine/blog/models.py:78
|
#: engine/blog/models.py:100
|
||||||
msgid "posts"
|
msgid "posts"
|
||||||
msgstr "Berichten"
|
msgstr "Berichten"
|
||||||
|
|
||||||
#: engine/blog/models.py:82
|
#: engine/blog/models.py:105
|
||||||
msgid "markdown files are not supported yet - use markdown content instead"
|
msgid "markdown files are not supported yet - use markdown content instead"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Markdown-bestanden worden niet ondersteund - gebruik in plaats daarvan "
|
"Markdown-bestanden worden niet ondersteund - gebruik in plaats daarvan "
|
||||||
"markdown-inhoud!"
|
"markdown-inhoud!"
|
||||||
|
|
||||||
#: engine/blog/models.py:84
|
#: engine/blog/models.py:110
|
||||||
msgid ""
|
msgid ""
|
||||||
"a markdown file or markdown content must be provided - mutually exclusive"
|
"a markdown file or markdown content must be provided - mutually exclusive"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"er moet een markdown-bestand of markdown-inhoud worden geleverd - wederzijds "
|
"er moet een markdown-bestand of markdown-inhoud worden geleverd - wederzijds "
|
||||||
"exclusief"
|
"exclusief"
|
||||||
|
|
||||||
#: engine/blog/models.py:116
|
#: engine/blog/models.py:144
|
||||||
msgid "internal tag identifier for the post tag"
|
msgid "internal tag identifier for the post tag"
|
||||||
msgstr "interne tagidentifier voor de posttag"
|
msgstr "interne tagidentifier voor de posttag"
|
||||||
|
|
||||||
#: engine/blog/models.py:117
|
#: engine/blog/models.py:145
|
||||||
msgid "tag name"
|
msgid "tag name"
|
||||||
msgstr "Tag naam"
|
msgstr "Tag naam"
|
||||||
|
|
||||||
#: engine/blog/models.py:121
|
#: engine/blog/models.py:149
|
||||||
msgid "user-friendly name for the post tag"
|
msgid "user-friendly name for the post tag"
|
||||||
msgstr "Gebruiksvriendelijke naam voor de posttag"
|
msgstr "Gebruiksvriendelijke naam voor de posttag"
|
||||||
|
|
||||||
#: engine/blog/models.py:122
|
#: engine/blog/models.py:150
|
||||||
msgid "tag display name"
|
msgid "tag display name"
|
||||||
msgstr "Tag weergavenaam"
|
msgstr "Tag weergavenaam"
|
||||||
|
|
||||||
#: engine/blog/models.py:130
|
#: engine/blog/models.py:158
|
||||||
msgid "post tag"
|
msgid "post tag"
|
||||||
msgstr "Post tag"
|
msgstr "Post tag"
|
||||||
|
|
||||||
#: engine/blog/models.py:131
|
#: engine/blog/models.py:159
|
||||||
msgid "post tags"
|
msgid "post tags"
|
||||||
msgstr "Post tags"
|
msgstr "Post tags"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2025.4\n"
|
"Project-Id-Version: EVIBES 2025.4\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-12-10 21:44+0300\n"
|
"POT-Creation-Date: 2025-12-18 17:19+0300\n"
|
||||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||||
|
|
@ -25,7 +25,7 @@ msgstr "Liste over alle innlegg (skrivebeskyttet)"
|
||||||
msgid "retrieve a single post (read-only)"
|
msgid "retrieve a single post (read-only)"
|
||||||
msgstr "Hent et enkelt innlegg (skrivebeskyttet)"
|
msgstr "Hent et enkelt innlegg (skrivebeskyttet)"
|
||||||
|
|
||||||
#: engine/blog/models.py:13
|
#: engine/blog/models.py:20
|
||||||
msgid ""
|
msgid ""
|
||||||
"Represents a blog post model. The Post class defines the structure and "
|
"Represents a blog post model. The Post class defines the structure and "
|
||||||
"behavior of a blog post. It includes attributes for author, title, content, "
|
"behavior of a blog post. It includes attributes for author, title, content, "
|
||||||
|
|
@ -41,62 +41,62 @@ msgstr ""
|
||||||
"må være med, men ikke begge deler samtidig. Den støtter også automatisk "
|
"må være med, men ikke begge deler samtidig. Den støtter også automatisk "
|
||||||
"generering av slug basert på tittelen."
|
"generering av slug basert på tittelen."
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:41
|
||||||
msgid "post title"
|
msgid "post title"
|
||||||
msgstr "Innleggets tittel"
|
msgstr "Innleggets tittel"
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:42
|
||||||
msgid "title"
|
msgid "title"
|
||||||
msgstr "Title"
|
msgstr "Title"
|
||||||
|
|
||||||
#: engine/blog/models.py:69
|
#: engine/blog/models.py:89
|
||||||
msgid "is static page"
|
msgid "is static page"
|
||||||
msgstr "er statisk side"
|
msgstr "er statisk side"
|
||||||
|
|
||||||
#: engine/blog/models.py:70
|
#: engine/blog/models.py:91
|
||||||
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"er dette et innlegg for en side med statisk URL (f.eks. `/help/delivery`)?"
|
"er dette et innlegg for en side med statisk URL (f.eks. `/help/delivery`)?"
|
||||||
|
|
||||||
#: engine/blog/models.py:77
|
#: engine/blog/models.py:99
|
||||||
msgid "post"
|
msgid "post"
|
||||||
msgstr "Post"
|
msgstr "Post"
|
||||||
|
|
||||||
#: engine/blog/models.py:78
|
#: engine/blog/models.py:100
|
||||||
msgid "posts"
|
msgid "posts"
|
||||||
msgstr "Innlegg"
|
msgstr "Innlegg"
|
||||||
|
|
||||||
#: engine/blog/models.py:82
|
#: engine/blog/models.py:105
|
||||||
msgid "markdown files are not supported yet - use markdown content instead"
|
msgid "markdown files are not supported yet - use markdown content instead"
|
||||||
msgstr "Markdown-filer støttes ikke - bruk markdown-innhold i stedet!"
|
msgstr "Markdown-filer støttes ikke - bruk markdown-innhold i stedet!"
|
||||||
|
|
||||||
#: engine/blog/models.py:84
|
#: engine/blog/models.py:110
|
||||||
msgid ""
|
msgid ""
|
||||||
"a markdown file or markdown content must be provided - mutually exclusive"
|
"a markdown file or markdown content must be provided - mutually exclusive"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"en markdown-fil eller markdown-innhold må oppgis - gjensidig utelukkende"
|
"en markdown-fil eller markdown-innhold må oppgis - gjensidig utelukkende"
|
||||||
|
|
||||||
#: engine/blog/models.py:116
|
#: engine/blog/models.py:144
|
||||||
msgid "internal tag identifier for the post tag"
|
msgid "internal tag identifier for the post tag"
|
||||||
msgstr "intern tagg-identifikator for innleggstaggen"
|
msgstr "intern tagg-identifikator for innleggstaggen"
|
||||||
|
|
||||||
#: engine/blog/models.py:117
|
#: engine/blog/models.py:145
|
||||||
msgid "tag name"
|
msgid "tag name"
|
||||||
msgstr "Tagg navn"
|
msgstr "Tagg navn"
|
||||||
|
|
||||||
#: engine/blog/models.py:121
|
#: engine/blog/models.py:149
|
||||||
msgid "user-friendly name for the post tag"
|
msgid "user-friendly name for the post tag"
|
||||||
msgstr "Brukervennlig navn for innleggstaggen"
|
msgstr "Brukervennlig navn for innleggstaggen"
|
||||||
|
|
||||||
#: engine/blog/models.py:122
|
#: engine/blog/models.py:150
|
||||||
msgid "tag display name"
|
msgid "tag display name"
|
||||||
msgstr "Visningsnavn for taggen"
|
msgstr "Visningsnavn for taggen"
|
||||||
|
|
||||||
#: engine/blog/models.py:130
|
#: engine/blog/models.py:158
|
||||||
msgid "post tag"
|
msgid "post tag"
|
||||||
msgstr "Post tag"
|
msgstr "Post tag"
|
||||||
|
|
||||||
#: engine/blog/models.py:131
|
#: engine/blog/models.py:159
|
||||||
msgid "post tags"
|
msgid "post tags"
|
||||||
msgstr "Tagger for innlegg"
|
msgstr "Tagger for innlegg"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2025.4\n"
|
"Project-Id-Version: EVIBES 2025.4\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-12-10 21:44+0300\n"
|
"POT-Creation-Date: 2025-12-18 17:19+0300\n"
|
||||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||||
|
|
@ -25,7 +25,7 @@ msgstr "Lista wszystkich postów (tylko do odczytu)"
|
||||||
msgid "retrieve a single post (read-only)"
|
msgid "retrieve a single post (read-only)"
|
||||||
msgstr "Pobieranie pojedynczego wpisu (tylko do odczytu)"
|
msgstr "Pobieranie pojedynczego wpisu (tylko do odczytu)"
|
||||||
|
|
||||||
#: engine/blog/models.py:13
|
#: engine/blog/models.py:20
|
||||||
msgid ""
|
msgid ""
|
||||||
"Represents a blog post model. The Post class defines the structure and "
|
"Represents a blog post model. The Post class defines the structure and "
|
||||||
"behavior of a blog post. It includes attributes for author, title, content, "
|
"behavior of a blog post. It includes attributes for author, title, content, "
|
||||||
|
|
@ -41,64 +41,64 @@ msgstr ""
|
||||||
"nie obu jednocześnie. Obsługuje również automatyczne generowanie slug na "
|
"nie obu jednocześnie. Obsługuje również automatyczne generowanie slug na "
|
||||||
"podstawie tytułu."
|
"podstawie tytułu."
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:41
|
||||||
msgid "post title"
|
msgid "post title"
|
||||||
msgstr "Tytuł postu"
|
msgstr "Tytuł postu"
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:42
|
||||||
msgid "title"
|
msgid "title"
|
||||||
msgstr "Tytuł"
|
msgstr "Tytuł"
|
||||||
|
|
||||||
#: engine/blog/models.py:69
|
#: engine/blog/models.py:89
|
||||||
msgid "is static page"
|
msgid "is static page"
|
||||||
msgstr "jest stroną statyczną"
|
msgstr "jest stroną statyczną"
|
||||||
|
|
||||||
#: engine/blog/models.py:70
|
#: engine/blog/models.py:91
|
||||||
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Czy jest to post dla strony ze statycznym adresem URL (np. `/help/delivery`)?"
|
"Czy jest to post dla strony ze statycznym adresem URL (np. `/help/delivery`)?"
|
||||||
|
|
||||||
#: engine/blog/models.py:77
|
#: engine/blog/models.py:99
|
||||||
msgid "post"
|
msgid "post"
|
||||||
msgstr "Post"
|
msgstr "Post"
|
||||||
|
|
||||||
#: engine/blog/models.py:78
|
#: engine/blog/models.py:100
|
||||||
msgid "posts"
|
msgid "posts"
|
||||||
msgstr "Posty"
|
msgstr "Posty"
|
||||||
|
|
||||||
#: engine/blog/models.py:82
|
#: engine/blog/models.py:105
|
||||||
msgid "markdown files are not supported yet - use markdown content instead"
|
msgid "markdown files are not supported yet - use markdown content instead"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Pliki Markdown nie są obsługiwane - zamiast tego użyj zawartości Markdown!"
|
"Pliki Markdown nie są obsługiwane - zamiast tego użyj zawartości Markdown!"
|
||||||
|
|
||||||
#: engine/blog/models.py:84
|
#: engine/blog/models.py:110
|
||||||
msgid ""
|
msgid ""
|
||||||
"a markdown file or markdown content must be provided - mutually exclusive"
|
"a markdown file or markdown content must be provided - mutually exclusive"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"należy dostarczyć plik markdown lub zawartość markdown - wzajemnie się "
|
"należy dostarczyć plik markdown lub zawartość markdown - wzajemnie się "
|
||||||
"wykluczające"
|
"wykluczające"
|
||||||
|
|
||||||
#: engine/blog/models.py:116
|
#: engine/blog/models.py:144
|
||||||
msgid "internal tag identifier for the post tag"
|
msgid "internal tag identifier for the post tag"
|
||||||
msgstr "wewnętrzny identyfikator tagu posta"
|
msgstr "wewnętrzny identyfikator tagu posta"
|
||||||
|
|
||||||
#: engine/blog/models.py:117
|
#: engine/blog/models.py:145
|
||||||
msgid "tag name"
|
msgid "tag name"
|
||||||
msgstr "Nazwa tagu"
|
msgstr "Nazwa tagu"
|
||||||
|
|
||||||
#: engine/blog/models.py:121
|
#: engine/blog/models.py:149
|
||||||
msgid "user-friendly name for the post tag"
|
msgid "user-friendly name for the post tag"
|
||||||
msgstr "Przyjazna dla użytkownika nazwa tagu posta"
|
msgstr "Przyjazna dla użytkownika nazwa tagu posta"
|
||||||
|
|
||||||
#: engine/blog/models.py:122
|
#: engine/blog/models.py:150
|
||||||
msgid "tag display name"
|
msgid "tag display name"
|
||||||
msgstr "Wyświetlana nazwa znacznika"
|
msgstr "Wyświetlana nazwa znacznika"
|
||||||
|
|
||||||
#: engine/blog/models.py:130
|
#: engine/blog/models.py:158
|
||||||
msgid "post tag"
|
msgid "post tag"
|
||||||
msgstr "Tag posta"
|
msgstr "Tag posta"
|
||||||
|
|
||||||
#: engine/blog/models.py:131
|
#: engine/blog/models.py:159
|
||||||
msgid "post tags"
|
msgid "post tags"
|
||||||
msgstr "Tagi postów"
|
msgstr "Tagi postów"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2025.4\n"
|
"Project-Id-Version: EVIBES 2025.4\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-12-10 21:44+0300\n"
|
"POT-Creation-Date: 2025-12-18 17:19+0300\n"
|
||||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||||
|
|
@ -25,7 +25,7 @@ msgstr "Listar todas as postagens (somente leitura)"
|
||||||
msgid "retrieve a single post (read-only)"
|
msgid "retrieve a single post (read-only)"
|
||||||
msgstr "Recuperar um único post (somente leitura)"
|
msgstr "Recuperar um único post (somente leitura)"
|
||||||
|
|
||||||
#: engine/blog/models.py:13
|
#: engine/blog/models.py:20
|
||||||
msgid ""
|
msgid ""
|
||||||
"Represents a blog post model. The Post class defines the structure and "
|
"Represents a blog post model. The Post class defines the structure and "
|
||||||
"behavior of a blog post. It includes attributes for author, title, content, "
|
"behavior of a blog post. It includes attributes for author, title, content, "
|
||||||
|
|
@ -41,64 +41,64 @@ msgstr ""
|
||||||
"simultaneamente. Ela também oferece suporte à geração automática de slug com "
|
"simultaneamente. Ela também oferece suporte à geração automática de slug com "
|
||||||
"base no título."
|
"base no título."
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:41
|
||||||
msgid "post title"
|
msgid "post title"
|
||||||
msgstr "Título da postagem"
|
msgstr "Título da postagem"
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:42
|
||||||
msgid "title"
|
msgid "title"
|
||||||
msgstr "Título"
|
msgstr "Título"
|
||||||
|
|
||||||
#: engine/blog/models.py:69
|
#: engine/blog/models.py:89
|
||||||
msgid "is static page"
|
msgid "is static page"
|
||||||
msgstr "é uma página estática"
|
msgstr "é uma página estática"
|
||||||
|
|
||||||
#: engine/blog/models.py:70
|
#: engine/blog/models.py:91
|
||||||
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Essa é uma postagem para uma página com URL estático (por exemplo, `/help/"
|
"Essa é uma postagem para uma página com URL estático (por exemplo, `/help/"
|
||||||
"delivery`)?"
|
"delivery`)?"
|
||||||
|
|
||||||
#: engine/blog/models.py:77
|
#: engine/blog/models.py:99
|
||||||
msgid "post"
|
msgid "post"
|
||||||
msgstr "Postar"
|
msgstr "Postar"
|
||||||
|
|
||||||
#: engine/blog/models.py:78
|
#: engine/blog/models.py:100
|
||||||
msgid "posts"
|
msgid "posts"
|
||||||
msgstr "Publicações"
|
msgstr "Publicações"
|
||||||
|
|
||||||
#: engine/blog/models.py:82
|
#: engine/blog/models.py:105
|
||||||
msgid "markdown files are not supported yet - use markdown content instead"
|
msgid "markdown files are not supported yet - use markdown content instead"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Os arquivos markdown não são suportados - use conteúdo markdown em vez disso!"
|
"Os arquivos markdown não são suportados - use conteúdo markdown em vez disso!"
|
||||||
|
|
||||||
#: engine/blog/models.py:84
|
#: engine/blog/models.py:110
|
||||||
msgid ""
|
msgid ""
|
||||||
"a markdown file or markdown content must be provided - mutually exclusive"
|
"a markdown file or markdown content must be provided - mutually exclusive"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"um arquivo ou conteúdo de markdown deve ser fornecido - mutuamente exclusivo"
|
"um arquivo ou conteúdo de markdown deve ser fornecido - mutuamente exclusivo"
|
||||||
|
|
||||||
#: engine/blog/models.py:116
|
#: engine/blog/models.py:144
|
||||||
msgid "internal tag identifier for the post tag"
|
msgid "internal tag identifier for the post tag"
|
||||||
msgstr "identificador de tag interno para a tag de postagem"
|
msgstr "identificador de tag interno para a tag de postagem"
|
||||||
|
|
||||||
#: engine/blog/models.py:117
|
#: engine/blog/models.py:145
|
||||||
msgid "tag name"
|
msgid "tag name"
|
||||||
msgstr "Nome da etiqueta"
|
msgstr "Nome da etiqueta"
|
||||||
|
|
||||||
#: engine/blog/models.py:121
|
#: engine/blog/models.py:149
|
||||||
msgid "user-friendly name for the post tag"
|
msgid "user-friendly name for the post tag"
|
||||||
msgstr "Nome de fácil utilização para a tag de postagem"
|
msgstr "Nome de fácil utilização para a tag de postagem"
|
||||||
|
|
||||||
#: engine/blog/models.py:122
|
#: engine/blog/models.py:150
|
||||||
msgid "tag display name"
|
msgid "tag display name"
|
||||||
msgstr "Nome de exibição da tag"
|
msgstr "Nome de exibição da tag"
|
||||||
|
|
||||||
#: engine/blog/models.py:130
|
#: engine/blog/models.py:158
|
||||||
msgid "post tag"
|
msgid "post tag"
|
||||||
msgstr "Etiqueta de postagem"
|
msgstr "Etiqueta de postagem"
|
||||||
|
|
||||||
#: engine/blog/models.py:131
|
#: engine/blog/models.py:159
|
||||||
msgid "post tags"
|
msgid "post tags"
|
||||||
msgstr "Tags de postagem"
|
msgstr "Tags de postagem"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2025.4\n"
|
"Project-Id-Version: EVIBES 2025.4\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-12-10 21:44+0300\n"
|
"POT-Creation-Date: 2025-12-18 17:19+0300\n"
|
||||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||||
|
|
@ -25,7 +25,7 @@ msgstr "Listează toate postările (doar pentru citire)"
|
||||||
msgid "retrieve a single post (read-only)"
|
msgid "retrieve a single post (read-only)"
|
||||||
msgstr "Recuperează o singură postare (read-only)"
|
msgstr "Recuperează o singură postare (read-only)"
|
||||||
|
|
||||||
#: engine/blog/models.py:13
|
#: engine/blog/models.py:20
|
||||||
msgid ""
|
msgid ""
|
||||||
"Represents a blog post model. The Post class defines the structure and "
|
"Represents a blog post model. The Post class defines the structure and "
|
||||||
"behavior of a blog post. It includes attributes for author, title, content, "
|
"behavior of a blog post. It includes attributes for author, title, content, "
|
||||||
|
|
@ -41,65 +41,65 @@ msgstr ""
|
||||||
"fișier atașat, dar nu ambele simultan. De asemenea, acceptă generarea "
|
"fișier atașat, dar nu ambele simultan. De asemenea, acceptă generarea "
|
||||||
"automată a slug-ului pe baza titlului."
|
"automată a slug-ului pe baza titlului."
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:41
|
||||||
msgid "post title"
|
msgid "post title"
|
||||||
msgstr "Titlul postului"
|
msgstr "Titlul postului"
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:42
|
||||||
msgid "title"
|
msgid "title"
|
||||||
msgstr "Titlul"
|
msgstr "Titlul"
|
||||||
|
|
||||||
#: engine/blog/models.py:69
|
#: engine/blog/models.py:89
|
||||||
msgid "is static page"
|
msgid "is static page"
|
||||||
msgstr "este o pagină statică"
|
msgstr "este o pagină statică"
|
||||||
|
|
||||||
#: engine/blog/models.py:70
|
#: engine/blog/models.py:91
|
||||||
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"este aceasta o postare pentru o pagină cu URL static (de exemplu `/help/"
|
"este aceasta o postare pentru o pagină cu URL static (de exemplu `/help/"
|
||||||
"delivery`)?"
|
"delivery`)?"
|
||||||
|
|
||||||
#: engine/blog/models.py:77
|
#: engine/blog/models.py:99
|
||||||
msgid "post"
|
msgid "post"
|
||||||
msgstr "Post"
|
msgstr "Post"
|
||||||
|
|
||||||
#: engine/blog/models.py:78
|
#: engine/blog/models.py:100
|
||||||
msgid "posts"
|
msgid "posts"
|
||||||
msgstr "Mesaje"
|
msgstr "Mesaje"
|
||||||
|
|
||||||
#: engine/blog/models.py:82
|
#: engine/blog/models.py:105
|
||||||
msgid "markdown files are not supported yet - use markdown content instead"
|
msgid "markdown files are not supported yet - use markdown content instead"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Fișierele Markdown nu sunt acceptate - utilizați în schimb conținut Markdown!"
|
"Fișierele Markdown nu sunt acceptate - utilizați în schimb conținut Markdown!"
|
||||||
|
|
||||||
#: engine/blog/models.py:84
|
#: engine/blog/models.py:110
|
||||||
msgid ""
|
msgid ""
|
||||||
"a markdown file or markdown content must be provided - mutually exclusive"
|
"a markdown file or markdown content must be provided - mutually exclusive"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"trebuie furnizat un fișier markdown sau conținut markdown - se exclud "
|
"trebuie furnizat un fișier markdown sau conținut markdown - se exclud "
|
||||||
"reciproc"
|
"reciproc"
|
||||||
|
|
||||||
#: engine/blog/models.py:116
|
#: engine/blog/models.py:144
|
||||||
msgid "internal tag identifier for the post tag"
|
msgid "internal tag identifier for the post tag"
|
||||||
msgstr "identificator intern de etichetă pentru eticheta postului"
|
msgstr "identificator intern de etichetă pentru eticheta postului"
|
||||||
|
|
||||||
#: engine/blog/models.py:117
|
#: engine/blog/models.py:145
|
||||||
msgid "tag name"
|
msgid "tag name"
|
||||||
msgstr "Nume etichetă"
|
msgstr "Nume etichetă"
|
||||||
|
|
||||||
#: engine/blog/models.py:121
|
#: engine/blog/models.py:149
|
||||||
msgid "user-friendly name for the post tag"
|
msgid "user-friendly name for the post tag"
|
||||||
msgstr "Nume ușor de utilizat pentru eticheta postului"
|
msgstr "Nume ușor de utilizat pentru eticheta postului"
|
||||||
|
|
||||||
#: engine/blog/models.py:122
|
#: engine/blog/models.py:150
|
||||||
msgid "tag display name"
|
msgid "tag display name"
|
||||||
msgstr "Nume afișare etichetă"
|
msgstr "Nume afișare etichetă"
|
||||||
|
|
||||||
#: engine/blog/models.py:130
|
#: engine/blog/models.py:158
|
||||||
msgid "post tag"
|
msgid "post tag"
|
||||||
msgstr "Etichetă post"
|
msgstr "Etichetă post"
|
||||||
|
|
||||||
#: engine/blog/models.py:131
|
#: engine/blog/models.py:159
|
||||||
msgid "post tags"
|
msgid "post tags"
|
||||||
msgstr "Etichete poștale"
|
msgstr "Etichete poștale"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2025.4\n"
|
"Project-Id-Version: EVIBES 2025.4\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-12-10 21:44+0300\n"
|
"POT-Creation-Date: 2025-12-18 17:19+0300\n"
|
||||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||||
|
|
@ -25,7 +25,7 @@ msgstr "Список всех сообщений (только для чтени
|
||||||
msgid "retrieve a single post (read-only)"
|
msgid "retrieve a single post (read-only)"
|
||||||
msgstr "Получение одного сообщения (только для чтения)"
|
msgstr "Получение одного сообщения (только для чтения)"
|
||||||
|
|
||||||
#: engine/blog/models.py:13
|
#: engine/blog/models.py:20
|
||||||
msgid ""
|
msgid ""
|
||||||
"Represents a blog post model. The Post class defines the structure and "
|
"Represents a blog post model. The Post class defines the structure and "
|
||||||
"behavior of a blog post. It includes attributes for author, title, content, "
|
"behavior of a blog post. It includes attributes for author, title, content, "
|
||||||
|
|
@ -41,65 +41,65 @@ msgstr ""
|
||||||
"вложение файла, но не то и другое одновременно. Он также поддерживает "
|
"вложение файла, но не то и другое одновременно. Он также поддерживает "
|
||||||
"автоматическую генерацию slug на основе заголовка."
|
"автоматическую генерацию slug на основе заголовка."
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:41
|
||||||
msgid "post title"
|
msgid "post title"
|
||||||
msgstr "Заголовок сообщения"
|
msgstr "Заголовок сообщения"
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:42
|
||||||
msgid "title"
|
msgid "title"
|
||||||
msgstr "Название"
|
msgstr "Название"
|
||||||
|
|
||||||
#: engine/blog/models.py:69
|
#: engine/blog/models.py:89
|
||||||
msgid "is static page"
|
msgid "is static page"
|
||||||
msgstr "это статическая страница"
|
msgstr "это статическая страница"
|
||||||
|
|
||||||
#: engine/blog/models.py:70
|
#: engine/blog/models.py:91
|
||||||
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Это сообщение для страницы со статическим URL (например, `/help/delivery`)?"
|
"Это сообщение для страницы со статическим URL (например, `/help/delivery`)?"
|
||||||
|
|
||||||
#: engine/blog/models.py:77
|
#: engine/blog/models.py:99
|
||||||
msgid "post"
|
msgid "post"
|
||||||
msgstr "Пост"
|
msgstr "Пост"
|
||||||
|
|
||||||
#: engine/blog/models.py:78
|
#: engine/blog/models.py:100
|
||||||
msgid "posts"
|
msgid "posts"
|
||||||
msgstr "Посты"
|
msgstr "Посты"
|
||||||
|
|
||||||
#: engine/blog/models.py:82
|
#: engine/blog/models.py:105
|
||||||
msgid "markdown files are not supported yet - use markdown content instead"
|
msgid "markdown files are not supported yet - use markdown content instead"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Файлы в формате Markdown не поддерживаются - используйте вместо них "
|
"Файлы в формате Markdown не поддерживаются - используйте вместо них "
|
||||||
"содержимое в формате Markdown!"
|
"содержимое в формате Markdown!"
|
||||||
|
|
||||||
#: engine/blog/models.py:84
|
#: engine/blog/models.py:110
|
||||||
msgid ""
|
msgid ""
|
||||||
"a markdown file or markdown content must be provided - mutually exclusive"
|
"a markdown file or markdown content must be provided - mutually exclusive"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"необходимо предоставить файл разметки или содержимое разметки - "
|
"необходимо предоставить файл разметки или содержимое разметки - "
|
||||||
"взаимоисключающие варианты"
|
"взаимоисключающие варианты"
|
||||||
|
|
||||||
#: engine/blog/models.py:116
|
#: engine/blog/models.py:144
|
||||||
msgid "internal tag identifier for the post tag"
|
msgid "internal tag identifier for the post tag"
|
||||||
msgstr "внутренний идентификатор тега для тега post"
|
msgstr "внутренний идентификатор тега для тега post"
|
||||||
|
|
||||||
#: engine/blog/models.py:117
|
#: engine/blog/models.py:145
|
||||||
msgid "tag name"
|
msgid "tag name"
|
||||||
msgstr "Название тега"
|
msgstr "Название тега"
|
||||||
|
|
||||||
#: engine/blog/models.py:121
|
#: engine/blog/models.py:149
|
||||||
msgid "user-friendly name for the post tag"
|
msgid "user-friendly name for the post tag"
|
||||||
msgstr "Удобное для пользователя название тега поста"
|
msgstr "Удобное для пользователя название тега поста"
|
||||||
|
|
||||||
#: engine/blog/models.py:122
|
#: engine/blog/models.py:150
|
||||||
msgid "tag display name"
|
msgid "tag display name"
|
||||||
msgstr "Отображаемое имя тега"
|
msgstr "Отображаемое имя тега"
|
||||||
|
|
||||||
#: engine/blog/models.py:130
|
#: engine/blog/models.py:158
|
||||||
msgid "post tag"
|
msgid "post tag"
|
||||||
msgstr "Тэг поста"
|
msgstr "Тэг поста"
|
||||||
|
|
||||||
#: engine/blog/models.py:131
|
#: engine/blog/models.py:159
|
||||||
msgid "post tags"
|
msgid "post tags"
|
||||||
msgstr "Тэги постов"
|
msgstr "Тэги постов"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2025.4\n"
|
"Project-Id-Version: EVIBES 2025.4\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-12-10 21:44+0300\n"
|
"POT-Creation-Date: 2025-12-18 17:19+0300\n"
|
||||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||||
|
|
@ -25,7 +25,7 @@ msgstr "Lista alla inlägg (skrivskyddad)"
|
||||||
msgid "retrieve a single post (read-only)"
|
msgid "retrieve a single post (read-only)"
|
||||||
msgstr "Hämta ett enskilt inlägg (skrivskyddat)"
|
msgstr "Hämta ett enskilt inlägg (skrivskyddat)"
|
||||||
|
|
||||||
#: engine/blog/models.py:13
|
#: engine/blog/models.py:20
|
||||||
msgid ""
|
msgid ""
|
||||||
"Represents a blog post model. The Post class defines the structure and "
|
"Represents a blog post model. The Post class defines the structure and "
|
||||||
"behavior of a blog post. It includes attributes for author, title, content, "
|
"behavior of a blog post. It includes attributes for author, title, content, "
|
||||||
|
|
@ -41,63 +41,63 @@ msgstr ""
|
||||||
"filbilaga krävs, men inte båda samtidigt. Den stöder också automatisk "
|
"filbilaga krävs, men inte båda samtidigt. Den stöder också automatisk "
|
||||||
"sluggenerering baserat på titeln."
|
"sluggenerering baserat på titeln."
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:41
|
||||||
msgid "post title"
|
msgid "post title"
|
||||||
msgstr "Inläggets titel"
|
msgstr "Inläggets titel"
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:42
|
||||||
msgid "title"
|
msgid "title"
|
||||||
msgstr "Titel"
|
msgstr "Titel"
|
||||||
|
|
||||||
#: engine/blog/models.py:69
|
#: engine/blog/models.py:89
|
||||||
msgid "is static page"
|
msgid "is static page"
|
||||||
msgstr "är statisk sida"
|
msgstr "är statisk sida"
|
||||||
|
|
||||||
#: engine/blog/models.py:70
|
#: engine/blog/models.py:91
|
||||||
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"är detta ett inlägg för en sida med statisk URL (t.ex. `/help/delivery`)?"
|
"är detta ett inlägg för en sida med statisk URL (t.ex. `/help/delivery`)?"
|
||||||
|
|
||||||
#: engine/blog/models.py:77
|
#: engine/blog/models.py:99
|
||||||
msgid "post"
|
msgid "post"
|
||||||
msgstr "Post"
|
msgstr "Post"
|
||||||
|
|
||||||
#: engine/blog/models.py:78
|
#: engine/blog/models.py:100
|
||||||
msgid "posts"
|
msgid "posts"
|
||||||
msgstr "Inlägg"
|
msgstr "Inlägg"
|
||||||
|
|
||||||
#: engine/blog/models.py:82
|
#: engine/blog/models.py:105
|
||||||
msgid "markdown files are not supported yet - use markdown content instead"
|
msgid "markdown files are not supported yet - use markdown content instead"
|
||||||
msgstr "Markdown-filer stöds inte - använd markdown-innehåll istället!"
|
msgstr "Markdown-filer stöds inte - använd markdown-innehåll istället!"
|
||||||
|
|
||||||
#: engine/blog/models.py:84
|
#: engine/blog/models.py:110
|
||||||
msgid ""
|
msgid ""
|
||||||
"a markdown file or markdown content must be provided - mutually exclusive"
|
"a markdown file or markdown content must be provided - mutually exclusive"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"en markdown-fil eller markdown-innehåll måste tillhandahållas - ömsesidigt "
|
"en markdown-fil eller markdown-innehåll måste tillhandahållas - ömsesidigt "
|
||||||
"uteslutande"
|
"uteslutande"
|
||||||
|
|
||||||
#: engine/blog/models.py:116
|
#: engine/blog/models.py:144
|
||||||
msgid "internal tag identifier for the post tag"
|
msgid "internal tag identifier for the post tag"
|
||||||
msgstr "intern taggidentifierare för inläggstaggen"
|
msgstr "intern taggidentifierare för inläggstaggen"
|
||||||
|
|
||||||
#: engine/blog/models.py:117
|
#: engine/blog/models.py:145
|
||||||
msgid "tag name"
|
msgid "tag name"
|
||||||
msgstr "Tagg namn"
|
msgstr "Tagg namn"
|
||||||
|
|
||||||
#: engine/blog/models.py:121
|
#: engine/blog/models.py:149
|
||||||
msgid "user-friendly name for the post tag"
|
msgid "user-friendly name for the post tag"
|
||||||
msgstr "Användarvänligt namn för inläggstaggen"
|
msgstr "Användarvänligt namn för inläggstaggen"
|
||||||
|
|
||||||
#: engine/blog/models.py:122
|
#: engine/blog/models.py:150
|
||||||
msgid "tag display name"
|
msgid "tag display name"
|
||||||
msgstr "Taggens visningsnamn"
|
msgstr "Taggens visningsnamn"
|
||||||
|
|
||||||
#: engine/blog/models.py:130
|
#: engine/blog/models.py:158
|
||||||
msgid "post tag"
|
msgid "post tag"
|
||||||
msgstr "Post tagg"
|
msgstr "Post tagg"
|
||||||
|
|
||||||
#: engine/blog/models.py:131
|
#: engine/blog/models.py:159
|
||||||
msgid "post tags"
|
msgid "post tags"
|
||||||
msgstr "Taggar för inlägg"
|
msgstr "Taggar för inlägg"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2025.4\n"
|
"Project-Id-Version: EVIBES 2025.4\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-12-10 21:44+0300\n"
|
"POT-Creation-Date: 2025-12-18 17:19+0300\n"
|
||||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||||
|
|
@ -25,7 +25,7 @@ msgstr "แสดงรายการโพสต์ทั้งหมด (อ
|
||||||
msgid "retrieve a single post (read-only)"
|
msgid "retrieve a single post (read-only)"
|
||||||
msgstr "ดึงโพสต์เดียว (อ่านอย่างเดียว)"
|
msgstr "ดึงโพสต์เดียว (อ่านอย่างเดียว)"
|
||||||
|
|
||||||
#: engine/blog/models.py:13
|
#: engine/blog/models.py:20
|
||||||
msgid ""
|
msgid ""
|
||||||
"Represents a blog post model. The Post class defines the structure and "
|
"Represents a blog post model. The Post class defines the structure and "
|
||||||
"behavior of a blog post. It includes attributes for author, title, content, "
|
"behavior of a blog post. It includes attributes for author, title, content, "
|
||||||
|
|
@ -39,60 +39,60 @@ msgstr ""
|
||||||
"และแท็กที่เกี่ยวข้อง คลาสนี้บังคับใช้ข้อจำกัด เช่น ต้องมีเนื้อหาหรือไฟล์แนบอย่างใดอย่างหนึ่ง "
|
"และแท็กที่เกี่ยวข้อง คลาสนี้บังคับใช้ข้อจำกัด เช่น ต้องมีเนื้อหาหรือไฟล์แนบอย่างใดอย่างหนึ่ง "
|
||||||
"แต่ไม่สามารถมีทั้งสองอย่างพร้อมกันได้ นอกจากนี้ยังรองรับการสร้าง slug โดยอัตโนมัติจากชื่อเรื่อง"
|
"แต่ไม่สามารถมีทั้งสองอย่างพร้อมกันได้ นอกจากนี้ยังรองรับการสร้าง slug โดยอัตโนมัติจากชื่อเรื่อง"
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:41
|
||||||
msgid "post title"
|
msgid "post title"
|
||||||
msgstr "ชื่อโพสต์"
|
msgstr "ชื่อโพสต์"
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:42
|
||||||
msgid "title"
|
msgid "title"
|
||||||
msgstr "ชื่อเรื่อง"
|
msgstr "ชื่อเรื่อง"
|
||||||
|
|
||||||
#: engine/blog/models.py:69
|
#: engine/blog/models.py:89
|
||||||
msgid "is static page"
|
msgid "is static page"
|
||||||
msgstr "เป็นหน้าคงที่"
|
msgstr "เป็นหน้าคงที่"
|
||||||
|
|
||||||
#: engine/blog/models.py:70
|
#: engine/blog/models.py:91
|
||||||
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
||||||
msgstr "นี่คือโพสต์สำหรับหน้าที่มี URL แบบคงที่ (เช่น `/help/delivery`)?"
|
msgstr "นี่คือโพสต์สำหรับหน้าที่มี URL แบบคงที่ (เช่น `/help/delivery`)?"
|
||||||
|
|
||||||
#: engine/blog/models.py:77
|
#: engine/blog/models.py:99
|
||||||
msgid "post"
|
msgid "post"
|
||||||
msgstr "โพสต์"
|
msgstr "โพสต์"
|
||||||
|
|
||||||
#: engine/blog/models.py:78
|
#: engine/blog/models.py:100
|
||||||
msgid "posts"
|
msgid "posts"
|
||||||
msgstr "โพสต์"
|
msgstr "โพสต์"
|
||||||
|
|
||||||
#: engine/blog/models.py:82
|
#: engine/blog/models.py:105
|
||||||
msgid "markdown files are not supported yet - use markdown content instead"
|
msgid "markdown files are not supported yet - use markdown content instead"
|
||||||
msgstr "ไฟล์มาร์กดาวน์ยังไม่รองรับในตอนนี้ - กรุณาใช้เนื้อหาแบบมาร์กดาวน์แทน!"
|
msgstr "ไฟล์มาร์กดาวน์ยังไม่รองรับในตอนนี้ - กรุณาใช้เนื้อหาแบบมาร์กดาวน์แทน!"
|
||||||
|
|
||||||
#: engine/blog/models.py:84
|
#: engine/blog/models.py:110
|
||||||
msgid ""
|
msgid ""
|
||||||
"a markdown file or markdown content must be provided - mutually exclusive"
|
"a markdown file or markdown content must be provided - mutually exclusive"
|
||||||
msgstr "ไฟล์มาร์กดาวน์หรือเนื้อหาแบบมาร์กดาวน์ต้องได้รับการจัดเตรียมไว้ - ไม่สามารถใช้ร่วมกันได้"
|
msgstr "ไฟล์มาร์กดาวน์หรือเนื้อหาแบบมาร์กดาวน์ต้องได้รับการจัดเตรียมไว้ - ไม่สามารถใช้ร่วมกันได้"
|
||||||
|
|
||||||
#: engine/blog/models.py:116
|
#: engine/blog/models.py:144
|
||||||
msgid "internal tag identifier for the post tag"
|
msgid "internal tag identifier for the post tag"
|
||||||
msgstr "ตัวระบุแท็กภายในสำหรับแท็กโพสต์"
|
msgstr "ตัวระบุแท็กภายในสำหรับแท็กโพสต์"
|
||||||
|
|
||||||
#: engine/blog/models.py:117
|
#: engine/blog/models.py:145
|
||||||
msgid "tag name"
|
msgid "tag name"
|
||||||
msgstr "ชื่อวัน"
|
msgstr "ชื่อวัน"
|
||||||
|
|
||||||
#: engine/blog/models.py:121
|
#: engine/blog/models.py:149
|
||||||
msgid "user-friendly name for the post tag"
|
msgid "user-friendly name for the post tag"
|
||||||
msgstr "ชื่อที่ใช้งานได้ง่ายสำหรับแท็กโพสต์"
|
msgstr "ชื่อที่ใช้งานได้ง่ายสำหรับแท็กโพสต์"
|
||||||
|
|
||||||
#: engine/blog/models.py:122
|
#: engine/blog/models.py:150
|
||||||
msgid "tag display name"
|
msgid "tag display name"
|
||||||
msgstr "แสดงชื่อแท็ก"
|
msgstr "แสดงชื่อแท็ก"
|
||||||
|
|
||||||
#: engine/blog/models.py:130
|
#: engine/blog/models.py:158
|
||||||
msgid "post tag"
|
msgid "post tag"
|
||||||
msgstr "โพสต์แท็ก"
|
msgstr "โพสต์แท็ก"
|
||||||
|
|
||||||
#: engine/blog/models.py:131
|
#: engine/blog/models.py:159
|
||||||
msgid "post tags"
|
msgid "post tags"
|
||||||
msgstr "ป้ายกำกับโพสต์"
|
msgstr "ป้ายกำกับโพสต์"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2025.4\n"
|
"Project-Id-Version: EVIBES 2025.4\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-12-10 21:44+0300\n"
|
"POT-Creation-Date: 2025-12-18 17:19+0300\n"
|
||||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||||
|
|
@ -25,7 +25,7 @@ msgstr "Tüm gönderileri listele (salt okunur)"
|
||||||
msgid "retrieve a single post (read-only)"
|
msgid "retrieve a single post (read-only)"
|
||||||
msgstr "Tek bir gönderiyi al (salt okunur)"
|
msgstr "Tek bir gönderiyi al (salt okunur)"
|
||||||
|
|
||||||
#: engine/blog/models.py:13
|
#: engine/blog/models.py:20
|
||||||
msgid ""
|
msgid ""
|
||||||
"Represents a blog post model. The Post class defines the structure and "
|
"Represents a blog post model. The Post class defines the structure and "
|
||||||
"behavior of a blog post. It includes attributes for author, title, content, "
|
"behavior of a blog post. It includes attributes for author, title, content, "
|
||||||
|
|
@ -41,65 +41,65 @@ msgstr ""
|
||||||
"kısıtlamalar uygular. Ayrıca başlığa dayalı otomatik slug oluşturmayı da "
|
"kısıtlamalar uygular. Ayrıca başlığa dayalı otomatik slug oluşturmayı da "
|
||||||
"destekler."
|
"destekler."
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:41
|
||||||
msgid "post title"
|
msgid "post title"
|
||||||
msgstr "Gönderinin başlığı"
|
msgstr "Gönderinin başlığı"
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:42
|
||||||
msgid "title"
|
msgid "title"
|
||||||
msgstr "Başlık"
|
msgstr "Başlık"
|
||||||
|
|
||||||
#: engine/blog/models.py:69
|
#: engine/blog/models.py:89
|
||||||
msgid "is static page"
|
msgid "is static page"
|
||||||
msgstr "statik sayfadır"
|
msgstr "statik sayfadır"
|
||||||
|
|
||||||
#: engine/blog/models.py:70
|
#: engine/blog/models.py:91
|
||||||
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Bu, statik URL'ye sahip bir sayfa (örneğin `/help/delivery`) için bir "
|
"Bu, statik URL'ye sahip bir sayfa (örneğin `/help/delivery`) için bir "
|
||||||
"gönderi mi?"
|
"gönderi mi?"
|
||||||
|
|
||||||
#: engine/blog/models.py:77
|
#: engine/blog/models.py:99
|
||||||
msgid "post"
|
msgid "post"
|
||||||
msgstr "Posta"
|
msgstr "Posta"
|
||||||
|
|
||||||
#: engine/blog/models.py:78
|
#: engine/blog/models.py:100
|
||||||
msgid "posts"
|
msgid "posts"
|
||||||
msgstr "Mesajlar"
|
msgstr "Mesajlar"
|
||||||
|
|
||||||
#: engine/blog/models.py:82
|
#: engine/blog/models.py:105
|
||||||
msgid "markdown files are not supported yet - use markdown content instead"
|
msgid "markdown files are not supported yet - use markdown content instead"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Markdown dosyaları desteklenmiyor yer - bunun yerine markdown içeriği "
|
"Markdown dosyaları desteklenmiyor yer - bunun yerine markdown içeriği "
|
||||||
"kullanın!"
|
"kullanın!"
|
||||||
|
|
||||||
#: engine/blog/models.py:84
|
#: engine/blog/models.py:110
|
||||||
msgid ""
|
msgid ""
|
||||||
"a markdown file or markdown content must be provided - mutually exclusive"
|
"a markdown file or markdown content must be provided - mutually exclusive"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"bir markdown dosyası veya markdown içeriği sağlanmalıdır - birbirini dışlayan"
|
"bir markdown dosyası veya markdown içeriği sağlanmalıdır - birbirini dışlayan"
|
||||||
|
|
||||||
#: engine/blog/models.py:116
|
#: engine/blog/models.py:144
|
||||||
msgid "internal tag identifier for the post tag"
|
msgid "internal tag identifier for the post tag"
|
||||||
msgstr "gönderi etiketi için dahili etiket tanımlayıcısı"
|
msgstr "gönderi etiketi için dahili etiket tanımlayıcısı"
|
||||||
|
|
||||||
#: engine/blog/models.py:117
|
#: engine/blog/models.py:145
|
||||||
msgid "tag name"
|
msgid "tag name"
|
||||||
msgstr "Etiket adı"
|
msgstr "Etiket adı"
|
||||||
|
|
||||||
#: engine/blog/models.py:121
|
#: engine/blog/models.py:149
|
||||||
msgid "user-friendly name for the post tag"
|
msgid "user-friendly name for the post tag"
|
||||||
msgstr "Gönderi etiketi için kullanıcı dostu ad"
|
msgstr "Gönderi etiketi için kullanıcı dostu ad"
|
||||||
|
|
||||||
#: engine/blog/models.py:122
|
#: engine/blog/models.py:150
|
||||||
msgid "tag display name"
|
msgid "tag display name"
|
||||||
msgstr "Etiket görünen adı"
|
msgstr "Etiket görünen adı"
|
||||||
|
|
||||||
#: engine/blog/models.py:130
|
#: engine/blog/models.py:158
|
||||||
msgid "post tag"
|
msgid "post tag"
|
||||||
msgstr "Mesaj etiketi"
|
msgstr "Mesaj etiketi"
|
||||||
|
|
||||||
#: engine/blog/models.py:131
|
#: engine/blog/models.py:159
|
||||||
msgid "post tags"
|
msgid "post tags"
|
||||||
msgstr "Gönderi etiketleri"
|
msgstr "Gönderi etiketleri"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2025.4\n"
|
"Project-Id-Version: EVIBES 2025.4\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-12-10 21:44+0300\n"
|
"POT-Creation-Date: 2025-12-18 17:19+0300\n"
|
||||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||||
|
|
@ -25,7 +25,7 @@ msgstr "Danh sách tất cả các bài đăng (chỉ đọc)"
|
||||||
msgid "retrieve a single post (read-only)"
|
msgid "retrieve a single post (read-only)"
|
||||||
msgstr "Lấy một bài đăng duy nhất (chỉ đọc)"
|
msgstr "Lấy một bài đăng duy nhất (chỉ đọc)"
|
||||||
|
|
||||||
#: engine/blog/models.py:13
|
#: engine/blog/models.py:20
|
||||||
msgid ""
|
msgid ""
|
||||||
"Represents a blog post model. The Post class defines the structure and "
|
"Represents a blog post model. The Post class defines the structure and "
|
||||||
"behavior of a blog post. It includes attributes for author, title, content, "
|
"behavior of a blog post. It includes attributes for author, title, content, "
|
||||||
|
|
@ -40,65 +40,65 @@ 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 "
|
"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 đề."
|
"cùng lúc. Nó cũng hỗ trợ tạo slug tự động dựa trên tiêu đề."
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:41
|
||||||
msgid "post title"
|
msgid "post title"
|
||||||
msgstr "Tiêu đề bài đăng"
|
msgstr "Tiêu đề bài đăng"
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:42
|
||||||
msgid "title"
|
msgid "title"
|
||||||
msgstr "Tiêu đề"
|
msgstr "Tiêu đề"
|
||||||
|
|
||||||
#: engine/blog/models.py:69
|
#: engine/blog/models.py:89
|
||||||
msgid "is static page"
|
msgid "is static page"
|
||||||
msgstr "là trang tĩnh"
|
msgstr "là trang tĩnh"
|
||||||
|
|
||||||
#: engine/blog/models.py:70
|
#: engine/blog/models.py:91
|
||||||
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Đây có phải là bài đăng cho một trang có URL tĩnh (ví dụ: `/help/delivery`) "
|
"Đây có phải là bài đăng cho một trang có URL tĩnh (ví dụ: `/help/delivery`) "
|
||||||
"không?"
|
"không?"
|
||||||
|
|
||||||
#: engine/blog/models.py:77
|
#: engine/blog/models.py:99
|
||||||
msgid "post"
|
msgid "post"
|
||||||
msgstr "Bài đăng"
|
msgstr "Bài đăng"
|
||||||
|
|
||||||
#: engine/blog/models.py:78
|
#: engine/blog/models.py:100
|
||||||
msgid "posts"
|
msgid "posts"
|
||||||
msgstr "Bài đăng"
|
msgstr "Bài đăng"
|
||||||
|
|
||||||
#: engine/blog/models.py:82
|
#: engine/blog/models.py:105
|
||||||
msgid "markdown files are not supported yet - use markdown content instead"
|
msgid "markdown files are not supported yet - use markdown content instead"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Tệp Markdown hiện chưa được hỗ trợ - hãy sử dụng nội dung Markdown thay thế!"
|
"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:84
|
#: engine/blog/models.py:110
|
||||||
msgid ""
|
msgid ""
|
||||||
"a markdown file or markdown content must be provided - mutually exclusive"
|
"a markdown file or markdown content must be provided - mutually exclusive"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Phải cung cấp tệp Markdown hoặc nội dung Markdown - hai tùy chọn này là "
|
"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."
|
"tương phản nhau."
|
||||||
|
|
||||||
#: engine/blog/models.py:116
|
#: engine/blog/models.py:144
|
||||||
msgid "internal tag identifier for the post tag"
|
msgid "internal tag identifier for the post tag"
|
||||||
msgstr "Mã định danh thẻ nội bộ cho thẻ bài viết"
|
msgstr "Mã định danh thẻ nội bộ cho thẻ bài viết"
|
||||||
|
|
||||||
#: engine/blog/models.py:117
|
#: engine/blog/models.py:145
|
||||||
msgid "tag name"
|
msgid "tag name"
|
||||||
msgstr "Tên ngày"
|
msgstr "Tên ngày"
|
||||||
|
|
||||||
#: engine/blog/models.py:121
|
#: engine/blog/models.py:149
|
||||||
msgid "user-friendly name for the post tag"
|
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"
|
msgstr "Tên thân thiện với người dùng cho thẻ bài viết"
|
||||||
|
|
||||||
#: engine/blog/models.py:122
|
#: engine/blog/models.py:150
|
||||||
msgid "tag display name"
|
msgid "tag display name"
|
||||||
msgstr "Hiển thị tên thẻ"
|
msgstr "Hiển thị tên thẻ"
|
||||||
|
|
||||||
#: engine/blog/models.py:130
|
#: engine/blog/models.py:158
|
||||||
msgid "post tag"
|
msgid "post tag"
|
||||||
msgstr "Thẻ bài viết"
|
msgstr "Thẻ bài viết"
|
||||||
|
|
||||||
#: engine/blog/models.py:131
|
#: engine/blog/models.py:159
|
||||||
msgid "post tags"
|
msgid "post tags"
|
||||||
msgstr "Thẻ bài viết"
|
msgstr "Thẻ bài viết"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2025.4\n"
|
"Project-Id-Version: EVIBES 2025.4\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-12-10 21:44+0300\n"
|
"POT-Creation-Date: 2025-12-18 17:19+0300\n"
|
||||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||||
|
|
@ -25,7 +25,7 @@ msgstr "列出所有帖子(只读)"
|
||||||
msgid "retrieve a single post (read-only)"
|
msgid "retrieve a single post (read-only)"
|
||||||
msgstr "检索单个帖子(只读)"
|
msgstr "检索单个帖子(只读)"
|
||||||
|
|
||||||
#: engine/blog/models.py:13
|
#: engine/blog/models.py:20
|
||||||
msgid ""
|
msgid ""
|
||||||
"Represents a blog post model. The Post class defines the structure and "
|
"Represents a blog post model. The Post class defines the structure and "
|
||||||
"behavior of a blog post. It includes attributes for author, title, content, "
|
"behavior of a blog post. It includes attributes for author, title, content, "
|
||||||
|
|
@ -38,60 +38,60 @@ msgstr ""
|
||||||
"附件、标签和相关标记的属性。该类可强制执行一些限制条件,如要求提供内容或文件"
|
"附件、标签和相关标记的属性。该类可强制执行一些限制条件,如要求提供内容或文件"
|
||||||
"附件,但不能同时提供这两种内容。它还支持根据标题自动生成标签。"
|
"附件,但不能同时提供这两种内容。它还支持根据标题自动生成标签。"
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:41
|
||||||
msgid "post title"
|
msgid "post title"
|
||||||
msgstr "帖子标题"
|
msgstr "帖子标题"
|
||||||
|
|
||||||
#: engine/blog/models.py:24
|
#: engine/blog/models.py:42
|
||||||
msgid "title"
|
msgid "title"
|
||||||
msgstr "标题"
|
msgstr "标题"
|
||||||
|
|
||||||
#: engine/blog/models.py:69
|
#: engine/blog/models.py:89
|
||||||
msgid "is static page"
|
msgid "is static page"
|
||||||
msgstr "是静态页面"
|
msgstr "是静态页面"
|
||||||
|
|
||||||
#: engine/blog/models.py:70
|
#: engine/blog/models.py:91
|
||||||
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?"
|
||||||
msgstr "这是静态 URL 页面(如 `/help/delivery`)的帖子吗?"
|
msgstr "这是静态 URL 页面(如 `/help/delivery`)的帖子吗?"
|
||||||
|
|
||||||
#: engine/blog/models.py:77
|
#: engine/blog/models.py:99
|
||||||
msgid "post"
|
msgid "post"
|
||||||
msgstr "职位"
|
msgstr "职位"
|
||||||
|
|
||||||
#: engine/blog/models.py:78
|
#: engine/blog/models.py:100
|
||||||
msgid "posts"
|
msgid "posts"
|
||||||
msgstr "职位"
|
msgstr "职位"
|
||||||
|
|
||||||
#: engine/blog/models.py:82
|
#: engine/blog/models.py:105
|
||||||
msgid "markdown files are not supported yet - use markdown content instead"
|
msgid "markdown files are not supported yet - use markdown content instead"
|
||||||
msgstr "不支持 Markdown 文件,请使用 Markdown 内容!"
|
msgstr "不支持 Markdown 文件,请使用 Markdown 内容!"
|
||||||
|
|
||||||
#: engine/blog/models.py:84
|
#: engine/blog/models.py:110
|
||||||
msgid ""
|
msgid ""
|
||||||
"a markdown file or markdown content must be provided - mutually exclusive"
|
"a markdown file or markdown content must be provided - mutually exclusive"
|
||||||
msgstr "必须提供标记符文件或标记符内容 - 相互排斥"
|
msgstr "必须提供标记符文件或标记符内容 - 相互排斥"
|
||||||
|
|
||||||
#: engine/blog/models.py:116
|
#: engine/blog/models.py:144
|
||||||
msgid "internal tag identifier for the post tag"
|
msgid "internal tag identifier for the post tag"
|
||||||
msgstr "职位标签的内部标签标识符"
|
msgstr "职位标签的内部标签标识符"
|
||||||
|
|
||||||
#: engine/blog/models.py:117
|
#: engine/blog/models.py:145
|
||||||
msgid "tag name"
|
msgid "tag name"
|
||||||
msgstr "标签名称"
|
msgstr "标签名称"
|
||||||
|
|
||||||
#: engine/blog/models.py:121
|
#: engine/blog/models.py:149
|
||||||
msgid "user-friendly name for the post tag"
|
msgid "user-friendly name for the post tag"
|
||||||
msgstr "方便用户使用的帖子标签名称"
|
msgstr "方便用户使用的帖子标签名称"
|
||||||
|
|
||||||
#: engine/blog/models.py:122
|
#: engine/blog/models.py:150
|
||||||
msgid "tag display name"
|
msgid "tag display name"
|
||||||
msgstr "标签显示名称"
|
msgstr "标签显示名称"
|
||||||
|
|
||||||
#: engine/blog/models.py:130
|
#: engine/blog/models.py:158
|
||||||
msgid "post tag"
|
msgid "post tag"
|
||||||
msgstr "职位标签"
|
msgstr "职位标签"
|
||||||
|
|
||||||
#: engine/blog/models.py:131
|
#: engine/blog/models.py:159
|
||||||
msgid "post tags"
|
msgid "post tags"
|
||||||
msgstr "帖子标签"
|
msgstr "帖子标签"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,8 +15,8 @@ from markdown_field import MarkdownField
|
||||||
from engine.core.abstract import NiceModel
|
from engine.core.abstract import NiceModel
|
||||||
|
|
||||||
|
|
||||||
class Post(NiceModel): # type: ignore [django-manager-missing]
|
class Post(NiceModel):
|
||||||
__doc__ = _( # type: ignore [assignment]
|
__doc__ = _( # pyright: ignore[reportUnknownVariableType]
|
||||||
"Represents a blog post model. "
|
"Represents a blog post model. "
|
||||||
"The Post class defines the structure and behavior of a blog post. "
|
"The Post class defines the structure and behavior of a blog post. "
|
||||||
"It includes attributes for author, title, content, optional file attachment, slug, and associated tags. "
|
"It includes attributes for author, title, content, optional file attachment, slug, and associated tags. "
|
||||||
|
|
|
||||||
|
|
@ -11,8 +11,8 @@ from engine.core.permissions import EvibesPermission
|
||||||
|
|
||||||
|
|
||||||
@extend_schema_view(**POST_SCHEMA)
|
@extend_schema_view(**POST_SCHEMA)
|
||||||
class PostViewSet(ReadOnlyModelViewSet): # type: ignore [type-arg]
|
class PostViewSet(ReadOnlyModelViewSet):
|
||||||
__doc__ = _( # type: ignore [assignment]
|
__doc__ = _(
|
||||||
"Encapsulates operations for managing and retrieving Post entities in a read-only model view set. "
|
"Encapsulates operations for managing and retrieving Post entities in a read-only model view set. "
|
||||||
"This class is tailored to handle Post objects that are active and allows filtration based on defined "
|
"This class is tailored to handle Post objects that are active and allows filtration based on defined "
|
||||||
"filters. It integrates with Django's backend filtering system and ensures operations align with the "
|
"filters. It integrates with Django's backend filtering system and ensures operations align with the "
|
||||||
|
|
|
||||||
|
|
@ -24,12 +24,12 @@ class NiceModel(Model):
|
||||||
)
|
)
|
||||||
created = CreationDateTimeField(
|
created = CreationDateTimeField(
|
||||||
_("created"), help_text=_("when the object first appeared on the database")
|
_("created"), help_text=_("when the object first appeared on the database")
|
||||||
) # type: ignore [no-untyped-call]
|
)
|
||||||
modified = ModificationDateTimeField(
|
modified = ModificationDateTimeField(
|
||||||
_("modified"), help_text=_("when the object was last modified")
|
_("modified"), help_text=_("when the object was last modified")
|
||||||
) # type: ignore [no-untyped-call]
|
)
|
||||||
|
|
||||||
def save( # type: ignore [override]
|
def save(
|
||||||
self,
|
self,
|
||||||
*,
|
*,
|
||||||
force_insert: bool = False,
|
force_insert: bool = False,
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,7 @@ from mptt.admin import DraggableMPTTAdmin
|
||||||
from unfold.admin import ModelAdmin, TabularInline
|
from unfold.admin import ModelAdmin, TabularInline
|
||||||
from unfold.contrib.import_export.forms import ExportForm, ImportForm
|
from unfold.contrib.import_export.forms import ExportForm, ImportForm
|
||||||
from unfold.decorators import action
|
from unfold.decorators import action
|
||||||
|
from unfold.typing import FieldsetsType
|
||||||
from unfold.widgets import UnfoldAdminSelectWidget, UnfoldAdminTextInputWidget
|
from unfold.widgets import UnfoldAdminSelectWidget, UnfoldAdminTextInputWidget
|
||||||
|
|
||||||
from engine.core.forms import (
|
from engine.core.forms import (
|
||||||
|
|
@ -70,9 +71,7 @@ class FieldsetsMixin:
|
||||||
additional_fields: list[str] | None = []
|
additional_fields: list[str] | None = []
|
||||||
model: ClassVar[Type[Model]]
|
model: ClassVar[Type[Model]]
|
||||||
|
|
||||||
def get_fieldsets(
|
def get_fieldsets(self, request: HttpRequest, obj: Any = None) -> FieldsetsType:
|
||||||
self, request: HttpRequest, obj: Any = None
|
|
||||||
) -> list[tuple[str, dict[str, list[str]]]]:
|
|
||||||
if request:
|
if request:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
@ -82,8 +81,8 @@ class FieldsetsMixin:
|
||||||
fieldsets = []
|
fieldsets = []
|
||||||
|
|
||||||
def add_translations_fieldset(
|
def add_translations_fieldset(
|
||||||
fss: list[tuple[str, dict[str, list[str]]]],
|
fss: FieldsetsType,
|
||||||
) -> list[tuple[str, dict[str, list[str]]]]:
|
) -> FieldsetsType:
|
||||||
with suppress(NotRegistered):
|
with suppress(NotRegistered):
|
||||||
transoptions = translator.get_options_for_model(self.model)
|
transoptions = translator.get_options_for_model(self.model)
|
||||||
translation_fields = []
|
translation_fields = []
|
||||||
|
|
@ -95,7 +94,7 @@ class FieldsetsMixin:
|
||||||
_("translations"),
|
_("translations"),
|
||||||
{"classes": ["tab"], "fields": translation_fields},
|
{"classes": ["tab"], "fields": translation_fields},
|
||||||
)
|
)
|
||||||
] # type: ignore [list-item]
|
]
|
||||||
return fss
|
return fss
|
||||||
|
|
||||||
if self.general_fields:
|
if self.general_fields:
|
||||||
|
|
@ -140,8 +139,8 @@ class FieldsetsMixin:
|
||||||
ts.append(name)
|
ts.append(name)
|
||||||
if ts:
|
if ts:
|
||||||
fieldsets.append((_("timestamps"), {"classes": ["tab"], "fields": ts}))
|
fieldsets.append((_("timestamps"), {"classes": ["tab"], "fields": ts}))
|
||||||
fieldsets = add_translations_fieldset(fieldsets) # type: ignore [arg-type, assignment]
|
fieldsets = add_translations_fieldset(fieldsets)
|
||||||
return fieldsets # type: ignore [return-value]
|
return fieldsets
|
||||||
|
|
||||||
|
|
||||||
# noinspection PyUnresolvedReferences
|
# noinspection PyUnresolvedReferences
|
||||||
|
|
@ -161,14 +160,14 @@ class ActivationActionsMixin:
|
||||||
def activate_selected(self, request: HttpRequest, queryset: QuerySet[Any]) -> None:
|
def activate_selected(self, request: HttpRequest, queryset: QuerySet[Any]) -> None:
|
||||||
try:
|
try:
|
||||||
queryset.update(is_active=True)
|
queryset.update(is_active=True)
|
||||||
self.message_user( # type: ignore [attr-defined]
|
self.message_user(
|
||||||
request=request,
|
request=request,
|
||||||
message=_("selected items have been activated.").lower(),
|
message=_("selected items have been activated.").lower(),
|
||||||
level=messages.SUCCESS,
|
level=messages.SUCCESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.message_user(request=request, message=str(e), level=messages.ERROR) # type: ignore [attr-defined]
|
self.message_user(request=request, message=str(e), level=messages.ERROR)
|
||||||
|
|
||||||
@action(
|
@action(
|
||||||
description=_("deactivate selected %(verbose_name_plural)s").lower(),
|
description=_("deactivate selected %(verbose_name_plural)s").lower(),
|
||||||
|
|
@ -179,17 +178,17 @@ class ActivationActionsMixin:
|
||||||
) -> None:
|
) -> None:
|
||||||
try:
|
try:
|
||||||
queryset.update(is_active=False)
|
queryset.update(is_active=False)
|
||||||
self.message_user( # type: ignore [attr-defined]
|
self.message_user(
|
||||||
request=request,
|
request=request,
|
||||||
message=_("selected items have been deactivated.").lower(),
|
message=_("selected items have been deactivated.").lower(),
|
||||||
level=messages.SUCCESS,
|
level=messages.SUCCESS,
|
||||||
)
|
)
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.message_user(request=request, message=str(e), level=messages.ERROR) # type: ignore [attr-defined]
|
self.message_user(request=request, message=str(e), level=messages.ERROR)
|
||||||
|
|
||||||
|
|
||||||
class AttributeValueInline(TabularInline): # type: ignore [type-arg]
|
class AttributeValueInline(TabularInline):
|
||||||
model = AttributeValue
|
model = AttributeValue
|
||||||
extra = 0
|
extra = 0
|
||||||
autocomplete_fields = ["attribute"]
|
autocomplete_fields = ["attribute"]
|
||||||
|
|
@ -201,7 +200,7 @@ class AttributeValueInline(TabularInline): # type: ignore [type-arg]
|
||||||
return super().get_queryset(request).select_related("attribute", "product")
|
return super().get_queryset(request).select_related("attribute", "product")
|
||||||
|
|
||||||
|
|
||||||
class ProductImageInline(TabularInline): # type: ignore [type-arg]
|
class ProductImageInline(TabularInline):
|
||||||
model = ProductImage
|
model = ProductImage
|
||||||
extra = 0
|
extra = 0
|
||||||
tab = True
|
tab = True
|
||||||
|
|
@ -212,7 +211,7 @@ class ProductImageInline(TabularInline): # type: ignore [type-arg]
|
||||||
return super().get_queryset(request).select_related("product")
|
return super().get_queryset(request).select_related("product")
|
||||||
|
|
||||||
|
|
||||||
class StockInline(TabularInline): # type: ignore [type-arg]
|
class StockInline(TabularInline):
|
||||||
model = Stock
|
model = Stock
|
||||||
extra = 0
|
extra = 0
|
||||||
form = StockForm
|
form = StockForm
|
||||||
|
|
@ -224,7 +223,7 @@ class StockInline(TabularInline): # type: ignore [type-arg]
|
||||||
return super().get_queryset(request).select_related("vendor", "product")
|
return super().get_queryset(request).select_related("vendor", "product")
|
||||||
|
|
||||||
|
|
||||||
class OrderProductInline(TabularInline): # type: ignore [type-arg]
|
class OrderProductInline(TabularInline):
|
||||||
model = OrderProduct
|
model = OrderProduct
|
||||||
extra = 0
|
extra = 0
|
||||||
readonly_fields = ("product", "quantity", "buy_price")
|
readonly_fields = ("product", "quantity", "buy_price")
|
||||||
|
|
@ -242,7 +241,7 @@ class OrderProductInline(TabularInline): # type: ignore [type-arg]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class CategoryChildrenInline(TabularInline): # type: ignore [type-arg]
|
class CategoryChildrenInline(TabularInline):
|
||||||
model = Category
|
model = Category
|
||||||
fk_name = "parent"
|
fk_name = "parent"
|
||||||
extra = 0
|
extra = 0
|
||||||
|
|
@ -255,9 +254,9 @@ class CategoryChildrenInline(TabularInline): # type: ignore [type-arg]
|
||||||
@register(AttributeGroup)
|
@register(AttributeGroup)
|
||||||
class AttributeGroupAdmin(
|
class AttributeGroupAdmin(
|
||||||
DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin
|
DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin
|
||||||
): # type: ignore [misc, type-arg]
|
):
|
||||||
# noinspection PyClassVar
|
# noinspection PyClassVar
|
||||||
model = AttributeGroup # type: ignore [misc]
|
model = AttributeGroup
|
||||||
list_display = (
|
list_display = (
|
||||||
"name",
|
"name",
|
||||||
"modified",
|
"modified",
|
||||||
|
|
@ -281,9 +280,9 @@ class AttributeGroupAdmin(
|
||||||
@register(Attribute)
|
@register(Attribute)
|
||||||
class AttributeAdmin(
|
class AttributeAdmin(
|
||||||
DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin
|
DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin
|
||||||
): # type: ignore [misc, type-arg]
|
):
|
||||||
# noinspection PyClassVar
|
# noinspection PyClassVar
|
||||||
model = Attribute # type: ignore [misc]
|
model = Attribute
|
||||||
list_display = (
|
list_display = (
|
||||||
"name",
|
"name",
|
||||||
"group",
|
"group",
|
||||||
|
|
@ -320,9 +319,9 @@ class AttributeAdmin(
|
||||||
|
|
||||||
|
|
||||||
@register(AttributeValue)
|
@register(AttributeValue)
|
||||||
class AttributeValueAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg]
|
class AttributeValueAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin):
|
||||||
# noinspection PyClassVar
|
# noinspection PyClassVar
|
||||||
model = AttributeValue # type: ignore [misc]
|
model = AttributeValue
|
||||||
list_display = (
|
list_display = (
|
||||||
"attribute",
|
"attribute",
|
||||||
"value",
|
"value",
|
||||||
|
|
@ -413,9 +412,9 @@ class CategoryAdmin(
|
||||||
@register(Brand)
|
@register(Brand)
|
||||||
class BrandAdmin(
|
class BrandAdmin(
|
||||||
DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin
|
DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin
|
||||||
): # type: ignore [misc, type-arg]
|
):
|
||||||
# noinspection PyClassVar
|
# noinspection PyClassVar
|
||||||
model = Brand # type: ignore [misc]
|
model = Brand
|
||||||
list_display = (
|
list_display = (
|
||||||
"name",
|
"name",
|
||||||
"priority",
|
"priority",
|
||||||
|
|
@ -451,9 +450,9 @@ class ProductAdmin(
|
||||||
ActivationActionsMixin,
|
ActivationActionsMixin,
|
||||||
ModelAdmin,
|
ModelAdmin,
|
||||||
ImportExportModelAdmin,
|
ImportExportModelAdmin,
|
||||||
): # type: ignore [misc, type-arg]
|
):
|
||||||
# noinspection PyClassVar
|
# noinspection PyClassVar
|
||||||
model = Product # type: ignore [misc]
|
model = Product
|
||||||
list_display = (
|
list_display = (
|
||||||
"sku",
|
"sku",
|
||||||
"name",
|
"name",
|
||||||
|
|
@ -532,9 +531,9 @@ class ProductAdmin(
|
||||||
@register(ProductTag)
|
@register(ProductTag)
|
||||||
class ProductTagAdmin(
|
class ProductTagAdmin(
|
||||||
DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin
|
DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin
|
||||||
): # type: ignore [misc, type-arg]
|
):
|
||||||
# noinspection PyClassVar
|
# noinspection PyClassVar
|
||||||
model = ProductTag # type: ignore [misc]
|
model = ProductTag
|
||||||
list_display = ("tag_name",)
|
list_display = ("tag_name",)
|
||||||
search_fields = ("tag_name",)
|
search_fields = ("tag_name",)
|
||||||
readonly_fields = (
|
readonly_fields = (
|
||||||
|
|
@ -552,9 +551,9 @@ class ProductTagAdmin(
|
||||||
@register(CategoryTag)
|
@register(CategoryTag)
|
||||||
class CategoryTagAdmin(
|
class CategoryTagAdmin(
|
||||||
DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin
|
DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin
|
||||||
): # type: ignore [misc, type-arg]
|
):
|
||||||
# noinspection PyClassVar
|
# noinspection PyClassVar
|
||||||
model = CategoryTag # type: ignore [misc]
|
model = CategoryTag
|
||||||
list_display = (
|
list_display = (
|
||||||
"name",
|
"name",
|
||||||
"tag_name",
|
"tag_name",
|
||||||
|
|
@ -580,9 +579,9 @@ class CategoryTagAdmin(
|
||||||
@register(Vendor)
|
@register(Vendor)
|
||||||
class VendorAdmin(
|
class VendorAdmin(
|
||||||
DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin
|
DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin
|
||||||
): # type: ignore [misc, type-arg]
|
):
|
||||||
# noinspection PyClassVar
|
# noinspection PyClassVar
|
||||||
model = Vendor # type: ignore [misc]
|
model = Vendor
|
||||||
list_display = (
|
list_display = (
|
||||||
"name",
|
"name",
|
||||||
"markup_percent",
|
"markup_percent",
|
||||||
|
|
@ -622,9 +621,9 @@ class VendorAdmin(
|
||||||
@register(Feedback)
|
@register(Feedback)
|
||||||
class FeedbackAdmin(
|
class FeedbackAdmin(
|
||||||
DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin
|
DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin
|
||||||
): # type: ignore [misc, type-arg]
|
):
|
||||||
# noinspection PyClassVar
|
# noinspection PyClassVar
|
||||||
model = Feedback # type: ignore [misc]
|
model = Feedback
|
||||||
list_display = (
|
list_display = (
|
||||||
"order_product",
|
"order_product",
|
||||||
"rating",
|
"rating",
|
||||||
|
|
@ -657,9 +656,9 @@ class FeedbackAdmin(
|
||||||
@register(Order)
|
@register(Order)
|
||||||
class OrderAdmin(
|
class OrderAdmin(
|
||||||
DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin
|
DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin
|
||||||
): # type: ignore [misc, type-arg]
|
):
|
||||||
# noinspection PyClassVar
|
# noinspection PyClassVar
|
||||||
model = Order # type: ignore [misc]
|
model = Order
|
||||||
list_display = (
|
list_display = (
|
||||||
"human_readable_id",
|
"human_readable_id",
|
||||||
"user",
|
"user",
|
||||||
|
|
@ -710,9 +709,9 @@ class OrderAdmin(
|
||||||
@register(OrderProduct)
|
@register(OrderProduct)
|
||||||
class OrderProductAdmin(
|
class OrderProductAdmin(
|
||||||
DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin
|
DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin
|
||||||
): # type: ignore [misc, type-arg]
|
):
|
||||||
# noinspection PyClassVar
|
# noinspection PyClassVar
|
||||||
model = OrderProduct # type: ignore [misc]
|
model = OrderProduct
|
||||||
list_display = (
|
list_display = (
|
||||||
"order",
|
"order",
|
||||||
"product",
|
"product",
|
||||||
|
|
@ -750,9 +749,9 @@ class OrderProductAdmin(
|
||||||
@register(PromoCode)
|
@register(PromoCode)
|
||||||
class PromoCodeAdmin(
|
class PromoCodeAdmin(
|
||||||
DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin
|
DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin
|
||||||
): # type: ignore [misc, type-arg]
|
):
|
||||||
# noinspection PyClassVar
|
# noinspection PyClassVar
|
||||||
model = PromoCode # type: ignore [misc]
|
model = PromoCode
|
||||||
list_display = (
|
list_display = (
|
||||||
"code",
|
"code",
|
||||||
"discount_percent",
|
"discount_percent",
|
||||||
|
|
@ -796,9 +795,9 @@ class PromoCodeAdmin(
|
||||||
@register(Promotion)
|
@register(Promotion)
|
||||||
class PromotionAdmin(
|
class PromotionAdmin(
|
||||||
DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin
|
DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin
|
||||||
): # type: ignore [misc, type-arg]
|
):
|
||||||
# noinspection PyClassVar
|
# noinspection PyClassVar
|
||||||
model = Promotion # type: ignore [misc]
|
model = Promotion
|
||||||
list_display = (
|
list_display = (
|
||||||
"name",
|
"name",
|
||||||
"discount_percent",
|
"discount_percent",
|
||||||
|
|
@ -825,9 +824,9 @@ class PromotionAdmin(
|
||||||
@register(Stock)
|
@register(Stock)
|
||||||
class StockAdmin(
|
class StockAdmin(
|
||||||
DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin
|
DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin
|
||||||
): # type: ignore [misc, type-arg]
|
):
|
||||||
# noinspection PyClassVar
|
# noinspection PyClassVar
|
||||||
model = Stock # type: ignore [misc]
|
model = Stock
|
||||||
form = StockForm
|
form = StockForm
|
||||||
list_display = (
|
list_display = (
|
||||||
"product",
|
"product",
|
||||||
|
|
@ -875,9 +874,9 @@ class StockAdmin(
|
||||||
@register(Wishlist)
|
@register(Wishlist)
|
||||||
class WishlistAdmin(
|
class WishlistAdmin(
|
||||||
DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin
|
DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin
|
||||||
): # type: ignore [misc, type-arg]
|
):
|
||||||
# noinspection PyClassVar
|
# noinspection PyClassVar
|
||||||
model = Wishlist # type: ignore [misc]
|
model = Wishlist
|
||||||
list_display = (
|
list_display = (
|
||||||
"user",
|
"user",
|
||||||
"modified",
|
"modified",
|
||||||
|
|
@ -903,9 +902,9 @@ class WishlistAdmin(
|
||||||
@register(ProductImage)
|
@register(ProductImage)
|
||||||
class ProductImageAdmin(
|
class ProductImageAdmin(
|
||||||
DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin
|
DjangoQLSearchMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin
|
||||||
): # type: ignore [misc, type-arg]
|
):
|
||||||
# noinspection PyClassVar
|
# noinspection PyClassVar
|
||||||
model = ProductImage # type: ignore [misc]
|
model = ProductImage
|
||||||
list_display = (
|
list_display = (
|
||||||
"alt",
|
"alt",
|
||||||
"product",
|
"product",
|
||||||
|
|
@ -939,9 +938,9 @@ class ProductImageAdmin(
|
||||||
|
|
||||||
|
|
||||||
@register(Address)
|
@register(Address)
|
||||||
class AddressAdmin(DjangoQLSearchMixin, FieldsetsMixin, GISModelAdmin): # type: ignore [misc]
|
class AddressAdmin(DjangoQLSearchMixin, FieldsetsMixin, GISModelAdmin):
|
||||||
# noinspection PyClassVar
|
# noinspection PyClassVar
|
||||||
model = Address # type: ignore [misc]
|
model = Address
|
||||||
list_display = (
|
list_display = (
|
||||||
"street",
|
"street",
|
||||||
"city",
|
"city",
|
||||||
|
|
@ -991,9 +990,9 @@ class AddressAdmin(DjangoQLSearchMixin, FieldsetsMixin, GISModelAdmin): # type:
|
||||||
@register(CustomerRelationshipManagementProvider)
|
@register(CustomerRelationshipManagementProvider)
|
||||||
class CustomerRelationshipManagementProviderAdmin(
|
class CustomerRelationshipManagementProviderAdmin(
|
||||||
DjangoQLSearchMixin, FieldsetsMixin, ModelAdmin
|
DjangoQLSearchMixin, FieldsetsMixin, ModelAdmin
|
||||||
): # type: ignore [misc, type-arg]
|
):
|
||||||
# noinspection PyClassVar
|
# noinspection PyClassVar
|
||||||
model = CustomerRelationshipManagementProvider # type: ignore [misc]
|
model = CustomerRelationshipManagementProvider
|
||||||
list_display = (
|
list_display = (
|
||||||
"name",
|
"name",
|
||||||
"default",
|
"default",
|
||||||
|
|
@ -1020,9 +1019,9 @@ class CustomerRelationshipManagementProviderAdmin(
|
||||||
|
|
||||||
|
|
||||||
@register(OrderCrmLink)
|
@register(OrderCrmLink)
|
||||||
class OrderCrmLinkAdmin(DjangoQLSearchMixin, FieldsetsMixin, ModelAdmin): # type: ignore [misc, type-arg]
|
class OrderCrmLinkAdmin(DjangoQLSearchMixin, FieldsetsMixin, ModelAdmin):
|
||||||
# noinspection PyClassVar
|
# noinspection PyClassVar
|
||||||
model = OrderCrmLink # type: ignore [misc]
|
model = OrderCrmLink
|
||||||
list_display = (
|
list_display = (
|
||||||
"crm_lead_id",
|
"crm_lead_id",
|
||||||
"order",
|
"order",
|
||||||
|
|
@ -1086,7 +1085,7 @@ class ConstanceConfig:
|
||||||
# noinspection PyTypeChecker
|
# noinspection PyTypeChecker
|
||||||
site.unregister([Config])
|
site.unregister([Config])
|
||||||
# noinspection PyTypeChecker
|
# noinspection PyTypeChecker
|
||||||
site.register([ConstanceConfig], BaseConstanceAdmin) # type: ignore [list-item]
|
site.register([ConstanceConfig], BaseConstanceAdmin)
|
||||||
site.site_title = settings.PROJECT_NAME
|
site.site_title = settings.PROJECT_NAME
|
||||||
site.site_header = "eVibes"
|
site.site_header = "eVibes"
|
||||||
site.index_title = settings.PROJECT_NAME
|
site.index_title = settings.PROJECT_NAME
|
||||||
|
|
|
||||||
|
|
@ -434,9 +434,9 @@ def _lang_analyzer(lang_code: str) -> str:
|
||||||
|
|
||||||
class ActiveOnlyMixin:
|
class ActiveOnlyMixin:
|
||||||
def get_queryset(self) -> QuerySet[Any]:
|
def get_queryset(self) -> QuerySet[Any]:
|
||||||
return super().get_queryset().filter(is_active=True) # type: ignore [no-any-return, misc]
|
return super().get_queryset().filter(is_active=True)
|
||||||
|
|
||||||
def should_index_object(self, obj) -> bool: # type: ignore [no-untyped-def]
|
def should_index_object(self, obj) -> bool:
|
||||||
return getattr(obj, "is_active", False)
|
return getattr(obj, "is_active", False)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ from engine.core.elasticsearch import (
|
||||||
from engine.core.models import Brand, Category, Product
|
from engine.core.models import Brand, Category, Product
|
||||||
|
|
||||||
|
|
||||||
class BaseDocument(Document): # type: ignore [misc]
|
class BaseDocument(Document):
|
||||||
name = fields.TextField(
|
name = fields.TextField(
|
||||||
attr="name",
|
attr="name",
|
||||||
analyzer="standard",
|
analyzer="standard",
|
||||||
|
|
@ -197,7 +197,7 @@ add_multilang_fields(BrandDocument)
|
||||||
registry.register_document(BrandDocument)
|
registry.register_document(BrandDocument)
|
||||||
|
|
||||||
|
|
||||||
class TestModelDocument(Document): # type: ignore [misc]
|
class TestModelDocument(Document):
|
||||||
class Index:
|
class Index:
|
||||||
name = "testmodels"
|
name = "testmodels"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,7 @@ from engine.core.models import (
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class CaseInsensitiveListFilter(BaseInFilter, CharFilter): # type: ignore [misc]
|
class CaseInsensitiveListFilter(BaseInFilter, CharFilter):
|
||||||
def filter(self, qs: QuerySet[Any], value: Any) -> QuerySet[Any]:
|
def filter(self, qs: QuerySet[Any], value: Any) -> QuerySet[Any]:
|
||||||
if not value:
|
if not value:
|
||||||
return qs
|
return qs
|
||||||
|
|
@ -74,7 +74,7 @@ class CaseInsensitiveListFilter(BaseInFilter, CharFilter): # type: ignore [misc
|
||||||
|
|
||||||
|
|
||||||
# noinspection PyUnusedLocal
|
# noinspection PyUnusedLocal
|
||||||
class ProductFilter(FilterSet): # type: ignore [misc]
|
class ProductFilter(FilterSet):
|
||||||
search = CharFilter(field_name="name", method="search_products", label=_("Search"))
|
search = CharFilter(field_name="name", method="search_products", label=_("Search"))
|
||||||
uuid = UUIDFilter(field_name="uuid", lookup_expr="exact", label=_("UUID"))
|
uuid = UUIDFilter(field_name="uuid", lookup_expr="exact", label=_("UUID"))
|
||||||
name = CharFilter(lookup_expr="icontains", label=_("Name"))
|
name = CharFilter(lookup_expr="icontains", label=_("Name"))
|
||||||
|
|
@ -188,7 +188,7 @@ class ProductFilter(FilterSet): # type: ignore [misc]
|
||||||
if not value:
|
if not value:
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
es_products = process_query(query=value, indexes=("products",)) # type: ignore
|
es_products = process_query(query=value, indexes=("products",))
|
||||||
uuids = [p.get("uuid") for p in (es_products or {}).get("products", [])][:33]
|
uuids = [p.get("uuid") for p in (es_products or {}).get("products", [])][:33]
|
||||||
if not uuids:
|
if not uuids:
|
||||||
return queryset.none()
|
return queryset.none()
|
||||||
|
|
@ -392,7 +392,7 @@ class ProductFilter(FilterSet): # type: ignore [misc]
|
||||||
|
|
||||||
|
|
||||||
# noinspection PyUnusedLocal
|
# noinspection PyUnusedLocal
|
||||||
class OrderFilter(FilterSet): # type: ignore [misc]
|
class OrderFilter(FilterSet):
|
||||||
search = CharFilter(
|
search = CharFilter(
|
||||||
method="filter_search",
|
method="filter_search",
|
||||||
label=_("Search (ID, product name or part number)"),
|
label=_("Search (ID, product name or part number)"),
|
||||||
|
|
@ -455,7 +455,7 @@ class OrderFilter(FilterSet): # type: ignore [misc]
|
||||||
).distinct()
|
).distinct()
|
||||||
|
|
||||||
|
|
||||||
class WishlistFilter(FilterSet): # type: ignore [misc]
|
class WishlistFilter(FilterSet):
|
||||||
uuid = UUIDFilter(field_name="uuid", lookup_expr="exact")
|
uuid = UUIDFilter(field_name="uuid", lookup_expr="exact")
|
||||||
user_email = CharFilter(
|
user_email = CharFilter(
|
||||||
field_name="user__email", lookup_expr="iexact", label=_("User email")
|
field_name="user__email", lookup_expr="iexact", label=_("User email")
|
||||||
|
|
@ -479,7 +479,7 @@ class WishlistFilter(FilterSet): # type: ignore [misc]
|
||||||
|
|
||||||
|
|
||||||
# noinspection PyUnusedLocal
|
# noinspection PyUnusedLocal
|
||||||
class CategoryFilter(FilterSet): # type: ignore [misc]
|
class CategoryFilter(FilterSet):
|
||||||
search = CharFilter(
|
search = CharFilter(
|
||||||
field_name="name", method="search_categories", label=_("Search")
|
field_name="name", method="search_categories", label=_("Search")
|
||||||
)
|
)
|
||||||
|
|
@ -521,7 +521,7 @@ class CategoryFilter(FilterSet): # type: ignore [misc]
|
||||||
for category in process_query(query=value, indexes=("categories",))[
|
for category in process_query(query=value, indexes=("categories",))[
|
||||||
"categories"
|
"categories"
|
||||||
]
|
]
|
||||||
] # type: ignore
|
]
|
||||||
|
|
||||||
return queryset.filter(uuid__in=uuids)
|
return queryset.filter(uuid__in=uuids)
|
||||||
|
|
||||||
|
|
@ -621,7 +621,7 @@ class CategoryFilter(FilterSet): # type: ignore [misc]
|
||||||
|
|
||||||
|
|
||||||
# noinspection PyUnusedLocal
|
# noinspection PyUnusedLocal
|
||||||
class BrandFilter(FilterSet): # type: ignore [misc]
|
class BrandFilter(FilterSet):
|
||||||
search = CharFilter(field_name="name", method="search_brands", label=_("Search"))
|
search = CharFilter(field_name="name", method="search_brands", label=_("Search"))
|
||||||
uuid = UUIDFilter(field_name="uuid", lookup_expr="exact")
|
uuid = UUIDFilter(field_name="uuid", lookup_expr="exact")
|
||||||
name = CharFilter(lookup_expr="icontains", label=_("Name"))
|
name = CharFilter(lookup_expr="icontains", label=_("Name"))
|
||||||
|
|
@ -653,12 +653,12 @@ class BrandFilter(FilterSet): # type: ignore [misc]
|
||||||
uuids = [
|
uuids = [
|
||||||
brand.get("uuid")
|
brand.get("uuid")
|
||||||
for brand in process_query(query=value, indexes=("brands",))["brands"]
|
for brand in process_query(query=value, indexes=("brands",))["brands"]
|
||||||
] # type: ignore
|
]
|
||||||
|
|
||||||
return queryset.filter(uuid__in=uuids)
|
return queryset.filter(uuid__in=uuids)
|
||||||
|
|
||||||
|
|
||||||
class FeedbackFilter(FilterSet): # type: ignore [misc]
|
class FeedbackFilter(FilterSet):
|
||||||
uuid = UUIDFilter(field_name="uuid", lookup_expr="exact", label=_("UUID"))
|
uuid = UUIDFilter(field_name="uuid", lookup_expr="exact", label=_("UUID"))
|
||||||
product_uuid = UUIDFilter(
|
product_uuid = UUIDFilter(
|
||||||
field_name="order_product__product__uuid",
|
field_name="order_product__product__uuid",
|
||||||
|
|
@ -687,7 +687,7 @@ class FeedbackFilter(FilterSet): # type: ignore [misc]
|
||||||
fields = ["uuid", "product_uuid", "user_uuid", "order_by"]
|
fields = ["uuid", "product_uuid", "user_uuid", "order_by"]
|
||||||
|
|
||||||
|
|
||||||
class AddressFilter(FilterSet): # type: ignore [misc]
|
class AddressFilter(FilterSet):
|
||||||
uuid = UUIDFilter(field_name="uuid", lookup_expr="exact", label=_("UUID"))
|
uuid = UUIDFilter(field_name="uuid", lookup_expr="exact", label=_("UUID"))
|
||||||
user_uuid = UUIDFilter(
|
user_uuid = UUIDFilter(
|
||||||
field_name="user__uuid", lookup_expr="exact", label=_("User UUID")
|
field_name="user__uuid", lookup_expr="exact", label=_("User UUID")
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ from typing import Any
|
||||||
from graphene import Mutation
|
from graphene import Mutation
|
||||||
|
|
||||||
|
|
||||||
class BaseMutation(Mutation): # type: ignore [misc]
|
class BaseMutation(Mutation):
|
||||||
def __init__(self, *args: list[Any], **kwargs: dict[Any, Any]) -> None:
|
def __init__(self, *args: list[Any], **kwargs: dict[Any, Any]) -> None:
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -53,7 +53,7 @@ def resolve_tags(product, tag_uuids):
|
||||||
product.tags.set(tags)
|
product.tags.set(tags)
|
||||||
|
|
||||||
|
|
||||||
class AttributeInput(InputObjectType): # type: ignore[misc]
|
class AttributeInput(InputObjectType):
|
||||||
attribute_uuid = UUID(required=False, name="attributeUuid")
|
attribute_uuid = UUID(required=False, name="attributeUuid")
|
||||||
group_name = String(required=False, name="groupName")
|
group_name = String(required=False, name="groupName")
|
||||||
attribute_name = String(required=False, name="attributeName")
|
attribute_name = String(required=False, name="attributeName")
|
||||||
|
|
@ -61,7 +61,7 @@ class AttributeInput(InputObjectType): # type: ignore[misc]
|
||||||
value = String(required=True)
|
value = String(required=True)
|
||||||
|
|
||||||
|
|
||||||
class ProductInput(InputObjectType): # type: ignore[misc]
|
class ProductInput(InputObjectType):
|
||||||
name = NonNull(String)
|
name = NonNull(String)
|
||||||
description = String(required=False)
|
description = String(required=False)
|
||||||
is_digital = Boolean(required=False, name="isDigital")
|
is_digital = Boolean(required=False, name="isDigital")
|
||||||
|
|
@ -85,15 +85,15 @@ class CreateProduct(BaseMutation):
|
||||||
product = Field(ProductType)
|
product = Field(ProductType)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def mutate(parent, info, product_data): # type: ignore [override]
|
def mutate(parent, info, product_data):
|
||||||
user = info.context.user
|
user = info.context.user
|
||||||
if not user.has_perm("core.add_product"):
|
if not user.has_perm("core.add_product"):
|
||||||
raise PermissionDenied(permission_denied_message)
|
raise PermissionDenied(permission_denied_message)
|
||||||
category = Category.objects.get(uuid=product_data["category_uuid"]) # type: ignore[index]
|
category = Category.objects.get(uuid=product_data["category_uuid"])
|
||||||
brand = None
|
brand = None
|
||||||
if product_data.get("brand_uuid"):
|
if product_data.get("brand_uuid"):
|
||||||
with suppress(Brand.DoesNotExist): # type: ignore[name-defined]
|
with suppress(Brand.DoesNotExist):
|
||||||
brand = Brand.objects.get(uuid=product_data["brand_uuid"]) # type: ignore[index]
|
brand = Brand.objects.get(uuid=product_data["brand_uuid"])
|
||||||
|
|
||||||
product = Product.objects.create(
|
product = Product.objects.create(
|
||||||
name=product_data["name"],
|
name=product_data["name"],
|
||||||
|
|
@ -124,7 +124,7 @@ class UpdateProduct(BaseMutation):
|
||||||
product = Field(ProductType)
|
product = Field(ProductType)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def mutate(parent, info, product_uuid, product_data): # type: ignore [override]
|
def mutate(parent, info, product_uuid, product_data):
|
||||||
user = info.context.user
|
user = info.context.user
|
||||||
if not user.has_perm("core.change_product"):
|
if not user.has_perm("core.change_product"):
|
||||||
raise PermissionDenied(permission_denied_message)
|
raise PermissionDenied(permission_denied_message)
|
||||||
|
|
@ -142,10 +142,10 @@ class UpdateProduct(BaseMutation):
|
||||||
updates[model_field] = product_data[field_in]
|
updates[model_field] = product_data[field_in]
|
||||||
|
|
||||||
if product_data.get("category_uuid"):
|
if product_data.get("category_uuid"):
|
||||||
product.category = Category.objects.get(uuid=product_data["category_uuid"]) # type: ignore[index]
|
product.category = Category.objects.get(uuid=product_data["category_uuid"])
|
||||||
if product_data.get("brand_uuid") is not None:
|
if product_data.get("brand_uuid") is not None:
|
||||||
if product_data.get("brand_uuid"):
|
if product_data.get("brand_uuid"):
|
||||||
product.brand = Brand.objects.get(uuid=product_data["brand_uuid"]) # type: ignore[index]
|
product.brand = Brand.objects.get(uuid=product_data["brand_uuid"])
|
||||||
else:
|
else:
|
||||||
product.brand = None
|
product.brand = None
|
||||||
|
|
||||||
|
|
@ -171,7 +171,7 @@ class DeleteProduct(BaseMutation):
|
||||||
ok = Boolean()
|
ok = Boolean()
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def mutate(parent, info, product_uuid): # type: ignore [override]
|
def mutate(parent, info, product_uuid):
|
||||||
user = info.context.user
|
user = info.context.user
|
||||||
if not user.has_perm("core.delete_product"):
|
if not user.has_perm("core.delete_product"):
|
||||||
raise PermissionDenied(permission_denied_message)
|
raise PermissionDenied(permission_denied_message)
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,6 @@ from django.http import Http404
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from graphene import UUID, Boolean, Field, Int, List, String
|
from graphene import UUID, Boolean, Field, Int, List, String
|
||||||
from graphene.types.generic import GenericScalar
|
from graphene.types.generic import GenericScalar
|
||||||
from graphene_django.utils import camelize
|
|
||||||
|
|
||||||
from engine.core.elasticsearch import process_query
|
from engine.core.elasticsearch import process_query
|
||||||
from engine.core.graphene import BaseMutation
|
from engine.core.graphene import BaseMutation
|
||||||
|
|
@ -27,6 +26,7 @@ from engine.core.utils.emailing import contact_us_email
|
||||||
from engine.core.utils.messages import permission_denied_message
|
from engine.core.utils.messages import permission_denied_message
|
||||||
from engine.core.utils.nominatim import fetch_address_suggestions
|
from engine.core.utils.nominatim import fetch_address_suggestions
|
||||||
from engine.payments.graphene.object_types import TransactionType
|
from engine.payments.graphene.object_types import TransactionType
|
||||||
|
from evibes.utils.renderers import camelize
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
@ -49,7 +49,7 @@ class CacheOperator(BaseMutation):
|
||||||
data = GenericScalar(description=_("cached data"))
|
data = GenericScalar(description=_("cached data"))
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def mutate(parent, info, key, data=None, timeout=None) -> dict[Any, Any]: # type: ignore [override]
|
def mutate(parent, info, key, data=None, timeout=None) -> dict[Any, Any]:
|
||||||
return camelize(web_cache(info.context, key, data, timeout))
|
return camelize(web_cache(info.context, key, data, timeout))
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -64,7 +64,7 @@ class RequestCursedURL(BaseMutation):
|
||||||
data = GenericScalar(description=_("camelized JSON data from the requested URL"))
|
data = GenericScalar(description=_("camelized JSON data from the requested URL"))
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def mutate(parent, info, url) -> dict[str, Any]: # type: ignore [override]
|
def mutate(parent, info, url) -> dict[str, Any]:
|
||||||
if not is_url_safe(url):
|
if not is_url_safe(url):
|
||||||
raise BadRequest(_("only URLs starting with http(s):// are allowed"))
|
raise BadRequest(_("only URLs starting with http(s):// are allowed"))
|
||||||
try:
|
try:
|
||||||
|
|
@ -94,7 +94,7 @@ class AddOrderProduct(BaseMutation):
|
||||||
order = Field(OrderType)
|
order = Field(OrderType)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def mutate(parent, info, product_uuid, order_uuid, attributes=None): # type: ignore [override]
|
def mutate(parent, info, product_uuid, order_uuid, attributes=None):
|
||||||
user = info.context.user
|
user = info.context.user
|
||||||
try:
|
try:
|
||||||
order = Order.objects.get(uuid=order_uuid)
|
order = Order.objects.get(uuid=order_uuid)
|
||||||
|
|
@ -123,7 +123,7 @@ class RemoveOrderProduct(BaseMutation):
|
||||||
order = Field(OrderType)
|
order = Field(OrderType)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def mutate(parent, info, product_uuid, order_uuid, attributes=None): # type: ignore [override]
|
def mutate(parent, info, product_uuid, order_uuid, attributes=None):
|
||||||
user = info.context.user
|
user = info.context.user
|
||||||
try:
|
try:
|
||||||
order = Order.objects.get(uuid=order_uuid)
|
order = Order.objects.get(uuid=order_uuid)
|
||||||
|
|
@ -150,7 +150,7 @@ class RemoveAllOrderProducts(BaseMutation):
|
||||||
order = Field(OrderType)
|
order = Field(OrderType)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def mutate(parent, info, order_uuid): # type: ignore [override]
|
def mutate(parent, info, order_uuid):
|
||||||
user = info.context.user
|
user = info.context.user
|
||||||
order = Order.objects.get(uuid=order_uuid)
|
order = Order.objects.get(uuid=order_uuid)
|
||||||
if not (user.has_perm("core.delete_orderproduct") or user == order.user):
|
if not (user.has_perm("core.delete_orderproduct") or user == order.user):
|
||||||
|
|
@ -173,7 +173,7 @@ class RemoveOrderProductsOfAKind(BaseMutation):
|
||||||
order = Field(OrderType)
|
order = Field(OrderType)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def mutate(parent, info, product_uuid, order_uuid): # type: ignore [override]
|
def mutate(parent, info, product_uuid, order_uuid):
|
||||||
user = info.context.user
|
user = info.context.user
|
||||||
order = Order.objects.get(uuid=order_uuid)
|
order = Order.objects.get(uuid=order_uuid)
|
||||||
if not (user.has_perm("core.delete_orderproduct") or user == order.user):
|
if not (user.has_perm("core.delete_orderproduct") or user == order.user):
|
||||||
|
|
@ -214,7 +214,7 @@ class BuyOrder(BaseMutation):
|
||||||
shipping_address=None,
|
shipping_address=None,
|
||||||
billing_address=None,
|
billing_address=None,
|
||||||
chosen_products=None,
|
chosen_products=None,
|
||||||
): # type: ignore [override]
|
):
|
||||||
if not any([order_uuid, order_hr_id]) or all([order_uuid, order_hr_id]):
|
if not any([order_uuid, order_hr_id]) or all([order_uuid, order_hr_id]):
|
||||||
raise BadRequest(
|
raise BadRequest(
|
||||||
_(
|
_(
|
||||||
|
|
@ -276,7 +276,7 @@ class BulkOrderAction(BaseMutation):
|
||||||
products,
|
products,
|
||||||
order_uuid=None,
|
order_uuid=None,
|
||||||
order_hr_id=None,
|
order_hr_id=None,
|
||||||
): # type: ignore [override]
|
):
|
||||||
if not any([order_uuid, order_hr_id]) or all([order_uuid, order_hr_id]):
|
if not any([order_uuid, order_hr_id]) or all([order_uuid, order_hr_id]):
|
||||||
raise BadRequest(
|
raise BadRequest(
|
||||||
_(
|
_(
|
||||||
|
|
@ -326,7 +326,7 @@ class BulkWishlistAction(BaseMutation):
|
||||||
action,
|
action,
|
||||||
products,
|
products,
|
||||||
wishlist_uuid=None,
|
wishlist_uuid=None,
|
||||||
): # type: ignore [override]
|
):
|
||||||
if not wishlist_uuid:
|
if not wishlist_uuid:
|
||||||
raise BadRequest(_("please provide wishlist_uuid value"))
|
raise BadRequest(_("please provide wishlist_uuid value"))
|
||||||
user = info.context.user
|
user = info.context.user
|
||||||
|
|
@ -379,7 +379,7 @@ class BuyUnregisteredOrder(BaseMutation):
|
||||||
customer_shipping_address=None,
|
customer_shipping_address=None,
|
||||||
promocode_uuid=None,
|
promocode_uuid=None,
|
||||||
is_business=False,
|
is_business=False,
|
||||||
): # type: ignore [override]
|
):
|
||||||
order = Order.objects.create(status="MOMENTAL")
|
order = Order.objects.create(status="MOMENTAL")
|
||||||
transaction = order.buy_without_registration(
|
transaction = order.buy_without_registration(
|
||||||
products=products,
|
products=products,
|
||||||
|
|
@ -408,7 +408,7 @@ class AddWishlistProduct(BaseMutation):
|
||||||
wishlist = Field(WishlistType)
|
wishlist = Field(WishlistType)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def mutate(parent, info, product_uuid, wishlist_uuid): # type: ignore [override]
|
def mutate(parent, info, product_uuid, wishlist_uuid):
|
||||||
user = info.context.user
|
user = info.context.user
|
||||||
try:
|
try:
|
||||||
wishlist = Wishlist.objects.get(uuid=wishlist_uuid)
|
wishlist = Wishlist.objects.get(uuid=wishlist_uuid)
|
||||||
|
|
@ -436,7 +436,7 @@ class RemoveWishlistProduct(BaseMutation):
|
||||||
wishlist = Field(WishlistType)
|
wishlist = Field(WishlistType)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def mutate(parent, info, product_uuid, wishlist_uuid): # type: ignore [override]
|
def mutate(parent, info, product_uuid, wishlist_uuid):
|
||||||
user = info.context.user
|
user = info.context.user
|
||||||
try:
|
try:
|
||||||
wishlist = Wishlist.objects.get(uuid=wishlist_uuid)
|
wishlist = Wishlist.objects.get(uuid=wishlist_uuid)
|
||||||
|
|
@ -463,7 +463,7 @@ class RemoveAllWishlistProducts(BaseMutation):
|
||||||
wishlist = Field(WishlistType)
|
wishlist = Field(WishlistType)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def mutate(parent, info, wishlist_uuid): # type: ignore [override]
|
def mutate(parent, info, wishlist_uuid):
|
||||||
user = info.context.user
|
user = info.context.user
|
||||||
try:
|
try:
|
||||||
wishlist = Wishlist.objects.get(uuid=wishlist_uuid)
|
wishlist = Wishlist.objects.get(uuid=wishlist_uuid)
|
||||||
|
|
@ -494,7 +494,7 @@ class BuyWishlist(BaseMutation):
|
||||||
transaction = Field(TransactionType, required=False)
|
transaction = Field(TransactionType, required=False)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def mutate(parent, info, wishlist_uuid, force_balance=False, force_payment=False): # type: ignore [override]
|
def mutate(parent, info, wishlist_uuid, force_balance=False, force_payment=False):
|
||||||
user = info.context.user
|
user = info.context.user
|
||||||
try:
|
try:
|
||||||
wishlist = Wishlist.objects.get(uuid=wishlist_uuid)
|
wishlist = Wishlist.objects.get(uuid=wishlist_uuid)
|
||||||
|
|
@ -557,7 +557,7 @@ class BuyProduct(BaseMutation):
|
||||||
attributes=None,
|
attributes=None,
|
||||||
force_balance=False,
|
force_balance=False,
|
||||||
force_payment=False,
|
force_payment=False,
|
||||||
): # type: ignore [override]
|
):
|
||||||
user = info.context.user
|
user = info.context.user
|
||||||
order = Order.objects.create(user=user, status="MOMENTAL")
|
order = Order.objects.create(user=user, status="MOMENTAL")
|
||||||
order.add_product(
|
order.add_product(
|
||||||
|
|
@ -589,7 +589,7 @@ class FeedbackProductAction(BaseMutation):
|
||||||
feedback = Field(FeedbackType, required=False)
|
feedback = Field(FeedbackType, required=False)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def mutate(parent, info, order_product_uuid, action, comment=None, rating=None): # type: ignore [override]
|
def mutate(parent, info, order_product_uuid, action, comment=None, rating=None):
|
||||||
user = info.context.user
|
user = info.context.user
|
||||||
try:
|
try:
|
||||||
order_product = OrderProduct.objects.get(uuid=order_product_uuid)
|
order_product = OrderProduct.objects.get(uuid=order_product_uuid)
|
||||||
|
|
@ -620,7 +620,7 @@ class CreateAddress(BaseMutation):
|
||||||
address = Field(AddressType)
|
address = Field(AddressType)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def mutate(parent, info, raw_data): # type: ignore [override]
|
def mutate(parent, info, raw_data):
|
||||||
user = info.context.user if info.context.user.is_authenticated else None
|
user = info.context.user if info.context.user.is_authenticated else None
|
||||||
|
|
||||||
address = Address.objects.create(raw_data=raw_data, user=user)
|
address = Address.objects.create(raw_data=raw_data, user=user)
|
||||||
|
|
@ -635,7 +635,7 @@ class DeleteAddress(BaseMutation):
|
||||||
success = Boolean()
|
success = Boolean()
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def mutate(parent, info, uuid): # type: ignore [override]
|
def mutate(parent, info, uuid):
|
||||||
try:
|
try:
|
||||||
address = Address.objects.get(uuid=uuid)
|
address = Address.objects.get(uuid=uuid)
|
||||||
if (
|
if (
|
||||||
|
|
@ -663,7 +663,7 @@ class AutocompleteAddress(BaseMutation):
|
||||||
suggestions = GenericScalar()
|
suggestions = GenericScalar()
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def mutate(parent, info, q, limit): # type: ignore [override]
|
def mutate(parent, info, q, limit):
|
||||||
if 1 > limit > 10:
|
if 1 > limit > 10:
|
||||||
raise BadRequest(_("limit must be between 1 and 10"))
|
raise BadRequest(_("limit must be between 1 and 10"))
|
||||||
try:
|
try:
|
||||||
|
|
@ -688,7 +688,7 @@ class ContactUs(BaseMutation):
|
||||||
error = String()
|
error = String()
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def mutate(parent, info, email, name, subject, message, phone_number=None): # type: ignore [override]
|
def mutate(parent, info, email, name, subject, message, phone_number=None):
|
||||||
try:
|
try:
|
||||||
contact_us_email.delay(
|
contact_us_email.delay(
|
||||||
{
|
{
|
||||||
|
|
@ -717,7 +717,7 @@ class Search(BaseMutation):
|
||||||
description = _("elasticsearch - works like a charm")
|
description = _("elasticsearch - works like a charm")
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def mutate(parent, info, query): # type: ignore [override]
|
def mutate(parent, info, query):
|
||||||
data = process_query(query=query, request=info.context)
|
data = process_query(query=query, request=info.context)
|
||||||
|
|
||||||
# noinspection PyTypeChecker
|
# noinspection PyTypeChecker
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,6 @@ from graphene import (
|
||||||
from graphene.types.generic import GenericScalar
|
from graphene.types.generic import GenericScalar
|
||||||
from graphene_django import DjangoObjectType
|
from graphene_django import DjangoObjectType
|
||||||
from graphene_django.filter import DjangoFilterConnectionField
|
from graphene_django.filter import DjangoFilterConnectionField
|
||||||
from graphene_django.utils import camelize
|
|
||||||
from mptt.querysets import TreeQuerySet
|
from mptt.querysets import TreeQuerySet
|
||||||
|
|
||||||
from engine.core.models import (
|
from engine.core.models import (
|
||||||
|
|
@ -56,11 +55,12 @@ from engine.core.utils.seo_builders import (
|
||||||
website_schema,
|
website_schema,
|
||||||
)
|
)
|
||||||
from engine.payments.graphene.object_types import TransactionType
|
from engine.payments.graphene.object_types import TransactionType
|
||||||
|
from evibes.utils.renderers import camelize
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class SEOMetaType(ObjectType): # type: ignore [misc]
|
class SEOMetaType(ObjectType):
|
||||||
title = String()
|
title = String()
|
||||||
description = String()
|
description = String()
|
||||||
canonical = String()
|
canonical = String()
|
||||||
|
|
@ -71,7 +71,7 @@ class SEOMetaType(ObjectType): # type: ignore [misc]
|
||||||
hreflang = String()
|
hreflang = String()
|
||||||
|
|
||||||
|
|
||||||
class AttributeType(DjangoObjectType): # type: ignore [misc]
|
class AttributeType(DjangoObjectType):
|
||||||
values = List(lambda: AttributeValueType, description=_("attribute values"))
|
values = List(lambda: AttributeValueType, description=_("attribute values"))
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|
@ -91,7 +91,7 @@ class AttributeType(DjangoObjectType): # type: ignore [misc]
|
||||||
return base_qs
|
return base_qs
|
||||||
|
|
||||||
|
|
||||||
class AttributeGroupType(DjangoObjectType): # type: ignore [misc]
|
class AttributeGroupType(DjangoObjectType):
|
||||||
attributes = List(lambda: AttributeType, description=_("grouped attributes"))
|
attributes = List(lambda: AttributeType, description=_("grouped attributes"))
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|
@ -112,7 +112,7 @@ class AttributeGroupType(DjangoObjectType): # type: ignore [misc]
|
||||||
return qs
|
return qs
|
||||||
|
|
||||||
|
|
||||||
class BrandType(DjangoObjectType): # type: ignore [misc]
|
class BrandType(DjangoObjectType):
|
||||||
categories = List(lambda: CategoryType, description=_("categories"))
|
categories = List(lambda: CategoryType, description=_("categories"))
|
||||||
seo_meta = Field(SEOMetaType, description=_("SEO Meta snapshot"))
|
seo_meta = Field(SEOMetaType, description=_("SEO Meta snapshot"))
|
||||||
|
|
||||||
|
|
@ -198,17 +198,17 @@ class BrandType(DjangoObjectType): # type: ignore [misc]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class FilterableAttributeType(ObjectType): # type: ignore [misc]
|
class FilterableAttributeType(ObjectType):
|
||||||
attribute_name = String(required=True)
|
attribute_name = String(required=True)
|
||||||
possible_values = List(String, required=True)
|
possible_values = List(String, required=True)
|
||||||
|
|
||||||
|
|
||||||
class MinMaxPriceType(ObjectType): # type: ignore [misc]
|
class MinMaxPriceType(ObjectType):
|
||||||
min_price = Float()
|
min_price = Float()
|
||||||
max_price = Float()
|
max_price = Float()
|
||||||
|
|
||||||
|
|
||||||
class CategoryType(DjangoObjectType): # type: ignore [misc]
|
class CategoryType(DjangoObjectType):
|
||||||
children = List(
|
children = List(
|
||||||
lambda: CategoryType,
|
lambda: CategoryType,
|
||||||
description=_("categories"),
|
description=_("categories"),
|
||||||
|
|
@ -358,7 +358,7 @@ class CategoryType(DjangoObjectType): # type: ignore [misc]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class VendorType(DjangoObjectType): # type: ignore [misc]
|
class VendorType(DjangoObjectType):
|
||||||
markup_percent = Float(description=_("markup percentage"))
|
markup_percent = Float(description=_("markup percentage"))
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|
@ -369,7 +369,7 @@ class VendorType(DjangoObjectType): # type: ignore [misc]
|
||||||
description = _("vendors")
|
description = _("vendors")
|
||||||
|
|
||||||
|
|
||||||
class AddressType(DjangoObjectType): # type: ignore [misc]
|
class AddressType(DjangoObjectType):
|
||||||
latitude = Float(description=_("Latitude (Y coordinate)"))
|
latitude = Float(description=_("Latitude (Y coordinate)"))
|
||||||
longitude = Float(description=_("Longitude (X coordinate)"))
|
longitude = Float(description=_("Longitude (X coordinate)"))
|
||||||
|
|
||||||
|
|
@ -399,7 +399,7 @@ class AddressType(DjangoObjectType): # type: ignore [misc]
|
||||||
return self.location.y if self.location else None
|
return self.location.y if self.location else None
|
||||||
|
|
||||||
|
|
||||||
class FeedbackType(DjangoObjectType): # type: ignore [misc]
|
class FeedbackType(DjangoObjectType):
|
||||||
comment = String(description=_("comment"))
|
comment = String(description=_("comment"))
|
||||||
rating = Int(
|
rating = Int(
|
||||||
description=_("rating value from 1 to 10, inclusive, or 0 if not set.")
|
description=_("rating value from 1 to 10, inclusive, or 0 if not set.")
|
||||||
|
|
@ -413,7 +413,7 @@ class FeedbackType(DjangoObjectType): # type: ignore [misc]
|
||||||
description = _("represents feedback from a user.")
|
description = _("represents feedback from a user.")
|
||||||
|
|
||||||
|
|
||||||
class OrderProductType(DjangoObjectType): # type: ignore [misc]
|
class OrderProductType(DjangoObjectType):
|
||||||
attributes = GenericScalar(description=_("attributes"))
|
attributes = GenericScalar(description=_("attributes"))
|
||||||
notifications = GenericScalar(description=_("notifications"))
|
notifications = GenericScalar(description=_("notifications"))
|
||||||
download_url = String(
|
download_url = String(
|
||||||
|
|
@ -451,7 +451,7 @@ class OrderProductType(DjangoObjectType): # type: ignore [misc]
|
||||||
return self.download_url
|
return self.download_url
|
||||||
|
|
||||||
|
|
||||||
class OrderType(DjangoObjectType): # type: ignore [misc]
|
class OrderType(DjangoObjectType):
|
||||||
order_products = DjangoFilterConnectionField(
|
order_products = DjangoFilterConnectionField(
|
||||||
OrderProductType, description=_("a list of order products in this order")
|
OrderProductType, description=_("a list of order products in this order")
|
||||||
)
|
)
|
||||||
|
|
@ -508,7 +508,7 @@ class OrderType(DjangoObjectType): # type: ignore [misc]
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
class ProductImageType(DjangoObjectType): # type: ignore [misc]
|
class ProductImageType(DjangoObjectType):
|
||||||
image = String(description=_("image url"))
|
image = String(description=_("image url"))
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|
@ -522,7 +522,7 @@ class ProductImageType(DjangoObjectType): # type: ignore [misc]
|
||||||
return info.context.build_absolute_uri(self.image.url) if self.image else ""
|
return info.context.build_absolute_uri(self.image.url) if self.image else ""
|
||||||
|
|
||||||
|
|
||||||
class ProductType(DjangoObjectType): # type: ignore [misc]
|
class ProductType(DjangoObjectType):
|
||||||
category = Field(CategoryType, description=_("category"))
|
category = Field(CategoryType, description=_("category"))
|
||||||
images = DjangoFilterConnectionField(ProductImageType, description=_("images"))
|
images = DjangoFilterConnectionField(ProductImageType, description=_("images"))
|
||||||
feedbacks = DjangoFilterConnectionField(FeedbackType, description=_("feedbacks"))
|
feedbacks = DjangoFilterConnectionField(FeedbackType, description=_("feedbacks"))
|
||||||
|
|
@ -646,7 +646,7 @@ class ProductType(DjangoObjectType): # type: ignore [misc]
|
||||||
return self.discount_price
|
return self.discount_price
|
||||||
|
|
||||||
|
|
||||||
class AttributeValueType(DjangoObjectType): # type: ignore [misc]
|
class AttributeValueType(DjangoObjectType):
|
||||||
value = String(description=_("attribute value"))
|
value = String(description=_("attribute value"))
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|
@ -657,7 +657,7 @@ class AttributeValueType(DjangoObjectType): # type: ignore [misc]
|
||||||
description = _("attribute value")
|
description = _("attribute value")
|
||||||
|
|
||||||
|
|
||||||
class PromoCodeType(DjangoObjectType): # type: ignore [misc]
|
class PromoCodeType(DjangoObjectType):
|
||||||
discount = Float()
|
discount = Float()
|
||||||
discount_type = String()
|
discount_type = String()
|
||||||
|
|
||||||
|
|
@ -679,13 +679,13 @@ class PromoCodeType(DjangoObjectType): # type: ignore [misc]
|
||||||
float(self.discount_percent)
|
float(self.discount_percent)
|
||||||
if self.discount_percent
|
if self.discount_percent
|
||||||
else float(self.discount_amount)
|
else float(self.discount_amount)
|
||||||
) # type: ignore [arg-type]
|
)
|
||||||
|
|
||||||
def resolve_discount_type(self: PromoCode, _info) -> str:
|
def resolve_discount_type(self: PromoCode, _info) -> str:
|
||||||
return "percent" if self.discount_percent else "amount"
|
return "percent" if self.discount_percent else "amount"
|
||||||
|
|
||||||
|
|
||||||
class PromotionType(DjangoObjectType): # type: ignore [misc]
|
class PromotionType(DjangoObjectType):
|
||||||
products = DjangoFilterConnectionField(
|
products = DjangoFilterConnectionField(
|
||||||
ProductType, description=_("products on sale")
|
ProductType, description=_("products on sale")
|
||||||
)
|
)
|
||||||
|
|
@ -698,7 +698,7 @@ class PromotionType(DjangoObjectType): # type: ignore [misc]
|
||||||
description = _("promotions")
|
description = _("promotions")
|
||||||
|
|
||||||
|
|
||||||
class StockType(DjangoObjectType): # type: ignore [misc]
|
class StockType(DjangoObjectType):
|
||||||
vendor = Field(VendorType, description=_("vendor"))
|
vendor = Field(VendorType, description=_("vendor"))
|
||||||
product = Field(ProductType, description=_("product"))
|
product = Field(ProductType, description=_("product"))
|
||||||
|
|
||||||
|
|
@ -710,7 +710,7 @@ class StockType(DjangoObjectType): # type: ignore [misc]
|
||||||
description = _("stocks")
|
description = _("stocks")
|
||||||
|
|
||||||
|
|
||||||
class WishlistType(DjangoObjectType): # type: ignore [misc]
|
class WishlistType(DjangoObjectType):
|
||||||
products = DjangoFilterConnectionField(
|
products = DjangoFilterConnectionField(
|
||||||
ProductType, description=_("wishlisted products")
|
ProductType, description=_("wishlisted products")
|
||||||
)
|
)
|
||||||
|
|
@ -722,7 +722,7 @@ class WishlistType(DjangoObjectType): # type: ignore [misc]
|
||||||
description = _("wishlists")
|
description = _("wishlists")
|
||||||
|
|
||||||
|
|
||||||
class ProductTagType(DjangoObjectType): # type: ignore [misc]
|
class ProductTagType(DjangoObjectType):
|
||||||
product_set = DjangoFilterConnectionField(
|
product_set = DjangoFilterConnectionField(
|
||||||
ProductType, description=_("tagged products")
|
ProductType, description=_("tagged products")
|
||||||
)
|
)
|
||||||
|
|
@ -735,7 +735,7 @@ class ProductTagType(DjangoObjectType): # type: ignore [misc]
|
||||||
description = _("product tags")
|
description = _("product tags")
|
||||||
|
|
||||||
|
|
||||||
class CategoryTagType(DjangoObjectType): # type: ignore [misc]
|
class CategoryTagType(DjangoObjectType):
|
||||||
category_set = DjangoFilterConnectionField(
|
category_set = DjangoFilterConnectionField(
|
||||||
CategoryType, description=_("tagged categories")
|
CategoryType, description=_("tagged categories")
|
||||||
)
|
)
|
||||||
|
|
@ -748,7 +748,7 @@ class CategoryTagType(DjangoObjectType): # type: ignore [misc]
|
||||||
description = _("categories tags")
|
description = _("categories tags")
|
||||||
|
|
||||||
|
|
||||||
class ConfigType(ObjectType): # type: ignore [misc]
|
class ConfigType(ObjectType):
|
||||||
project_name = String(description=_("project name"))
|
project_name = String(description=_("project name"))
|
||||||
company_name = String(description=_("company name"))
|
company_name = String(description=_("company name"))
|
||||||
company_address = String(description=_("company address"))
|
company_address = String(description=_("company address"))
|
||||||
|
|
@ -768,7 +768,7 @@ class ConfigType(ObjectType): # type: ignore [misc]
|
||||||
description = _("company configuration")
|
description = _("company configuration")
|
||||||
|
|
||||||
|
|
||||||
class LanguageType(ObjectType): # type: ignore [misc]
|
class LanguageType(ObjectType):
|
||||||
code = String(description=_("language code"))
|
code = String(description=_("language code"))
|
||||||
name = String(description=_("language name"))
|
name = String(description=_("language name"))
|
||||||
flag = String(description=_("language flag, if exists :)"))
|
flag = String(description=_("language flag, if exists :)"))
|
||||||
|
|
@ -777,34 +777,34 @@ class LanguageType(ObjectType): # type: ignore [misc]
|
||||||
description = _("supported languages")
|
description = _("supported languages")
|
||||||
|
|
||||||
|
|
||||||
class SearchProductsResultsType(ObjectType): # type: ignore [misc]
|
class SearchProductsResultsType(ObjectType):
|
||||||
uuid = UUID()
|
uuid = UUID()
|
||||||
name = String()
|
name = String()
|
||||||
slug = String()
|
slug = String()
|
||||||
image = String()
|
image = String()
|
||||||
|
|
||||||
|
|
||||||
class SearchCategoriesResultsType(ObjectType): # type: ignore [misc]
|
class SearchCategoriesResultsType(ObjectType):
|
||||||
uuid = UUID()
|
uuid = UUID()
|
||||||
name = String()
|
name = String()
|
||||||
slug = String()
|
slug = String()
|
||||||
image = String()
|
image = String()
|
||||||
|
|
||||||
|
|
||||||
class SearchBrandsResultsType(ObjectType): # type: ignore [misc]
|
class SearchBrandsResultsType(ObjectType):
|
||||||
uuid = UUID()
|
uuid = UUID()
|
||||||
name = String()
|
name = String()
|
||||||
slug = String()
|
slug = String()
|
||||||
image = String()
|
image = String()
|
||||||
|
|
||||||
|
|
||||||
class SearchPostsResultsType(ObjectType): # type: ignore [misc]
|
class SearchPostsResultsType(ObjectType):
|
||||||
uuid = UUID()
|
uuid = UUID()
|
||||||
name = String()
|
name = String()
|
||||||
slug = String()
|
slug = String()
|
||||||
|
|
||||||
|
|
||||||
class SearchResultsType(ObjectType): # type: ignore [misc]
|
class SearchResultsType(ObjectType):
|
||||||
products = List(
|
products = List(
|
||||||
description=_("products search results"), of_type=SearchProductsResultsType
|
description=_("products search results"), of_type=SearchProductsResultsType
|
||||||
)
|
)
|
||||||
|
|
@ -817,6 +817,6 @@ class SearchResultsType(ObjectType): # type: ignore [misc]
|
||||||
posts = List(description=_("posts search results"), of_type=SearchPostsResultsType)
|
posts = List(description=_("posts search results"), of_type=SearchPostsResultsType)
|
||||||
|
|
||||||
|
|
||||||
class BulkProductInput(InputObjectType): # type: ignore [misc]
|
class BulkProductInput(InputObjectType):
|
||||||
uuid = UUID(required=True)
|
uuid = UUID(required=True)
|
||||||
attributes = GenericScalar(required=False)
|
attributes = GenericScalar(required=False)
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -95,17 +95,17 @@ class Command(BaseCommand):
|
||||||
)
|
)
|
||||||
|
|
||||||
def handle(self, *args: list[Any], **options: dict[str, str | list[str]]) -> None:
|
def handle(self, *args: list[Any], **options: dict[str, str | list[str]]) -> None:
|
||||||
langs: list[str] = options.get("target_languages", []) # type: ignore [assignment]
|
langs: list[str] = options.get("target_languages", [])
|
||||||
if "ALL" in langs:
|
if "ALL" in langs:
|
||||||
langs = list(dict(settings.LANGUAGES).keys())
|
langs = list(dict(settings.LANGUAGES).keys())
|
||||||
apps_to_scan: set[str] = set(options["target_apps"])
|
apps_to_scan: set[str] = set(options["target_apps"])
|
||||||
if "ALL" in apps_to_scan:
|
if "ALL" in apps_to_scan:
|
||||||
apps_to_scan = set(TRANSLATABLE_APPS)
|
apps_to_scan = set(TRANSLATABLE_APPS)
|
||||||
root_path: str = options.get("root_path") or "/app/" # type: ignore [assignment]
|
root_path: str = options.get("root_path") or "/app/"
|
||||||
|
|
||||||
configs = list(apps.get_app_configs())
|
configs = list(apps.get_app_configs())
|
||||||
# noinspection PyTypeChecker
|
# noinspection PyTypeChecker
|
||||||
configs.append(RootDirectory()) # type: ignore [arg-type]
|
configs.append(RootDirectory())
|
||||||
|
|
||||||
errors = 0
|
errors = 0
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ def placeholderize(text: str) -> tuple[str, list[str]]:
|
||||||
"""
|
"""
|
||||||
placeholders: list[str] = []
|
placeholders: list[str] = []
|
||||||
|
|
||||||
def _repl(match: re.Match) -> str: # type: ignore [type-arg]
|
def _repl(match: re.Match) -> str:
|
||||||
idx = len(placeholders)
|
idx = len(placeholders)
|
||||||
placeholders.append(match.group(0))
|
placeholders.append(match.group(0))
|
||||||
return f"__PH_{idx}__"
|
return f"__PH_{idx}__"
|
||||||
|
|
@ -107,9 +107,9 @@ class Command(BaseCommand):
|
||||||
)
|
)
|
||||||
|
|
||||||
def handle(self, *args: list[Any], **options: dict[Any, Any]) -> None:
|
def handle(self, *args: list[Any], **options: dict[Any, Any]) -> None:
|
||||||
target_langs: list[str] = options["target_languages"] # type: ignore [assignment]
|
target_langs: list[str] = options["target_languages"]
|
||||||
if "ALL" in target_langs:
|
if "ALL" in target_langs:
|
||||||
target_langs = DEEPL_TARGET_LANGUAGES_MAPPING.keys() # type: ignore [assignment]
|
target_langs = DEEPL_TARGET_LANGUAGES_MAPPING.keys()
|
||||||
target_apps = set(options["target_apps"])
|
target_apps = set(options["target_apps"])
|
||||||
if "ALL" in target_apps:
|
if "ALL" in target_apps:
|
||||||
target_apps = {
|
target_apps = {
|
||||||
|
|
@ -125,7 +125,7 @@ class Command(BaseCommand):
|
||||||
try:
|
try:
|
||||||
import readline
|
import readline
|
||||||
except ImportError:
|
except ImportError:
|
||||||
readline = None # type: ignore [assignment]
|
readline = None
|
||||||
|
|
||||||
for target_lang in target_langs:
|
for target_lang in target_langs:
|
||||||
api_code = DEEPL_TARGET_LANGUAGES_MAPPING.get(target_lang)
|
api_code = DEEPL_TARGET_LANGUAGES_MAPPING.get(target_lang)
|
||||||
|
|
@ -176,16 +176,16 @@ class Command(BaseCommand):
|
||||||
if readline:
|
if readline:
|
||||||
|
|
||||||
def hook() -> None:
|
def hook() -> None:
|
||||||
readline.insert_text(default) # type: ignore [attr-defined] # noqa: B023
|
readline.insert_text(default) # noqa: B023
|
||||||
readline.redisplay() # type: ignore [attr-defined]
|
readline.redisplay()
|
||||||
|
|
||||||
readline.set_pre_input_hook(hook) # type: ignore [attr-defined]
|
readline.set_pre_input_hook(hook)
|
||||||
|
|
||||||
prompt = f"Enter translation for '{e.msgid}': "
|
prompt = f"Enter translation for '{e.msgid}': "
|
||||||
user_in = input(prompt).strip()
|
user_in = input(prompt).strip()
|
||||||
|
|
||||||
if readline:
|
if readline:
|
||||||
readline.set_pre_input_hook(None) # type: ignore [attr-defined]
|
readline.set_pre_input_hook(None)
|
||||||
|
|
||||||
if user_in:
|
if user_in:
|
||||||
e.msgstr = user_in
|
e.msgstr = user_in
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ class Command(BaseCommand):
|
||||||
)
|
)
|
||||||
|
|
||||||
def handle(self, *args: list[Any], **options: dict[Any, Any]) -> None:
|
def handle(self, *args: list[Any], **options: dict[Any, Any]) -> None:
|
||||||
size: int = options["size"] # type: ignore [assignment]
|
size: int = options["size"]
|
||||||
while True:
|
while True:
|
||||||
batch_ids = list(
|
batch_ids = list(
|
||||||
Product.objects.filter(orderproduct__isnull=True).values_list(
|
Product.objects.filter(orderproduct__isnull=True).values_list(
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ class Command(BaseCommand):
|
||||||
)
|
)
|
||||||
|
|
||||||
def handle(self, *args: list[Any], **options: dict[Any, Any]) -> None:
|
def handle(self, *args: list[Any], **options: dict[Any, Any]) -> None:
|
||||||
size: int = options["size"] # type: ignore [assignment]
|
size: int = options["size"]
|
||||||
while True:
|
while True:
|
||||||
batch_ids = list(
|
batch_ids = list(
|
||||||
Product.objects.filter(
|
Product.objects.filter(
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ class Command(BaseCommand):
|
||||||
self.style.SUCCESS("Starting fetching products task in worker container...")
|
self.style.SUCCESS("Starting fetching products task in worker container...")
|
||||||
)
|
)
|
||||||
|
|
||||||
update_products_task.delay() # type: ignore [attr-defined]
|
update_products_task.delay()
|
||||||
|
|
||||||
self.stdout.write(
|
self.stdout.write(
|
||||||
self.style.SUCCESS(
|
self.style.SUCCESS(
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ class AddressManager(models.Manager):
|
||||||
if not kwargs.get("raw_data"):
|
if not kwargs.get("raw_data"):
|
||||||
raise ValueError("'raw_data' (address string) must be provided.")
|
raise ValueError("'raw_data' (address string) must be provided.")
|
||||||
|
|
||||||
params: dict[str, str | int] = { # type: ignore [annotation-unchecked]
|
params: dict[str, str | int] = {
|
||||||
"format": "json",
|
"format": "json",
|
||||||
"addressdetails": 1,
|
"addressdetails": 1,
|
||||||
"q": kwargs.get("raw_data"),
|
"q": kwargs.get("raw_data"),
|
||||||
|
|
|
||||||
|
|
@ -70,8 +70,8 @@ from evibes.utils.misc import create_object
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class AttributeGroup(ExportModelOperationsMixin("attribute_group"), NiceModel): # type: ignore [misc]
|
class AttributeGroup(ExportModelOperationsMixin("attribute_group"), NiceModel):
|
||||||
__doc__ = _( # type: ignore
|
__doc__ = _(
|
||||||
"Represents a group of attributes, which can be hierarchical."
|
"Represents a group of attributes, which can be hierarchical."
|
||||||
" This class is used to manage and organize attribute groups."
|
" This class is used to manage and organize attribute groups."
|
||||||
" An attribute group can have a parent group, forming a hierarchical structure."
|
" An attribute group can have a parent group, forming a hierarchical structure."
|
||||||
|
|
@ -106,8 +106,8 @@ class AttributeGroup(ExportModelOperationsMixin("attribute_group"), NiceModel):
|
||||||
verbose_name_plural = _("attribute groups")
|
verbose_name_plural = _("attribute groups")
|
||||||
|
|
||||||
|
|
||||||
class Vendor(ExportModelOperationsMixin("vendor"), NiceModel): # type: ignore [misc]
|
class Vendor(ExportModelOperationsMixin("vendor"), NiceModel):
|
||||||
__doc__ = _( # type: ignore
|
__doc__ = _(
|
||||||
"Represents a vendor entity capable of storing information about external vendors and their interaction requirements."
|
"Represents a vendor entity capable of storing information about external vendors and their interaction requirements."
|
||||||
" The Vendor class is used to define and manage information related to an external vendor."
|
" The Vendor class is used to define and manage information related to an external vendor."
|
||||||
" It stores the vendor's name, authentication details required for communication,"
|
" It stores the vendor's name, authentication details required for communication,"
|
||||||
|
|
@ -164,7 +164,7 @@ class Vendor(ExportModelOperationsMixin("vendor"), NiceModel): # type: ignore [
|
||||||
def __str__(self) -> str:
|
def __str__(self) -> str:
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
def save( # type: ignore [override]
|
def save(
|
||||||
self,
|
self,
|
||||||
*,
|
*,
|
||||||
force_insert: bool = False,
|
force_insert: bool = False,
|
||||||
|
|
@ -198,8 +198,8 @@ class Vendor(ExportModelOperationsMixin("vendor"), NiceModel): # type: ignore [
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
class ProductTag(ExportModelOperationsMixin("product_tag"), NiceModel): # type: ignore [misc]
|
class ProductTag(ExportModelOperationsMixin("product_tag"), NiceModel):
|
||||||
__doc__ = _( # type: ignore
|
__doc__ = _(
|
||||||
"Represents a product tag used for classifying or identifying products."
|
"Represents a product tag used for classifying or identifying products."
|
||||||
" The ProductTag class is designed to uniquely identify and classify products through a combination"
|
" The ProductTag class is designed to uniquely identify and classify products through a combination"
|
||||||
" of an internal tag identifier and a user-friendly display name."
|
" of an internal tag identifier and a user-friendly display name."
|
||||||
|
|
@ -230,8 +230,8 @@ class ProductTag(ExportModelOperationsMixin("product_tag"), NiceModel): # type:
|
||||||
verbose_name_plural = _("product tags")
|
verbose_name_plural = _("product tags")
|
||||||
|
|
||||||
|
|
||||||
class CategoryTag(ExportModelOperationsMixin("category_tag"), NiceModel): # type: ignore [misc]
|
class CategoryTag(ExportModelOperationsMixin("category_tag"), NiceModel):
|
||||||
__doc__ = _( # type: ignore
|
__doc__ = _(
|
||||||
"Represents a category tag used for products."
|
"Represents a category tag used for products."
|
||||||
" This class models a category tag that can be used to associate and classify 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."
|
" It includes attributes for an internal tag identifier and a user-friendly display name."
|
||||||
|
|
@ -261,8 +261,8 @@ class CategoryTag(ExportModelOperationsMixin("category_tag"), NiceModel): # typ
|
||||||
verbose_name_plural = _("category tags")
|
verbose_name_plural = _("category tags")
|
||||||
|
|
||||||
|
|
||||||
class Category(ExportModelOperationsMixin("category"), NiceModel, MPTTModel): # type: ignore [misc, django-manager-missing]
|
class Category(ExportModelOperationsMixin("category"), NiceModel, MPTTModel):
|
||||||
__doc__ = _( # type: ignore
|
__doc__ = _(
|
||||||
"Represents a category entity to organize and group related items in a hierarchical structure."
|
"Represents a category entity to organize and group related items in a hierarchical structure."
|
||||||
" Categories may have hierarchical relationships with other categories, supporting parent-child relationships."
|
" Categories may have hierarchical relationships with other categories, supporting parent-child relationships."
|
||||||
" The class includes fields for metadata and visual representation,"
|
" The class includes fields for metadata and visual representation,"
|
||||||
|
|
@ -437,7 +437,7 @@ class Category(ExportModelOperationsMixin("category"), NiceModel, MPTTModel): #
|
||||||
):
|
):
|
||||||
bucket["possible_values"].append(value)
|
bucket["possible_values"].append(value)
|
||||||
|
|
||||||
return list(by_attr.values()) # type: ignore [arg-type]
|
return list(by_attr.values())
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def image_url(self) -> str:
|
def image_url(self) -> str:
|
||||||
|
|
@ -452,8 +452,8 @@ class Category(ExportModelOperationsMixin("category"), NiceModel, MPTTModel): #
|
||||||
ordering = ["tree_id", "lft"]
|
ordering = ["tree_id", "lft"]
|
||||||
|
|
||||||
|
|
||||||
class Brand(ExportModelOperationsMixin("brand"), NiceModel): # type: ignore [misc]
|
class Brand(ExportModelOperationsMixin("brand"), NiceModel):
|
||||||
__doc__ = _( # type: ignore
|
__doc__ = _(
|
||||||
"Represents a Brand object in the system. "
|
"Represents a Brand object in the system. "
|
||||||
"This class handles information and attributes related to a brand, including its name, logos, "
|
"This class handles information and attributes related to a brand, including its name, logos, "
|
||||||
"description, associated categories, a unique slug, and priority order. "
|
"description, associated categories, a unique slug, and priority order. "
|
||||||
|
|
@ -522,8 +522,8 @@ class Brand(ExportModelOperationsMixin("brand"), NiceModel): # type: ignore [mi
|
||||||
verbose_name_plural = _("brands")
|
verbose_name_plural = _("brands")
|
||||||
|
|
||||||
|
|
||||||
class Stock(ExportModelOperationsMixin("stock"), NiceModel): # type: ignore [misc]
|
class Stock(ExportModelOperationsMixin("stock"), NiceModel):
|
||||||
__doc__ = _( # type: ignore
|
__doc__ = _(
|
||||||
"Represents the stock of a product managed in the system."
|
"Represents the stock of a product managed in the system."
|
||||||
" This class provides details about the relationship between vendors, products, and their stock information, "
|
" This class provides details about the relationship between vendors, products, and their stock information, "
|
||||||
"as well as inventory-related properties like price, purchase price, quantity, SKU, and digital assets."
|
"as well as inventory-related properties like price, purchase price, quantity, SKU, and digital assets."
|
||||||
|
|
@ -588,8 +588,8 @@ class Stock(ExportModelOperationsMixin("stock"), NiceModel): # type: ignore [mi
|
||||||
verbose_name_plural = _("stock entries")
|
verbose_name_plural = _("stock entries")
|
||||||
|
|
||||||
|
|
||||||
class Product(ExportModelOperationsMixin("product"), NiceModel): # type: ignore [misc]
|
class Product(ExportModelOperationsMixin("product"), NiceModel):
|
||||||
__doc__ = _( # type: ignore
|
__doc__ = _(
|
||||||
"Represents a product with attributes such as category, brand, tags, digital status, name, description, part number, and slug."
|
"Represents a product with attributes such as category, brand, tags, digital status, name, description, part number, and slug."
|
||||||
" Provides related utility properties to retrieve ratings, feedback counts, price, quantity, and total orders."
|
" Provides related utility properties to retrieve ratings, feedback counts, price, quantity, and total orders."
|
||||||
" Designed for use in a system that handles e-commerce or inventory management."
|
" Designed for use in a system that handles e-commerce or inventory management."
|
||||||
|
|
@ -695,7 +695,7 @@ class Product(ExportModelOperationsMixin("product"), NiceModel): # type: ignore
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def discount_price(self) -> float | None:
|
def discount_price(self) -> float | None:
|
||||||
return self.promos.first().discount_percent if self.promos.exists() else None # type: ignore [union-attr]
|
return self.promos.first().discount_percent if self.promos.exists() else None
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def rating(self) -> float:
|
def rating(self) -> float:
|
||||||
|
|
@ -736,8 +736,8 @@ class Product(ExportModelOperationsMixin("product"), NiceModel): # type: ignore
|
||||||
self.__dict__["personal_orders_only"] = value
|
self.__dict__["personal_orders_only"] = value
|
||||||
|
|
||||||
|
|
||||||
class Attribute(ExportModelOperationsMixin("attribute"), NiceModel): # type: ignore [misc]
|
class Attribute(ExportModelOperationsMixin("attribute"), NiceModel):
|
||||||
__doc__ = _( # type: ignore
|
__doc__ = _(
|
||||||
"Represents an attribute in the system."
|
"Represents an attribute in the system."
|
||||||
" This class is used to define and manage attributes,"
|
" This class is used to define and manage attributes,"
|
||||||
" which are customizable pieces of data that can be associated with other entities."
|
" which are customizable pieces of data that can be associated with other entities."
|
||||||
|
|
@ -795,8 +795,8 @@ class Attribute(ExportModelOperationsMixin("attribute"), NiceModel): # type: ig
|
||||||
verbose_name_plural = _("attributes")
|
verbose_name_plural = _("attributes")
|
||||||
|
|
||||||
|
|
||||||
class AttributeValue(ExportModelOperationsMixin("attribute_value"), NiceModel): # type: ignore [misc]
|
class AttributeValue(ExportModelOperationsMixin("attribute_value"), NiceModel):
|
||||||
__doc__ = _( # type: ignore
|
__doc__ = _(
|
||||||
"Represents a specific value for an attribute that is linked to a product. "
|
"Represents a specific value for an attribute that is linked to a product. "
|
||||||
"It links the 'attribute' to a unique 'value', allowing "
|
"It links the 'attribute' to a unique 'value', allowing "
|
||||||
"better organization and dynamic representation of product characteristics."
|
"better organization and dynamic representation of product characteristics."
|
||||||
|
|
@ -833,8 +833,8 @@ class AttributeValue(ExportModelOperationsMixin("attribute_value"), NiceModel):
|
||||||
verbose_name_plural = _("attribute values")
|
verbose_name_plural = _("attribute values")
|
||||||
|
|
||||||
|
|
||||||
class ProductImage(ExportModelOperationsMixin("product_image"), NiceModel): # type: ignore [misc]
|
class ProductImage(ExportModelOperationsMixin("product_image"), NiceModel):
|
||||||
__doc__ = _( # type: ignore
|
__doc__ = _(
|
||||||
"Represents a product image associated with a product in the system. "
|
"Represents a product image associated with a product in the system. "
|
||||||
"This class is designed to manage images for products, including functionality "
|
"This class is designed to manage images for products, including functionality "
|
||||||
"for uploading image files, associating them with specific products, and "
|
"for uploading image files, associating them with specific products, and "
|
||||||
|
|
@ -886,8 +886,8 @@ class ProductImage(ExportModelOperationsMixin("product_image"), NiceModel): # t
|
||||||
verbose_name_plural = _("product images")
|
verbose_name_plural = _("product images")
|
||||||
|
|
||||||
|
|
||||||
class Promotion(ExportModelOperationsMixin("promotion"), NiceModel): # type: ignore [misc]
|
class Promotion(ExportModelOperationsMixin("promotion"), NiceModel):
|
||||||
__doc__ = _( # type: ignore
|
__doc__ = _(
|
||||||
"Represents a promotional campaign for products with a discount. "
|
"Represents a promotional campaign for products with a discount. "
|
||||||
"This class is used to define and manage promotional campaigns that offer a "
|
"This class is used to define and manage promotional campaigns that offer a "
|
||||||
"percentage-based discount for products. The class includes attributes for "
|
"percentage-based discount for products. The class includes attributes for "
|
||||||
|
|
@ -932,8 +932,8 @@ class Promotion(ExportModelOperationsMixin("promotion"), NiceModel): # type: ig
|
||||||
return str(self.id)
|
return str(self.id)
|
||||||
|
|
||||||
|
|
||||||
class Wishlist(ExportModelOperationsMixin("wishlist"), NiceModel): # type: ignore [misc]
|
class Wishlist(ExportModelOperationsMixin("wishlist"), NiceModel):
|
||||||
__doc__ = _( # type: ignore
|
__doc__ = _(
|
||||||
"Represents a user's wishlist for storing and managing desired products. "
|
"Represents a user's wishlist for storing and managing desired products. "
|
||||||
"The class provides functionality to manage a collection of products, "
|
"The class provides functionality to manage a collection of products, "
|
||||||
"supporting operations such as adding and removing products, "
|
"supporting operations such as adding and removing products, "
|
||||||
|
|
@ -1003,8 +1003,8 @@ class Wishlist(ExportModelOperationsMixin("wishlist"), NiceModel): # type: igno
|
||||||
return self
|
return self
|
||||||
|
|
||||||
|
|
||||||
class Documentary(ExportModelOperationsMixin("attribute_group"), NiceModel): # type: ignore [misc]
|
class Documentary(ExportModelOperationsMixin("attribute_group"), NiceModel):
|
||||||
__doc__ = _( # type: ignore
|
__doc__ = _(
|
||||||
"Represents a documentary record tied to a product. "
|
"Represents a documentary record tied to a product. "
|
||||||
"This class is used to store information about documentaries related to specific "
|
"This class is used to store information about documentaries related to specific "
|
||||||
"products, including file uploads and their metadata. It contains methods and "
|
"products, including file uploads and their metadata. It contains methods and "
|
||||||
|
|
@ -1034,8 +1034,8 @@ class Documentary(ExportModelOperationsMixin("attribute_group"), NiceModel): #
|
||||||
return self.document.name.split(".")[-1] or _("unresolved")
|
return self.document.name.split(".")[-1] or _("unresolved")
|
||||||
|
|
||||||
|
|
||||||
class Address(ExportModelOperationsMixin("address"), NiceModel): # type: ignore [misc]
|
class Address(ExportModelOperationsMixin("address"), NiceModel):
|
||||||
__doc__ = _( # type: ignore
|
__doc__ = _(
|
||||||
"Represents an address entity that includes location details and associations with a user. "
|
"Represents an address entity that includes location details and associations with a user. "
|
||||||
"Provides functionality for geographic and address data storage, as well "
|
"Provides functionality for geographic and address data storage, as well "
|
||||||
"as integration with geocoding services. "
|
"as integration with geocoding services. "
|
||||||
|
|
@ -1099,8 +1099,8 @@ class Address(ExportModelOperationsMixin("address"), NiceModel): # type: ignore
|
||||||
return f"{base} for {self.user.email}" if self.user else base
|
return f"{base} for {self.user.email}" if self.user else base
|
||||||
|
|
||||||
|
|
||||||
class PromoCode(ExportModelOperationsMixin("promocode"), NiceModel): # type: ignore [misc]
|
class PromoCode(ExportModelOperationsMixin("promocode"), NiceModel):
|
||||||
__doc__ = _( # type: ignore
|
__doc__ = _(
|
||||||
"Represents a promotional code that can be used for discounts, managing its validity, "
|
"Represents a promotional code that can be used for discounts, managing its validity, "
|
||||||
"type of discount, and application. "
|
"type of discount, and application. "
|
||||||
"The PromoCode class stores details about a promotional code, including its unique "
|
"The PromoCode class stores details about a promotional code, including its unique "
|
||||||
|
|
@ -1211,13 +1211,13 @@ class PromoCode(ExportModelOperationsMixin("promocode"), NiceModel): # type: ig
|
||||||
if self.discount_type == "percent":
|
if self.discount_type == "percent":
|
||||||
promo_amount -= round(
|
promo_amount -= round(
|
||||||
promo_amount * (float(self.discount_percent) / 100), 2
|
promo_amount * (float(self.discount_percent) / 100), 2
|
||||||
) # type: ignore [arg-type]
|
)
|
||||||
order.attributes.update(
|
order.attributes.update(
|
||||||
{"promocode_uuid": str(self.uuid), "final_price": promo_amount}
|
{"promocode_uuid": str(self.uuid), "final_price": promo_amount}
|
||||||
)
|
)
|
||||||
order.save()
|
order.save()
|
||||||
elif self.discount_type == "amount":
|
elif self.discount_type == "amount":
|
||||||
promo_amount -= round(float(self.discount_amount), 2) # type: ignore [arg-type]
|
promo_amount -= round(float(self.discount_amount), 2)
|
||||||
order.attributes.update(
|
order.attributes.update(
|
||||||
{"promocode_uuid": str(self.uuid), "final_price": promo_amount}
|
{"promocode_uuid": str(self.uuid), "final_price": promo_amount}
|
||||||
)
|
)
|
||||||
|
|
@ -1230,8 +1230,8 @@ class PromoCode(ExportModelOperationsMixin("promocode"), NiceModel): # type: ig
|
||||||
return promo_amount
|
return promo_amount
|
||||||
|
|
||||||
|
|
||||||
class Order(ExportModelOperationsMixin("order"), NiceModel): # type: ignore [misc]
|
class Order(ExportModelOperationsMixin("order"), NiceModel):
|
||||||
__doc__ = _( # type: ignore
|
__doc__ = _(
|
||||||
"Represents an order placed by a user."
|
"Represents an order placed by a user."
|
||||||
" This class models an order within the application,"
|
" This class models an order within the application,"
|
||||||
" including its various attributes such as billing and shipping information,"
|
" including its various attributes such as billing and shipping information,"
|
||||||
|
|
@ -1341,7 +1341,7 @@ class Order(ExportModelOperationsMixin("order"), NiceModel): # type: ignore [mi
|
||||||
(
|
(
|
||||||
self.user.attributes.get("is_business", False)
|
self.user.attributes.get("is_business", False)
|
||||||
and self.user.attributes.get("business_identificator")
|
and self.user.attributes.get("business_identificator")
|
||||||
) # type: ignore [union-attr]
|
)
|
||||||
if self.user
|
if self.user
|
||||||
else False
|
else False
|
||||||
)
|
)
|
||||||
|
|
@ -1410,7 +1410,7 @@ class Order(ExportModelOperationsMixin("order"), NiceModel): # type: ignore [mi
|
||||||
if promotions.exists():
|
if promotions.exists():
|
||||||
buy_price -= round(
|
buy_price -= round(
|
||||||
product.price * (promotions.first().discount_percent / 100), 2
|
product.price * (promotions.first().discount_percent / 100), 2
|
||||||
) # type: ignore [union-attr]
|
)
|
||||||
|
|
||||||
order_product, is_created = OrderProduct.objects.get_or_create(
|
order_product, is_created = OrderProduct.objects.get_or_create(
|
||||||
product=product,
|
product=product,
|
||||||
|
|
@ -1800,8 +1800,8 @@ class Order(ExportModelOperationsMixin("order"), NiceModel): # type: ignore [mi
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
class Feedback(ExportModelOperationsMixin("feedback"), NiceModel): # type: ignore [misc]
|
class Feedback(ExportModelOperationsMixin("feedback"), NiceModel):
|
||||||
__doc__ = _( # type: ignore
|
__doc__ = _(
|
||||||
"Manages user feedback for products. "
|
"Manages user feedback for products. "
|
||||||
"This class is designed to capture and store user feedback for specific products "
|
"This class is designed to capture and store user feedback for specific products "
|
||||||
"that they have purchased. It contains attributes to store user comments, "
|
"that they have purchased. It contains attributes to store user comments, "
|
||||||
|
|
@ -1849,8 +1849,8 @@ class Feedback(ExportModelOperationsMixin("feedback"), NiceModel): # type: igno
|
||||||
verbose_name_plural = _("feedbacks")
|
verbose_name_plural = _("feedbacks")
|
||||||
|
|
||||||
|
|
||||||
class OrderProduct(ExportModelOperationsMixin("order_product"), NiceModel): # type: ignore [misc]
|
class OrderProduct(ExportModelOperationsMixin("order_product"), NiceModel):
|
||||||
__doc__ = _( # type: ignore
|
__doc__ = _(
|
||||||
"Represents products associated with orders and their attributes. "
|
"Represents products associated with orders and their attributes. "
|
||||||
"The OrderProduct model maintains information about a product that is part of an order, "
|
"The OrderProduct model maintains information about a product that is part of an order, "
|
||||||
"including details such as purchase price, quantity, product attributes, and status. It "
|
"including details such as purchase price, quantity, product attributes, and status. It "
|
||||||
|
|
@ -1969,12 +1969,12 @@ class OrderProduct(ExportModelOperationsMixin("order_product"), NiceModel): # t
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def total_price(self: Self) -> float:
|
def total_price(self: Self) -> float:
|
||||||
return round(float(self.buy_price) * self.quantity, 2) # type: ignore [arg-type]
|
return round(float(self.buy_price) * self.quantity, 2)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def download_url(self: Self) -> str:
|
def download_url(self: Self) -> str:
|
||||||
if self.product and self.product.stocks:
|
if self.product and self.product.stocks:
|
||||||
if self.product.is_digital and self.product.stocks.first().digital_asset: # type: ignore [union-attr]
|
if self.product.is_digital and self.product.stocks.first().digital_asset:
|
||||||
if hasattr(self, "download"):
|
if hasattr(self, "download"):
|
||||||
return self.download.url
|
return self.download.url
|
||||||
else:
|
else:
|
||||||
|
|
@ -2010,7 +2010,7 @@ class OrderProduct(ExportModelOperationsMixin("order_product"), NiceModel): # t
|
||||||
|
|
||||||
class CustomerRelationshipManagementProvider(
|
class CustomerRelationshipManagementProvider(
|
||||||
ExportModelOperationsMixin("crm_provider"), NiceModel
|
ExportModelOperationsMixin("crm_provider"), NiceModel
|
||||||
): # type: ignore [misc]
|
):
|
||||||
name = CharField(max_length=128, unique=True, verbose_name=_("name"))
|
name = CharField(max_length=128, unique=True, verbose_name=_("name"))
|
||||||
integration_url = URLField(
|
integration_url = URLField(
|
||||||
blank=True, null=True, help_text=_("URL of the integration")
|
blank=True, null=True, help_text=_("URL of the integration")
|
||||||
|
|
@ -2053,7 +2053,7 @@ class CustomerRelationshipManagementProvider(
|
||||||
verbose_name_plural = _("CRMs")
|
verbose_name_plural = _("CRMs")
|
||||||
|
|
||||||
|
|
||||||
class OrderCrmLink(ExportModelOperationsMixin("order_crm_link"), NiceModel): # type: ignore
|
class OrderCrmLink(ExportModelOperationsMixin("order_crm_link"), NiceModel):
|
||||||
order = ForeignKey(to=Order, on_delete=PROTECT, related_name="crm_links")
|
order = ForeignKey(to=Order, on_delete=PROTECT, related_name="crm_links")
|
||||||
crm = ForeignKey(
|
crm = ForeignKey(
|
||||||
to=CustomerRelationshipManagementProvider,
|
to=CustomerRelationshipManagementProvider,
|
||||||
|
|
@ -2070,8 +2070,8 @@ class OrderCrmLink(ExportModelOperationsMixin("order_crm_link"), NiceModel): #
|
||||||
verbose_name_plural = _("orders CRM links")
|
verbose_name_plural = _("orders CRM links")
|
||||||
|
|
||||||
|
|
||||||
class DigitalAssetDownload(ExportModelOperationsMixin("attribute_group"), NiceModel): # type: ignore [misc]
|
class DigitalAssetDownload(ExportModelOperationsMixin("attribute_group"), NiceModel):
|
||||||
__doc__ = _( # type: ignore
|
__doc__ = _(
|
||||||
"Represents the downloading functionality for digital assets associated with orders. "
|
"Represents the downloading functionality for digital assets associated with orders. "
|
||||||
"The DigitalAssetDownload class provides the ability to manage and access "
|
"The DigitalAssetDownload class provides the ability to manage and access "
|
||||||
"downloads related to order products. It maintains information about the "
|
"downloads related to order products. It maintains information about the "
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ class AttributeGroupDetailSerializer(ModelSerializer):
|
||||||
|
|
||||||
|
|
||||||
class CategoryDetailListSerializer(ListSerializer):
|
class CategoryDetailListSerializer(ListSerializer):
|
||||||
def to_representation(self, data): # type: ignore[override]
|
def to_representation(self, data):
|
||||||
items = list(data)
|
items = list(data)
|
||||||
with suppress(Exception):
|
with suppress(Exception):
|
||||||
Category.bulk_prefetch_filterable_attributes(items)
|
Category.bulk_prefetch_filterable_attributes(items)
|
||||||
|
|
@ -92,7 +92,7 @@ class CategoryDetailSerializer(ModelSerializer):
|
||||||
CategorySimpleSerializer(children, many=True, context=self.context).data
|
CategorySimpleSerializer(children, many=True, context=self.context).data
|
||||||
if obj.children.exists()
|
if obj.children.exists()
|
||||||
else []
|
else []
|
||||||
) # type: ignore [return-value]
|
)
|
||||||
|
|
||||||
|
|
||||||
class BrandDetailSerializer(ModelSerializer):
|
class BrandDetailSerializer(ModelSerializer):
|
||||||
|
|
|
||||||
|
|
@ -25,9 +25,9 @@ from engine.core.models import (
|
||||||
from engine.core.serializers.utility import AddressSerializer
|
from engine.core.serializers.utility import AddressSerializer
|
||||||
|
|
||||||
|
|
||||||
class AttributeGroupSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
|
class AttributeGroupSimpleSerializer(ModelSerializer):
|
||||||
parent = PrimaryKeyRelatedField(read_only=True) # type: ignore [assignment, var-annotated]
|
parent = PrimaryKeyRelatedField(read_only=True)
|
||||||
children = PrimaryKeyRelatedField(many=True, read_only=True) # type: ignore [assignment, var-annotated]
|
children = PrimaryKeyRelatedField(many=True, read_only=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = AttributeGroup
|
model = AttributeGroup
|
||||||
|
|
@ -39,7 +39,7 @@ class AttributeGroupSimpleSerializer(ModelSerializer): # type: ignore [type-arg
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
class CategorySimpleSerializer(ModelSerializer): # type: ignore [type-arg]
|
class CategorySimpleSerializer(ModelSerializer):
|
||||||
children = SerializerMethodField()
|
children = SerializerMethodField()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|
@ -63,10 +63,10 @@ class CategorySimpleSerializer(ModelSerializer): # type: ignore [type-arg]
|
||||||
CategorySimpleSerializer(children, many=True, context=self.context).data
|
CategorySimpleSerializer(children, many=True, context=self.context).data
|
||||||
if obj.children.exists()
|
if obj.children.exists()
|
||||||
else []
|
else []
|
||||||
) # type: ignore [return-value]
|
)
|
||||||
|
|
||||||
|
|
||||||
class BrandSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
|
class BrandSimpleSerializer(ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Brand
|
model = Brand
|
||||||
fields = [
|
fields = [
|
||||||
|
|
@ -77,7 +77,7 @@ class BrandSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
class ProductTagSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
|
class ProductTagSimpleSerializer(ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = ProductTag
|
model = ProductTag
|
||||||
fields = [
|
fields = [
|
||||||
|
|
@ -87,8 +87,8 @@ class ProductTagSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
class ProductImageSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
|
class ProductImageSimpleSerializer(ModelSerializer):
|
||||||
product: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True) # type: ignore [type-arg]
|
product: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = ProductImage
|
model = ProductImage
|
||||||
|
|
@ -101,7 +101,7 @@ class ProductImageSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
class AttributeSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
|
class AttributeSimpleSerializer(ModelSerializer):
|
||||||
group = AttributeGroupSimpleSerializer(read_only=True)
|
group = AttributeGroupSimpleSerializer(read_only=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|
@ -114,9 +114,9 @@ class AttributeSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
class AttributeValueSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
|
class AttributeValueSimpleSerializer(ModelSerializer):
|
||||||
attribute = AttributeSimpleSerializer(read_only=True)
|
attribute = AttributeSimpleSerializer(read_only=True)
|
||||||
product: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True) # type: ignore [type-arg]
|
product: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = AttributeValue
|
model = AttributeValue
|
||||||
|
|
@ -128,7 +128,7 @@ class AttributeValueSimpleSerializer(ModelSerializer): # type: ignore [type-arg
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
class ProductSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
|
class ProductSimpleSerializer(ModelSerializer):
|
||||||
brand = BrandSimpleSerializer(read_only=True)
|
brand = BrandSimpleSerializer(read_only=True)
|
||||||
category = CategorySimpleSerializer(read_only=True)
|
category = CategorySimpleSerializer(read_only=True)
|
||||||
tags = ProductTagSimpleSerializer(many=True, read_only=True)
|
tags = ProductTagSimpleSerializer(many=True, read_only=True)
|
||||||
|
|
@ -185,7 +185,7 @@ class ProductSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
|
||||||
return obj.discount_price
|
return obj.discount_price
|
||||||
|
|
||||||
|
|
||||||
class VendorSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
|
class VendorSimpleSerializer(ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Vendor
|
model = Vendor
|
||||||
fields = [
|
fields = [
|
||||||
|
|
@ -194,7 +194,7 @@ class VendorSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
class StockSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
|
class StockSimpleSerializer(ModelSerializer):
|
||||||
vendor = VendorSimpleSerializer(read_only=True)
|
vendor = VendorSimpleSerializer(read_only=True)
|
||||||
product = ProductSimpleSerializer(read_only=True)
|
product = ProductSimpleSerializer(read_only=True)
|
||||||
|
|
||||||
|
|
@ -211,7 +211,7 @@ class StockSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
class PromoCodeSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
|
class PromoCodeSimpleSerializer(ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = PromoCode
|
model = PromoCode
|
||||||
fields = [
|
fields = [
|
||||||
|
|
@ -220,7 +220,7 @@ class PromoCodeSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
class PromotionSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
|
class PromotionSimpleSerializer(ModelSerializer):
|
||||||
products = ProductSimpleSerializer(many=True, read_only=True)
|
products = ProductSimpleSerializer(many=True, read_only=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|
@ -233,8 +233,8 @@ class PromotionSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
class WishlistSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
|
class WishlistSimpleSerializer(ModelSerializer):
|
||||||
user: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True) # type: ignore [type-arg]
|
user: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True)
|
||||||
products = ProductSimpleSerializer(many=True, read_only=True)
|
products = ProductSimpleSerializer(many=True, read_only=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|
@ -246,8 +246,8 @@ class WishlistSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
class FeedbackSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
|
class FeedbackSimpleSerializer(ModelSerializer):
|
||||||
order_product: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True) # type: ignore [type-arg]
|
order_product: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Feedback
|
model = Feedback
|
||||||
|
|
@ -258,7 +258,7 @@ class FeedbackSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
class OrderProductSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
|
class OrderProductSimpleSerializer(ModelSerializer):
|
||||||
product = ProductSimpleSerializer(read_only=True)
|
product = ProductSimpleSerializer(read_only=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|
@ -272,8 +272,8 @@ class OrderProductSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
class OrderSimpleSerializer(ModelSerializer): # type: ignore [type-arg]
|
class OrderSimpleSerializer(ModelSerializer):
|
||||||
user: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True) # type: ignore [type-arg]
|
user: PrimaryKeyRelatedField = PrimaryKeyRelatedField(read_only=True)
|
||||||
promo_code = PromoCodeSimpleSerializer(read_only=True)
|
promo_code = PromoCodeSimpleSerializer(read_only=True)
|
||||||
order_products = OrderProductSimpleSerializer(many=True, read_only=True)
|
order_products = OrderProductSimpleSerializer(many=True, read_only=True)
|
||||||
billing_address = AddressSerializer(read_only=True, required=False)
|
billing_address = AddressSerializer(read_only=True, required=False)
|
||||||
|
|
|
||||||
|
|
@ -18,19 +18,19 @@ from rest_framework.serializers import ListSerializer, ModelSerializer, Serializ
|
||||||
from engine.core.models import Address
|
from engine.core.models import Address
|
||||||
|
|
||||||
|
|
||||||
class AddressAutocompleteInputSerializer(Serializer): # type: ignore [type-arg]
|
class AddressAutocompleteInputSerializer(Serializer):
|
||||||
q = CharField(required=True)
|
q = CharField(required=True)
|
||||||
limit = IntegerField(required=False, min_value=1, max_value=10, default=5)
|
limit = IntegerField(required=False, min_value=1, max_value=10, default=5)
|
||||||
|
|
||||||
|
|
||||||
class AddressSuggestionSerializer(Serializer): # type: ignore [type-arg]
|
class AddressSuggestionSerializer(Serializer):
|
||||||
display_name = CharField()
|
display_name = CharField()
|
||||||
lat = FloatField()
|
lat = FloatField()
|
||||||
lon = FloatField()
|
lon = FloatField()
|
||||||
address = DictField(child=CharField())
|
address = DictField(child=CharField())
|
||||||
|
|
||||||
|
|
||||||
class AddressSerializer(ModelSerializer): # type: ignore [type-arg]
|
class AddressSerializer(ModelSerializer):
|
||||||
latitude = FloatField(source="location.y", read_only=True)
|
latitude = FloatField(source="location.y", read_only=True)
|
||||||
longitude = FloatField(source="location.x", read_only=True)
|
longitude = FloatField(source="location.x", read_only=True)
|
||||||
|
|
||||||
|
|
@ -59,7 +59,7 @@ class AddressSerializer(ModelSerializer): # type: ignore [type-arg]
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
class AddressCreateSerializer(ModelSerializer): # type: ignore [type-arg]
|
class AddressCreateSerializer(ModelSerializer):
|
||||||
raw_data = CharField(
|
raw_data = CharField(
|
||||||
write_only=True,
|
write_only=True,
|
||||||
max_length=512,
|
max_length=512,
|
||||||
|
|
@ -76,10 +76,10 @@ class AddressCreateSerializer(ModelSerializer): # type: ignore [type-arg]
|
||||||
user = None
|
user = None
|
||||||
if self.context["request"].user.is_authenticated:
|
if self.context["request"].user.is_authenticated:
|
||||||
user = self.context["request"].user
|
user = self.context["request"].user
|
||||||
return Address.objects.create(raw_data=raw, user=user, **validated_data) # type: ignore [no-untyped-call]
|
return Address.objects.create(raw_data=raw, user=user, **validated_data)
|
||||||
|
|
||||||
|
|
||||||
class DoFeedbackSerializer(Serializer): # type: ignore [type-arg]
|
class DoFeedbackSerializer(Serializer):
|
||||||
comment = CharField(required=True)
|
comment = CharField(required=True)
|
||||||
rating = IntegerField(min_value=1, max_value=10, default=10)
|
rating = IntegerField(min_value=1, max_value=10, default=10)
|
||||||
action = CharField(default="add")
|
action = CharField(default="add")
|
||||||
|
|
@ -94,13 +94,13 @@ class DoFeedbackSerializer(Serializer): # type: ignore [type-arg]
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
class CacheOperatorSerializer(Serializer): # type: ignore [type-arg]
|
class CacheOperatorSerializer(Serializer):
|
||||||
key = CharField(required=True)
|
key = CharField(required=True)
|
||||||
data = JSONField(required=False) # type: ignore [assignment]
|
data = JSONField(required=False)
|
||||||
timeout = IntegerField(required=False)
|
timeout = IntegerField(required=False)
|
||||||
|
|
||||||
|
|
||||||
class ContactUsSerializer(Serializer): # type: ignore [type-arg]
|
class ContactUsSerializer(Serializer):
|
||||||
email = CharField(required=True)
|
email = CharField(required=True)
|
||||||
name = CharField(required=True)
|
name = CharField(required=True)
|
||||||
subject = CharField(required=True)
|
subject = CharField(required=True)
|
||||||
|
|
@ -108,13 +108,13 @@ class ContactUsSerializer(Serializer): # type: ignore [type-arg]
|
||||||
message = CharField(required=True)
|
message = CharField(required=True)
|
||||||
|
|
||||||
|
|
||||||
class LanguageSerializer(Serializer): # type: ignore [type-arg]
|
class LanguageSerializer(Serializer):
|
||||||
code = CharField(required=True)
|
code = CharField(required=True)
|
||||||
name = CharField(required=True)
|
name = CharField(required=True)
|
||||||
flag = CharField()
|
flag = CharField()
|
||||||
|
|
||||||
|
|
||||||
class RecursiveField(Field): # type: ignore [type-arg]
|
class RecursiveField(Field):
|
||||||
def to_representation(self, value: Any) -> Any:
|
def to_representation(self, value: Any) -> Any:
|
||||||
parent = self.parent
|
parent = self.parent
|
||||||
if isinstance(parent, ListSerializer):
|
if isinstance(parent, ListSerializer):
|
||||||
|
|
@ -127,45 +127,45 @@ class RecursiveField(Field): # type: ignore [type-arg]
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
class AddOrderProductSerializer(Serializer): # type: ignore [type-arg]
|
class AddOrderProductSerializer(Serializer):
|
||||||
product_uuid = CharField(required=True)
|
product_uuid = CharField(required=True)
|
||||||
attributes = ListField(required=False, child=DictField(), default=list)
|
attributes = ListField(required=False, child=DictField(), default=list)
|
||||||
|
|
||||||
|
|
||||||
class BulkAddOrderProductsSerializer(Serializer): # type: ignore [type-arg]
|
class BulkAddOrderProductsSerializer(Serializer):
|
||||||
products = ListField(child=AddOrderProductSerializer(), required=True)
|
products = ListField(child=AddOrderProductSerializer(), required=True)
|
||||||
|
|
||||||
|
|
||||||
class RemoveOrderProductSerializer(Serializer): # type: ignore [type-arg]
|
class RemoveOrderProductSerializer(Serializer):
|
||||||
product_uuid = CharField(required=True)
|
product_uuid = CharField(required=True)
|
||||||
attributes = JSONField(required=False, default=dict)
|
attributes = JSONField(required=False, default=dict)
|
||||||
|
|
||||||
|
|
||||||
class BulkRemoveOrderProductsSerializer(Serializer): # type: ignore [type-arg]
|
class BulkRemoveOrderProductsSerializer(Serializer):
|
||||||
products = ListField(child=RemoveOrderProductSerializer(), required=True)
|
products = ListField(child=RemoveOrderProductSerializer(), required=True)
|
||||||
|
|
||||||
|
|
||||||
class AddWishlistProductSerializer(Serializer): # type: ignore [type-arg]
|
class AddWishlistProductSerializer(Serializer):
|
||||||
product_uuid = CharField(required=True)
|
product_uuid = CharField(required=True)
|
||||||
|
|
||||||
|
|
||||||
class RemoveWishlistProductSerializer(Serializer): # type: ignore [type-arg]
|
class RemoveWishlistProductSerializer(Serializer):
|
||||||
product_uuid = CharField(required=True)
|
product_uuid = CharField(required=True)
|
||||||
|
|
||||||
|
|
||||||
class BulkAddWishlistProductSerializer(Serializer): # type: ignore [type-arg]
|
class BulkAddWishlistProductSerializer(Serializer):
|
||||||
product_uuids = ListField(
|
product_uuids = ListField(
|
||||||
child=CharField(required=True), allow_empty=False, max_length=64
|
child=CharField(required=True), allow_empty=False, max_length=64
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class BulkRemoveWishlistProductSerializer(Serializer): # type: ignore [type-arg]
|
class BulkRemoveWishlistProductSerializer(Serializer):
|
||||||
product_uuids = ListField(
|
product_uuids = ListField(
|
||||||
child=CharField(required=True), allow_empty=False, max_length=64
|
child=CharField(required=True), allow_empty=False, max_length=64
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class BuyOrderSerializer(Serializer): # type: ignore [type-arg]
|
class BuyOrderSerializer(Serializer):
|
||||||
force_balance = BooleanField(required=False, default=False)
|
force_balance = BooleanField(required=False, default=False)
|
||||||
force_payment = BooleanField(required=False, default=False)
|
force_payment = BooleanField(required=False, default=False)
|
||||||
promocode_uuid = CharField(required=False)
|
promocode_uuid = CharField(required=False)
|
||||||
|
|
@ -174,7 +174,7 @@ class BuyOrderSerializer(Serializer): # type: ignore [type-arg]
|
||||||
chosen_products = AddOrderProductSerializer(many=True, required=False)
|
chosen_products = AddOrderProductSerializer(many=True, required=False)
|
||||||
|
|
||||||
|
|
||||||
class BuyUnregisteredOrderSerializer(Serializer): # type: ignore [type-arg]
|
class BuyUnregisteredOrderSerializer(Serializer):
|
||||||
products = AddOrderProductSerializer(many=True, required=True)
|
products = AddOrderProductSerializer(many=True, required=True)
|
||||||
promocode_uuid = UUIDField(required=False)
|
promocode_uuid = UUIDField(required=False)
|
||||||
customer_name = CharField(required=True)
|
customer_name = CharField(required=True)
|
||||||
|
|
@ -185,7 +185,7 @@ class BuyUnregisteredOrderSerializer(Serializer): # type: ignore [type-arg]
|
||||||
payment_method = CharField(required=True)
|
payment_method = CharField(required=True)
|
||||||
|
|
||||||
|
|
||||||
class BuyAsBusinessOrderSerializer(Serializer): # type: ignore [type-arg]
|
class BuyAsBusinessOrderSerializer(Serializer):
|
||||||
products = AddOrderProductSerializer(many=True, required=True)
|
products = AddOrderProductSerializer(many=True, required=True)
|
||||||
business_identificator = CharField(required=True)
|
business_identificator = CharField(required=True)
|
||||||
promocode_uuid = UUIDField(required=False)
|
promocode_uuid = UUIDField(required=False)
|
||||||
|
|
|
||||||
|
|
@ -156,8 +156,8 @@ def process_order_changes(instance: Order, created: bool, **kwargs: dict[Any, An
|
||||||
)
|
)
|
||||||
order_product.order.user.payments_balance.amount -= (
|
order_product.order.user.payments_balance.amount -= (
|
||||||
order_product.buy_price
|
order_product.buy_price
|
||||||
) # type: ignore [union-attr, operator]
|
)
|
||||||
order_product.order.user.payments_balance.save() # type: ignore [union-attr]
|
order_product.order.user.payments_balance.save()
|
||||||
order_product.save()
|
order_product.save()
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
|
@ -169,14 +169,15 @@ def process_order_changes(instance: Order, created: bool, **kwargs: dict[Any, An
|
||||||
price=order_product.buy_price
|
price=order_product.buy_price
|
||||||
)
|
)
|
||||||
.first()
|
.first()
|
||||||
.vendor.name.lower() # type: ignore [union-attr, attr-defined, misc]
|
.vendor.name.lower()
|
||||||
)
|
)
|
||||||
|
|
||||||
vendor = create_object(
|
vendor = create_object(
|
||||||
f"core.vendors.{vendor_name}", f"{vendor_name.title()}Vendor"
|
f"engine.core.vendors.{vendor_name}",
|
||||||
|
f"{vendor_name.title()}Vendor",
|
||||||
)
|
)
|
||||||
|
|
||||||
vendor.buy_order_product(order_product) # type: ignore [attr-defined]
|
vendor.buy_order_product(order_product)
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
order_product.add_error(
|
order_product.add_error(
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ class SitemapLanguageMixin:
|
||||||
return getattr(req, "LANGUAGE_CODE", settings.LANGUAGE_CODE)
|
return getattr(req, "LANGUAGE_CODE", settings.LANGUAGE_CODE)
|
||||||
|
|
||||||
|
|
||||||
class StaticPagesSitemap(SitemapLanguageMixin, Sitemap): # type: ignore [type-arg]
|
class StaticPagesSitemap(SitemapLanguageMixin, Sitemap):
|
||||||
protocol = "https"
|
protocol = "https"
|
||||||
changefreq = "monthly"
|
changefreq = "monthly"
|
||||||
priority = 0.8
|
priority = 0.8
|
||||||
|
|
@ -58,7 +58,7 @@ class StaticPagesSitemap(SitemapLanguageMixin, Sitemap): # type: ignore [type-a
|
||||||
return obj.get("lastmod")
|
return obj.get("lastmod")
|
||||||
|
|
||||||
|
|
||||||
class ProductSitemap(SitemapLanguageMixin, Sitemap): # type: ignore [type-arg]
|
class ProductSitemap(SitemapLanguageMixin, Sitemap):
|
||||||
protocol = "https"
|
protocol = "https"
|
||||||
changefreq = "daily"
|
changefreq = "daily"
|
||||||
priority = 0.9
|
priority = 0.9
|
||||||
|
|
@ -84,7 +84,7 @@ class ProductSitemap(SitemapLanguageMixin, Sitemap): # type: ignore [type-arg]
|
||||||
return f"/{self._lang()}/product/{obj.slug if obj.slug else '404-non-existent-product'}"
|
return f"/{self._lang()}/product/{obj.slug if obj.slug else '404-non-existent-product'}"
|
||||||
|
|
||||||
|
|
||||||
class CategorySitemap(SitemapLanguageMixin, Sitemap): # type: ignore [type-arg]
|
class CategorySitemap(SitemapLanguageMixin, Sitemap):
|
||||||
protocol = "https"
|
protocol = "https"
|
||||||
changefreq = "weekly"
|
changefreq = "weekly"
|
||||||
priority = 0.7
|
priority = 0.7
|
||||||
|
|
@ -109,7 +109,7 @@ class CategorySitemap(SitemapLanguageMixin, Sitemap): # type: ignore [type-arg]
|
||||||
return f"/{self._lang()}/catalog/{obj.slug if obj.slug else '404-non-existent-category'}"
|
return f"/{self._lang()}/catalog/{obj.slug if obj.slug else '404-non-existent-category'}"
|
||||||
|
|
||||||
|
|
||||||
class BrandSitemap(SitemapLanguageMixin, Sitemap): # type: ignore [type-arg]
|
class BrandSitemap(SitemapLanguageMixin, Sitemap):
|
||||||
protocol = "https"
|
protocol = "https"
|
||||||
changefreq = "weekly"
|
changefreq = "weekly"
|
||||||
priority = 0.6
|
priority = 0.6
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ register = template.Library()
|
||||||
def _to_float(val: object) -> float:
|
def _to_float(val: object) -> float:
|
||||||
conv: float = 0.0
|
conv: float = 0.0
|
||||||
with suppress(Exception):
|
with suppress(Exception):
|
||||||
return float(val) # type: ignore [arg-type]
|
return float(val)
|
||||||
return conv
|
return conv
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -66,15 +66,15 @@ def get_random_code() -> str:
|
||||||
return get_random_string(20)
|
return get_random_string(20)
|
||||||
|
|
||||||
|
|
||||||
def get_product_uuid_as_path(instance, filename: str = "") -> str: # type: ignore [no-untyped-def]
|
def get_product_uuid_as_path(instance, filename: str = "") -> str:
|
||||||
return "products" + "/" + str(instance.product.uuid) + "/" + filename
|
return "products" + "/" + str(instance.product.uuid) + "/" + filename
|
||||||
|
|
||||||
|
|
||||||
def get_vendor_name_as_path(instance, filename: str = "") -> str: # type: ignore [no-untyped-def]
|
def get_vendor_name_as_path(instance, filename: str = "") -> str:
|
||||||
return "vendors_responses/" + str(instance.name) + "/" + filename
|
return "vendors_responses/" + str(instance.name) + "/" + filename
|
||||||
|
|
||||||
|
|
||||||
def get_brand_name_as_path(instance, filename: str = "") -> str: # type: ignore [no-untyped-def]
|
def get_brand_name_as_path(instance, filename: str = "") -> str:
|
||||||
return "brands/" + str(instance.name) + "/" + filename
|
return "brands/" + str(instance.name) + "/" + filename
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -150,7 +150,7 @@ def get_project_parameters() -> Any:
|
||||||
return parameters
|
return parameters
|
||||||
|
|
||||||
|
|
||||||
def resolve_translations_for_elasticsearch(instance, field_name: str) -> None: # type: ignore [no-untyped-def]
|
def resolve_translations_for_elasticsearch(instance, field_name: str) -> None:
|
||||||
"""
|
"""
|
||||||
Resolves translations for a given field in an Elasticsearch-compatible
|
Resolves translations for a given field in an Elasticsearch-compatible
|
||||||
format. It checks if the localized version of the field contains data,
|
format. It checks if the localized version of the field contains data,
|
||||||
|
|
@ -211,7 +211,7 @@ def is_status_code_success(status_code: int) -> bool:
|
||||||
|
|
||||||
|
|
||||||
def get_dynamic_email_connection() -> EmailBackend:
|
def get_dynamic_email_connection() -> EmailBackend:
|
||||||
return mail.get_connection( # type: ignore [no-any-return]
|
return mail.get_connection(
|
||||||
host=config.EMAIL_HOST,
|
host=config.EMAIL_HOST,
|
||||||
port=config.EMAIL_PORT,
|
port=config.EMAIL_PORT,
|
||||||
username=config.EMAIL_HOST_USER,
|
username=config.EMAIL_HOST_USER,
|
||||||
|
|
|
||||||
|
|
@ -43,14 +43,14 @@ def web_cache(
|
||||||
request: Request | Context, key: str, data: dict[str, Any], timeout: int
|
request: Request | Context, key: str, data: dict[str, Any], timeout: int
|
||||||
) -> dict[str, Any]:
|
) -> dict[str, Any]:
|
||||||
if not data and not timeout:
|
if not data and not timeout:
|
||||||
return {"data": get_cached_value(request.user, key)} # type: ignore [assignment, arg-type]
|
return {"data": get_cached_value(request.user, key)}
|
||||||
if (data and not timeout) or (timeout and not data):
|
if (data and not timeout) or (timeout and not data):
|
||||||
raise BadRequest(_("both data and timeout are required"))
|
raise BadRequest(_("both data and timeout are required"))
|
||||||
if not 0 < int(timeout) < 216000:
|
if not 0 < int(timeout) < 216000:
|
||||||
raise BadRequest(
|
raise BadRequest(
|
||||||
_("invalid timeout value, it must be between 0 and 216000 seconds")
|
_("invalid timeout value, it must be between 0 and 216000 seconds")
|
||||||
)
|
)
|
||||||
return {"data": set_cached_value(request.user, key, data, timeout)} # type: ignore [assignment, arg-type]
|
return {"data": set_cached_value(request.user, key, data, timeout)}
|
||||||
|
|
||||||
|
|
||||||
def set_default_cache() -> None:
|
def set_default_cache() -> None:
|
||||||
|
|
|
||||||
|
|
@ -160,7 +160,7 @@ def get_top_returned_products(
|
||||||
p = product_by_id[pid]
|
p = product_by_id[pid]
|
||||||
img = ""
|
img = ""
|
||||||
with suppress(Exception):
|
with suppress(Exception):
|
||||||
img = p.images.first().image_url if p.images.exists() else "" # type: ignore [union-attr]
|
img = p.images.first().image_url if p.images.exists() else ""
|
||||||
result.append(
|
result.append(
|
||||||
{
|
{
|
||||||
"name": p.name,
|
"name": p.name,
|
||||||
|
|
|
||||||
|
|
@ -121,7 +121,7 @@ def send_order_finished_email(order_pk: str) -> tuple[bool, str]:
|
||||||
"order_products": ops,
|
"order_products": ops,
|
||||||
"project_name": settings.PROJECT_NAME,
|
"project_name": settings.PROJECT_NAME,
|
||||||
"contact_email": config.EMAIL_FROM,
|
"contact_email": config.EMAIL_FROM,
|
||||||
"total_price": round(sum(0.0 or op.buy_price for op in ops), 2), # type: ignore [misc]
|
"total_price": round(sum(0.0 or op.buy_price for op in ops), 2),
|
||||||
"display_system_attributes": order.user.has_perm("core.view_order"),
|
"display_system_attributes": order.user.has_perm("core.view_order"),
|
||||||
"today": datetime.today(),
|
"today": datetime.today(),
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ def get_vendors_integrations(name: str | None = None) -> list[AbstractVendor]:
|
||||||
|
|
||||||
for vendor in vendors:
|
for vendor in vendors:
|
||||||
try:
|
try:
|
||||||
module_name, class_name = vendor.integration_path.rsplit(".", 1) # type: ignore [union-attr]
|
module_name, class_name = vendor.integration_path.rsplit(".", 1)
|
||||||
vendors_integrations.append(create_object(module_name, class_name))
|
vendors_integrations.append(create_object(module_name, class_name))
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.warning(
|
logger.warning(
|
||||||
|
|
|
||||||
|
|
@ -11,11 +11,11 @@ def validate_category_image_dimensions(
|
||||||
|
|
||||||
if image:
|
if image:
|
||||||
try:
|
try:
|
||||||
width, height = get_image_dimensions(image.file) # type: ignore [arg-type]
|
width, height = get_image_dimensions(image.file)
|
||||||
except (FileNotFoundError, OSError, ValueError):
|
except (FileNotFoundError, OSError, ValueError):
|
||||||
return
|
return
|
||||||
|
|
||||||
if int(width) > max_width or int(height) > max_height: # type: ignore [arg-type]
|
if int(width) > max_width or int(height) > max_height:
|
||||||
raise ValidationError(
|
raise ValidationError(
|
||||||
_(
|
_(
|
||||||
f"image dimensions should not exceed w{max_width} x h{max_height} pixels"
|
f"image dimensions should not exceed w{max_width} x h{max_height} pixels"
|
||||||
|
|
|
||||||
4
engine/core/vendors/__init__.py
vendored
4
engine/core/vendors/__init__.py
vendored
|
|
@ -343,7 +343,7 @@ class AbstractVendor:
|
||||||
f"No rate found for {currency} in {rates} with probider {provider}..."
|
f"No rate found for {currency} in {rates} with probider {provider}..."
|
||||||
)
|
)
|
||||||
|
|
||||||
return float(round(price / rate, 2)) if rate else float(round(price, 2)) # type: ignore [arg-type, operator]
|
return float(round(price / rate, 2)) if rate else float(round(price, 2))
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def round_price_marketologically(price: float) -> float:
|
def round_price_marketologically(price: float) -> float:
|
||||||
|
|
@ -536,7 +536,7 @@ class AbstractVendor:
|
||||||
Attribute.objects.filter(name=key, group=attr_group)
|
Attribute.objects.filter(name=key, group=attr_group)
|
||||||
.order_by("uuid")
|
.order_by("uuid")
|
||||||
.first()
|
.first()
|
||||||
) # type: ignore [assignment]
|
)
|
||||||
fields_to_update: list[str] = []
|
fields_to_update: list[str] = []
|
||||||
if not attribute.is_active:
|
if not attribute.is_active:
|
||||||
attribute.is_active = True
|
attribute.is_active = True
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ import os
|
||||||
import traceback
|
import traceback
|
||||||
from contextlib import suppress
|
from contextlib import suppress
|
||||||
from datetime import date, timedelta
|
from datetime import date, timedelta
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
from constance import config
|
from constance import config
|
||||||
|
|
@ -31,8 +32,6 @@ from django.utils.translation import gettext_lazy as _
|
||||||
from django.views.decorators.cache import cache_page
|
from django.views.decorators.cache import cache_page
|
||||||
from django.views.decorators.vary import vary_on_headers
|
from django.views.decorators.vary import vary_on_headers
|
||||||
from django_ratelimit.decorators import ratelimit
|
from django_ratelimit.decorators import ratelimit
|
||||||
from djangorestframework_camel_case.render import CamelCaseJSONRenderer
|
|
||||||
from djangorestframework_camel_case.util import camelize
|
|
||||||
from drf_spectacular.utils import extend_schema_view
|
from drf_spectacular.utils import extend_schema_view
|
||||||
from drf_spectacular.views import (
|
from drf_spectacular.views import (
|
||||||
SpectacularAPIView,
|
SpectacularAPIView,
|
||||||
|
|
@ -42,12 +41,9 @@ from drf_spectacular.views import (
|
||||||
from graphene_file_upload.django import FileUploadGraphQLView
|
from graphene_file_upload.django import FileUploadGraphQLView
|
||||||
from rest_framework import status
|
from rest_framework import status
|
||||||
from rest_framework.permissions import AllowAny
|
from rest_framework.permissions import AllowAny
|
||||||
from rest_framework.renderers import MultiPartRenderer
|
|
||||||
from rest_framework.request import Request
|
from rest_framework.request import Request
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework.views import APIView
|
from rest_framework.views import APIView
|
||||||
from rest_framework_xml.renderers import XMLRenderer
|
|
||||||
from rest_framework_yaml.renderers import YAMLRenderer
|
|
||||||
from sentry_sdk import capture_exception
|
from sentry_sdk import capture_exception
|
||||||
|
|
||||||
from engine.core.docs.drf.views import (
|
from engine.core.docs.drf.views import (
|
||||||
|
|
@ -91,6 +87,7 @@ from engine.core.utils.commerce import (
|
||||||
from engine.core.utils.emailing import contact_us_email
|
from engine.core.utils.emailing import contact_us_email
|
||||||
from engine.core.utils.languages import get_flag_by_language
|
from engine.core.utils.languages import get_flag_by_language
|
||||||
from engine.payments.serializers import TransactionProcessSerializer
|
from engine.payments.serializers import TransactionProcessSerializer
|
||||||
|
from evibes.utils.renderers import camelize
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
@ -104,7 +101,7 @@ def sitemap_index(request, *args, **kwargs):
|
||||||
|
|
||||||
|
|
||||||
# noinspection PyTypeChecker
|
# noinspection PyTypeChecker
|
||||||
sitemap_index.__doc__ = _( # type: ignore [assignment]
|
sitemap_index.__doc__ = _( # pyright: ignore[reportUnknownVariableType]
|
||||||
"Handles the request for the sitemap index and returns an XML response. "
|
"Handles the request for the sitemap index and returns an XML response. "
|
||||||
"It ensures the response includes the appropriate content type header for XML."
|
"It ensures the response includes the appropriate content type header for XML."
|
||||||
)
|
)
|
||||||
|
|
@ -119,7 +116,7 @@ def sitemap_detail(request, *args, **kwargs):
|
||||||
|
|
||||||
|
|
||||||
# noinspection PyTypeChecker
|
# noinspection PyTypeChecker
|
||||||
sitemap_detail.__doc__ = _( # type: ignore [assignment]
|
sitemap_detail.__doc__ = _( # pyright: ignore[reportUnknownVariableType]
|
||||||
"Handles the detailed view response for a sitemap. "
|
"Handles the detailed view response for a sitemap. "
|
||||||
"This function processes the request, fetches the appropriate "
|
"This function processes the request, fetches the appropriate "
|
||||||
"sitemap detail response, and sets the Content-Type header for XML."
|
"sitemap detail response, and sets the Content-Type header for XML."
|
||||||
|
|
@ -155,20 +152,14 @@ class CustomRedocView(SpectacularRedocView):
|
||||||
|
|
||||||
@extend_schema_view(**LANGUAGE_SCHEMA)
|
@extend_schema_view(**LANGUAGE_SCHEMA)
|
||||||
class SupportedLanguagesView(APIView):
|
class SupportedLanguagesView(APIView):
|
||||||
__doc__ = _(
|
__doc__ = _( # pyright: ignore[reportUnknownVariableType]
|
||||||
"Returns a list of supported languages and their corresponding information."
|
"Returns a list of supported languages and their corresponding information."
|
||||||
) # type: ignore [assignment]
|
)
|
||||||
|
|
||||||
serializer_class = LanguageSerializer
|
serializer_class = LanguageSerializer
|
||||||
permission_classes = [
|
permission_classes = [
|
||||||
AllowAny,
|
AllowAny,
|
||||||
]
|
]
|
||||||
renderer_classes = [
|
|
||||||
CamelCaseJSONRenderer,
|
|
||||||
MultiPartRenderer,
|
|
||||||
XMLRenderer,
|
|
||||||
YAMLRenderer,
|
|
||||||
]
|
|
||||||
|
|
||||||
def get(self, request: Request, *args, **kwargs) -> Response:
|
def get(self, request: Request, *args, **kwargs) -> Response:
|
||||||
return Response(
|
return Response(
|
||||||
|
|
@ -189,18 +180,12 @@ class SupportedLanguagesView(APIView):
|
||||||
|
|
||||||
@extend_schema_view(**PARAMETERS_SCHEMA)
|
@extend_schema_view(**PARAMETERS_SCHEMA)
|
||||||
class WebsiteParametersView(APIView):
|
class WebsiteParametersView(APIView):
|
||||||
__doc__ = _("Returns the parameters of the website as a JSON object.") # type: ignore [assignment]
|
__doc__ = _("Returns the parameters of the website as a JSON object.")
|
||||||
|
|
||||||
serializer_class = None
|
serializer_class = None
|
||||||
permission_classes = [
|
permission_classes = [
|
||||||
AllowAny,
|
AllowAny,
|
||||||
]
|
]
|
||||||
renderer_classes = [
|
|
||||||
CamelCaseJSONRenderer,
|
|
||||||
MultiPartRenderer,
|
|
||||||
XMLRenderer,
|
|
||||||
YAMLRenderer,
|
|
||||||
]
|
|
||||||
|
|
||||||
def get(self, request: Request, *args, **kwargs) -> Response:
|
def get(self, request: Request, *args, **kwargs) -> Response:
|
||||||
return Response(
|
return Response(
|
||||||
|
|
@ -212,26 +197,20 @@ class WebsiteParametersView(APIView):
|
||||||
class CacheOperatorView(APIView):
|
class CacheOperatorView(APIView):
|
||||||
__doc__ = _(
|
__doc__ = _(
|
||||||
"Handles cache operations such as reading and setting cache data with a specified key and timeout."
|
"Handles cache operations such as reading and setting cache data with a specified key and timeout."
|
||||||
) # type: ignore [assignment]
|
)
|
||||||
|
|
||||||
serializer_class = CacheOperatorSerializer
|
serializer_class = CacheOperatorSerializer
|
||||||
permission_classes = [
|
permission_classes = [
|
||||||
AllowAny,
|
AllowAny,
|
||||||
]
|
]
|
||||||
renderer_classes = [
|
|
||||||
CamelCaseJSONRenderer,
|
|
||||||
MultiPartRenderer,
|
|
||||||
XMLRenderer,
|
|
||||||
YAMLRenderer,
|
|
||||||
]
|
|
||||||
|
|
||||||
def post(self, request: Request, *args, **kwargs) -> Response:
|
def post(self, request: Request, *args, **kwargs) -> Response:
|
||||||
return Response(
|
return Response(
|
||||||
data=web_cache(
|
data=web_cache(
|
||||||
request,
|
request,
|
||||||
request.data.get("key"), # type: ignore [arg-type]
|
request.data.get("key"),
|
||||||
request.data.get("data", {}),
|
request.data.get("data", {}),
|
||||||
request.data.get("timeout"), # type: ignore [arg-type]
|
request.data.get("timeout"),
|
||||||
),
|
),
|
||||||
status=status.HTTP_200_OK,
|
status=status.HTTP_200_OK,
|
||||||
)
|
)
|
||||||
|
|
@ -239,21 +218,15 @@ class CacheOperatorView(APIView):
|
||||||
|
|
||||||
@extend_schema_view(**CONTACT_US_SCHEMA)
|
@extend_schema_view(**CONTACT_US_SCHEMA)
|
||||||
class ContactUsView(APIView):
|
class ContactUsView(APIView):
|
||||||
__doc__ = _("Handles `contact us` form submissions.") # type: ignore [assignment]
|
__doc__ = _("Handles `contact us` form submissions.")
|
||||||
|
|
||||||
serializer_class = ContactUsSerializer
|
serializer_class = ContactUsSerializer
|
||||||
renderer_classes = [
|
|
||||||
CamelCaseJSONRenderer,
|
|
||||||
MultiPartRenderer,
|
|
||||||
XMLRenderer,
|
|
||||||
YAMLRenderer,
|
|
||||||
]
|
|
||||||
|
|
||||||
@method_decorator(ratelimit(key="ip", rate="2/h", method="POST", block=True))
|
@method_decorator(ratelimit(key="ip", rate="2/h", method="POST", block=True))
|
||||||
def post(self, request: Request, *args, **kwargs) -> Response:
|
def post(self, request: Request, *args, **kwargs) -> Response:
|
||||||
serializer = self.serializer_class(data=request.data)
|
serializer = self.serializer_class(data=request.data)
|
||||||
serializer.is_valid(raise_exception=True)
|
serializer.is_valid(raise_exception=True)
|
||||||
contact_us_email.delay(serializer.validated_data) # type: ignore [attr-defined]
|
contact_us_email.delay(serializer.validated_data)
|
||||||
|
|
||||||
return Response(data=serializer.data, status=status.HTTP_200_OK)
|
return Response(data=serializer.data, status=status.HTTP_200_OK)
|
||||||
|
|
||||||
|
|
@ -262,17 +235,11 @@ class ContactUsView(APIView):
|
||||||
class RequestCursedURLView(APIView):
|
class RequestCursedURLView(APIView):
|
||||||
__doc__ = _(
|
__doc__ = _(
|
||||||
"Handles requests for processing and validating URLs from incoming POST requests."
|
"Handles requests for processing and validating URLs from incoming POST requests."
|
||||||
) # type: ignore [assignment]
|
)
|
||||||
|
|
||||||
permission_classes = [
|
permission_classes = [
|
||||||
AllowAny,
|
AllowAny,
|
||||||
]
|
]
|
||||||
renderer_classes = [
|
|
||||||
CamelCaseJSONRenderer,
|
|
||||||
MultiPartRenderer,
|
|
||||||
XMLRenderer,
|
|
||||||
YAMLRenderer,
|
|
||||||
]
|
|
||||||
|
|
||||||
@method_decorator(ratelimit(key="ip", rate="10/h"))
|
@method_decorator(ratelimit(key="ip", rate="10/h"))
|
||||||
def post(self, request: Request, *args, **kwargs) -> Response:
|
def post(self, request: Request, *args, **kwargs) -> Response:
|
||||||
|
|
@ -304,14 +271,7 @@ class RequestCursedURLView(APIView):
|
||||||
|
|
||||||
@extend_schema_view(**SEARCH_SCHEMA)
|
@extend_schema_view(**SEARCH_SCHEMA)
|
||||||
class GlobalSearchView(APIView):
|
class GlobalSearchView(APIView):
|
||||||
__doc__ = _("Handles global search queries.") # type: ignore [assignment]
|
__doc__ = _("Handles global search queries.")
|
||||||
|
|
||||||
renderer_classes = [
|
|
||||||
CamelCaseJSONRenderer,
|
|
||||||
MultiPartRenderer,
|
|
||||||
XMLRenderer,
|
|
||||||
YAMLRenderer,
|
|
||||||
]
|
|
||||||
|
|
||||||
def get(self, request: Request, *args, **kwargs) -> Response:
|
def get(self, request: Request, *args, **kwargs) -> Response:
|
||||||
return Response(
|
return Response(
|
||||||
|
|
@ -327,7 +287,7 @@ class GlobalSearchView(APIView):
|
||||||
|
|
||||||
@extend_schema_view(**BUY_AS_BUSINESS_SCHEMA)
|
@extend_schema_view(**BUY_AS_BUSINESS_SCHEMA)
|
||||||
class BuyAsBusinessView(APIView):
|
class BuyAsBusinessView(APIView):
|
||||||
__doc__ = _("Handles the logic of buying as a business without registration.") # type: ignore [assignment]
|
__doc__ = _("Handles the logic of buying as a business without registration.")
|
||||||
|
|
||||||
# noinspection PyUnusedLocal
|
# noinspection PyUnusedLocal
|
||||||
@method_decorator(
|
@method_decorator(
|
||||||
|
|
@ -374,7 +334,7 @@ class BuyAsBusinessView(APIView):
|
||||||
|
|
||||||
@extend_schema_view(**DOWNLOAD_DIGITAL_ASSET_SCHEMA)
|
@extend_schema_view(**DOWNLOAD_DIGITAL_ASSET_SCHEMA)
|
||||||
class DownloadDigitalAssetView(APIView):
|
class DownloadDigitalAssetView(APIView):
|
||||||
__doc__ = _( # type: ignore [assignment]
|
__doc__ = _(
|
||||||
"Handles the downloading of a digital asset associated with an order.\n"
|
"Handles the downloading of a digital asset associated with an order.\n"
|
||||||
"This function attempts to serve the digital asset file located in the "
|
"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 "
|
"storage directory of the project. If the file is not found, an HTTP 404 "
|
||||||
|
|
@ -409,7 +369,7 @@ class DownloadDigitalAssetView(APIView):
|
||||||
if not order_product.download.order_product.product:
|
if not order_product.download.order_product.product:
|
||||||
raise BadRequest(_("the order product does not have a product"))
|
raise BadRequest(_("the order product does not have a product"))
|
||||||
|
|
||||||
file_path = order_product.download.order_product.product.stocks.first().digital_asset.path # type: ignore [union-attr]
|
file_path = order_product.download.order_product.product.stocks.first().digital_asset.path
|
||||||
|
|
||||||
content_type, encoding = mimetypes.guess_type(file_path)
|
content_type, encoding = mimetypes.guess_type(file_path)
|
||||||
if not content_type:
|
if not content_type:
|
||||||
|
|
@ -444,7 +404,9 @@ class DownloadDigitalAssetView(APIView):
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def favicon_view(request: HttpRequest, *args, **kwargs) -> HttpResponse | FileResponse:
|
def favicon_view(
|
||||||
|
request: HttpRequest, *args: list[Any], **kwargs: dict[str, Any]
|
||||||
|
) -> HttpResponse | FileResponse | None:
|
||||||
try:
|
try:
|
||||||
favicon_path = os.path.join(settings.BASE_DIR, "static/favicon.png")
|
favicon_path = os.path.join(settings.BASE_DIR, "static/favicon.png")
|
||||||
return FileResponse(open(favicon_path, "rb"), content_type="image/x-icon")
|
return FileResponse(open(favicon_path, "rb"), content_type="image/x-icon")
|
||||||
|
|
@ -453,7 +415,7 @@ def favicon_view(request: HttpRequest, *args, **kwargs) -> HttpResponse | FileRe
|
||||||
|
|
||||||
|
|
||||||
# noinspection PyTypeChecker
|
# noinspection PyTypeChecker
|
||||||
favicon_view.__doc__ = _( # type: ignore [assignment]
|
favicon_view.__doc__ = _(
|
||||||
"Handles requests for the favicon of a website.\n"
|
"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. "
|
"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."
|
"If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable."
|
||||||
|
|
@ -465,7 +427,7 @@ def index(request: HttpRequest, *args, **kwargs) -> HttpResponse | HttpResponseR
|
||||||
|
|
||||||
|
|
||||||
# noinspection PyTypeChecker
|
# noinspection PyTypeChecker
|
||||||
index.__doc__ = _( # type: ignore [assignment]
|
index.__doc__ = _(
|
||||||
"Redirects the request to the admin index page. "
|
"Redirects the request to the admin index page. "
|
||||||
"The function handles incoming HTTP requests and redirects them to the Django "
|
"The function handles incoming HTTP requests and redirects them to the Django "
|
||||||
"admin interface index page. It uses Django's `redirect` function for handling "
|
"admin interface index page. It uses Django's `redirect` function for handling "
|
||||||
|
|
@ -478,9 +440,7 @@ def version(request: HttpRequest, *args, **kwargs) -> HttpResponse:
|
||||||
|
|
||||||
|
|
||||||
# noinspection PyTypeChecker
|
# noinspection PyTypeChecker
|
||||||
version.__doc__ = _( # type: ignore [assignment]
|
version.__doc__ = _("Returns current version of the eVibes. ")
|
||||||
"Returns current version of the eVibes. "
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def dashboard_callback(request: HttpRequest, context: Context) -> Context:
|
def dashboard_callback(request: HttpRequest, context: Context) -> Context:
|
||||||
|
|
@ -631,7 +591,7 @@ def dashboard_callback(request: HttpRequest, context: Context) -> Context:
|
||||||
with suppress(Exception):
|
with suppress(Exception):
|
||||||
quick_links_section = settings.UNFOLD.get("SIDEBAR", {}).get("navigation", [])[
|
quick_links_section = settings.UNFOLD.get("SIDEBAR", {}).get("navigation", [])[
|
||||||
1
|
1
|
||||||
] # type: ignore[assignment]
|
]
|
||||||
for item in quick_links_section.get("items", []):
|
for item in quick_links_section.get("items", []):
|
||||||
title = item.get("title")
|
title = item.get("title")
|
||||||
link = item.get("link")
|
link = item.get("link")
|
||||||
|
|
@ -661,7 +621,7 @@ def dashboard_callback(request: HttpRequest, context: Context) -> Context:
|
||||||
if product:
|
if product:
|
||||||
img = (
|
img = (
|
||||||
product.images.first().image_url if product.images.exists() else ""
|
product.images.first().image_url if product.images.exists() else ""
|
||||||
) # type: ignore [union-attr]
|
)
|
||||||
most_wished = {
|
most_wished = {
|
||||||
"name": product.name,
|
"name": product.name,
|
||||||
"image": img,
|
"image": img,
|
||||||
|
|
@ -684,7 +644,7 @@ def dashboard_callback(request: HttpRequest, context: Context) -> Context:
|
||||||
if not pid or pid not in product_by_id:
|
if not pid or pid not in product_by_id:
|
||||||
continue
|
continue
|
||||||
p = product_by_id[pid]
|
p = product_by_id[pid]
|
||||||
img = p.images.first().image_url if p.images.exists() else "" # type: ignore [union-attr]
|
img = p.images.first().image_url if p.images.exists() else ""
|
||||||
most_wished_list.append(
|
most_wished_list.append(
|
||||||
{
|
{
|
||||||
"name": p.name,
|
"name": p.name,
|
||||||
|
|
@ -783,7 +743,7 @@ def dashboard_callback(request: HttpRequest, context: Context) -> Context:
|
||||||
if product:
|
if product:
|
||||||
img = (
|
img = (
|
||||||
product.images.first().image_url if product.images.exists() else ""
|
product.images.first().image_url if product.images.exists() else ""
|
||||||
) # type: ignore [union-attr]
|
)
|
||||||
most_popular = {
|
most_popular = {
|
||||||
"name": product.name,
|
"name": product.name,
|
||||||
"image": img,
|
"image": img,
|
||||||
|
|
@ -806,7 +766,7 @@ def dashboard_callback(request: HttpRequest, context: Context) -> Context:
|
||||||
if not pid or pid not in product_by_id:
|
if not pid or pid not in product_by_id:
|
||||||
continue
|
continue
|
||||||
p = product_by_id[pid]
|
p = product_by_id[pid]
|
||||||
img = p.images.first().image_url if p.images.exists() else "" # type: ignore [union-attr]
|
img = p.images.first().image_url if p.images.exists() else ""
|
||||||
most_popular_list.append(
|
most_popular_list.append(
|
||||||
{
|
{
|
||||||
"name": p.name,
|
"name": p.name,
|
||||||
|
|
@ -905,6 +865,4 @@ def dashboard_callback(request: HttpRequest, context: Context) -> Context:
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
||||||
dashboard_callback.__doc__ = _( # type: ignore [assignment]
|
dashboard_callback.__doc__ = _("Returns custom variables for Dashboard. ")
|
||||||
"Returns custom variables for Dashboard. "
|
|
||||||
)
|
|
||||||
|
|
|
||||||
|
|
@ -11,19 +11,15 @@ from django.utils.decorators import method_decorator
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from django_filters.rest_framework import DjangoFilterBackend
|
from django_filters.rest_framework import DjangoFilterBackend
|
||||||
from django_ratelimit.decorators import ratelimit
|
from django_ratelimit.decorators import ratelimit
|
||||||
from djangorestframework_camel_case.render import CamelCaseJSONRenderer
|
|
||||||
from drf_spectacular.utils import extend_schema_view
|
from drf_spectacular.utils import extend_schema_view
|
||||||
from rest_framework import status
|
from rest_framework import status
|
||||||
from rest_framework.decorators import action
|
from rest_framework.decorators import action
|
||||||
from rest_framework.exceptions import PermissionDenied
|
from rest_framework.exceptions import PermissionDenied
|
||||||
from rest_framework.permissions import AllowAny
|
from rest_framework.permissions import AllowAny
|
||||||
from rest_framework.renderers import MultiPartRenderer
|
|
||||||
from rest_framework.request import Request
|
from rest_framework.request import Request
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework.serializers import Serializer
|
from rest_framework.serializers import Serializer
|
||||||
from rest_framework.viewsets import ModelViewSet
|
from rest_framework.viewsets import ModelViewSet
|
||||||
from rest_framework_xml.renderers import XMLRenderer
|
|
||||||
from rest_framework_yaml.renderers import YAMLRenderer
|
|
||||||
|
|
||||||
from engine.core.docs.drf.viewsets import (
|
from engine.core.docs.drf.viewsets import (
|
||||||
ADDRESS_SCHEMA,
|
ADDRESS_SCHEMA,
|
||||||
|
|
@ -139,7 +135,7 @@ logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class EvibesViewSet(ModelViewSet):
|
class EvibesViewSet(ModelViewSet):
|
||||||
__doc__ = _( # type: ignore
|
__doc__ = _(
|
||||||
"Defines a viewset for managing Evibes-related operations. "
|
"Defines a viewset for managing Evibes-related operations. "
|
||||||
"The EvibesViewSet class inherits from ModelViewSet and provides functionality "
|
"The EvibesViewSet class inherits from ModelViewSet and provides functionality "
|
||||||
"for handling actions and operations on Evibes entities. It includes support "
|
"for handling actions and operations on Evibes entities. It includes support "
|
||||||
|
|
@ -150,18 +146,12 @@ class EvibesViewSet(ModelViewSet):
|
||||||
action_serializer_classes: dict[str, Type[Serializer]] = {}
|
action_serializer_classes: dict[str, Type[Serializer]] = {}
|
||||||
additional: dict[str, str] = {}
|
additional: dict[str, str] = {}
|
||||||
permission_classes = [EvibesPermission]
|
permission_classes = [EvibesPermission]
|
||||||
renderer_classes = [
|
|
||||||
CamelCaseJSONRenderer,
|
|
||||||
MultiPartRenderer,
|
|
||||||
XMLRenderer,
|
|
||||||
YAMLRenderer,
|
|
||||||
]
|
|
||||||
|
|
||||||
def get_serializer_class(self) -> Type[Serializer]:
|
def get_serializer_class(self) -> Type[Serializer]:
|
||||||
# noinspection PyTypeChecker
|
# noinspection PyTypeChecker
|
||||||
return self.action_serializer_classes.get(
|
return self.action_serializer_classes.get(
|
||||||
self.action, super().get_serializer_class()
|
self.action, super().get_serializer_class()
|
||||||
) # type: ignore [arg-type]
|
)
|
||||||
|
|
||||||
|
|
||||||
@extend_schema_view(**ATTRIBUTE_GROUP_SCHEMA)
|
@extend_schema_view(**ATTRIBUTE_GROUP_SCHEMA)
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ from django.utils.safestring import SafeString
|
||||||
class JSONTableWidget(forms.Widget):
|
class JSONTableWidget(forms.Widget):
|
||||||
template_name = "json_table_widget.html"
|
template_name = "json_table_widget.html"
|
||||||
|
|
||||||
def format_value(self, value: str | dict[str, Any]) -> str | dict[str, Any]: # type: ignore [override]
|
def format_value(self, value: str | dict[str, Any]) -> str | dict[str, Any]:
|
||||||
if isinstance(value, dict):
|
if isinstance(value, dict):
|
||||||
return value
|
return value
|
||||||
try:
|
try:
|
||||||
|
|
@ -40,8 +40,8 @@ class JSONTableWidget(forms.Widget):
|
||||||
json_data = {}
|
json_data = {}
|
||||||
|
|
||||||
try:
|
try:
|
||||||
keys = data.getlist(f"{name}_key") # type: ignore [attr-defined]
|
keys = data.getlist(f"{name}_key")
|
||||||
values = data.getlist(f"{name}_value") # type: ignore [attr-defined]
|
values = data.getlist(f"{name}_value")
|
||||||
for key, value in zip(keys, values, strict=True):
|
for key, value in zip(keys, values, strict=True):
|
||||||
if key.strip():
|
if key.strip():
|
||||||
try:
|
try:
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ from engine.payments.forms import GatewayForm, TransactionForm
|
||||||
from engine.payments.models import Balance, Gateway, Transaction
|
from engine.payments.models import Balance, Gateway, Transaction
|
||||||
|
|
||||||
|
|
||||||
class TransactionInline(TabularInline): # type: ignore [type-arg]
|
class TransactionInline(TabularInline):
|
||||||
model = Transaction
|
model = Transaction
|
||||||
form = TransactionForm
|
form = TransactionForm
|
||||||
extra = 1
|
extra = 1
|
||||||
|
|
@ -23,7 +23,7 @@ class TransactionInline(TabularInline): # type: ignore [type-arg]
|
||||||
|
|
||||||
|
|
||||||
@register(Balance)
|
@register(Balance)
|
||||||
class BalanceAdmin(ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg]
|
class BalanceAdmin(ActivationActionsMixin, ModelAdmin):
|
||||||
inlines = (TransactionInline,)
|
inlines = (TransactionInline,)
|
||||||
list_display = ("user", "amount")
|
list_display = ("user", "amount")
|
||||||
search_fields = ("user__email",)
|
search_fields = ("user__email",)
|
||||||
|
|
@ -35,7 +35,7 @@ class BalanceAdmin(ActivationActionsMixin, ModelAdmin): # type: ignore [misc, t
|
||||||
|
|
||||||
|
|
||||||
@register(Transaction)
|
@register(Transaction)
|
||||||
class TransactionAdmin(ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg]
|
class TransactionAdmin(ActivationActionsMixin, ModelAdmin):
|
||||||
list_display = ("balance", "amount", "order", "modified", "created")
|
list_display = ("balance", "amount", "order", "modified", "created")
|
||||||
search_fields = ("balance__user__email", "currency", "payment_method")
|
search_fields = ("balance__user__email", "currency", "payment_method")
|
||||||
list_filter = ("currency", "payment_method")
|
list_filter = ("currency", "payment_method")
|
||||||
|
|
@ -44,7 +44,7 @@ class TransactionAdmin(ActivationActionsMixin, ModelAdmin): # type: ignore [mis
|
||||||
|
|
||||||
|
|
||||||
@register(Gateway)
|
@register(Gateway)
|
||||||
class GatewayAdmin(ActivationActionsMixin, ModelAdmin): # type: ignore [misc]
|
class GatewayAdmin(ActivationActionsMixin, ModelAdmin):
|
||||||
list_display = (
|
list_display = (
|
||||||
"name",
|
"name",
|
||||||
"can_be_used",
|
"can_be_used",
|
||||||
|
|
@ -57,8 +57,8 @@ class GatewayAdmin(ActivationActionsMixin, ModelAdmin): # type: ignore [misc]
|
||||||
ordering = ("name",)
|
ordering = ("name",)
|
||||||
form = GatewayForm
|
form = GatewayForm
|
||||||
|
|
||||||
def can_be_used(self, obj: Gateway) -> bool: # type: ignore[override]
|
def can_be_used(self, obj: Gateway) -> bool:
|
||||||
return obj.can_be_used
|
return obj.can_be_used
|
||||||
|
|
||||||
can_be_used.boolean = True # type: ignore[attr-defined]
|
can_be_used.boolean = True
|
||||||
can_be_used.short_description = _("can be used") # type: ignore[attr-defined]
|
can_be_used.short_description = _("can be used")
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ from engine.core.widgets import JSONTableWidget
|
||||||
from engine.payments.models import Gateway, Transaction
|
from engine.payments.models import Gateway, Transaction
|
||||||
|
|
||||||
|
|
||||||
class TransactionForm(forms.ModelForm): # type: ignore [type-arg]
|
class TransactionForm(forms.ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Transaction
|
model = Transaction
|
||||||
fields = "__all__"
|
fields = "__all__"
|
||||||
|
|
@ -13,7 +13,7 @@ class TransactionForm(forms.ModelForm): # type: ignore [type-arg]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class GatewayForm(forms.ModelForm): # type: ignore [type-arg]
|
class GatewayForm(forms.ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Gateway
|
model = Gateway
|
||||||
fields = "__all__"
|
fields = "__all__"
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2025.4\n"
|
"Project-Id-Version: EVIBES 2025.4\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-12-10 21:44+0300\n"
|
"POT-Creation-Date: 2025-12-18 17:19+0300\n"
|
||||||
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
|
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
|
||||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||||
"Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n"
|
"Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n"
|
||||||
|
|
@ -13,11 +13,11 @@ msgstr ""
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: engine/payments/admin.py:17 engine/payments/models.py:56
|
#: engine/payments/admin.py:17 engine/payments/models.py:68
|
||||||
msgid "transaction"
|
msgid "transaction"
|
||||||
msgstr "المعاملات"
|
msgstr "المعاملات"
|
||||||
|
|
||||||
#: engine/payments/admin.py:18 engine/payments/models.py:57
|
#: engine/payments/admin.py:18 engine/payments/models.py:69
|
||||||
msgid "transactions"
|
msgid "transactions"
|
||||||
msgstr "المعاملات"
|
msgstr "المعاملات"
|
||||||
|
|
||||||
|
|
@ -37,19 +37,19 @@ msgstr "الإيداع"
|
||||||
msgid "withdraw"
|
msgid "withdraw"
|
||||||
msgstr "سحب"
|
msgstr "سحب"
|
||||||
|
|
||||||
#: engine/payments/docs/drf/views.py:13
|
#: engine/payments/docs/drf/views.py:17
|
||||||
msgid "deposit to balance"
|
msgid "deposit to balance"
|
||||||
msgstr "الإيداع في الرصيد"
|
msgstr "الإيداع في الرصيد"
|
||||||
|
|
||||||
#: engine/payments/docs/drf/views.py:14
|
#: engine/payments/docs/drf/views.py:18
|
||||||
msgid "deposit some money to balance"
|
msgid "deposit some money to balance"
|
||||||
msgstr "إيداع بعض الأموال لتحقيق التوازن"
|
msgstr "إيداع بعض الأموال لتحقيق التوازن"
|
||||||
|
|
||||||
#: engine/payments/docs/drf/views.py:29
|
#: engine/payments/docs/drf/views.py:33
|
||||||
msgid "payment limits"
|
msgid "payment limits"
|
||||||
msgstr "حدود الدفع"
|
msgstr "حدود الدفع"
|
||||||
|
|
||||||
#: engine/payments/docs/drf/views.py:30
|
#: engine/payments/docs/drf/views.py:35
|
||||||
msgid ""
|
msgid ""
|
||||||
"retrieve minimal and maximal allowed deposit amounts across available "
|
"retrieve minimal and maximal allowed deposit amounts across available "
|
||||||
"gateways"
|
"gateways"
|
||||||
|
|
@ -69,88 +69,88 @@ msgstr "استرداد معاملة واحدة (للقراءة فقط)"
|
||||||
msgid "Transaction UUID"
|
msgid "Transaction UUID"
|
||||||
msgstr "معرّف المعاملة UUID"
|
msgstr "معرّف المعاملة UUID"
|
||||||
|
|
||||||
#: engine/payments/models.py:36
|
#: engine/payments/models.py:42
|
||||||
msgid "order to process after paid"
|
msgid "order to process after paid"
|
||||||
msgstr "طلب المعالجة بعد الدفع"
|
msgstr "طلب المعالجة بعد الدفع"
|
||||||
|
|
||||||
#: engine/payments/models.py:39
|
#: engine/payments/models.py:45
|
||||||
msgid "processing details"
|
msgid "processing details"
|
||||||
msgstr "تفاصيل المعالجة"
|
msgstr "تفاصيل المعالجة"
|
||||||
|
|
||||||
#: engine/payments/models.py:75
|
#: engine/payments/models.py:91
|
||||||
msgid "balance"
|
msgid "balance"
|
||||||
msgstr "الرصيد"
|
msgstr "الرصيد"
|
||||||
|
|
||||||
#: engine/payments/models.py:76
|
#: engine/payments/models.py:92
|
||||||
msgid "balances"
|
msgid "balances"
|
||||||
msgstr "الموازين"
|
msgstr "الموازين"
|
||||||
|
|
||||||
#: engine/payments/models.py:86
|
#: engine/payments/models.py:102
|
||||||
msgid "name"
|
msgid "name"
|
||||||
msgstr "الاسم"
|
msgstr "الاسم"
|
||||||
|
|
||||||
#: engine/payments/models.py:91
|
#: engine/payments/models.py:107
|
||||||
msgid "default currency"
|
msgid "default currency"
|
||||||
msgstr "العملة الافتراضية"
|
msgstr "العملة الافتراضية"
|
||||||
|
|
||||||
#: engine/payments/models.py:98
|
#: engine/payments/models.py:114
|
||||||
msgid "currencies"
|
msgid "currencies"
|
||||||
msgstr "العملات"
|
msgstr "العملات"
|
||||||
|
|
||||||
#: engine/payments/models.py:100
|
#: engine/payments/models.py:116
|
||||||
msgid "comma separated list of currencies supported by this gateway, "
|
msgid "comma separated list of currencies supported by this gateway, "
|
||||||
msgstr "قائمة مفصولة بفاصلة بالعملات التي تدعمها هذه البوابة,"
|
msgstr "قائمة مفصولة بفاصلة بالعملات التي تدعمها هذه البوابة,"
|
||||||
|
|
||||||
#: engine/payments/models.py:106
|
#: engine/payments/models.py:122
|
||||||
msgid "minimum transaction amount"
|
msgid "minimum transaction amount"
|
||||||
msgstr "الحد الأدنى لمبلغ المعاملة"
|
msgstr "الحد الأدنى لمبلغ المعاملة"
|
||||||
|
|
||||||
#: engine/payments/models.py:109
|
#: engine/payments/models.py:125
|
||||||
msgid "maximum transaction amount"
|
msgid "maximum transaction amount"
|
||||||
msgstr "الحد الأقصى لمبلغ المعاملة"
|
msgstr "الحد الأقصى لمبلغ المعاملة"
|
||||||
|
|
||||||
#: engine/payments/models.py:115
|
#: engine/payments/models.py:131
|
||||||
msgid "daily limit"
|
msgid "daily limit"
|
||||||
msgstr "الحد اليومي"
|
msgstr "الحد اليومي"
|
||||||
|
|
||||||
#: engine/payments/models.py:116
|
#: engine/payments/models.py:132
|
||||||
msgid "daily sum limit of transactions' amounts. 0 means no limit"
|
msgid "daily sum limit of transactions' amounts. 0 means no limit"
|
||||||
msgstr "حد المجموع اليومي لمبالغ المعاملات. 0 يعني عدم وجود حد"
|
msgstr "حد المجموع اليومي لمبالغ المعاملات. 0 يعني عدم وجود حد"
|
||||||
|
|
||||||
#: engine/payments/models.py:122
|
#: engine/payments/models.py:138
|
||||||
msgid "monthly limit"
|
msgid "monthly limit"
|
||||||
msgstr "الحد الشهري"
|
msgstr "الحد الشهري"
|
||||||
|
|
||||||
#: engine/payments/models.py:123
|
#: engine/payments/models.py:139
|
||||||
msgid "monthly sum limit of transactions' amounts. 0 means no limit"
|
msgid "monthly sum limit of transactions' amounts. 0 means no limit"
|
||||||
msgstr "حد المجموع الشهري لمبالغ المعاملات. 0 يعني عدم وجود حد"
|
msgstr "حد المجموع الشهري لمبالغ المعاملات. 0 يعني عدم وجود حد"
|
||||||
|
|
||||||
#: engine/payments/models.py:125
|
#: engine/payments/models.py:142
|
||||||
msgid "priority"
|
msgid "priority"
|
||||||
msgstr "الأولوية"
|
msgstr "الأولوية"
|
||||||
|
|
||||||
#: engine/payments/models.py:126
|
#: engine/payments/models.py:145
|
||||||
msgid "integration variables"
|
msgid "integration variables"
|
||||||
msgstr "متغيرات التكامل"
|
msgstr "متغيرات التكامل"
|
||||||
|
|
||||||
#: engine/payments/models.py:132
|
#: engine/payments/models.py:152
|
||||||
msgid "payment gateway"
|
msgid "payment gateway"
|
||||||
msgstr "بوابة الدفع"
|
msgstr "بوابة الدفع"
|
||||||
|
|
||||||
#: engine/payments/models.py:133
|
#: engine/payments/models.py:153
|
||||||
msgid "payment gateways"
|
msgid "payment gateways"
|
||||||
msgstr "بوابات الدفع"
|
msgstr "بوابات الدفع"
|
||||||
|
|
||||||
#: engine/payments/models.py:169
|
#: engine/payments/models.py:198
|
||||||
msgid "gateway integration path is not set"
|
msgid "gateway integration path is not set"
|
||||||
msgstr "لم يتم تعيين مسار تكامل البوابة"
|
msgstr "لم يتم تعيين مسار تكامل البوابة"
|
||||||
|
|
||||||
#: engine/payments/models.py:174
|
#: engine/payments/models.py:204
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "invalid integration path: %(path)s"
|
msgid "invalid integration path: %(path)s"
|
||||||
msgstr "مسار تكامل غير صالح: %(path)s"
|
msgstr "مسار تكامل غير صالح: %(path)s"
|
||||||
|
|
||||||
#: engine/payments/signals.py:41
|
#: engine/payments/signals.py:45
|
||||||
msgid "the transaction amount didn't fit into allowed limits: "
|
msgid "the transaction amount didn't fit into allowed limits: "
|
||||||
msgstr "لم يتناسب مبلغ المعاملة مع الحدود المسموح بها:"
|
msgstr "لم يتناسب مبلغ المعاملة مع الحدود المسموح بها:"
|
||||||
|
|
||||||
|
|
@ -204,12 +204,12 @@ msgstr "مطلوب مزود للحصول على الأسعار من"
|
||||||
msgid "couldn't find provider {provider}"
|
msgid "couldn't find provider {provider}"
|
||||||
msgstr "تعذر العثور على مزود {provider}"
|
msgstr "تعذر العثور على مزود {provider}"
|
||||||
|
|
||||||
#: engine/payments/utils/emailing.py:28
|
#: engine/payments/utils/emailing.py:31
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "{settings.PROJECT_NAME} | balance deposit"
|
msgid "{settings.PROJECT_NAME} | balance deposit"
|
||||||
msgstr "{settings.PROJECT_NAME} | إيداع الرصيد"
|
msgstr "{settings.PROJECT_NAME} | إيداع الرصيد"
|
||||||
|
|
||||||
#: engine/payments/views.py:24
|
#: engine/payments/views.py:28
|
||||||
msgid ""
|
msgid ""
|
||||||
"This class provides an API endpoint to handle deposit transactions.\n"
|
"This class provides an API endpoint to handle deposit transactions.\n"
|
||||||
"It supports the creation of a deposit transaction after validating the "
|
"It supports the creation of a deposit transaction after validating the "
|
||||||
|
|
@ -222,7 +222,7 @@ msgstr ""
|
||||||
"مصادقة المستخدم، يتم إرجاع استجابة مناسبة. عند التحقق والتنفيذ بنجاح، يتم "
|
"مصادقة المستخدم، يتم إرجاع استجابة مناسبة. عند التحقق والتنفيذ بنجاح، يتم "
|
||||||
"توفير استجابة بتفاصيل المعاملة."
|
"توفير استجابة بتفاصيل المعاملة."
|
||||||
|
|
||||||
#: engine/payments/views.py:50
|
#: engine/payments/views.py:61
|
||||||
msgid ""
|
msgid ""
|
||||||
"Handles incoming callback requests to the API.\n"
|
"Handles incoming callback requests to the API.\n"
|
||||||
"This class processes and routes incoming HTTP POST requests to the "
|
"This class processes and routes incoming HTTP POST requests to the "
|
||||||
|
|
@ -235,17 +235,17 @@ msgstr ""
|
||||||
"المناسب بناءً على معلمة البوابة المقدمة. وهو مصمم للتعامل مع أحداث رد الاتصال "
|
"المناسب بناءً على معلمة البوابة المقدمة. وهو مصمم للتعامل مع أحداث رد الاتصال "
|
||||||
"الواردة من أنظمة خارجية وتوفير استجابة HTTP مناسبة تشير إلى النجاح أو الفشل."
|
"الواردة من أنظمة خارجية وتوفير استجابة HTTP مناسبة تشير إلى النجاح أو الفشل."
|
||||||
|
|
||||||
#: engine/payments/views.py:61
|
#: engine/payments/views.py:75
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Transaction {transaction.uuid} has no gateway"
|
msgid "Transaction {transaction.uuid} has no gateway"
|
||||||
msgstr "لا تحتوي المعاملة {transaction.uuid} على بوابة"
|
msgstr "لا تحتوي المعاملة {transaction.uuid} على بوابة"
|
||||||
|
|
||||||
#: engine/payments/views.py:64
|
#: engine/payments/views.py:82
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Gateway {transaction.gateway} has no integration"
|
msgid "Gateway {transaction.gateway} has no integration"
|
||||||
msgstr "البوابة {transaction.gateway} ليس لها تكامل"
|
msgstr "البوابة {transaction.gateway} ليس لها تكامل"
|
||||||
|
|
||||||
#: engine/payments/views.py:76
|
#: engine/payments/views.py:96
|
||||||
msgid ""
|
msgid ""
|
||||||
"This endpoint returns minimal and maximal allowed deposit amounts across "
|
"This endpoint returns minimal and maximal allowed deposit amounts across "
|
||||||
"available gateways."
|
"available gateways."
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2025.4\n"
|
"Project-Id-Version: EVIBES 2025.4\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-12-10 21:44+0300\n"
|
"POT-Creation-Date: 2025-12-18 17:19+0300\n"
|
||||||
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
|
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
|
||||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||||
"Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n"
|
"Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n"
|
||||||
|
|
@ -13,11 +13,11 @@ msgstr ""
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: engine/payments/admin.py:17 engine/payments/models.py:56
|
#: engine/payments/admin.py:17 engine/payments/models.py:68
|
||||||
msgid "transaction"
|
msgid "transaction"
|
||||||
msgstr "Transakce"
|
msgstr "Transakce"
|
||||||
|
|
||||||
#: engine/payments/admin.py:18 engine/payments/models.py:57
|
#: engine/payments/admin.py:18 engine/payments/models.py:69
|
||||||
msgid "transactions"
|
msgid "transactions"
|
||||||
msgstr "Transakce"
|
msgstr "Transakce"
|
||||||
|
|
||||||
|
|
@ -37,19 +37,19 @@ msgstr "Vklad"
|
||||||
msgid "withdraw"
|
msgid "withdraw"
|
||||||
msgstr "Stáhnout"
|
msgstr "Stáhnout"
|
||||||
|
|
||||||
#: engine/payments/docs/drf/views.py:13
|
#: engine/payments/docs/drf/views.py:17
|
||||||
msgid "deposit to balance"
|
msgid "deposit to balance"
|
||||||
msgstr "Vklad do zůstatku"
|
msgstr "Vklad do zůstatku"
|
||||||
|
|
||||||
#: engine/payments/docs/drf/views.py:14
|
#: engine/payments/docs/drf/views.py:18
|
||||||
msgid "deposit some money to balance"
|
msgid "deposit some money to balance"
|
||||||
msgstr "Vložte nějaké peníze na účet"
|
msgstr "Vložte nějaké peníze na účet"
|
||||||
|
|
||||||
#: engine/payments/docs/drf/views.py:29
|
#: engine/payments/docs/drf/views.py:33
|
||||||
msgid "payment limits"
|
msgid "payment limits"
|
||||||
msgstr "Limity plateb"
|
msgstr "Limity plateb"
|
||||||
|
|
||||||
#: engine/payments/docs/drf/views.py:30
|
#: engine/payments/docs/drf/views.py:35
|
||||||
msgid ""
|
msgid ""
|
||||||
"retrieve minimal and maximal allowed deposit amounts across available "
|
"retrieve minimal and maximal allowed deposit amounts across available "
|
||||||
"gateways"
|
"gateways"
|
||||||
|
|
@ -69,88 +69,88 @@ msgstr "Získání jedné transakce (pouze pro čtení)"
|
||||||
msgid "Transaction UUID"
|
msgid "Transaction UUID"
|
||||||
msgstr "UUID transakce"
|
msgstr "UUID transakce"
|
||||||
|
|
||||||
#: engine/payments/models.py:36
|
#: engine/payments/models.py:42
|
||||||
msgid "order to process after paid"
|
msgid "order to process after paid"
|
||||||
msgstr "Objednávka ke zpracování po zaplacení"
|
msgstr "Objednávka ke zpracování po zaplacení"
|
||||||
|
|
||||||
#: engine/payments/models.py:39
|
#: engine/payments/models.py:45
|
||||||
msgid "processing details"
|
msgid "processing details"
|
||||||
msgstr "Podrobnosti o zpracování"
|
msgstr "Podrobnosti o zpracování"
|
||||||
|
|
||||||
#: engine/payments/models.py:75
|
#: engine/payments/models.py:91
|
||||||
msgid "balance"
|
msgid "balance"
|
||||||
msgstr "Bilance"
|
msgstr "Bilance"
|
||||||
|
|
||||||
#: engine/payments/models.py:76
|
#: engine/payments/models.py:92
|
||||||
msgid "balances"
|
msgid "balances"
|
||||||
msgstr "Váhy"
|
msgstr "Váhy"
|
||||||
|
|
||||||
#: engine/payments/models.py:86
|
#: engine/payments/models.py:102
|
||||||
msgid "name"
|
msgid "name"
|
||||||
msgstr "název"
|
msgstr "název"
|
||||||
|
|
||||||
#: engine/payments/models.py:91
|
#: engine/payments/models.py:107
|
||||||
msgid "default currency"
|
msgid "default currency"
|
||||||
msgstr "výchozí měna"
|
msgstr "výchozí měna"
|
||||||
|
|
||||||
#: engine/payments/models.py:98
|
#: engine/payments/models.py:114
|
||||||
msgid "currencies"
|
msgid "currencies"
|
||||||
msgstr "měny"
|
msgstr "měny"
|
||||||
|
|
||||||
#: engine/payments/models.py:100
|
#: engine/payments/models.py:116
|
||||||
msgid "comma separated list of currencies supported by this gateway, "
|
msgid "comma separated list of currencies supported by this gateway, "
|
||||||
msgstr "seznam měn podporovaných touto bránou oddělený čárkou,"
|
msgstr "seznam měn podporovaných touto bránou oddělený čárkou,"
|
||||||
|
|
||||||
#: engine/payments/models.py:106
|
#: engine/payments/models.py:122
|
||||||
msgid "minimum transaction amount"
|
msgid "minimum transaction amount"
|
||||||
msgstr "minimální částka transakce"
|
msgstr "minimální částka transakce"
|
||||||
|
|
||||||
#: engine/payments/models.py:109
|
#: engine/payments/models.py:125
|
||||||
msgid "maximum transaction amount"
|
msgid "maximum transaction amount"
|
||||||
msgstr "maximální částka transakce"
|
msgstr "maximální částka transakce"
|
||||||
|
|
||||||
#: engine/payments/models.py:115
|
#: engine/payments/models.py:131
|
||||||
msgid "daily limit"
|
msgid "daily limit"
|
||||||
msgstr "denní limit"
|
msgstr "denní limit"
|
||||||
|
|
||||||
#: engine/payments/models.py:116
|
#: engine/payments/models.py:132
|
||||||
msgid "daily sum limit of transactions' amounts. 0 means no limit"
|
msgid "daily sum limit of transactions' amounts. 0 means no limit"
|
||||||
msgstr "denní limit součtu částek transakcí. 0 znamená žádný limit"
|
msgstr "denní limit součtu částek transakcí. 0 znamená žádný limit"
|
||||||
|
|
||||||
#: engine/payments/models.py:122
|
#: engine/payments/models.py:138
|
||||||
msgid "monthly limit"
|
msgid "monthly limit"
|
||||||
msgstr "měsíční limit"
|
msgstr "měsíční limit"
|
||||||
|
|
||||||
#: engine/payments/models.py:123
|
#: engine/payments/models.py:139
|
||||||
msgid "monthly sum limit of transactions' amounts. 0 means no limit"
|
msgid "monthly sum limit of transactions' amounts. 0 means no limit"
|
||||||
msgstr "měsíční limit součtu částek transakcí. 0 znamená žádný limit"
|
msgstr "měsíční limit součtu částek transakcí. 0 znamená žádný limit"
|
||||||
|
|
||||||
#: engine/payments/models.py:125
|
#: engine/payments/models.py:142
|
||||||
msgid "priority"
|
msgid "priority"
|
||||||
msgstr "priorita"
|
msgstr "priorita"
|
||||||
|
|
||||||
#: engine/payments/models.py:126
|
#: engine/payments/models.py:145
|
||||||
msgid "integration variables"
|
msgid "integration variables"
|
||||||
msgstr "integrační proměnné"
|
msgstr "integrační proměnné"
|
||||||
|
|
||||||
#: engine/payments/models.py:132
|
#: engine/payments/models.py:152
|
||||||
msgid "payment gateway"
|
msgid "payment gateway"
|
||||||
msgstr "platební brána"
|
msgstr "platební brána"
|
||||||
|
|
||||||
#: engine/payments/models.py:133
|
#: engine/payments/models.py:153
|
||||||
msgid "payment gateways"
|
msgid "payment gateways"
|
||||||
msgstr "platební brány"
|
msgstr "platební brány"
|
||||||
|
|
||||||
#: engine/payments/models.py:169
|
#: engine/payments/models.py:198
|
||||||
msgid "gateway integration path is not set"
|
msgid "gateway integration path is not set"
|
||||||
msgstr "cesta integrace brány není nastavena"
|
msgstr "cesta integrace brány není nastavena"
|
||||||
|
|
||||||
#: engine/payments/models.py:174
|
#: engine/payments/models.py:204
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "invalid integration path: %(path)s"
|
msgid "invalid integration path: %(path)s"
|
||||||
msgstr "neplatná cesta integrace: %(path)s"
|
msgstr "neplatná cesta integrace: %(path)s"
|
||||||
|
|
||||||
#: engine/payments/signals.py:41
|
#: engine/payments/signals.py:45
|
||||||
msgid "the transaction amount didn't fit into allowed limits: "
|
msgid "the transaction amount didn't fit into allowed limits: "
|
||||||
msgstr "Částka transakce se nevešla do povolených limitů:"
|
msgstr "Částka transakce se nevešla do povolených limitů:"
|
||||||
|
|
||||||
|
|
@ -204,12 +204,12 @@ msgstr "Je třeba mít poskytovatele, od kterého lze získat sazby"
|
||||||
msgid "couldn't find provider {provider}"
|
msgid "couldn't find provider {provider}"
|
||||||
msgstr "Nepodařilo se najít poskytovatele {provider}"
|
msgstr "Nepodařilo se najít poskytovatele {provider}"
|
||||||
|
|
||||||
#: engine/payments/utils/emailing.py:28
|
#: engine/payments/utils/emailing.py:31
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "{settings.PROJECT_NAME} | balance deposit"
|
msgid "{settings.PROJECT_NAME} | balance deposit"
|
||||||
msgstr "{settings.PROJECT_NAME} | zůstatek vkladu"
|
msgstr "{settings.PROJECT_NAME} | zůstatek vkladu"
|
||||||
|
|
||||||
#: engine/payments/views.py:24
|
#: engine/payments/views.py:28
|
||||||
msgid ""
|
msgid ""
|
||||||
"This class provides an API endpoint to handle deposit transactions.\n"
|
"This class provides an API endpoint to handle deposit transactions.\n"
|
||||||
"It supports the creation of a deposit transaction after validating the "
|
"It supports the creation of a deposit transaction after validating the "
|
||||||
|
|
@ -222,7 +222,7 @@ msgstr ""
|
||||||
"uživatel není ověřen, je vrácena odpovídající odpověď. Při úspěšném ověření "
|
"uživatel není ověřen, je vrácena odpovídající odpověď. Při úspěšném ověření "
|
||||||
"a provedení je poskytnuta odpověď s údaji o transakci."
|
"a provedení je poskytnuta odpověď s údaji o transakci."
|
||||||
|
|
||||||
#: engine/payments/views.py:50
|
#: engine/payments/views.py:61
|
||||||
msgid ""
|
msgid ""
|
||||||
"Handles incoming callback requests to the API.\n"
|
"Handles incoming callback requests to the API.\n"
|
||||||
"This class processes and routes incoming HTTP POST requests to the "
|
"This class processes and routes incoming HTTP POST requests to the "
|
||||||
|
|
@ -236,17 +236,17 @@ msgstr ""
|
||||||
"zpracovávala události zpětného volání přicházející z externích systémů a "
|
"zpracovávala události zpětného volání přicházející z externích systémů a "
|
||||||
"poskytovala příslušnou odpověď HTTP označující úspěch nebo selhání."
|
"poskytovala příslušnou odpověď HTTP označující úspěch nebo selhání."
|
||||||
|
|
||||||
#: engine/payments/views.py:61
|
#: engine/payments/views.py:75
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Transaction {transaction.uuid} has no gateway"
|
msgid "Transaction {transaction.uuid} has no gateway"
|
||||||
msgstr "Transakce {transaction.uuid} nemá žádnou bránu"
|
msgstr "Transakce {transaction.uuid} nemá žádnou bránu"
|
||||||
|
|
||||||
#: engine/payments/views.py:64
|
#: engine/payments/views.py:82
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Gateway {transaction.gateway} has no integration"
|
msgid "Gateway {transaction.gateway} has no integration"
|
||||||
msgstr "Brána {transaction.gateway} nemá žádnou integraci"
|
msgstr "Brána {transaction.gateway} nemá žádnou integraci"
|
||||||
|
|
||||||
#: engine/payments/views.py:76
|
#: engine/payments/views.py:96
|
||||||
msgid ""
|
msgid ""
|
||||||
"This endpoint returns minimal and maximal allowed deposit amounts across "
|
"This endpoint returns minimal and maximal allowed deposit amounts across "
|
||||||
"available gateways."
|
"available gateways."
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2025.4\n"
|
"Project-Id-Version: EVIBES 2025.4\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-12-10 21:44+0300\n"
|
"POT-Creation-Date: 2025-12-18 17:19+0300\n"
|
||||||
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
|
"PO-Revision-Date: 2025-01-30 03:27+0000\n"
|
||||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||||
"Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n"
|
"Language-Team: BRITISH ENGLISH <CONTACT@FUREUNOIR.COM>\n"
|
||||||
|
|
@ -13,11 +13,11 @@ msgstr ""
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: engine/payments/admin.py:17 engine/payments/models.py:56
|
#: engine/payments/admin.py:17 engine/payments/models.py:68
|
||||||
msgid "transaction"
|
msgid "transaction"
|
||||||
msgstr "Transaktion"
|
msgstr "Transaktion"
|
||||||
|
|
||||||
#: engine/payments/admin.py:18 engine/payments/models.py:57
|
#: engine/payments/admin.py:18 engine/payments/models.py:69
|
||||||
msgid "transactions"
|
msgid "transactions"
|
||||||
msgstr "Transaktioner"
|
msgstr "Transaktioner"
|
||||||
|
|
||||||
|
|
@ -37,19 +37,19 @@ msgstr "Indskud"
|
||||||
msgid "withdraw"
|
msgid "withdraw"
|
||||||
msgstr "Træk dig tilbage"
|
msgstr "Træk dig tilbage"
|
||||||
|
|
||||||
#: engine/payments/docs/drf/views.py:13
|
#: engine/payments/docs/drf/views.py:17
|
||||||
msgid "deposit to balance"
|
msgid "deposit to balance"
|
||||||
msgstr "Indbetaling til saldo"
|
msgstr "Indbetaling til saldo"
|
||||||
|
|
||||||
#: engine/payments/docs/drf/views.py:14
|
#: engine/payments/docs/drf/views.py:18
|
||||||
msgid "deposit some money to balance"
|
msgid "deposit some money to balance"
|
||||||
msgstr "Sæt nogle penge ind på saldoen"
|
msgstr "Sæt nogle penge ind på saldoen"
|
||||||
|
|
||||||
#: engine/payments/docs/drf/views.py:29
|
#: engine/payments/docs/drf/views.py:33
|
||||||
msgid "payment limits"
|
msgid "payment limits"
|
||||||
msgstr "Grænser for betaling"
|
msgstr "Grænser for betaling"
|
||||||
|
|
||||||
#: engine/payments/docs/drf/views.py:30
|
#: engine/payments/docs/drf/views.py:35
|
||||||
msgid ""
|
msgid ""
|
||||||
"retrieve minimal and maximal allowed deposit amounts across available "
|
"retrieve minimal and maximal allowed deposit amounts across available "
|
||||||
"gateways"
|
"gateways"
|
||||||
|
|
@ -69,88 +69,88 @@ msgstr "Hent en enkelt transaktion (skrivebeskyttet)"
|
||||||
msgid "Transaction UUID"
|
msgid "Transaction UUID"
|
||||||
msgstr "Transaktions-UUID"
|
msgstr "Transaktions-UUID"
|
||||||
|
|
||||||
#: engine/payments/models.py:36
|
#: engine/payments/models.py:42
|
||||||
msgid "order to process after paid"
|
msgid "order to process after paid"
|
||||||
msgstr "Ordre til behandling efter betaling"
|
msgstr "Ordre til behandling efter betaling"
|
||||||
|
|
||||||
#: engine/payments/models.py:39
|
#: engine/payments/models.py:45
|
||||||
msgid "processing details"
|
msgid "processing details"
|
||||||
msgstr "Behandling af detaljer"
|
msgstr "Behandling af detaljer"
|
||||||
|
|
||||||
#: engine/payments/models.py:75
|
#: engine/payments/models.py:91
|
||||||
msgid "balance"
|
msgid "balance"
|
||||||
msgstr "Balance"
|
msgstr "Balance"
|
||||||
|
|
||||||
#: engine/payments/models.py:76
|
#: engine/payments/models.py:92
|
||||||
msgid "balances"
|
msgid "balances"
|
||||||
msgstr "Vægte"
|
msgstr "Vægte"
|
||||||
|
|
||||||
#: engine/payments/models.py:86
|
#: engine/payments/models.py:102
|
||||||
msgid "name"
|
msgid "name"
|
||||||
msgstr "Navn"
|
msgstr "Navn"
|
||||||
|
|
||||||
#: engine/payments/models.py:91
|
#: engine/payments/models.py:107
|
||||||
msgid "default currency"
|
msgid "default currency"
|
||||||
msgstr "Standardvaluta"
|
msgstr "Standardvaluta"
|
||||||
|
|
||||||
#: engine/payments/models.py:98
|
#: engine/payments/models.py:114
|
||||||
msgid "currencies"
|
msgid "currencies"
|
||||||
msgstr "Valutaer"
|
msgstr "Valutaer"
|
||||||
|
|
||||||
#: engine/payments/models.py:100
|
#: engine/payments/models.py:116
|
||||||
msgid "comma separated list of currencies supported by this gateway, "
|
msgid "comma separated list of currencies supported by this gateway, "
|
||||||
msgstr "kommasepareret liste over valutaer, der understøttes af denne gateway,"
|
msgstr "kommasepareret liste over valutaer, der understøttes af denne gateway,"
|
||||||
|
|
||||||
#: engine/payments/models.py:106
|
#: engine/payments/models.py:122
|
||||||
msgid "minimum transaction amount"
|
msgid "minimum transaction amount"
|
||||||
msgstr "mindste transaktionsbeløb"
|
msgstr "mindste transaktionsbeløb"
|
||||||
|
|
||||||
#: engine/payments/models.py:109
|
#: engine/payments/models.py:125
|
||||||
msgid "maximum transaction amount"
|
msgid "maximum transaction amount"
|
||||||
msgstr "maksimalt transaktionsbeløb"
|
msgstr "maksimalt transaktionsbeløb"
|
||||||
|
|
||||||
#: engine/payments/models.py:115
|
#: engine/payments/models.py:131
|
||||||
msgid "daily limit"
|
msgid "daily limit"
|
||||||
msgstr "daglig grænse"
|
msgstr "daglig grænse"
|
||||||
|
|
||||||
#: engine/payments/models.py:116
|
#: engine/payments/models.py:132
|
||||||
msgid "daily sum limit of transactions' amounts. 0 means no limit"
|
msgid "daily sum limit of transactions' amounts. 0 means no limit"
|
||||||
msgstr "daglig sumgrænse for transaktionsbeløb. 0 betyder ingen grænse"
|
msgstr "daglig sumgrænse for transaktionsbeløb. 0 betyder ingen grænse"
|
||||||
|
|
||||||
#: engine/payments/models.py:122
|
#: engine/payments/models.py:138
|
||||||
msgid "monthly limit"
|
msgid "monthly limit"
|
||||||
msgstr "månedlig grænse"
|
msgstr "månedlig grænse"
|
||||||
|
|
||||||
#: engine/payments/models.py:123
|
#: engine/payments/models.py:139
|
||||||
msgid "monthly sum limit of transactions' amounts. 0 means no limit"
|
msgid "monthly sum limit of transactions' amounts. 0 means no limit"
|
||||||
msgstr "månedlig sumgrænse for transaktionsbeløb. 0 betyder ingen grænse"
|
msgstr "månedlig sumgrænse for transaktionsbeløb. 0 betyder ingen grænse"
|
||||||
|
|
||||||
#: engine/payments/models.py:125
|
#: engine/payments/models.py:142
|
||||||
msgid "priority"
|
msgid "priority"
|
||||||
msgstr "prioritet"
|
msgstr "prioritet"
|
||||||
|
|
||||||
#: engine/payments/models.py:126
|
#: engine/payments/models.py:145
|
||||||
msgid "integration variables"
|
msgid "integration variables"
|
||||||
msgstr "Integrationsvariabler"
|
msgstr "Integrationsvariabler"
|
||||||
|
|
||||||
#: engine/payments/models.py:132
|
#: engine/payments/models.py:152
|
||||||
msgid "payment gateway"
|
msgid "payment gateway"
|
||||||
msgstr "betalingsgateway"
|
msgstr "betalingsgateway"
|
||||||
|
|
||||||
#: engine/payments/models.py:133
|
#: engine/payments/models.py:153
|
||||||
msgid "payment gateways"
|
msgid "payment gateways"
|
||||||
msgstr "Betalingsgateways"
|
msgstr "Betalingsgateways"
|
||||||
|
|
||||||
#: engine/payments/models.py:169
|
#: engine/payments/models.py:198
|
||||||
msgid "gateway integration path is not set"
|
msgid "gateway integration path is not set"
|
||||||
msgstr "gateway-integrationsstien er ikke indstillet"
|
msgstr "gateway-integrationsstien er ikke indstillet"
|
||||||
|
|
||||||
#: engine/payments/models.py:174
|
#: engine/payments/models.py:204
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "invalid integration path: %(path)s"
|
msgid "invalid integration path: %(path)s"
|
||||||
msgstr "Ugyldig integrationssti: %(path)s."
|
msgstr "Ugyldig integrationssti: %(path)s."
|
||||||
|
|
||||||
#: engine/payments/signals.py:41
|
#: engine/payments/signals.py:45
|
||||||
msgid "the transaction amount didn't fit into allowed limits: "
|
msgid "the transaction amount didn't fit into allowed limits: "
|
||||||
msgstr "Transaktionsbeløbet passede ikke ind i de tilladte grænser:"
|
msgstr "Transaktionsbeløbet passede ikke ind i de tilladte grænser:"
|
||||||
|
|
||||||
|
|
@ -204,12 +204,12 @@ msgstr "Der er brug for en udbyder at få priser fra"
|
||||||
msgid "couldn't find provider {provider}"
|
msgid "couldn't find provider {provider}"
|
||||||
msgstr "Kunne ikke finde udbyder {provider}."
|
msgstr "Kunne ikke finde udbyder {provider}."
|
||||||
|
|
||||||
#: engine/payments/utils/emailing.py:28
|
#: engine/payments/utils/emailing.py:31
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "{settings.PROJECT_NAME} | balance deposit"
|
msgid "{settings.PROJECT_NAME} | balance deposit"
|
||||||
msgstr "{settings.PROJECT_NAME} | Saldoindbetaling"
|
msgstr "{settings.PROJECT_NAME} | Saldoindbetaling"
|
||||||
|
|
||||||
#: engine/payments/views.py:24
|
#: engine/payments/views.py:28
|
||||||
msgid ""
|
msgid ""
|
||||||
"This class provides an API endpoint to handle deposit transactions.\n"
|
"This class provides an API endpoint to handle deposit transactions.\n"
|
||||||
"It supports the creation of a deposit transaction after validating the "
|
"It supports the creation of a deposit transaction after validating the "
|
||||||
|
|
@ -224,7 +224,7 @@ msgstr ""
|
||||||
"passende svar. Ved vellykket validering og udførelse leveres et svar med "
|
"passende svar. Ved vellykket validering og udførelse leveres et svar med "
|
||||||
"transaktionsoplysningerne."
|
"transaktionsoplysningerne."
|
||||||
|
|
||||||
#: engine/payments/views.py:50
|
#: engine/payments/views.py:61
|
||||||
msgid ""
|
msgid ""
|
||||||
"Handles incoming callback requests to the API.\n"
|
"Handles incoming callback requests to the API.\n"
|
||||||
"This class processes and routes incoming HTTP POST requests to the "
|
"This class processes and routes incoming HTTP POST requests to the "
|
||||||
|
|
@ -238,17 +238,17 @@ msgstr ""
|
||||||
"designet til at håndtere tilbagekaldshændelser, der kommer fra eksterne "
|
"designet til at håndtere tilbagekaldshændelser, der kommer fra eksterne "
|
||||||
"systemer, og give et passende HTTP-svar, der angiver succes eller fiasko."
|
"systemer, og give et passende HTTP-svar, der angiver succes eller fiasko."
|
||||||
|
|
||||||
#: engine/payments/views.py:61
|
#: engine/payments/views.py:75
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Transaction {transaction.uuid} has no gateway"
|
msgid "Transaction {transaction.uuid} has no gateway"
|
||||||
msgstr "Transaktion {transaction.uuid} har ingen gateway"
|
msgstr "Transaktion {transaction.uuid} har ingen gateway"
|
||||||
|
|
||||||
#: engine/payments/views.py:64
|
#: engine/payments/views.py:82
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Gateway {transaction.gateway} has no integration"
|
msgid "Gateway {transaction.gateway} has no integration"
|
||||||
msgstr "Gateway {transaction.gateway} har ingen integration"
|
msgstr "Gateway {transaction.gateway} har ingen integration"
|
||||||
|
|
||||||
#: engine/payments/views.py:76
|
#: engine/payments/views.py:96
|
||||||
msgid ""
|
msgid ""
|
||||||
"This endpoint returns minimal and maximal allowed deposit amounts across "
|
"This endpoint returns minimal and maximal allowed deposit amounts across "
|
||||||
"available gateways."
|
"available gateways."
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue