Merge branch 'main' into storefront-next
This commit is contained in:
commit
14b69c1654
172 changed files with 10420 additions and 7738 deletions
5
.gitignore
vendored
5
.gitignore
vendored
|
|
@ -64,8 +64,8 @@ htmlcov/
|
||||||
.pybuilder/
|
.pybuilder/
|
||||||
|
|
||||||
# Storefronts
|
# Storefronts
|
||||||
.astro/
|
nuxt/
|
||||||
.nuxt/
|
next/
|
||||||
|
|
||||||
# Celery
|
# Celery
|
||||||
celerybeat-schedule
|
celerybeat-schedule
|
||||||
|
|
@ -143,6 +143,7 @@ cypress/screenshots/
|
||||||
.idea/
|
.idea/
|
||||||
!.idea/icon.svg
|
!.idea/icon.svg
|
||||||
!.idea/externalDependencies.xml
|
!.idea/externalDependencies.xml
|
||||||
|
!.idea/evibes.iml
|
||||||
|
|
||||||
# Microsoft
|
# Microsoft
|
||||||
*.suo
|
*.suo
|
||||||
|
|
|
||||||
14
.idea/evibes.iml
Normal file
14
.idea/evibes.iml
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module version="4">
|
||||||
|
<component name="PyDocumentationSettings">
|
||||||
|
<option name="format" value="GOOGLE" />
|
||||||
|
<option name="myDocStringFormat" value="Google" />
|
||||||
|
</component>
|
||||||
|
<component name="TemplatesService">
|
||||||
|
<option name="TEMPLATE_FOLDERS">
|
||||||
|
<list>
|
||||||
|
<option value="$MODULE_DIR$/blog/templates" />
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
</module>
|
||||||
|
|
@ -1,34 +1,37 @@
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from django_summernote.admin import SummernoteModelAdmin
|
from django_summernote.admin import SummernoteModelAdminMixin
|
||||||
|
|
||||||
|
from core.admin import BasicModelAdmin, FieldsetsMixin
|
||||||
|
|
||||||
from .models import Post, PostTag
|
from .models import Post, PostTag
|
||||||
|
|
||||||
|
|
||||||
@admin.register(Post)
|
@admin.register(Post)
|
||||||
class PostAdmin(SummernoteModelAdmin):
|
class PostAdmin(SummernoteModelAdminMixin, FieldsetsMixin, BasicModelAdmin):
|
||||||
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")
|
search_fields = ("title", "content", "slug")
|
||||||
filter_horizontal = ("tags",)
|
filter_horizontal = ("tags",)
|
||||||
date_hierarchy = "created"
|
date_hierarchy = "created"
|
||||||
autocomplete_fields = ("author", "tags")
|
autocomplete_fields = ("author", "tags")
|
||||||
summernote_fields = ("content",)
|
readonly_fields = (
|
||||||
|
"uuid",
|
||||||
fieldsets = (
|
"slug",
|
||||||
(
|
"modified",
|
||||||
None,
|
"created",
|
||||||
{
|
|
||||||
"fields": (
|
|
||||||
"author",
|
|
||||||
"title",
|
|
||||||
"content",
|
|
||||||
"file",
|
|
||||||
"tags",
|
|
||||||
)
|
|
||||||
},
|
|
||||||
),
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
summernote_fields = ("content",)
|
||||||
|
general_fields = [
|
||||||
|
"title",
|
||||||
|
"author",
|
||||||
|
"content",
|
||||||
|
"file",
|
||||||
|
]
|
||||||
|
relation_fields = [
|
||||||
|
"tags",
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
@admin.register(PostTag)
|
@admin.register(PostTag)
|
||||||
class PostTagAdmin(admin.ModelAdmin):
|
class PostTagAdmin(admin.ModelAdmin):
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2.8.10\n"
|
"Project-Id-Version: EVIBES 2.8.10\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-06-21 22:42+0100\n"
|
"POT-Creation-Date: 2025-06-29 17:23+0100\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"
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2.8.10\n"
|
"Project-Id-Version: EVIBES 2.8.10\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-06-21 22:42+0100\n"
|
"POT-Creation-Date: 2025-06-29 17:23+0100\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"
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2.8.10\n"
|
"Project-Id-Version: EVIBES 2.8.10\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-06-21 22:42+0100\n"
|
"POT-Creation-Date: 2025-06-29 17:23+0100\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"
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2.8.10\n"
|
"Project-Id-Version: EVIBES 2.8.10\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-06-21 22:42+0100\n"
|
"POT-Creation-Date: 2025-06-29 17:23+0100\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"
|
||||||
|
|
|
||||||
|
|
@ -2,12 +2,12 @@
|
||||||
# Copyright (C) 2025 EGOR <FUREUNOIR> GORBUNOV
|
# Copyright (C) 2025 EGOR <FUREUNOIR> GORBUNOV
|
||||||
# This file is distributed under the same license as the EVIBES package.
|
# This file is distributed under the same license as the EVIBES package.
|
||||||
# EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>, 2025.
|
# EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>, 2025.
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2.8.10\n"
|
"Project-Id-Version: EVIBES 2.8.10\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-06-21 22:42+0100\n"
|
"POT-Creation-Date: 2025-06-29 17:23+0100\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"
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2.8.10\n"
|
"Project-Id-Version: EVIBES 2.8.10\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-06-21 22:42+0100\n"
|
"POT-Creation-Date: 2025-06-29 17:23+0100\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"
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2.8.10\n"
|
"Project-Id-Version: EVIBES 2.8.10\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-06-21 22:42+0100\n"
|
"POT-Creation-Date: 2025-06-29 17:23+0100\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"
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2.8.10\n"
|
"Project-Id-Version: EVIBES 2.8.10\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-06-21 22:42+0100\n"
|
"POT-Creation-Date: 2025-06-29 17:23+0100\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"
|
||||||
|
|
|
||||||
|
|
@ -2,12 +2,12 @@
|
||||||
# Copyright (C) 2025 EGOR <FUREUNOIR> GORBUNOV
|
# Copyright (C) 2025 EGOR <FUREUNOIR> GORBUNOV
|
||||||
# This file is distributed under the same license as the EVIBES package.
|
# This file is distributed under the same license as the EVIBES package.
|
||||||
# EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>, 2025.
|
# EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>, 2025.
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2.8.10\n"
|
"Project-Id-Version: EVIBES 2.8.10\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-06-21 22:42+0100\n"
|
"POT-Creation-Date: 2025-06-29 17:23+0100\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"
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2.8.10\n"
|
"Project-Id-Version: EVIBES 2.8.10\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-06-21 22:42+0100\n"
|
"POT-Creation-Date: 2025-06-29 17:23+0100\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"
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2.8.10\n"
|
"Project-Id-Version: EVIBES 2.8.10\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-06-21 22:42+0100\n"
|
"POT-Creation-Date: 2025-06-29 17:23+0100\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"
|
||||||
|
|
|
||||||
|
|
@ -2,12 +2,12 @@
|
||||||
# Copyright (C) 2025 EGOR <FUREUNOIR> GORBUNOV
|
# Copyright (C) 2025 EGOR <FUREUNOIR> GORBUNOV
|
||||||
# This file is distributed under the same license as the EVIBES package.
|
# This file is distributed under the same license as the EVIBES package.
|
||||||
# EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>, 2025.
|
# EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>, 2025.
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2.8.10\n"
|
"Project-Id-Version: EVIBES 2.8.10\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-06-21 22:42+0100\n"
|
"POT-Creation-Date: 2025-06-29 17:23+0100\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"
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2.8.10\n"
|
"Project-Id-Version: EVIBES 2.8.10\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-06-21 22:42+0100\n"
|
"POT-Creation-Date: 2025-06-29 17:23+0100\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"
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2.8.10\n"
|
"Project-Id-Version: EVIBES 2.8.10\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-06-21 22:42+0100\n"
|
"POT-Creation-Date: 2025-06-29 17:23+0100\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"
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2.8.10\n"
|
"Project-Id-Version: EVIBES 2.8.10\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-06-21 22:42+0100\n"
|
"POT-Creation-Date: 2025-06-29 17:23+0100\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"
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2.8.10\n"
|
"Project-Id-Version: EVIBES 2.8.10\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-06-21 22:42+0100\n"
|
"POT-Creation-Date: 2025-06-29 17:23+0100\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"
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2.8.10\n"
|
"Project-Id-Version: EVIBES 2.8.10\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-06-21 22:42+0100\n"
|
"POT-Creation-Date: 2025-06-29 17:23+0100\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"
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2.8.10\n"
|
"Project-Id-Version: EVIBES 2.8.10\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-06-21 22:42+0100\n"
|
"POT-Creation-Date: 2025-06-29 17:23+0100\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"
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,338 @@
|
||||||
|
# Generated by Django 5.2 on 2025-06-29 13:09
|
||||||
|
|
||||||
|
import markdown_field.fields
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
("blog", "0003_alter_post_tags"),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="post",
|
||||||
|
name="content_ar_ar",
|
||||||
|
field=markdown_field.fields.MarkdownField(
|
||||||
|
blank=True, null=True, verbose_name="content"
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="post",
|
||||||
|
name="content_cs_cz",
|
||||||
|
field=markdown_field.fields.MarkdownField(
|
||||||
|
blank=True, null=True, verbose_name="content"
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="post",
|
||||||
|
name="content_da_dk",
|
||||||
|
field=markdown_field.fields.MarkdownField(
|
||||||
|
blank=True, null=True, verbose_name="content"
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="post",
|
||||||
|
name="content_de_de",
|
||||||
|
field=markdown_field.fields.MarkdownField(
|
||||||
|
blank=True, null=True, verbose_name="content"
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="post",
|
||||||
|
name="content_en_gb",
|
||||||
|
field=markdown_field.fields.MarkdownField(
|
||||||
|
blank=True, null=True, verbose_name="content"
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="post",
|
||||||
|
name="content_en_us",
|
||||||
|
field=markdown_field.fields.MarkdownField(
|
||||||
|
blank=True, null=True, verbose_name="content"
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="post",
|
||||||
|
name="content_es_es",
|
||||||
|
field=markdown_field.fields.MarkdownField(
|
||||||
|
blank=True, null=True, verbose_name="content"
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="post",
|
||||||
|
name="content_fr_fr",
|
||||||
|
field=markdown_field.fields.MarkdownField(
|
||||||
|
blank=True, null=True, verbose_name="content"
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="post",
|
||||||
|
name="content_hi_in",
|
||||||
|
field=markdown_field.fields.MarkdownField(
|
||||||
|
blank=True, null=True, verbose_name="content"
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="post",
|
||||||
|
name="content_it_it",
|
||||||
|
field=markdown_field.fields.MarkdownField(
|
||||||
|
blank=True, null=True, verbose_name="content"
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="post",
|
||||||
|
name="content_ja_jp",
|
||||||
|
field=markdown_field.fields.MarkdownField(
|
||||||
|
blank=True, null=True, verbose_name="content"
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="post",
|
||||||
|
name="content_kk_kz",
|
||||||
|
field=markdown_field.fields.MarkdownField(
|
||||||
|
blank=True, null=True, verbose_name="content"
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="post",
|
||||||
|
name="content_nl_nl",
|
||||||
|
field=markdown_field.fields.MarkdownField(
|
||||||
|
blank=True, null=True, verbose_name="content"
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="post",
|
||||||
|
name="content_pl_pl",
|
||||||
|
field=markdown_field.fields.MarkdownField(
|
||||||
|
blank=True, null=True, verbose_name="content"
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="post",
|
||||||
|
name="content_pt_br",
|
||||||
|
field=markdown_field.fields.MarkdownField(
|
||||||
|
blank=True, null=True, verbose_name="content"
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="post",
|
||||||
|
name="content_ro_ro",
|
||||||
|
field=markdown_field.fields.MarkdownField(
|
||||||
|
blank=True, null=True, verbose_name="content"
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="post",
|
||||||
|
name="content_ru_ru",
|
||||||
|
field=markdown_field.fields.MarkdownField(
|
||||||
|
blank=True, null=True, verbose_name="content"
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="post",
|
||||||
|
name="content_zh_hans",
|
||||||
|
field=markdown_field.fields.MarkdownField(
|
||||||
|
blank=True, null=True, verbose_name="content"
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="post",
|
||||||
|
name="title_ar_ar",
|
||||||
|
field=models.CharField(
|
||||||
|
help_text="post title",
|
||||||
|
max_length=128,
|
||||||
|
null=True,
|
||||||
|
unique=True,
|
||||||
|
verbose_name="title",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="post",
|
||||||
|
name="title_cs_cz",
|
||||||
|
field=models.CharField(
|
||||||
|
help_text="post title",
|
||||||
|
max_length=128,
|
||||||
|
null=True,
|
||||||
|
unique=True,
|
||||||
|
verbose_name="title",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="post",
|
||||||
|
name="title_da_dk",
|
||||||
|
field=models.CharField(
|
||||||
|
help_text="post title",
|
||||||
|
max_length=128,
|
||||||
|
null=True,
|
||||||
|
unique=True,
|
||||||
|
verbose_name="title",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="post",
|
||||||
|
name="title_de_de",
|
||||||
|
field=models.CharField(
|
||||||
|
help_text="post title",
|
||||||
|
max_length=128,
|
||||||
|
null=True,
|
||||||
|
unique=True,
|
||||||
|
verbose_name="title",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="post",
|
||||||
|
name="title_en_gb",
|
||||||
|
field=models.CharField(
|
||||||
|
help_text="post title",
|
||||||
|
max_length=128,
|
||||||
|
null=True,
|
||||||
|
unique=True,
|
||||||
|
verbose_name="title",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="post",
|
||||||
|
name="title_en_us",
|
||||||
|
field=models.CharField(
|
||||||
|
help_text="post title",
|
||||||
|
max_length=128,
|
||||||
|
null=True,
|
||||||
|
unique=True,
|
||||||
|
verbose_name="title",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="post",
|
||||||
|
name="title_es_es",
|
||||||
|
field=models.CharField(
|
||||||
|
help_text="post title",
|
||||||
|
max_length=128,
|
||||||
|
null=True,
|
||||||
|
unique=True,
|
||||||
|
verbose_name="title",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="post",
|
||||||
|
name="title_fr_fr",
|
||||||
|
field=models.CharField(
|
||||||
|
help_text="post title",
|
||||||
|
max_length=128,
|
||||||
|
null=True,
|
||||||
|
unique=True,
|
||||||
|
verbose_name="title",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="post",
|
||||||
|
name="title_hi_in",
|
||||||
|
field=models.CharField(
|
||||||
|
help_text="post title",
|
||||||
|
max_length=128,
|
||||||
|
null=True,
|
||||||
|
unique=True,
|
||||||
|
verbose_name="title",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="post",
|
||||||
|
name="title_it_it",
|
||||||
|
field=models.CharField(
|
||||||
|
help_text="post title",
|
||||||
|
max_length=128,
|
||||||
|
null=True,
|
||||||
|
unique=True,
|
||||||
|
verbose_name="title",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="post",
|
||||||
|
name="title_ja_jp",
|
||||||
|
field=models.CharField(
|
||||||
|
help_text="post title",
|
||||||
|
max_length=128,
|
||||||
|
null=True,
|
||||||
|
unique=True,
|
||||||
|
verbose_name="title",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="post",
|
||||||
|
name="title_kk_kz",
|
||||||
|
field=models.CharField(
|
||||||
|
help_text="post title",
|
||||||
|
max_length=128,
|
||||||
|
null=True,
|
||||||
|
unique=True,
|
||||||
|
verbose_name="title",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="post",
|
||||||
|
name="title_nl_nl",
|
||||||
|
field=models.CharField(
|
||||||
|
help_text="post title",
|
||||||
|
max_length=128,
|
||||||
|
null=True,
|
||||||
|
unique=True,
|
||||||
|
verbose_name="title",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="post",
|
||||||
|
name="title_pl_pl",
|
||||||
|
field=models.CharField(
|
||||||
|
help_text="post title",
|
||||||
|
max_length=128,
|
||||||
|
null=True,
|
||||||
|
unique=True,
|
||||||
|
verbose_name="title",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="post",
|
||||||
|
name="title_pt_br",
|
||||||
|
field=models.CharField(
|
||||||
|
help_text="post title",
|
||||||
|
max_length=128,
|
||||||
|
null=True,
|
||||||
|
unique=True,
|
||||||
|
verbose_name="title",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="post",
|
||||||
|
name="title_ro_ro",
|
||||||
|
field=models.CharField(
|
||||||
|
help_text="post title",
|
||||||
|
max_length=128,
|
||||||
|
null=True,
|
||||||
|
unique=True,
|
||||||
|
verbose_name="title",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="post",
|
||||||
|
name="title_ru_ru",
|
||||||
|
field=models.CharField(
|
||||||
|
help_text="post title",
|
||||||
|
max_length=128,
|
||||||
|
null=True,
|
||||||
|
unique=True,
|
||||||
|
verbose_name="title",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="post",
|
||||||
|
name="title_zh_hans",
|
||||||
|
field=models.CharField(
|
||||||
|
help_text="post title",
|
||||||
|
max_length=128,
|
||||||
|
null=True,
|
||||||
|
unique=True,
|
||||||
|
verbose_name="title",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -8,6 +8,27 @@ from core.abstract import NiceModel
|
||||||
|
|
||||||
|
|
||||||
class Post(NiceModel):
|
class Post(NiceModel):
|
||||||
|
"""
|
||||||
|
Represents a blog post model extending NiceModel.
|
||||||
|
|
||||||
|
The Post class defines the structure and behavior of a blog post. It includes
|
||||||
|
attributes for author, title, content, optional file attachment, slug,
|
||||||
|
and associated tags. The class enforces constraints such as requiring either
|
||||||
|
content or a file attachment but not both simultaneously. It also supports
|
||||||
|
automatic slug generation based on the title. This model can be used in
|
||||||
|
a blogging platform to manage posts created by users.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
is_publicly_visible (bool): Specifies whether the post is visible to the public.
|
||||||
|
author (ForeignKey): A reference to the user who authored the post.
|
||||||
|
title (CharField): The title of the post, must be unique and non-empty.
|
||||||
|
content (MarkdownField): The content of the post written in markdown format.
|
||||||
|
file (FileField): An optional file attachment for the post.
|
||||||
|
slug (AutoSlugField): A unique, automatically generated slug based on the title.
|
||||||
|
tags (ManyToManyField): Tags associated with the post for categorization.
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
is_publicly_visible = True
|
is_publicly_visible = True
|
||||||
|
|
||||||
author: ForeignKey = ForeignKey(
|
author: ForeignKey = ForeignKey(
|
||||||
|
|
@ -73,6 +94,26 @@ class Post(NiceModel):
|
||||||
|
|
||||||
|
|
||||||
class PostTag(NiceModel):
|
class PostTag(NiceModel):
|
||||||
|
"""
|
||||||
|
Represents a tag associated with a post.
|
||||||
|
|
||||||
|
The PostTag class is used to define and manage tags that can be assigned
|
||||||
|
to posts. These tags include an internal identifier and a user-friendly
|
||||||
|
display name. The class supports internationalization for both the internal
|
||||||
|
identifier and the display name.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
is_publicly_visible (bool): Determines if the tag is visible publicly.
|
||||||
|
tag_name (CharField): An internal tag identifier for the post tag. It is a required
|
||||||
|
field with a maximum length of 255 characters.
|
||||||
|
name (CharField): A user-friendly, unique display name for the post tag
|
||||||
|
with a maximum length of 255 characters.
|
||||||
|
|
||||||
|
Meta:
|
||||||
|
verbose_name (str): Human-readable singular name of the PostTag model.
|
||||||
|
verbose_name_plural (str): Human-readable plural name of the PostTag model.
|
||||||
|
"""
|
||||||
|
|
||||||
is_publicly_visible = True
|
is_publicly_visible = True
|
||||||
|
|
||||||
tag_name: CharField = CharField(
|
tag_name: CharField = CharField(
|
||||||
|
|
|
||||||
9
blog/translation.py
Normal file
9
blog/translation.py
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
from modeltranslation.decorators import register
|
||||||
|
from modeltranslation.translator import TranslationOptions
|
||||||
|
|
||||||
|
from blog.models import Post
|
||||||
|
|
||||||
|
|
||||||
|
@register(Post)
|
||||||
|
class PostOptions(TranslationOptions):
|
||||||
|
fields = ("title", "content")
|
||||||
|
|
@ -3,6 +3,8 @@ from rest_framework.routers import DefaultRouter
|
||||||
|
|
||||||
from blog.viewsets import PostViewSet
|
from blog.viewsets import PostViewSet
|
||||||
|
|
||||||
|
app_name = "blog"
|
||||||
|
|
||||||
payment_router = DefaultRouter()
|
payment_router = DefaultRouter()
|
||||||
payment_router.register(prefix=r"posts", viewset=PostViewSet, basename="posts")
|
payment_router.register(prefix=r"posts", viewset=PostViewSet, basename="posts")
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger("evibes")
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,22 @@ from core.permissions import EvibesPermission
|
||||||
|
|
||||||
|
|
||||||
class PostViewSet(ReadOnlyModelViewSet):
|
class PostViewSet(ReadOnlyModelViewSet):
|
||||||
|
"""
|
||||||
|
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
|
||||||
|
filters. It integrates with Django's backend filtering system and ensures operations align with the
|
||||||
|
defined permissions. The view set also includes an additional "retrieve" permission configuration.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
serializer_class: Specifies the serializer to be used for Post objects.
|
||||||
|
permission_classes: Defines the permissions required to interact with this view set.
|
||||||
|
queryset: Determines the initial queryset, filtered to include only active Post objects.
|
||||||
|
filter_backends: Lists the backends to be used for filtering querysets.
|
||||||
|
filterset_class: Defines the set of filters used for filtering Post objects.
|
||||||
|
additional: Contains additional configuration, such as specific action permissions.
|
||||||
|
"""
|
||||||
|
|
||||||
serializer_class = PostSerializer
|
serializer_class = PostSerializer
|
||||||
permission_classes = (EvibesPermission,)
|
permission_classes = (EvibesPermission,)
|
||||||
queryset = Post.objects.filter(is_active=True)
|
queryset = Post.objects.filter(is_active=True)
|
||||||
|
|
|
||||||
|
|
@ -18,9 +18,7 @@ class NiceModel(Model):
|
||||||
is_active: bool = BooleanField( # type: ignore
|
is_active: bool = BooleanField( # type: ignore
|
||||||
default=True,
|
default=True,
|
||||||
verbose_name=_("is active"),
|
verbose_name=_("is active"),
|
||||||
help_text=_(
|
help_text=_("if set to false, this object can't be seen by users without needed permission"),
|
||||||
"if set to false, this object can't be seen by users without needed permission"
|
|
||||||
),
|
|
||||||
)
|
)
|
||||||
created: datetime = CreationDateTimeField( # type: ignore
|
created: datetime = CreationDateTimeField( # type: ignore
|
||||||
_("created"), help_text=_("when the object first appeared on the database")
|
_("created"), help_text=_("when the object first appeared on the database")
|
||||||
|
|
@ -30,9 +28,7 @@ class NiceModel(Model):
|
||||||
)
|
)
|
||||||
|
|
||||||
def save(self, **kwargs):
|
def save(self, **kwargs):
|
||||||
self.update_modified = kwargs.pop(
|
self.update_modified = kwargs.pop("update_modified", getattr(self, "update_modified", True))
|
||||||
"update_modified", getattr(self, "update_modified", True)
|
|
||||||
)
|
|
||||||
super().save(**kwargs)
|
super().save(**kwargs)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|
|
||||||
|
|
@ -2,9 +2,12 @@ from contextlib import suppress
|
||||||
|
|
||||||
from constance.admin import Config
|
from constance.admin import Config
|
||||||
from constance.admin import ConstanceAdmin as BaseConstanceAdmin
|
from constance.admin import ConstanceAdmin as BaseConstanceAdmin
|
||||||
|
from dalf.admin import DALFRelatedFieldAjax, DALFRelatedOnlyField
|
||||||
|
from django import forms
|
||||||
from django.apps import apps
|
from django.apps import apps
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from django.contrib.admin import ModelAdmin, TabularInline
|
from django.contrib.admin import ModelAdmin, TabularInline
|
||||||
|
from django.contrib.admin.widgets import get_select2_language
|
||||||
from django.contrib.gis.admin import GISModelAdmin
|
from django.contrib.gis.admin import GISModelAdmin
|
||||||
from django.db.models import Model
|
from django.db.models import Model
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
@ -52,9 +55,7 @@ class FieldsetsMixin:
|
||||||
for orig in transoptions.local_fields:
|
for orig in transoptions.local_fields:
|
||||||
translation_fields += get_translation_fields(orig)
|
translation_fields += get_translation_fields(orig)
|
||||||
if translation_fields:
|
if translation_fields:
|
||||||
fss = list(fss) + [
|
fss = list(fss) + [(_("translations"), {"fields": translation_fields})]
|
||||||
(_("translations"), {"fields": translation_fields})
|
|
||||||
]
|
|
||||||
return fss
|
return fss
|
||||||
|
|
||||||
if self.general_fields:
|
if self.general_fields:
|
||||||
|
|
@ -148,12 +149,7 @@ class OrderProductInline(TabularInline):
|
||||||
icon = "fa-solid fa-boxes-packing"
|
icon = "fa-solid fa-boxes-packing"
|
||||||
|
|
||||||
def get_queryset(self, request):
|
def get_queryset(self, request):
|
||||||
return (
|
return super().get_queryset(request).select_related("product").only("product__name")
|
||||||
super()
|
|
||||||
.get_queryset(request)
|
|
||||||
.select_related("product")
|
|
||||||
.only("product__name")
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class CategoryChildrenInline(TabularInline):
|
class CategoryChildrenInline(TabularInline):
|
||||||
|
|
@ -214,7 +210,7 @@ class CategoryAdmin(FieldsetsMixin, DraggableMPTTAdmin, BasicModelAdmin):
|
||||||
autocomplete_fields = ["parent", "tags"]
|
autocomplete_fields = ["parent", "tags"]
|
||||||
readonly_fields = ("slug", "uuid", "modified", "created")
|
readonly_fields = ("slug", "uuid", "modified", "created")
|
||||||
|
|
||||||
general_fields = ["is_active", "name", "description", "image", "markup_percent"]
|
general_fields = ["is_active", "name", "description", "image", "markup_percent", "priority"]
|
||||||
relation_fields = ["parent", "tags"]
|
relation_fields = ["parent", "tags"]
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -224,9 +220,9 @@ class BrandAdmin(FieldsetsMixin, BasicModelAdmin):
|
||||||
list_display = ("name",)
|
list_display = ("name",)
|
||||||
list_filter = ("categories", "is_active")
|
list_filter = ("categories", "is_active")
|
||||||
search_fields = ("uuid", "name", "categories__name")
|
search_fields = ("uuid", "name", "categories__name")
|
||||||
readonly_fields = ("uuid", "modified", "created")
|
readonly_fields = ("uuid", "slug", "modified", "created")
|
||||||
|
|
||||||
general_fields = ["is_active", "name", "description"]
|
general_fields = ["is_active", "name", "description", "priority"]
|
||||||
relation_fields = ["small_logo", "big_logo", "categories"]
|
relation_fields = ["small_logo", "big_logo", "categories"]
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -246,8 +242,10 @@ class ProductAdmin(FieldsetsMixin, BasicModelAdmin):
|
||||||
list_filter = (
|
list_filter = (
|
||||||
"is_active",
|
"is_active",
|
||||||
"is_digital",
|
"is_digital",
|
||||||
("tags", admin.RelatedOnlyFieldListFilter),
|
("brand", DALFRelatedFieldAjax),
|
||||||
("stocks__vendor", admin.RelatedOnlyFieldListFilter),
|
("category", DALFRelatedFieldAjax),
|
||||||
|
("tags", DALFRelatedFieldAjax),
|
||||||
|
("stocks__vendor", DALFRelatedFieldAjax),
|
||||||
"created",
|
"created",
|
||||||
"modified",
|
"modified",
|
||||||
)
|
)
|
||||||
|
|
@ -263,9 +261,30 @@ class ProductAdmin(FieldsetsMixin, BasicModelAdmin):
|
||||||
autocomplete_fields = ("category", "brand", "tags")
|
autocomplete_fields = ("category", "brand", "tags")
|
||||||
inlines = [AttributeValueInline, ProductImageInline, StockInline]
|
inlines = [AttributeValueInline, ProductImageInline, StockInline]
|
||||||
|
|
||||||
general_fields = ["is_active", "name", "partnumber", "is_active", "is_digital"]
|
general_fields = ["is_active", "name", "partnumber", "is_digital"]
|
||||||
relation_fields = ["category", "brand", "tags"]
|
relation_fields = ["category", "brand", "tags"]
|
||||||
|
|
||||||
|
@property
|
||||||
|
def media(self):
|
||||||
|
i18n_name = get_select2_language()
|
||||||
|
i18n_file = (f"admin/js/vendor/select2/i18n/{i18n_name}.js",) if i18n_name else ()
|
||||||
|
return super().media + forms.Media(
|
||||||
|
js=(
|
||||||
|
"admin/js/vendor/jquery/jquery.min.js",
|
||||||
|
"admin/js/vendor/select2/select2.full.min.js",
|
||||||
|
*i18n_file,
|
||||||
|
"admin/js/jquery.init.js",
|
||||||
|
"admin/js/django_admin_list_filter.js",
|
||||||
|
),
|
||||||
|
css={
|
||||||
|
"screen": (
|
||||||
|
"admin/css/vendor/select2/select2.min.css",
|
||||||
|
"admin/css/autocomplete.css",
|
||||||
|
"admin/css/django_admin_list_filter.css",
|
||||||
|
),
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@admin.register(ProductTag)
|
@admin.register(ProductTag)
|
||||||
class ProductTagAdmin(FieldsetsMixin, BasicModelAdmin):
|
class ProductTagAdmin(FieldsetsMixin, BasicModelAdmin):
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,8 @@ from core.viewsets import (
|
||||||
WishlistViewSet,
|
WishlistViewSet,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
app_name = "core"
|
||||||
|
|
||||||
core_router = DefaultRouter()
|
core_router = DefaultRouter()
|
||||||
core_router.register(r"products", ProductViewSet, basename="products")
|
core_router.register(r"products", ProductViewSet, basename="products")
|
||||||
core_router.register(r"orders", OrderViewSet, basename="orders")
|
core_router.register(r"orders", OrderViewSet, basename="orders")
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,8 @@ from core.views import (
|
||||||
GlobalSearchView,
|
GlobalSearchView,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
app_name = "core"
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path("search/", GlobalSearchView.as_view(), name="global_search"),
|
path("search/", GlobalSearchView.as_view(), name="global_search"),
|
||||||
path("orders/buy_as_business/", BuyAsBusinessView.as_view(), name="request_cursed_url"),
|
path("orders/buy_as_business/", BuyAsBusinessView.as_view(), name="request_cursed_url"),
|
||||||
|
|
|
||||||
|
|
@ -15,19 +15,15 @@ SMART_FIELDS = [
|
||||||
"name^6",
|
"name^6",
|
||||||
"name.ngram^5",
|
"name.ngram^5",
|
||||||
"name.phonetic",
|
"name.phonetic",
|
||||||
|
|
||||||
"title^4",
|
"title^4",
|
||||||
"title.ngram^3",
|
"title.ngram^3",
|
||||||
"title.phonetic",
|
"title.phonetic",
|
||||||
|
|
||||||
"description^2",
|
"description^2",
|
||||||
"description.ngram",
|
"description.ngram",
|
||||||
"description.phonetic",
|
"description.phonetic",
|
||||||
|
|
||||||
"brand__name^3",
|
"brand__name^3",
|
||||||
"brand__name.ngram",
|
"brand__name.ngram",
|
||||||
"brand__name.auto",
|
"brand__name.auto",
|
||||||
|
|
||||||
"category__name^2",
|
"category__name^2",
|
||||||
"category__name.ngram",
|
"category__name.ngram",
|
||||||
"category__name.auto",
|
"category__name.auto",
|
||||||
|
|
@ -71,7 +67,6 @@ functions = [
|
||||||
"missing": 0,
|
"missing": 0,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
# category-level boost when searching for categories
|
# category-level boost when searching for categories
|
||||||
{
|
{
|
||||||
"filter": Q("term", **{"_index": "categories"}),
|
"filter": Q("term", **{"_index": "categories"}),
|
||||||
|
|
@ -82,7 +77,6 @@ functions = [
|
||||||
"missing": 0,
|
"missing": 0,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
# brand-level boost when searching for brands
|
# brand-level boost when searching for brands
|
||||||
{
|
{
|
||||||
"filter": Q("term", **{"_index": "brands"}),
|
"filter": Q("term", **{"_index": "brands"}),
|
||||||
|
|
|
||||||
|
|
@ -12,13 +12,9 @@ class _BaseDoc(ActiveOnlyMixin, Document):
|
||||||
analyzer="standard",
|
analyzer="standard",
|
||||||
fields={
|
fields={
|
||||||
"raw": fields.KeywordField(ignore_above=256),
|
"raw": fields.KeywordField(ignore_above=256),
|
||||||
"ngram": fields.TextField(
|
"ngram": fields.TextField(analyzer="name_ngram", search_analyzer="query_lc"),
|
||||||
analyzer="name_ngram", search_analyzer="query_lc"
|
|
||||||
),
|
|
||||||
"phonetic": fields.TextField(analyzer="name_phonetic"),
|
"phonetic": fields.TextField(analyzer="name_phonetic"),
|
||||||
"auto": fields.TextField(
|
"auto": fields.TextField(analyzer="autocomplete", search_analyzer="autocomplete_search"),
|
||||||
analyzer="autocomplete", search_analyzer="autocomplete_search"
|
|
||||||
),
|
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
description = fields.TextField(
|
description = fields.TextField(
|
||||||
|
|
@ -26,13 +22,9 @@ class _BaseDoc(ActiveOnlyMixin, Document):
|
||||||
analyzer="standard",
|
analyzer="standard",
|
||||||
fields={
|
fields={
|
||||||
"raw": fields.KeywordField(ignore_above=256),
|
"raw": fields.KeywordField(ignore_above=256),
|
||||||
"ngram": fields.TextField(
|
"ngram": fields.TextField(analyzer="name_ngram", search_analyzer="query_lc"),
|
||||||
analyzer="name_ngram", search_analyzer="query_lc"
|
|
||||||
),
|
|
||||||
"phonetic": fields.TextField(analyzer="name_phonetic"),
|
"phonetic": fields.TextField(analyzer="name_phonetic"),
|
||||||
"auto": fields.TextField(
|
"auto": fields.TextField(analyzer="autocomplete", search_analyzer="autocomplete_search"),
|
||||||
analyzer="autocomplete", search_analyzer="autocomplete_search"
|
|
||||||
),
|
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
slug = fields.KeywordField(attr="slug", index=False)
|
slug = fields.KeywordField(attr="slug", index=False)
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ from django_filters import (
|
||||||
from core.elasticsearch import process_query
|
from core.elasticsearch import process_query
|
||||||
from core.models import Address, Brand, Category, Feedback, Order, Product, Wishlist
|
from core.models import Address, Brand, Category, Feedback, Order, Product, Wishlist
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger("evibes")
|
||||||
|
|
||||||
|
|
||||||
class CaseInsensitiveListFilter(BaseInFilter, CharFilter):
|
class CaseInsensitiveListFilter(BaseInFilter, CharFilter):
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ from core.utils.messages import permission_denied_message
|
||||||
from core.utils.nominatim import fetch_address_suggestions
|
from core.utils.nominatim import fetch_address_suggestions
|
||||||
from payments.graphene.object_types import TransactionType
|
from payments.graphene.object_types import TransactionType
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger("evibes")
|
||||||
|
|
||||||
|
|
||||||
class CacheOperator(BaseMutation):
|
class CacheOperator(BaseMutation):
|
||||||
|
|
|
||||||
|
|
@ -95,7 +95,7 @@ from vibes_auth.graphene.mutations import (
|
||||||
from vibes_auth.graphene.object_types import UserType
|
from vibes_auth.graphene.object_types import UserType
|
||||||
from vibes_auth.models import User
|
from vibes_auth.models import User
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger("evibes")
|
||||||
|
|
||||||
|
|
||||||
class Query(ObjectType):
|
class Query(ObjectType):
|
||||||
|
|
|
||||||
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
Binary file not shown.
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -0,0 +1,7 @@
|
||||||
|
from django.conf import settings
|
||||||
|
|
||||||
|
|
||||||
|
class RootDirectory:
|
||||||
|
def __init__(self):
|
||||||
|
self.label = "root"
|
||||||
|
self.path = settings.BASE_DIR / "evibes"
|
||||||
|
|
@ -7,6 +7,8 @@ import polib
|
||||||
from django.apps import apps
|
from django.apps import apps
|
||||||
from django.core.management.base import BaseCommand, CommandError
|
from django.core.management.base import BaseCommand, CommandError
|
||||||
|
|
||||||
|
from core.management.commands import RootDirectory
|
||||||
|
|
||||||
# Patterns to identify placeholders
|
# Patterns to identify placeholders
|
||||||
PLACEHOLDER_REGEXES = [
|
PLACEHOLDER_REGEXES = [
|
||||||
re.compile(r"\{[^}]+"), # {name}, {type(instance)!s}, etc.
|
re.compile(r"\{[^}]+"), # {name}, {type(instance)!s}, etc.
|
||||||
|
|
@ -94,7 +96,10 @@ class Command(BaseCommand):
|
||||||
apps_to_scan: set[str] = set(options["target_apps"])
|
apps_to_scan: set[str] = set(options["target_apps"])
|
||||||
root_path: str = options.get("root_path") or "/app/"
|
root_path: str = options.get("root_path") or "/app/"
|
||||||
|
|
||||||
for app_conf in apps.get_app_configs():
|
configs = list(apps.get_app_configs())
|
||||||
|
configs.append(RootDirectory())
|
||||||
|
|
||||||
|
for app_conf in configs:
|
||||||
if app_conf.label not in apps_to_scan:
|
if app_conf.label not in apps_to_scan:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,8 @@ import requests
|
||||||
from django.apps import apps
|
from django.apps import apps
|
||||||
from django.core.management.base import BaseCommand, CommandError
|
from django.core.management.base import BaseCommand, CommandError
|
||||||
|
|
||||||
|
from core.management.commands import RootDirectory
|
||||||
|
|
||||||
# Mapping from Django locale codes to DeepL API codes
|
# Mapping from Django locale codes to DeepL API codes
|
||||||
DEEPL_TARGET_LANGUAGES_MAPPING = {
|
DEEPL_TARGET_LANGUAGES_MAPPING = {
|
||||||
"en-gb": "EN-GB",
|
"en-gb": "EN-GB",
|
||||||
|
|
@ -135,7 +137,10 @@ class Command(BaseCommand):
|
||||||
|
|
||||||
self.stdout.write(self.style.MIGRATE_HEADING(f"→ Translating into {target_lang}"))
|
self.stdout.write(self.style.MIGRATE_HEADING(f"→ Translating into {target_lang}"))
|
||||||
|
|
||||||
for app_conf in apps.get_app_configs():
|
configs = list(apps.get_app_configs())
|
||||||
|
configs.append(RootDirectory())
|
||||||
|
|
||||||
|
for app_conf in configs:
|
||||||
if app_conf.label not in target_apps:
|
if app_conf.label not in target_apps:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
|
|
||||||
24
core/management/commands/delete_never_ordered_products.py
Normal file
24
core/management/commands/delete_never_ordered_products.py
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
from django.core.management.base import BaseCommand
|
||||||
|
from django.db import transaction
|
||||||
|
|
||||||
|
from core.models import Product
|
||||||
|
|
||||||
|
CHUNK_SIZE = 5000
|
||||||
|
|
||||||
|
class Command(BaseCommand):
|
||||||
|
help = "Delete Product rows with no OrderProduct, in batches"
|
||||||
|
|
||||||
|
def handle(self, *args, **options):
|
||||||
|
while True:
|
||||||
|
batch_ids = list(
|
||||||
|
Product.objects
|
||||||
|
.filter(orderproduct__isnull=True)
|
||||||
|
.values_list('pk', flat=True)[:CHUNK_SIZE]
|
||||||
|
)
|
||||||
|
if not batch_ids:
|
||||||
|
break
|
||||||
|
with transaction.atomic():
|
||||||
|
Product.objects.filter(pk__in=batch_ids).delete()
|
||||||
|
self.stdout.write(f"Deleted {len(batch_ids)} products…")
|
||||||
|
|
||||||
|
self.stdout.write("✅ All unordered products removed.")
|
||||||
|
|
@ -5,7 +5,7 @@ from django.core.management.base import BaseCommand
|
||||||
from core.models import Product
|
from core.models import Product
|
||||||
from core.vendors import AbstractVendor
|
from core.vendors import AbstractVendor
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger("evibes")
|
||||||
|
|
||||||
|
|
||||||
class Command(BaseCommand):
|
class Command(BaseCommand):
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ from constance import config
|
||||||
from django.contrib.gis.geos import Point
|
from django.contrib.gis.geos import Point
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
|
||||||
logger = logging.getLogger("django.request")
|
logger = logging.getLogger("evibes")
|
||||||
|
|
||||||
|
|
||||||
class AddressManager(models.Manager):
|
class AddressManager(models.Manager):
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,60 @@
|
||||||
|
# Generated by Django 5.2 on 2025-06-29 13:09
|
||||||
|
|
||||||
|
import core.utils.db
|
||||||
|
import django_extensions.db.fields
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
("core", "0034_category_priority_alter_brand_priority"),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name="brand",
|
||||||
|
name="slug",
|
||||||
|
field=django_extensions.db.fields.AutoSlugField(
|
||||||
|
allow_unicode=True,
|
||||||
|
blank=True,
|
||||||
|
editable=False,
|
||||||
|
max_length=88,
|
||||||
|
null=True,
|
||||||
|
overwrite=True,
|
||||||
|
populate_from=("name",),
|
||||||
|
unique=True,
|
||||||
|
verbose_name="Slug",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name="category",
|
||||||
|
name="slug",
|
||||||
|
field=core.utils.db.TweakedAutoSlugField(
|
||||||
|
allow_unicode=True,
|
||||||
|
blank=True,
|
||||||
|
editable=False,
|
||||||
|
max_length=88,
|
||||||
|
null=True,
|
||||||
|
overwrite=True,
|
||||||
|
populate_from=("parent__name", "name"),
|
||||||
|
unique=True,
|
||||||
|
verbose_name="Slug",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name="product",
|
||||||
|
name="slug",
|
||||||
|
field=django_extensions.db.fields.AutoSlugField(
|
||||||
|
allow_unicode=True,
|
||||||
|
blank=True,
|
||||||
|
editable=False,
|
||||||
|
max_length=88,
|
||||||
|
null=True,
|
||||||
|
overwrite=True,
|
||||||
|
populate_from=("name", "brand__slug", "category__slug", "uuid"),
|
||||||
|
unique=True,
|
||||||
|
verbose_name="Slug",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
]
|
||||||
641
core/models.py
641
core/models.py
|
|
@ -56,10 +56,34 @@ from core.validators import validate_category_image_dimensions
|
||||||
from evibes.settings import CURRENCY_CODE
|
from evibes.settings import CURRENCY_CODE
|
||||||
from payments.models import Transaction
|
from payments.models import Transaction
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger("evibes")
|
||||||
|
|
||||||
|
|
||||||
class AttributeGroup(ExportModelOperationsMixin("attribute_group"), NiceModel):
|
class AttributeGroup(ExportModelOperationsMixin("attribute_group"), NiceModel):
|
||||||
|
"""
|
||||||
|
Represents a group of attributes, which can be hierarchical.
|
||||||
|
|
||||||
|
This class is used to manage and organize attribute groups. An attribute
|
||||||
|
group can have a parent group, forming a hierarchical structure. This can
|
||||||
|
be useful for categorizing and managing attributes more effectively in a
|
||||||
|
complex system.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
parent (Self): A foreign key referencing the parent of this group. It
|
||||||
|
can be null or blank if the group does not have a parent. The parent
|
||||||
|
group organizes the hierarchical structure.
|
||||||
|
name (str): The unique name of the attribute group. It is limited to a
|
||||||
|
maximum of 255 characters.
|
||||||
|
is_publicly_visible (bool): Indicates if the attribute group is visible
|
||||||
|
publicly.
|
||||||
|
|
||||||
|
Meta:
|
||||||
|
verbose_name: A human-readable name for the class, set to 'attribute
|
||||||
|
group'.
|
||||||
|
verbose_name_plural: A human-readable plural name for the class, set to
|
||||||
|
'attribute groups'.
|
||||||
|
"""
|
||||||
|
|
||||||
is_publicly_visible = True
|
is_publicly_visible = True
|
||||||
|
|
||||||
parent: Self = ForeignKey( # type: ignore
|
parent: Self = ForeignKey( # type: ignore
|
||||||
|
|
@ -87,14 +111,40 @@ class AttributeGroup(ExportModelOperationsMixin("attribute_group"), NiceModel):
|
||||||
|
|
||||||
|
|
||||||
class Vendor(ExportModelOperationsMixin("vendor"), NiceModel):
|
class Vendor(ExportModelOperationsMixin("vendor"), NiceModel):
|
||||||
|
"""
|
||||||
|
Represents a vendor entity capable of storing information about external vendors and
|
||||||
|
their interaction requirements.
|
||||||
|
|
||||||
|
The Vendor class is used to define and manage information related to an external vendor.
|
||||||
|
It stores the vendor's name, authentication details required for communication,
|
||||||
|
and the percentage markup applied to products retrieved from the vendor. This model also
|
||||||
|
maintains additional metadata and constraints, making it suitable for use in systems
|
||||||
|
that interact with third-party vendors.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
authentication (dict): Credentials and endpoint information required for vendor
|
||||||
|
communication, stored in a JSON field.
|
||||||
|
markup_percent (int): The markup percentage applied to products sent by this
|
||||||
|
vendor. Must be an integer between 0 and 100 inclusive.
|
||||||
|
name (str): The unique name of the vendor, with a maximum length of 255
|
||||||
|
characters.
|
||||||
|
|
||||||
|
Meta:
|
||||||
|
verbose_name (str): Singular name of the vendor entity ("vendor").
|
||||||
|
verbose_name_plural (str): Plural name of the vendor entities ("vendors").
|
||||||
|
indexes (list): List of database indexes applied to this model, including a
|
||||||
|
GIN index on the 'authentication' field.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: The vendor's name when the instance is represented as a string.
|
||||||
|
"""
|
||||||
|
|
||||||
is_publicly_visible = False
|
is_publicly_visible = False
|
||||||
|
|
||||||
authentication: dict = JSONField( # type: ignore
|
authentication: dict = JSONField( # type: ignore
|
||||||
blank=True,
|
blank=True,
|
||||||
null=True,
|
null=True,
|
||||||
help_text=_(
|
help_text=_("stores credentials and endpoints required for vendor communication"),
|
||||||
"stores credentials and endpoints required for vendor communication"
|
|
||||||
),
|
|
||||||
verbose_name=_("authentication info"),
|
verbose_name=_("authentication info"),
|
||||||
)
|
)
|
||||||
markup_percent: int = IntegerField( # type: ignore
|
markup_percent: int = IntegerField( # type: ignore
|
||||||
|
|
@ -124,6 +174,22 @@ class Vendor(ExportModelOperationsMixin("vendor"), NiceModel):
|
||||||
|
|
||||||
|
|
||||||
class ProductTag(ExportModelOperationsMixin("product_tag"), NiceModel):
|
class ProductTag(ExportModelOperationsMixin("product_tag"), NiceModel):
|
||||||
|
"""
|
||||||
|
Represents a product tag used for classifying or identifying products.
|
||||||
|
|
||||||
|
The ProductTag class is designed to uniquely identify and classify products
|
||||||
|
through a combination of an internal tag identifier and a user-friendly
|
||||||
|
display name. It supports operations exported through mixins and provides
|
||||||
|
metadata customization for administrative purposes.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
is_publicly_visible: A boolean indicating whether the tag is publicly
|
||||||
|
visible.
|
||||||
|
tag_name: Internal tag identifier for the product tag.
|
||||||
|
name: User-friendly name for the product tag.
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
is_publicly_visible = True
|
is_publicly_visible = True
|
||||||
|
|
||||||
tag_name: str = CharField( # type: ignore
|
tag_name: str = CharField( # type: ignore
|
||||||
|
|
@ -149,6 +215,19 @@ class ProductTag(ExportModelOperationsMixin("product_tag"), NiceModel):
|
||||||
|
|
||||||
|
|
||||||
class CategoryTag(ExportModelOperationsMixin("category_tag"), NiceModel):
|
class CategoryTag(ExportModelOperationsMixin("category_tag"), NiceModel):
|
||||||
|
"""
|
||||||
|
Represents a category tag used for products.
|
||||||
|
|
||||||
|
This class models a category tag that can be used to associate and classify products.
|
||||||
|
It includes attributes for an internal tag identifier and a user-friendly display name.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
is_publicly_visible (bool): Indicates if the category tag is publicly visible.
|
||||||
|
tag_name (str): Internal tag identifier for the product tag.
|
||||||
|
name (str): User-friendly name for the product tag.
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
is_publicly_visible = True
|
is_publicly_visible = True
|
||||||
|
|
||||||
tag_name: str = CharField( # type: ignore
|
tag_name: str = CharField( # type: ignore
|
||||||
|
|
@ -174,6 +253,74 @@ class CategoryTag(ExportModelOperationsMixin("category_tag"), NiceModel):
|
||||||
|
|
||||||
|
|
||||||
class Category(ExportModelOperationsMixin("category"), NiceModel, MPTTModel):
|
class Category(ExportModelOperationsMixin("category"), NiceModel, MPTTModel):
|
||||||
|
"""
|
||||||
|
Represents a category entity to organize and group related items in a hierarchical
|
||||||
|
structure. Categories may have hierarchical relationships with other categories,
|
||||||
|
supporting parent-child relationships. The class includes fields for metadata and
|
||||||
|
visual representation, which serve as a foundation for category-related features.
|
||||||
|
|
||||||
|
This class is typically used to define and manage product categories or other similar
|
||||||
|
groupings within an application, allowing users or administrators to specify the
|
||||||
|
name, description, and hierarchy of categories, as well as assign attributes like
|
||||||
|
images, tags, or priority.
|
||||||
|
|
||||||
|
Attributes
|
||||||
|
----------
|
||||||
|
is_publicly_visible : bool
|
||||||
|
A flag indicating whether the category is visible to the public.
|
||||||
|
|
||||||
|
image : ImageField
|
||||||
|
Represents an optional image associated with the category. The image is used
|
||||||
|
to visually represent the category.
|
||||||
|
|
||||||
|
markup_percent : int
|
||||||
|
Specifies the markup percentage for products in this category. It is validated
|
||||||
|
to ensure values fall between 0 and 100.
|
||||||
|
|
||||||
|
parent : Self
|
||||||
|
Represents the parent category in a hierarchical structure. This forms category
|
||||||
|
relationships to enable nesting.
|
||||||
|
|
||||||
|
name : str
|
||||||
|
The name of the category, which also must be unique. This serves as the primary
|
||||||
|
identifier for the category.
|
||||||
|
|
||||||
|
description : str
|
||||||
|
An optional detailed description explaining the purpose or details of the category.
|
||||||
|
|
||||||
|
slug : str
|
||||||
|
A unique, auto-generated field created from the category's name and parent name,
|
||||||
|
suitable for use in URLs and identifying the category.
|
||||||
|
|
||||||
|
tags : CategoryTag
|
||||||
|
Optional tags used to group or describe the category better.
|
||||||
|
|
||||||
|
priority : int
|
||||||
|
Represents the priority of the category, which could be used for sorting or
|
||||||
|
rendering purposes.
|
||||||
|
|
||||||
|
Methods
|
||||||
|
-------
|
||||||
|
__str__()
|
||||||
|
Returns the name of the category as its string representation.
|
||||||
|
|
||||||
|
get_tree_depth()
|
||||||
|
Computes the depth of the category in the hierarchical structure. It determines
|
||||||
|
the maximum depth of its descendants or returns zero if the category is a leaf.
|
||||||
|
|
||||||
|
Meta Options
|
||||||
|
------------
|
||||||
|
verbose_name : str
|
||||||
|
Specifies the singular human-readable name for the category model.
|
||||||
|
|
||||||
|
verbose_name_plural : str
|
||||||
|
Specifies the plural human-readable name for the category model.
|
||||||
|
|
||||||
|
ordering : list
|
||||||
|
Defines the default ordering for category instances, based on their hierarchical
|
||||||
|
structure.
|
||||||
|
"""
|
||||||
|
|
||||||
is_publicly_visible = True
|
is_publicly_visible = True
|
||||||
|
|
||||||
image = ImageField( # type: ignore
|
image = ImageField( # type: ignore
|
||||||
|
|
@ -247,10 +394,7 @@ class Category(ExportModelOperationsMixin("category"), NiceModel, MPTTModel):
|
||||||
def get_tree_depth(self):
|
def get_tree_depth(self):
|
||||||
if self.is_leaf_node():
|
if self.is_leaf_node():
|
||||||
return 0
|
return 0
|
||||||
return (
|
return self.get_descendants().aggregate(max_depth=Max("level"))["max_depth"] - self.get_level()
|
||||||
self.get_descendants().aggregate(max_depth=Max("level"))["max_depth"]
|
|
||||||
- self.get_level()
|
|
||||||
)
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = _("category")
|
verbose_name = _("category")
|
||||||
|
|
@ -259,6 +403,25 @@ class Category(ExportModelOperationsMixin("category"), NiceModel, MPTTModel):
|
||||||
|
|
||||||
|
|
||||||
class Brand(ExportModelOperationsMixin("brand"), NiceModel):
|
class Brand(ExportModelOperationsMixin("brand"), NiceModel):
|
||||||
|
"""
|
||||||
|
Represents a Brand object in the system.
|
||||||
|
|
||||||
|
This class handles information and attributes related to a brand, including its name, logos,
|
||||||
|
description, associated categories, a unique slug, and priority order.
|
||||||
|
It allows for the organization and representation of brand-related data within the application.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
is_publicly_visible (bool): Indicates if the brand is visible publicly.
|
||||||
|
name (str): The name of the brand.
|
||||||
|
small_logo (ImageField): An optional small logo image file representing the brand.
|
||||||
|
big_logo (ImageField): An optional large logo image file representing the brand.
|
||||||
|
description (str): An optional textual description providing details about the brand.
|
||||||
|
categories (Category): Optional categories associated with this brand.
|
||||||
|
slug (str): A unique auto-generated slug used for SEO-friendly URLs.
|
||||||
|
priority (int): Specifies the priority ranking of the brand.
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
is_publicly_visible = True
|
is_publicly_visible = True
|
||||||
|
|
||||||
name: str = CharField( # type: ignore
|
name: str = CharField( # type: ignore
|
||||||
|
|
@ -322,6 +485,41 @@ class Brand(ExportModelOperationsMixin("brand"), NiceModel):
|
||||||
|
|
||||||
|
|
||||||
class Product(ExportModelOperationsMixin("product"), NiceModel):
|
class Product(ExportModelOperationsMixin("product"), NiceModel):
|
||||||
|
"""
|
||||||
|
Represents a product with attributes such as category, brand, tags, digital status, name,
|
||||||
|
description, part number, and slug. Provides related utility properties to retrieve
|
||||||
|
ratings, feedback counts, price, quantity, and total orders. Designed for use in a
|
||||||
|
system that handles e-commerce or inventory management.
|
||||||
|
|
||||||
|
This class interacts with related models (such as Category, Brand, and ProductTag) and
|
||||||
|
manages caching for frequently accessed properties to improve performance. It is used
|
||||||
|
to define and manipulate product data and its associated information within
|
||||||
|
an application.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
is_publicly_visible (bool): Indicates whether the product is visible to the public.
|
||||||
|
category (Category): The category this product belongs to.
|
||||||
|
brand (Brand, optional): Optionally associates this product with a brand.
|
||||||
|
tags (ProductTag): Tags that help describe or group this product.
|
||||||
|
is_digital (bool): Indicates whether this product is digitally delivered.
|
||||||
|
name (str): The identifying name for the product.
|
||||||
|
description (str, optional): A detailed description of the product.
|
||||||
|
partnumber (str): The unique part number for this product.
|
||||||
|
slug (str, optional): Auto-generated unique slug for the product.
|
||||||
|
|
||||||
|
Meta:
|
||||||
|
verbose_name (str): The singular name of the product model.
|
||||||
|
verbose_name_plural (str): The plural name of the product model.
|
||||||
|
|
||||||
|
Properties:
|
||||||
|
rating (float): The average rating of the product, rounded to 2 decimal places.
|
||||||
|
feedbacks_count (int): The total number of feedback entries associated with the product.
|
||||||
|
price (float): The lowest price of the product based on its stock, rounded to 2 decimal
|
||||||
|
places.
|
||||||
|
quantity (int): The total available quantity of the product across all its stocks.
|
||||||
|
total_orders (int): Counts the total orders made for the product in relevant statuses.
|
||||||
|
"""
|
||||||
|
|
||||||
is_publicly_visible = True
|
is_publicly_visible = True
|
||||||
|
|
||||||
category: Category = ForeignKey( # type: ignore
|
category: Category = ForeignKey( # type: ignore
|
||||||
|
|
@ -414,9 +612,7 @@ class Product(ExportModelOperationsMixin("product"), NiceModel):
|
||||||
cache_key = f"product_feedbacks_count_{self.pk}"
|
cache_key = f"product_feedbacks_count_{self.pk}"
|
||||||
feedbacks_count = cache.get(cache_key)
|
feedbacks_count = cache.get(cache_key)
|
||||||
if feedbacks_count is None:
|
if feedbacks_count is None:
|
||||||
feedbacks_count = Feedback.objects.filter(
|
feedbacks_count = Feedback.objects.filter(order_product__product_id=self.pk).count()
|
||||||
order_product__product_id=self.pk
|
|
||||||
).count()
|
|
||||||
cache.set(cache_key, feedbacks_count, 604800)
|
cache.set(cache_key, feedbacks_count, 604800)
|
||||||
return feedbacks_count
|
return feedbacks_count
|
||||||
|
|
||||||
|
|
@ -446,6 +642,32 @@ class Product(ExportModelOperationsMixin("product"), NiceModel):
|
||||||
|
|
||||||
|
|
||||||
class Attribute(ExportModelOperationsMixin("attribute"), NiceModel):
|
class Attribute(ExportModelOperationsMixin("attribute"), NiceModel):
|
||||||
|
"""
|
||||||
|
Represents an attribute in the system.
|
||||||
|
|
||||||
|
This class is used to define and manage attributes, which are customizable
|
||||||
|
pieces of data that can be associated with other entities. Attributes
|
||||||
|
have associated categories, groups, value types, and names. The model
|
||||||
|
supports multiple types of values, including string, integer, float,
|
||||||
|
boolean, array, and object. This allows for dynamic and flexible data
|
||||||
|
structuring.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
is_publicly_visible (bool): Denotes whether the attribute is publicly
|
||||||
|
visible. Defaults to True.
|
||||||
|
|
||||||
|
categories (ManyToManyField): Categories to which this attribute
|
||||||
|
belongs. It is a many-to-many relationship with `Category` model.
|
||||||
|
|
||||||
|
group (ForeignKey): The group to which this attribute belongs. It is
|
||||||
|
a ForeignKey relation to the `AttributeGroup` model.
|
||||||
|
|
||||||
|
value_type (CharField): The type of the attribute's value. Options
|
||||||
|
include string, integer, float, boolean, array, or object.
|
||||||
|
|
||||||
|
name (CharField): The unique name of the attribute.
|
||||||
|
"""
|
||||||
|
|
||||||
is_publicly_visible = True
|
is_publicly_visible = True
|
||||||
|
|
||||||
categories: Category = ManyToManyField( # type: ignore
|
categories: Category = ManyToManyField( # type: ignore
|
||||||
|
|
@ -492,6 +714,29 @@ class Attribute(ExportModelOperationsMixin("attribute"), NiceModel):
|
||||||
|
|
||||||
|
|
||||||
class AttributeValue(ExportModelOperationsMixin("attribute_value"), NiceModel):
|
class AttributeValue(ExportModelOperationsMixin("attribute_value"), NiceModel):
|
||||||
|
"""
|
||||||
|
Represents a specific value for an attribute that is linked to a product.
|
||||||
|
|
||||||
|
This class serves the purpose of mapping a value to an attribute for a
|
||||||
|
specific product. It links the 'attribute' to a unique 'value', allowing
|
||||||
|
better organization and dynamic representation of product characteristics.
|
||||||
|
It also defines whether the attribute value is public through the
|
||||||
|
'is_publicly_visible' attribute.
|
||||||
|
|
||||||
|
Attributes
|
||||||
|
----------
|
||||||
|
is_publicly_visible : bool
|
||||||
|
Determines if the attribute value is visible publicly. Defaults to True.
|
||||||
|
attribute : core.Attribute
|
||||||
|
The 'Attribute' object this value is linked to. Foreign key relationship
|
||||||
|
with 'core.Attribute'.
|
||||||
|
product : core.Product
|
||||||
|
The specific 'Product' this attribute's value is associated with.
|
||||||
|
Foreign key relationship with 'core.Product'.
|
||||||
|
value : str
|
||||||
|
Holds the specific value for this attribute as a text field.
|
||||||
|
"""
|
||||||
|
|
||||||
is_publicly_visible = True
|
is_publicly_visible = True
|
||||||
|
|
||||||
attribute: Attribute = ForeignKey( # type: ignore
|
attribute: Attribute = ForeignKey( # type: ignore
|
||||||
|
|
@ -524,6 +769,24 @@ class AttributeValue(ExportModelOperationsMixin("attribute_value"), NiceModel):
|
||||||
|
|
||||||
|
|
||||||
class ProductImage(ExportModelOperationsMixin("product_image"), NiceModel):
|
class ProductImage(ExportModelOperationsMixin("product_image"), NiceModel):
|
||||||
|
"""
|
||||||
|
Represents a product image associated with a product in the system.
|
||||||
|
|
||||||
|
This class is designed to manage images for products, including functionality
|
||||||
|
for uploading image files, associating them with specific products, and
|
||||||
|
determining their display order. It also includes an accessibility feature
|
||||||
|
with alternative text for the images.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
is_publicly_visible (bool): A flag indicating whether the image is
|
||||||
|
visible publicly.
|
||||||
|
alt (str): Alternative text for the image to support accessibility.
|
||||||
|
image (ImageField): The image file associated with the product.
|
||||||
|
priority (int): The display priority of the image. Images with lower
|
||||||
|
priority values are displayed first.
|
||||||
|
product (ForeignKey): The product to which this image is associated.
|
||||||
|
"""
|
||||||
|
|
||||||
is_publicly_visible = True
|
is_publicly_visible = True
|
||||||
|
|
||||||
alt: str = CharField( # type: ignore
|
alt: str = CharField( # type: ignore
|
||||||
|
|
@ -563,6 +826,39 @@ class ProductImage(ExportModelOperationsMixin("product_image"), NiceModel):
|
||||||
|
|
||||||
|
|
||||||
class Promotion(ExportModelOperationsMixin("promotion"), NiceModel):
|
class Promotion(ExportModelOperationsMixin("promotion"), NiceModel):
|
||||||
|
"""
|
||||||
|
Represents a promotional campaign for products with a discount.
|
||||||
|
|
||||||
|
This class is used to define and manage promotional campaigns that offer a
|
||||||
|
percentage-based discount for products. The class includes attributes for
|
||||||
|
setting the discount rate, providing details about the promotion, and linking
|
||||||
|
it to the applicable products. It integrates with the product catalog to
|
||||||
|
determine the affected items in the campaign.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
is_publicly_visible: A class-level attribute indicating whether the promotion
|
||||||
|
is publicly visible.
|
||||||
|
discount_percent: IntegerField. Specifies the percentage discount for the
|
||||||
|
selected products. Must be between 1 and 100 inclusive.
|
||||||
|
name: CharField. A unique name for the promotion, required for promoting
|
||||||
|
distinguishable campaigns. Maximum length is 256 characters.
|
||||||
|
description: TextField, optional. Provides a detailed description of the
|
||||||
|
promotion. Can be left blank or null.
|
||||||
|
products: ManyToManyField. Links the promotion to the products that are included
|
||||||
|
in its scope. Can be left blank.
|
||||||
|
|
||||||
|
Meta:
|
||||||
|
verbose_name: The singular name for the promotion in database and UI contexts.
|
||||||
|
verbose_name_plural: The pluralized name for multiple promotions in database and
|
||||||
|
UI contexts.
|
||||||
|
|
||||||
|
Methods:
|
||||||
|
__str__():
|
||||||
|
Returns a string representation of the promotion. If the name is
|
||||||
|
provided, it returns the name; otherwise, it returns the ID of the
|
||||||
|
promotion as a string.
|
||||||
|
"""
|
||||||
|
|
||||||
is_publicly_visible = True
|
is_publicly_visible = True
|
||||||
|
|
||||||
discount_percent: int = IntegerField( # type: ignore
|
discount_percent: int = IntegerField( # type: ignore
|
||||||
|
|
@ -600,6 +896,26 @@ class Promotion(ExportModelOperationsMixin("promotion"), NiceModel):
|
||||||
|
|
||||||
|
|
||||||
class Stock(ExportModelOperationsMixin("stock"), NiceModel):
|
class Stock(ExportModelOperationsMixin("stock"), NiceModel):
|
||||||
|
"""
|
||||||
|
Represents the stock of a product managed in the system.
|
||||||
|
|
||||||
|
This class provides details about the relationship between vendors, products,
|
||||||
|
and their stock information, as well as inventory-related properties like price,
|
||||||
|
purchase price, quantity, SKU, and digital assets. It is part of the inventory
|
||||||
|
management system to allow tracking and evaluation of products available from
|
||||||
|
various vendors.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
is_publicly_visible (bool): Indicates if the stock is publicly visible. Defaults to False.
|
||||||
|
vendor (ForeignKey): The vendor supplying this product stock.
|
||||||
|
price (float): The final price to the customer after markups.
|
||||||
|
product (ForeignKey): The product associated with this stock entry.
|
||||||
|
purchase_price (float): The price paid to the vendor for this product.
|
||||||
|
quantity (int): Available quantity of the product in stock.
|
||||||
|
sku (str): Vendor-assigned SKU for identifying the product.
|
||||||
|
digital_asset (FileField): Digital file associated with this stock if applicable.
|
||||||
|
"""
|
||||||
|
|
||||||
is_publicly_visible = False
|
is_publicly_visible = False
|
||||||
|
|
||||||
vendor: ForeignKey = ForeignKey(
|
vendor: ForeignKey = ForeignKey(
|
||||||
|
|
@ -655,6 +971,16 @@ class Stock(ExportModelOperationsMixin("stock"), NiceModel):
|
||||||
|
|
||||||
|
|
||||||
class Wishlist(ExportModelOperationsMixin("wishlist"), NiceModel):
|
class Wishlist(ExportModelOperationsMixin("wishlist"), NiceModel):
|
||||||
|
"""
|
||||||
|
Represents a user's wishlist for storing and managing desired products.
|
||||||
|
|
||||||
|
The Wishlist class provides functionality to manage a collection of products
|
||||||
|
that a user wishes to save. It supports operations such as adding products,
|
||||||
|
removing products, adding multiple products in bulk, and removing multiple
|
||||||
|
products in bulk. The wishlist is associated with a specific user and is
|
||||||
|
stored with optional public visibility status.
|
||||||
|
"""
|
||||||
|
|
||||||
is_publicly_visible = False
|
is_publicly_visible = False
|
||||||
|
|
||||||
products: ManyToManyField = ManyToManyField( # type: ignore
|
products: ManyToManyField = ManyToManyField( # type: ignore
|
||||||
|
|
@ -716,11 +1042,29 @@ class Wishlist(ExportModelOperationsMixin("wishlist"), NiceModel):
|
||||||
|
|
||||||
|
|
||||||
class Documentary(ExportModelOperationsMixin("attribute_group"), NiceModel):
|
class Documentary(ExportModelOperationsMixin("attribute_group"), NiceModel):
|
||||||
|
"""
|
||||||
|
Model representing a documentary record tied to a product.
|
||||||
|
|
||||||
|
This class is used to store information about documentaries related to specific
|
||||||
|
products, including file uploads and their metadata. It contains methods and
|
||||||
|
properties to handle the file type and storage path for the documentary files.
|
||||||
|
It extends functionality from specific mixins and provides additional custom
|
||||||
|
features.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
is_publicly_visible: A boolean indicating if the documentary is
|
||||||
|
publicly visible.
|
||||||
|
product: ForeignKey linking the documentary to a product.
|
||||||
|
document: FileField used to store the file associated with the documentary.
|
||||||
|
|
||||||
|
Meta:
|
||||||
|
verbose_name: Singular name for the documentary model.
|
||||||
|
verbose_name_plural: Plural name for the documentary model.
|
||||||
|
"""
|
||||||
|
|
||||||
is_publicly_visible = True
|
is_publicly_visible = True
|
||||||
|
|
||||||
product: ForeignKey = ForeignKey(
|
product: ForeignKey = ForeignKey(to=Product, on_delete=CASCADE, related_name="documentaries")
|
||||||
to=Product, on_delete=CASCADE, related_name="documentaries"
|
|
||||||
)
|
|
||||||
document = FileField(upload_to=get_product_uuid_as_path)
|
document = FileField(upload_to=get_product_uuid_as_path)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|
@ -739,6 +1083,43 @@ class Documentary(ExportModelOperationsMixin("attribute_group"), NiceModel):
|
||||||
|
|
||||||
|
|
||||||
class Address(ExportModelOperationsMixin("address"), NiceModel):
|
class Address(ExportModelOperationsMixin("address"), NiceModel):
|
||||||
|
"""
|
||||||
|
Represents an address entity that includes location details and associations with
|
||||||
|
a user. Provides functionality for geographic and address data storage, as well
|
||||||
|
as integration with geocoding services.
|
||||||
|
|
||||||
|
This class is designed to store detailed address information including components
|
||||||
|
like street, city, region, country, and geolocation (longitude and latitude).
|
||||||
|
|
||||||
|
It supports integration with geocoding APIs, enabling the storage of raw API
|
||||||
|
responses for further processing or inspection. The class also allows associating
|
||||||
|
an address with a user, facilitating personalized data handling.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
is_publicly_visible (bool): Indicates whether the address is visible publicly.
|
||||||
|
address_line (str): A general address line containing information about the
|
||||||
|
customer's location. Optional.
|
||||||
|
street (str): The street name or number in the address. Optional.
|
||||||
|
district (str): The district related to the address. Optional.
|
||||||
|
city (str): The name of the city where the address is located. Optional.
|
||||||
|
region (str): The name of the region associated with the address. Optional.
|
||||||
|
postal_code (str): The postal code corresponding to the address. Optional.
|
||||||
|
country (str): The country where the address resides. Optional.
|
||||||
|
location (PointField): A geolocation represented as (longitude, latitude).
|
||||||
|
Allows geospatial searches. Optional.
|
||||||
|
raw_data (dict): The full JSON response directly from the geocoding service,
|
||||||
|
containing detailed information about the address. Optional.
|
||||||
|
api_response (dict): Stores a processed version or subset of the JSON
|
||||||
|
response from the geocoding service. Optional.
|
||||||
|
user (ForeignKey): Reference to a User entity who owns this address. Optional.
|
||||||
|
|
||||||
|
Meta:
|
||||||
|
verbose_name (str): Human-readable singular name for the address.
|
||||||
|
verbose_name_plural (str): Human-readable plural name for addresses.
|
||||||
|
indexes (list): Database indexes defined for improving query performance
|
||||||
|
on specific fields like 'location'.
|
||||||
|
"""
|
||||||
|
|
||||||
is_publicly_visible = False
|
is_publicly_visible = False
|
||||||
|
|
||||||
address_line: str = TextField( # type: ignore
|
address_line: str = TextField( # type: ignore
|
||||||
|
|
@ -787,6 +1168,34 @@ class Address(ExportModelOperationsMixin("address"), NiceModel):
|
||||||
|
|
||||||
|
|
||||||
class PromoCode(ExportModelOperationsMixin("promocode"), NiceModel):
|
class PromoCode(ExportModelOperationsMixin("promocode"), NiceModel):
|
||||||
|
"""
|
||||||
|
Represents a promotional code that can be used for discounts, managing its validity,
|
||||||
|
type of discount, and application.
|
||||||
|
|
||||||
|
The PromoCode class stores details about a promotional code, including its unique
|
||||||
|
identifier, discount properties (amount or percentage), validity period, associated
|
||||||
|
user (if any), and status of its usage. It includes functionality to validate and
|
||||||
|
apply the promo code to an order while ensuring constraints are met.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
code (str): The unique identifier for the promo code.
|
||||||
|
discount_amount (Decimal): The fixed discount amount applied, if defined.
|
||||||
|
discount_percent (int): The percentage discount applied, if defined.
|
||||||
|
end_time (datetime): The expiration timestamp of the promo code.
|
||||||
|
start_time (datetime): The timestamp from when the promo code is valid.
|
||||||
|
used_on (datetime): The timestamp when the promo code was used (if applicable).
|
||||||
|
user (ForeignKey): The user associated with the promo code, if any.
|
||||||
|
|
||||||
|
Methods:
|
||||||
|
save(**kwargs): Ensures only one type of discount (amount or percent) is defined.
|
||||||
|
__str__(): Returns the promo code identifier as its string representation.
|
||||||
|
use(order): Applies the promo code to the given order and calculates final price.
|
||||||
|
|
||||||
|
Meta:
|
||||||
|
verbose_name: Display name for the promo code model.
|
||||||
|
verbose_name_plural: Plural display name for the promo code model.
|
||||||
|
"""
|
||||||
|
|
||||||
is_publicly_visible = False
|
is_publicly_visible = False
|
||||||
|
|
||||||
code: str = CharField( # type: ignore
|
code: str = CharField( # type: ignore
|
||||||
|
|
@ -848,9 +1257,7 @@ class PromoCode(ExportModelOperationsMixin("promocode"), NiceModel):
|
||||||
self.discount_amount is None and self.discount_percent is None
|
self.discount_amount is None and self.discount_percent is None
|
||||||
):
|
):
|
||||||
raise ValidationError(
|
raise ValidationError(
|
||||||
_(
|
_("only one type of discount should be defined (amount or percent), but not both or neither.")
|
||||||
"only one type of discount should be defined (amount or percent), but not both or neither."
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
super().save(**kwargs)
|
super().save(**kwargs)
|
||||||
|
|
||||||
|
|
@ -871,15 +1278,11 @@ class PromoCode(ExportModelOperationsMixin("promocode"), NiceModel):
|
||||||
|
|
||||||
if self.discount_type == "percent":
|
if self.discount_type == "percent":
|
||||||
amount -= round(amount * (self.discount_percent / 100), 2)
|
amount -= round(amount * (self.discount_percent / 100), 2)
|
||||||
order.attributes.update(
|
order.attributes.update({"promocode": str(self.uuid), "final_price": amount})
|
||||||
{"promocode": str(self.uuid), "final_price": amount}
|
|
||||||
)
|
|
||||||
order.save()
|
order.save()
|
||||||
elif self.discount_type == "amount":
|
elif self.discount_type == "amount":
|
||||||
amount -= round(float(self.discount_amount), 2)
|
amount -= round(float(self.discount_amount), 2)
|
||||||
order.attributes.update(
|
order.attributes.update({"promocode": str(self.uuid), "final_price": amount})
|
||||||
{"promocode": str(self.uuid), "final_price": amount}
|
|
||||||
)
|
|
||||||
order.save()
|
order.save()
|
||||||
else:
|
else:
|
||||||
raise ValueError(_(f"invalid discount type for promocode {self.uuid}"))
|
raise ValueError(_(f"invalid discount type for promocode {self.uuid}"))
|
||||||
|
|
@ -890,6 +1293,26 @@ class PromoCode(ExportModelOperationsMixin("promocode"), NiceModel):
|
||||||
|
|
||||||
|
|
||||||
class Order(ExportModelOperationsMixin("order"), NiceModel):
|
class Order(ExportModelOperationsMixin("order"), NiceModel):
|
||||||
|
"""
|
||||||
|
Represents an order placed by a user.
|
||||||
|
|
||||||
|
This class models an order within the application, including its various attributes such as billing
|
||||||
|
and shipping information, status, associated user, notifications, and related operations.
|
||||||
|
Orders can have associated products, promotions can be applied, addresses set, and shipping or billing
|
||||||
|
details updated. Equally, functionality supports managing the products in the order lifecycle.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
billing_address (Address): The billing address used for the order.
|
||||||
|
promo_code (PromoCode): An optional promo code applied to the order.
|
||||||
|
shipping_address (Address): The shipping address used for the order.
|
||||||
|
status (str): The current status of the order (e.g., PENDING, COMPLETED).
|
||||||
|
notifications (dict): JSON structure dictating notifications for the user.
|
||||||
|
attributes (dict): JSON representation of additional order-specific attributes.
|
||||||
|
user (User): The user who placed the order.
|
||||||
|
buy_time (datetime): Timestamp when the order was finalized.
|
||||||
|
human_readable_id (str): A unique human-readable identifier for the order.
|
||||||
|
"""
|
||||||
|
|
||||||
is_publicly_visible = False
|
is_publicly_visible = False
|
||||||
|
|
||||||
billing_address: Address = ForeignKey( # type: ignore
|
billing_address: Address = ForeignKey( # type: ignore
|
||||||
|
|
@ -987,8 +1410,7 @@ class Order(ExportModelOperationsMixin("order"), NiceModel):
|
||||||
sum(
|
sum(
|
||||||
(
|
(
|
||||||
order_product.buy_price * order_product.quantity
|
order_product.buy_price * order_product.quantity
|
||||||
if order_product.status not in FAILED_STATUSES
|
if order_product.status not in FAILED_STATUSES and order_product.buy_price is not None
|
||||||
and order_product.buy_price is not None
|
|
||||||
else 0.0
|
else 0.0
|
||||||
)
|
)
|
||||||
for order_product in self.order_products.all()
|
for order_product in self.order_products.all()
|
||||||
|
|
@ -1012,9 +1434,7 @@ class Order(ExportModelOperationsMixin("order"), NiceModel):
|
||||||
attributes = []
|
attributes = []
|
||||||
|
|
||||||
if self.status not in ["PENDING", "MOMENTAL"]:
|
if self.status not in ["PENDING", "MOMENTAL"]:
|
||||||
raise ValueError(
|
raise ValueError(_("you cannot add products to an order that is not a pending one"))
|
||||||
_("you cannot add products to an order that is not a pending one")
|
|
||||||
)
|
|
||||||
try:
|
try:
|
||||||
product = Product.objects.get(uuid=product_uuid)
|
product = Product.objects.get(uuid=product_uuid)
|
||||||
|
|
||||||
|
|
@ -1023,9 +1443,7 @@ class Order(ExportModelOperationsMixin("order"), NiceModel):
|
||||||
|
|
||||||
buy_price = product.price
|
buy_price = product.price
|
||||||
|
|
||||||
promotions = Promotion.objects.filter(
|
promotions = Promotion.objects.filter(is_active=True, products__in=[product]).order_by("discount_percent")
|
||||||
is_active=True, products__in=[product]
|
|
||||||
).order_by("discount_percent")
|
|
||||||
|
|
||||||
if promotions.exists():
|
if promotions.exists():
|
||||||
buy_price -= round(product.price * (promotions.first().discount_percent / 100), 2) # type: ignore
|
buy_price -= round(product.price * (promotions.first().discount_percent / 100), 2) # type: ignore
|
||||||
|
|
@ -1038,9 +1456,7 @@ class Order(ExportModelOperationsMixin("order"), NiceModel):
|
||||||
)
|
)
|
||||||
if not is_created and update_quantity:
|
if not is_created and update_quantity:
|
||||||
if product.quantity < order_product.quantity + 1:
|
if product.quantity < order_product.quantity + 1:
|
||||||
raise BadRequest(
|
raise BadRequest(_("you cannot add more products than available in stock"))
|
||||||
_("you cannot add more products than available in stock")
|
|
||||||
)
|
|
||||||
order_product.quantity += 1
|
order_product.quantity += 1
|
||||||
order_product.buy_price = product.price
|
order_product.buy_price = product.price
|
||||||
order_product.save()
|
order_product.save()
|
||||||
|
|
@ -1061,9 +1477,7 @@ class Order(ExportModelOperationsMixin("order"), NiceModel):
|
||||||
attributes = {}
|
attributes = {}
|
||||||
|
|
||||||
if self.status not in ["PENDING", "MOMENTAL"]:
|
if self.status not in ["PENDING", "MOMENTAL"]:
|
||||||
raise ValueError(
|
raise ValueError(_("you cannot remove products from an order that is not a pending one"))
|
||||||
_("you cannot remove products from an order that is not a pending one")
|
|
||||||
)
|
|
||||||
try:
|
try:
|
||||||
product = Product.objects.get(uuid=product_uuid)
|
product = Product.objects.get(uuid=product_uuid)
|
||||||
order_product = self.order_products.get(product=product, order=self)
|
order_product = self.order_products.get(product=product, order=self)
|
||||||
|
|
@ -1082,16 +1496,12 @@ class Order(ExportModelOperationsMixin("order"), NiceModel):
|
||||||
raise Http404(_(f"{name} does not exist: {product_uuid}"))
|
raise Http404(_(f"{name} does not exist: {product_uuid}"))
|
||||||
except OrderProduct.DoesNotExist:
|
except OrderProduct.DoesNotExist:
|
||||||
name = "OrderProduct"
|
name = "OrderProduct"
|
||||||
query = (
|
query = f"product: {product_uuid}, order: {self.uuid}, attributes: {attributes}"
|
||||||
f"product: {product_uuid}, order: {self.uuid}, attributes: {attributes}"
|
|
||||||
)
|
|
||||||
raise Http404(_(f"{name} does not exist with query <{query}>"))
|
raise Http404(_(f"{name} does not exist with query <{query}>"))
|
||||||
|
|
||||||
def remove_all_products(self):
|
def remove_all_products(self):
|
||||||
if self.status not in ["PENDING", "MOMENTAL"]:
|
if self.status not in ["PENDING", "MOMENTAL"]:
|
||||||
raise ValueError(
|
raise ValueError(_("you cannot remove products from an order that is not a pending one"))
|
||||||
_("you cannot remove products from an order that is not a pending one")
|
|
||||||
)
|
|
||||||
for order_product in self.order_products.all():
|
for order_product in self.order_products.all():
|
||||||
self.order_products.remove(order_product)
|
self.order_products.remove(order_product)
|
||||||
order_product.delete()
|
order_product.delete()
|
||||||
|
|
@ -1099,9 +1509,7 @@ class Order(ExportModelOperationsMixin("order"), NiceModel):
|
||||||
|
|
||||||
def remove_products_of_a_kind(self, product_uuid: str):
|
def remove_products_of_a_kind(self, product_uuid: str):
|
||||||
if self.status not in ["PENDING", "MOMENTAL"]:
|
if self.status not in ["PENDING", "MOMENTAL"]:
|
||||||
raise ValueError(
|
raise ValueError(_("you cannot remove products from an order that is not a pending one"))
|
||||||
_("you cannot remove products from an order that is not a pending one")
|
|
||||||
)
|
|
||||||
try:
|
try:
|
||||||
product = Product.objects.get(uuid=product_uuid)
|
product = Product.objects.get(uuid=product_uuid)
|
||||||
order_product = self.order_products.get(product=product, order=self)
|
order_product = self.order_products.get(product=product, order=self)
|
||||||
|
|
@ -1114,10 +1522,7 @@ class Order(ExportModelOperationsMixin("order"), NiceModel):
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def is_whole_digital(self):
|
def is_whole_digital(self):
|
||||||
return (
|
return self.order_products.count() == self.order_products.filter(product__is_digital=True).count()
|
||||||
self.order_products.count()
|
|
||||||
== self.order_products.filter(product__is_digital=True).count()
|
|
||||||
)
|
|
||||||
|
|
||||||
def apply_promocode(self, promocode_uuid: str):
|
def apply_promocode(self, promocode_uuid: str):
|
||||||
try:
|
try:
|
||||||
|
|
@ -1132,11 +1537,7 @@ class Order(ExportModelOperationsMixin("order"), NiceModel):
|
||||||
if self.is_whole_digital:
|
if self.is_whole_digital:
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
raise ValueError(
|
raise ValueError(_("you can only buy physical products with shipping address specified"))
|
||||||
_(
|
|
||||||
"you can only buy physical products with shipping address specified"
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
if billing_address_uuid and not shipping_address_uuid:
|
if billing_address_uuid and not shipping_address_uuid:
|
||||||
shipping_address = Address.objects.get(uuid=billing_address_uuid)
|
shipping_address = Address.objects.get(uuid=billing_address_uuid)
|
||||||
|
|
@ -1166,13 +1567,9 @@ class Order(ExportModelOperationsMixin("order"), NiceModel):
|
||||||
shipping_address: str | None = None,
|
shipping_address: str | None = None,
|
||||||
) -> Self | Transaction | None:
|
) -> Self | Transaction | None:
|
||||||
if config.DISABLED_COMMERCE:
|
if config.DISABLED_COMMERCE:
|
||||||
raise DisabledCommerceError(
|
raise DisabledCommerceError(_("you can not buy at this moment, please try again in a few minutes"))
|
||||||
_("you can not buy at this moment, please try again in a few minutes")
|
|
||||||
)
|
|
||||||
|
|
||||||
if (not force_balance and not force_payment) or (
|
if (not force_balance and not force_payment) or (force_balance and force_payment):
|
||||||
force_balance and force_payment
|
|
||||||
):
|
|
||||||
raise ValueError(_("invalid force value"))
|
raise ValueError(_("invalid force value"))
|
||||||
|
|
||||||
self.apply_addresses(billing_address, shipping_address)
|
self.apply_addresses(billing_address, shipping_address)
|
||||||
|
|
@ -1188,16 +1585,12 @@ class Order(ExportModelOperationsMixin("order"), NiceModel):
|
||||||
if force_payment:
|
if force_payment:
|
||||||
force = "payment"
|
force = "payment"
|
||||||
|
|
||||||
amount = (
|
amount = self.apply_promocode(promocode_uuid) if promocode_uuid else self.total_price
|
||||||
self.apply_promocode(promocode_uuid) if promocode_uuid else self.total_price
|
|
||||||
)
|
|
||||||
|
|
||||||
match force:
|
match force:
|
||||||
case "balance":
|
case "balance":
|
||||||
if self.user.payments_balance.amount < amount: # type: ignore
|
if self.user.payments_balance.amount < amount: # type: ignore
|
||||||
raise NotEnoughMoneyError(
|
raise NotEnoughMoneyError(_("insufficient funds to complete the order"))
|
||||||
_("insufficient funds to complete the order")
|
|
||||||
)
|
|
||||||
self.status = "CREATED"
|
self.status = "CREATED"
|
||||||
self.buy_time = timezone.now()
|
self.buy_time = timezone.now()
|
||||||
self.order_products.all().update(status="DELIVERING")
|
self.order_products.all().update(status="DELIVERING")
|
||||||
|
|
@ -1215,13 +1608,9 @@ class Order(ExportModelOperationsMixin("order"), NiceModel):
|
||||||
|
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def buy_without_registration(
|
def buy_without_registration(self, products: list, promocode_uuid: str, **kwargs) -> Transaction | None:
|
||||||
self, products: list, promocode_uuid: str, **kwargs
|
|
||||||
) -> Transaction | None:
|
|
||||||
if config.DISABLED_COMMERCE:
|
if config.DISABLED_COMMERCE:
|
||||||
raise DisabledCommerceError(
|
raise DisabledCommerceError(_("you can not buy at this moment, please try again in a few minutes"))
|
||||||
_("you can not buy at this moment, please try again in a few minutes")
|
|
||||||
)
|
|
||||||
|
|
||||||
if len(products) < 1:
|
if len(products) < 1:
|
||||||
raise ValueError(_("you cannot purchase an empty order!"))
|
raise ValueError(_("you cannot purchase an empty order!"))
|
||||||
|
|
@ -1242,25 +1631,17 @@ class Order(ExportModelOperationsMixin("order"), NiceModel):
|
||||||
available_payment_methods = cache.get("payment_methods").get("payment_methods")
|
available_payment_methods = cache.get("payment_methods").get("payment_methods")
|
||||||
|
|
||||||
if payment_method not in available_payment_methods:
|
if payment_method not in available_payment_methods:
|
||||||
raise ValueError(
|
raise ValueError(_(f"invalid payment method: {payment_method} from {available_payment_methods}"))
|
||||||
_(
|
|
||||||
f"invalid payment method: {payment_method} from {available_payment_methods}"
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
billing_customer_address_uuid = kwargs.get("billing_customer_address")
|
billing_customer_address_uuid = kwargs.get("billing_customer_address")
|
||||||
shipping_customer_address_uuid = kwargs.get("shipping_customer_address")
|
shipping_customer_address_uuid = kwargs.get("shipping_customer_address")
|
||||||
|
|
||||||
self.apply_addresses(
|
self.apply_addresses(billing_customer_address_uuid, shipping_customer_address_uuid)
|
||||||
billing_customer_address_uuid, shipping_customer_address_uuid
|
|
||||||
)
|
|
||||||
|
|
||||||
for product_uuid in products:
|
for product_uuid in products:
|
||||||
self.add_product(product_uuid)
|
self.add_product(product_uuid)
|
||||||
|
|
||||||
amount = (
|
amount = self.apply_promocode(promocode_uuid) if promocode_uuid else self.total_price
|
||||||
self.apply_promocode(promocode_uuid) if promocode_uuid else self.total_price
|
|
||||||
)
|
|
||||||
|
|
||||||
self.status = "CREATED"
|
self.status = "CREATED"
|
||||||
|
|
||||||
|
|
@ -1321,6 +1702,29 @@ class Order(ExportModelOperationsMixin("order"), NiceModel):
|
||||||
|
|
||||||
|
|
||||||
class OrderProduct(ExportModelOperationsMixin("order_product"), NiceModel):
|
class OrderProduct(ExportModelOperationsMixin("order_product"), NiceModel):
|
||||||
|
"""
|
||||||
|
Represents a product associated with an order.
|
||||||
|
|
||||||
|
The OrderProduct model maintains information about a product that is part of an order,
|
||||||
|
including details such as purchase price, quantity, product attributes, and status. It
|
||||||
|
manages notifications for the user and administrators and handles operations such as
|
||||||
|
returning the product balance or adding feedback. This model also provides methods and
|
||||||
|
properties that support business logic, such as calculating the total price or generating
|
||||||
|
a download URL for digital products. The model integrates with the Order and Product models
|
||||||
|
and stores a reference to them.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
is_publicly_visible (bool): Indicates whether this model is visible publicly.
|
||||||
|
buy_price (float): The price paid by the customer for this product at purchase time.
|
||||||
|
comments (str): Internal comments entered by admins regarding this ordered product.
|
||||||
|
notifications (dict): JSON structure containing notifications relevant to the product.
|
||||||
|
attributes (dict): JSON representation of the product's attributes as part of the order.
|
||||||
|
order (Order): Reference to the parent order that contains this product.
|
||||||
|
product (Product): Reference to the specific product associated with the order line.
|
||||||
|
quantity (int): Represents the quantity of this product ordered.
|
||||||
|
status (str): The current status of the product in the order.
|
||||||
|
"""
|
||||||
|
|
||||||
is_publicly_visible = False
|
is_publicly_visible = False
|
||||||
|
|
||||||
buy_price: float = FloatField( # type: ignore
|
buy_price: float = FloatField( # type: ignore
|
||||||
|
|
@ -1405,9 +1809,7 @@ class OrderProduct(ExportModelOperationsMixin("order_product"), NiceModel):
|
||||||
"errors": [
|
"errors": [
|
||||||
{
|
{
|
||||||
"detail": (
|
"detail": (
|
||||||
error
|
error if error else f"Something went wrong with {self.uuid} for some reason..."
|
||||||
if error
|
|
||||||
else f"Something went wrong with {self.uuid} for some reason..."
|
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|
@ -1432,9 +1834,7 @@ class OrderProduct(ExportModelOperationsMixin("order_product"), NiceModel):
|
||||||
return self.download.url
|
return self.download.url
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
def do_feedback(
|
def do_feedback(self, rating: int = 10, comment: str = "", action: str = "add") -> Optional["Feedback"]:
|
||||||
self, rating: int = 10, comment: str = "", action: str = "add"
|
|
||||||
) -> Optional["Feedback"]:
|
|
||||||
if action not in ["add", "remove"]:
|
if action not in ["add", "remove"]:
|
||||||
raise ValueError(_(f"wrong action specified for feedback: {action}"))
|
raise ValueError(_(f"wrong action specified for feedback: {action}"))
|
||||||
if action == "remove" and self.feedback:
|
if action == "remove" and self.feedback:
|
||||||
|
|
@ -1442,17 +1842,37 @@ class OrderProduct(ExportModelOperationsMixin("order_product"), NiceModel):
|
||||||
return None
|
return None
|
||||||
if action == "add" and not self.feedback:
|
if action == "add" and not self.feedback:
|
||||||
if self.order.status not in ["MOMENTAL", "PENDING"]: # type: ignore
|
if self.order.status not in ["MOMENTAL", "PENDING"]: # type: ignore
|
||||||
return Feedback.objects.create(
|
return Feedback.objects.create(rating=rating, comment=comment, order_product=self)
|
||||||
rating=rating, comment=comment, order_product=self
|
|
||||||
)
|
|
||||||
else:
|
else:
|
||||||
raise ValueError(
|
raise ValueError(_("you cannot feedback an order which is not received"))
|
||||||
_("you cannot feedback an order which is not received")
|
|
||||||
)
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
class DigitalAssetDownload(ExportModelOperationsMixin("attribute_group"), NiceModel):
|
class DigitalAssetDownload(ExportModelOperationsMixin("attribute_group"), NiceModel):
|
||||||
|
"""
|
||||||
|
Represents the downloading functionality for digital assets associated
|
||||||
|
with orders.
|
||||||
|
|
||||||
|
The DigitalAssetDownload class provides the ability to manage and access
|
||||||
|
downloads related to order products. It maintains information about the
|
||||||
|
associated order product, the number of downloads, and whether the asset
|
||||||
|
is publicly visible. It includes a method to generate a URL for downloading
|
||||||
|
the asset when the associated order is in a completed status.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
is_publicly_visible (bool): Indicates whether the digital asset is
|
||||||
|
publicly visible. Always set to False for this class.
|
||||||
|
order_product (OneToOneField): Reference to the associated order product.
|
||||||
|
It has a one-to-one relationship with the OrderProduct model, and
|
||||||
|
deleting the OrderProduct will delete the associated download.
|
||||||
|
num_downloads (int): Indicates the number of times the digital asset
|
||||||
|
has been downloaded.
|
||||||
|
|
||||||
|
Methods:
|
||||||
|
url: Property to generate the download URL for the digital asset
|
||||||
|
if the associated order is in a finished status.
|
||||||
|
"""
|
||||||
|
|
||||||
is_publicly_visible = False
|
is_publicly_visible = False
|
||||||
|
|
||||||
order_product: OneToOneField = OneToOneField(to=OrderProduct, on_delete=CASCADE, related_name="download") # type: ignore
|
order_product: OneToOneField = OneToOneField(to=OrderProduct, on_delete=CASCADE, related_name="download") # type: ignore
|
||||||
|
|
@ -1468,14 +1888,31 @@ class DigitalAssetDownload(ExportModelOperationsMixin("attribute_group"), NiceMo
|
||||||
@property
|
@property
|
||||||
def url(self):
|
def url(self):
|
||||||
if self.order_product.status != "FINISHED":
|
if self.order_product.status != "FINISHED":
|
||||||
raise ValueError(
|
raise ValueError(_("you can not download a digital asset for a non-finished order"))
|
||||||
_("you can not download a digital asset for a non-finished order")
|
|
||||||
)
|
|
||||||
|
|
||||||
return f"https://api.{config.BASE_DOMAIN}/download/{urlsafe_base64_encode(force_bytes(self.order_product.uuid))}"
|
return (
|
||||||
|
f"https://api.{config.BASE_DOMAIN}/download/{urlsafe_base64_encode(force_bytes(self.order_product.uuid))}"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class Feedback(ExportModelOperationsMixin("feedback"), NiceModel):
|
class Feedback(ExportModelOperationsMixin("feedback"), NiceModel):
|
||||||
|
"""
|
||||||
|
Manages user feedback for products.
|
||||||
|
|
||||||
|
This class is designed to capture and store user feedback for specific products
|
||||||
|
that they have purchased. It contains attributes to store user comments,
|
||||||
|
a reference to the related product in the order, and a user-assigned rating. The
|
||||||
|
class utilizes database fields to effectively model and manage feedback data.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
is_publicly_visible (bool): Indicates whether the feedback is visible to the public.
|
||||||
|
comment (str): User-provided comments about their experience with the product.
|
||||||
|
order_product (OrderProduct): Reference to the specific product in an order that this
|
||||||
|
feedback is about.
|
||||||
|
rating (float): User-assigned rating for the product, validated to be within the range
|
||||||
|
of 0 to 10.
|
||||||
|
"""
|
||||||
|
|
||||||
is_publicly_visible = True
|
is_publicly_visible = True
|
||||||
|
|
||||||
comment: str = TextField( # type: ignore
|
comment: str = TextField( # type: ignore
|
||||||
|
|
@ -1489,9 +1926,7 @@ class Feedback(ExportModelOperationsMixin("feedback"), NiceModel):
|
||||||
on_delete=CASCADE,
|
on_delete=CASCADE,
|
||||||
blank=False,
|
blank=False,
|
||||||
null=False,
|
null=False,
|
||||||
help_text=_(
|
help_text=_("references the specific product in an order that this feedback is about"),
|
||||||
"references the specific product in an order that this feedback is about"
|
|
||||||
),
|
|
||||||
verbose_name=_("related order product"),
|
verbose_name=_("related order product"),
|
||||||
)
|
)
|
||||||
rating: float = FloatField( # type: ignore
|
rating: float = FloatField( # type: ignore
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
import logging
|
import logging
|
||||||
from collections.abc import Collection
|
|
||||||
from contextlib import suppress
|
from contextlib import suppress
|
||||||
from typing import Any
|
|
||||||
|
|
||||||
from django.contrib.auth.models import AnonymousUser
|
from django.contrib.auth.models import AnonymousUser
|
||||||
from django.core.cache import cache
|
from django.core.cache import cache
|
||||||
|
|
@ -33,7 +31,7 @@ from core.serializers.simple import CategorySimpleSerializer, ProductSimpleSeria
|
||||||
from core.serializers.utility import AddressSerializer
|
from core.serializers.utility import AddressSerializer
|
||||||
from vibes_auth.models import User
|
from vibes_auth.models import User
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger("evibes")
|
||||||
|
|
||||||
|
|
||||||
class AttributeGroupDetailSerializer(ModelSerializer):
|
class AttributeGroupDetailSerializer(ModelSerializer):
|
||||||
|
|
@ -115,21 +113,14 @@ class CategoryDetailSerializer(ModelSerializer):
|
||||||
|
|
||||||
return filterable_results
|
return filterable_results
|
||||||
|
|
||||||
def get_children(self, obj) -> Collection[Any]:
|
def get_children(self, obj) -> list:
|
||||||
request = self.context.get("request")
|
request = self.context.get("request")
|
||||||
if request is not None and request.user.has_perm("view_category"):
|
if request is not None and request.user.has_perm("view_category"):
|
||||||
children = obj.children.all()
|
children = obj.children.all()
|
||||||
else:
|
else:
|
||||||
children = obj.children.filter(is_active=True)
|
children = obj.children.filter(is_active=True)
|
||||||
|
|
||||||
if obj.children.exists():
|
return CategoryDetailSerializer(children, many=True, context=self.context).data if obj.children.exists() else []
|
||||||
return (
|
|
||||||
CategoryDetailSerializer(children, many=True, context=self.context).data
|
|
||||||
if obj.children.exists()
|
|
||||||
else []
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
return []
|
|
||||||
|
|
||||||
|
|
||||||
class BrandDetailSerializer(ModelSerializer):
|
class BrandDetailSerializer(ModelSerializer):
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
from collections.abc import Collection
|
|
||||||
from contextlib import suppress
|
from contextlib import suppress
|
||||||
|
|
||||||
from rest_framework.fields import JSONField, SerializerMethodField
|
from rest_framework.fields import JSONField, SerializerMethodField
|
||||||
|
|
@ -59,21 +58,14 @@ class CategorySimpleSerializer(ModelSerializer):
|
||||||
return obj.image.url
|
return obj.image.url
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def get_children(self, obj) -> Collection:
|
def get_children(self, obj) -> list:
|
||||||
request = self.context.get("request")
|
request = self.context.get("request")
|
||||||
if request is not None and request.user.has_perm("view_category"):
|
if request is not None and request.user.has_perm("view_category"):
|
||||||
children = obj.children.all()
|
children = obj.children.all()
|
||||||
else:
|
else:
|
||||||
children = obj.children.filter(is_active=True)
|
children = obj.children.filter(is_active=True)
|
||||||
|
|
||||||
if obj.children.exists():
|
return CategorySimpleSerializer(children, many=True, context=self.context).data if obj.children.exists() else []
|
||||||
return (
|
|
||||||
CategorySimpleSerializer(children, many=True, context=self.context).data
|
|
||||||
if obj.children.exists()
|
|
||||||
else []
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
return []
|
|
||||||
|
|
||||||
|
|
||||||
class BrandSimpleSerializer(ModelSerializer):
|
class BrandSimpleSerializer(ModelSerializer):
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ from core.utils.emailing import send_order_created_email, send_order_finished_em
|
||||||
from evibes.utils.misc import create_object
|
from evibes.utils.misc import create_object
|
||||||
from vibes_auth.models import User
|
from vibes_auth.models import User
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger("evibes")
|
||||||
|
|
||||||
|
|
||||||
@receiver(post_save, sender=User)
|
@receiver(post_save, sender=User)
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ from django.utils.crypto import get_random_string
|
||||||
|
|
||||||
from evibes.settings import DEBUG, EXPOSABLE_KEYS, LANGUAGE_CODE
|
from evibes.settings import DEBUG, EXPOSABLE_KEYS, LANGUAGE_CODE
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger("evibes")
|
||||||
|
|
||||||
|
|
||||||
def get_random_code() -> str:
|
def get_random_code() -> str:
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ from django.utils.translation import gettext_lazy as _
|
||||||
from evibes.settings import UNSAFE_CACHE_KEYS
|
from evibes.settings import UNSAFE_CACHE_KEYS
|
||||||
from vibes_auth.models import User
|
from vibes_auth.models import User
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger("evibes")
|
||||||
|
|
||||||
|
|
||||||
def is_safe_cache_key(key: str):
|
def is_safe_cache_key(key: str):
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ from django.utils.translation import gettext_lazy as _
|
||||||
from django_extensions.db.fields import AutoSlugField
|
from django_extensions.db.fields import AutoSlugField
|
||||||
from slugify import slugify
|
from slugify import slugify
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger("evibes")
|
||||||
|
|
||||||
|
|
||||||
def list_to_queryset(model: Model, data: list):
|
def list_to_queryset(model: Model, data: list):
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ def contact_us_email(contact_info):
|
||||||
"config": config,
|
"config": config,
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
to=[config.EMAIL_HOST_USER],
|
to=[config.EMAIL_FROM],
|
||||||
from_email=f"{config.PROJECT_NAME} <{config.EMAIL_FROM}>",
|
from_email=f"{config.PROJECT_NAME} <{config.EMAIL_FROM}>",
|
||||||
connection=connection,
|
connection=connection,
|
||||||
)
|
)
|
||||||
|
|
|
||||||
241
core/views.py
241
core/views.py
|
|
@ -53,23 +53,75 @@ from payments.serializers import TransactionProcessSerializer
|
||||||
|
|
||||||
|
|
||||||
def sitemap_index(request, *args, **kwargs):
|
def sitemap_index(request, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
Handles the request for the sitemap index and returns an XML response. It ensures the response includes
|
||||||
|
the appropriate content type header for XML.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
request: The HTTP request object.
|
||||||
|
*args: Additional positional arguments passed to the view.
|
||||||
|
**kwargs: Additional keyword arguments passed to the view.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
A response object containing the sitemap index in XML format, with the proper content type set as
|
||||||
|
"application/xml; charset=utf-8".
|
||||||
|
"""
|
||||||
response = _sitemap_index_view(request, *args, **kwargs)
|
response = _sitemap_index_view(request, *args, **kwargs)
|
||||||
response["Content-Type"] = "application/xml; charset=utf-8"
|
response["Content-Type"] = "application/xml; charset=utf-8"
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
|
||||||
def sitemap_detail(request, *args, **kwargs):
|
def sitemap_detail(request, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
Handles the detailed view response for a sitemap. This function processes
|
||||||
|
the request, fetches the appropriate sitemap detail response, and sets the
|
||||||
|
Content-Type header for XML responses.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
request: An HTTP request object containing request metadata, such as
|
||||||
|
headers and HTTP method.
|
||||||
|
*args: Additional positional arguments provided dynamically to the
|
||||||
|
underlying sitemap detail view function.
|
||||||
|
**kwargs: Additional keyword arguments provided dynamically to the
|
||||||
|
underlying sitemap detail view function.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
HttpResponse: A response object with content representing the requested
|
||||||
|
sitemap details. The Content-Type header is explicitly set to
|
||||||
|
"application/xml; charset=utf-8".
|
||||||
|
"""
|
||||||
response = _sitemap_detail_view(request, *args, **kwargs)
|
response = _sitemap_detail_view(request, *args, **kwargs)
|
||||||
response["Content-Type"] = "application/xml; charset=utf-8"
|
response["Content-Type"] = "application/xml; charset=utf-8"
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
|
||||||
class CustomGraphQLView(FileUploadGraphQLView):
|
class CustomGraphQLView(FileUploadGraphQLView):
|
||||||
|
"""
|
||||||
|
A custom GraphQL view class that extends the functionality of FileUploadGraphQLView.
|
||||||
|
|
||||||
|
This class serves as a customization extension of FileUploadGraphQLView that allows modification
|
||||||
|
or enhancement of specific behaviors, particularly the context handling for GraphQL requests.
|
||||||
|
|
||||||
|
Attributes
|
||||||
|
----------
|
||||||
|
None
|
||||||
|
"""
|
||||||
|
|
||||||
def get_context(self, request):
|
def get_context(self, request):
|
||||||
return request
|
return request
|
||||||
|
|
||||||
|
|
||||||
class CustomSwaggerView(SpectacularSwaggerView):
|
class CustomSwaggerView(SpectacularSwaggerView):
|
||||||
|
"""
|
||||||
|
CustomSwaggerView is a subclass of SpectacularSwaggerView.
|
||||||
|
|
||||||
|
This class overrides the `get_context_data` method to
|
||||||
|
add extra context to the response. It modifies the context by
|
||||||
|
including the absolute URI of the current request as the `script_url`.
|
||||||
|
This can be useful in scenarios where the script or reference
|
||||||
|
URL needs to be dynamically generated and included in the context.
|
||||||
|
"""
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
# noinspection PyUnresolvedReferences
|
# noinspection PyUnresolvedReferences
|
||||||
context = super().get_context_data(**kwargs)
|
context = super().get_context_data(**kwargs)
|
||||||
|
|
@ -78,6 +130,16 @@ class CustomSwaggerView(SpectacularSwaggerView):
|
||||||
|
|
||||||
|
|
||||||
class CustomRedocView(SpectacularRedocView):
|
class CustomRedocView(SpectacularRedocView):
|
||||||
|
"""
|
||||||
|
CustomRedocView provides a customized version of the SpectacularRedocView.
|
||||||
|
|
||||||
|
This class extends the SpectacularRedocView to include additional
|
||||||
|
functionality, such as dynamically setting the `script_url` in the
|
||||||
|
context data. It is designed to be used where customized behavior
|
||||||
|
for rendering ReDoc UI is required, specifically adapting the script
|
||||||
|
URL for the current request environment.
|
||||||
|
"""
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
# noinspection PyUnresolvedReferences
|
# noinspection PyUnresolvedReferences
|
||||||
context = super().get_context_data(**kwargs)
|
context = super().get_context_data(**kwargs)
|
||||||
|
|
@ -87,6 +149,25 @@ class CustomRedocView(SpectacularRedocView):
|
||||||
|
|
||||||
@extend_schema_view(**LANGUAGE_SCHEMA)
|
@extend_schema_view(**LANGUAGE_SCHEMA)
|
||||||
class SupportedLanguagesView(APIView):
|
class SupportedLanguagesView(APIView):
|
||||||
|
"""
|
||||||
|
Handles retrieving the list of supported languages.
|
||||||
|
|
||||||
|
This class provides an endpoint to return available languages information.
|
||||||
|
It is configured with relevant serializers, permission classes, and renderers
|
||||||
|
for flexibility in response formats and access permissions. The endpoint
|
||||||
|
supports retrieving the list of languages with their respective codes, names,
|
||||||
|
and flags.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
serializer_class (Serializer): Serializer used for formatting the response data.
|
||||||
|
permission_classes (list): Permissions applied to restrict the endpoint access.
|
||||||
|
renderer_classes (list): Renderers available for formatting response output.
|
||||||
|
|
||||||
|
Methods:
|
||||||
|
get(self, request): Retrieves the list of supported languages.
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
serializer_class = LanguageSerializer
|
serializer_class = LanguageSerializer
|
||||||
permission_classes = [
|
permission_classes = [
|
||||||
AllowAny,
|
AllowAny,
|
||||||
|
|
@ -117,6 +198,31 @@ class SupportedLanguagesView(APIView):
|
||||||
|
|
||||||
@extend_schema_view(**PARAMETERS_SCHEMA)
|
@extend_schema_view(**PARAMETERS_SCHEMA)
|
||||||
class WebsiteParametersView(APIView):
|
class WebsiteParametersView(APIView):
|
||||||
|
"""
|
||||||
|
Handles operations related to website parameters.
|
||||||
|
|
||||||
|
This class is a Django Rest Framework view that allows clients to retrieve
|
||||||
|
the parameters of a website. It uses different renderers to present the data
|
||||||
|
in various formats. The view is publicly accessible.
|
||||||
|
|
||||||
|
Attributes
|
||||||
|
----------
|
||||||
|
serializer_class
|
||||||
|
A placeholder for a DRF serializer, it is set to None since no serializer
|
||||||
|
is explicitly used in this view.
|
||||||
|
permission_classes
|
||||||
|
A list indicating the permissions required to access this view. In this case,
|
||||||
|
`AllowAny`, meaning the view is open to everyone.
|
||||||
|
renderer_classes
|
||||||
|
A list of renderers available for this view, supporting CamelCase JSON,
|
||||||
|
multipart forms, XML, and YAML formats.
|
||||||
|
|
||||||
|
Methods
|
||||||
|
-------
|
||||||
|
get(request)
|
||||||
|
Handles HTTP GET requests to fetch website parameters.
|
||||||
|
"""
|
||||||
|
|
||||||
serializer_class = None
|
serializer_class = None
|
||||||
permission_classes = [
|
permission_classes = [
|
||||||
AllowAny,
|
AllowAny,
|
||||||
|
|
@ -134,6 +240,25 @@ class WebsiteParametersView(APIView):
|
||||||
|
|
||||||
@extend_schema_view(**CACHE_SCHEMA)
|
@extend_schema_view(**CACHE_SCHEMA)
|
||||||
class CacheOperatorView(APIView):
|
class CacheOperatorView(APIView):
|
||||||
|
"""
|
||||||
|
View for managing cache operations.
|
||||||
|
|
||||||
|
This class provides an API view for handling cache operations such as setting cache
|
||||||
|
data with a specified key and timeout. It leverages multiple renderer classes for
|
||||||
|
serializing outputs in various formats.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
serializer_class (type): Serializer to validate and deserialize input data.
|
||||||
|
permission_classes (list): List of permission classes to apply access
|
||||||
|
restrictions.
|
||||||
|
renderer_classes (list): List of renderer classes to serialize the output
|
||||||
|
in desired formats.
|
||||||
|
|
||||||
|
Methods:
|
||||||
|
post(request, *args, **kwargs): Handles HTTP POST requests to set cache
|
||||||
|
data based on the provided key and timeout.
|
||||||
|
"""
|
||||||
|
|
||||||
serializer_class = CacheOperatorSerializer
|
serializer_class = CacheOperatorSerializer
|
||||||
permission_classes = [
|
permission_classes = [
|
||||||
AllowAny,
|
AllowAny,
|
||||||
|
|
@ -159,6 +284,23 @@ class CacheOperatorView(APIView):
|
||||||
|
|
||||||
@extend_schema_view(**CONTACT_US_SCHEMA)
|
@extend_schema_view(**CONTACT_US_SCHEMA)
|
||||||
class ContactUsView(APIView):
|
class ContactUsView(APIView):
|
||||||
|
"""
|
||||||
|
Handles contact us form submissions via a REST API.
|
||||||
|
|
||||||
|
This view processes user submissions for a "Contact Us" form. It validates the received
|
||||||
|
data using a serializer, applies rate limiting for IP-based requests, and sends emails
|
||||||
|
asynchronously. The view is prepared to handle multiple response formats using configured
|
||||||
|
renderers.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
serializer_class: The serializer class used to validate incoming data.
|
||||||
|
renderer_classes: A list of renderers to support multiple response formats.
|
||||||
|
|
||||||
|
Methods:
|
||||||
|
post: Handles POST requests to process form submissions.
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
serializer_class = ContactUsSerializer
|
serializer_class = ContactUsSerializer
|
||||||
renderer_classes = [
|
renderer_classes = [
|
||||||
CamelCaseJSONRenderer,
|
CamelCaseJSONRenderer,
|
||||||
|
|
@ -178,6 +320,20 @@ class ContactUsView(APIView):
|
||||||
|
|
||||||
@extend_schema_view(**REQUEST_CURSED_URL_SCHEMA)
|
@extend_schema_view(**REQUEST_CURSED_URL_SCHEMA)
|
||||||
class RequestCursedURLView(APIView):
|
class RequestCursedURLView(APIView):
|
||||||
|
"""
|
||||||
|
Handles requests for processing and validating URLs from incoming POST requests.
|
||||||
|
|
||||||
|
Particularly intended for validating and processing URLs provided by clients. It uses rate-limiting, caching, and
|
||||||
|
various response format renderers to optimize performance and ensure safe handling of external data.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
permission_classes (list): Specifies the permissions required to access this view.
|
||||||
|
renderer_classes (list): Configures the response format renderers available for this view.
|
||||||
|
|
||||||
|
Methods:
|
||||||
|
post: Handles the POST request to validate the URL, fetch its data if valid, and returns the processed response.
|
||||||
|
"""
|
||||||
|
|
||||||
permission_classes = [
|
permission_classes = [
|
||||||
AllowAny,
|
AllowAny,
|
||||||
]
|
]
|
||||||
|
|
@ -217,8 +373,21 @@ class RequestCursedURLView(APIView):
|
||||||
@extend_schema_view(**SEARCH_SCHEMA)
|
@extend_schema_view(**SEARCH_SCHEMA)
|
||||||
class GlobalSearchView(APIView):
|
class GlobalSearchView(APIView):
|
||||||
"""
|
"""
|
||||||
A global search endpoint.
|
Class-based view for handling global search functionality.
|
||||||
It returns a response grouping matched items by index.
|
|
||||||
|
This class is designed to process search queries from HTTP GET requests. It is
|
||||||
|
capable of rendering results in multiple formats including CamelCase JSON,
|
||||||
|
MultiPart, XML, and YAML. The class uses a custom schema for API documentation
|
||||||
|
and processes search queries passed as parameters in the request.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
renderer_classes (list): List of renderer classes used to serialize responses
|
||||||
|
into various formats such as CamelCase JSON, MultiPart, XML, and YAML.
|
||||||
|
|
||||||
|
Methods:
|
||||||
|
get: Handles HTTP GET requests by processing the search query and returning
|
||||||
|
formatted search results.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
renderer_classes = [
|
renderer_classes = [
|
||||||
|
|
@ -234,6 +403,23 @@ class GlobalSearchView(APIView):
|
||||||
|
|
||||||
@extend_schema_view(**BUY_AS_BUSINESS_SCHEMA)
|
@extend_schema_view(**BUY_AS_BUSINESS_SCHEMA)
|
||||||
class BuyAsBusinessView(APIView):
|
class BuyAsBusinessView(APIView):
|
||||||
|
"""
|
||||||
|
View for buying as a business.
|
||||||
|
|
||||||
|
This view handles the logic of creating orders and processing transactions when a
|
||||||
|
business makes a purchase. It ensures that the request data is properly validated
|
||||||
|
and processed, handles the creation of the order, and starts the transaction process.
|
||||||
|
The view also restricts the rate of requests based on the client's IP address
|
||||||
|
to prevent abuse.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
schema (class): Extended schema for API documentation.
|
||||||
|
|
||||||
|
Methods:
|
||||||
|
post(request, *_args, **kwargs):
|
||||||
|
Handles the post request to process a business purchase.
|
||||||
|
"""
|
||||||
|
|
||||||
@ratelimit(key="ip", rate="2/h", block=True)
|
@ratelimit(key="ip", rate="2/h", block=True)
|
||||||
def post(self, request, *_args, **kwargs):
|
def post(self, request, *_args, **kwargs):
|
||||||
serializer = BuyAsBusinessOrderSerializer(data=request.data)
|
serializer = BuyAsBusinessOrderSerializer(data=request.data)
|
||||||
|
|
@ -258,6 +444,25 @@ class BuyAsBusinessView(APIView):
|
||||||
|
|
||||||
|
|
||||||
def download_digital_asset_view(request, *args, **kwargs):
|
def download_digital_asset_view(request, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
Handles the downloading of a digital asset associated with an order. Ensures that users
|
||||||
|
are permitted to download the asset only once. Validates the request, retrieves the file,
|
||||||
|
and serves it as a downloadable response. Returns appropriate error responses for different
|
||||||
|
failure scenarios.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
request: The HTTP request object containing information about the client request.
|
||||||
|
*args: Additional positional arguments.
|
||||||
|
**kwargs: Additional keyword arguments.
|
||||||
|
|
||||||
|
Raises:
|
||||||
|
BadRequest: If the digital asset has already been downloaded.
|
||||||
|
DigitalAssetDownload.DoesNotExist: If the requested digital asset cannot be found.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
A FileResponse containing the digital asset file if the request is valid. Returns
|
||||||
|
a JsonResponse with an error message if an error occurs during the process.
|
||||||
|
"""
|
||||||
try:
|
try:
|
||||||
uuid = force_str(urlsafe_base64_decode(kwargs["encoded_uuid"]))
|
uuid = force_str(urlsafe_base64_decode(kwargs["encoded_uuid"]))
|
||||||
download = DigitalAssetDownload.objects.get(order_product__uuid=uuid)
|
download = DigitalAssetDownload.objects.get(order_product__uuid=uuid)
|
||||||
|
|
@ -295,6 +500,23 @@ def download_digital_asset_view(request, *args, **kwargs):
|
||||||
|
|
||||||
|
|
||||||
def favicon_view(request, *args, **kwargs):
|
def favicon_view(request, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
Handles requests for the favicon of a website. This function attempts to serve the favicon
|
||||||
|
file located in the static directory of the project. If the favicon file is not found,
|
||||||
|
an HTTP 404 error is raised to indicate the resource is unavailable.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
request: The HTTP request object.
|
||||||
|
*args: Additional positional arguments that are ignored in this function.
|
||||||
|
**kwargs: Additional keyword arguments that are ignored in this function.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
FileResponse: A file response containing the favicon image with the content-type
|
||||||
|
"image/x-icon".
|
||||||
|
|
||||||
|
Raises:
|
||||||
|
Http404: Raised if the favicon file is not found.
|
||||||
|
"""
|
||||||
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")
|
||||||
|
|
@ -303,4 +525,19 @@ def favicon_view(request, *args, **kwargs):
|
||||||
|
|
||||||
|
|
||||||
def index(request, *args, **kwargs):
|
def index(request, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
Redirects the request to the admin index page.
|
||||||
|
|
||||||
|
The function handles incoming HTTP requests and redirects them to the Django
|
||||||
|
admin interface index page. It uses Django's `redirect` function for handling
|
||||||
|
the HTTP redirection.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
request: The HttpRequest object representing the incoming request.
|
||||||
|
*args: Additional positional arguments, if any.
|
||||||
|
**kwargs: Additional keyword arguments, if any.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
HttpResponseRedirect: An HTTP response that redirects to the admin index.
|
||||||
|
"""
|
||||||
return redirect("admin:index")
|
return redirect("admin:index")
|
||||||
|
|
|
||||||
418
core/viewsets.py
418
core/viewsets.py
|
|
@ -107,10 +107,31 @@ from core.utils.nominatim import fetch_address_suggestions
|
||||||
from evibes.settings import DEBUG
|
from evibes.settings import DEBUG
|
||||||
from payments.serializers import TransactionProcessSerializer
|
from payments.serializers import TransactionProcessSerializer
|
||||||
|
|
||||||
logger = logging.getLogger("django.request")
|
logger = logging.getLogger("evibes")
|
||||||
|
|
||||||
|
|
||||||
class EvibesViewSet(ModelViewSet):
|
class EvibesViewSet(ModelViewSet):
|
||||||
|
"""
|
||||||
|
Defines a viewset for managing Evibes-related operations.
|
||||||
|
|
||||||
|
The EvibesViewSet class inherits from ModelViewSet and provides functionality
|
||||||
|
for handling actions and operations on Evibes entities. It includes support
|
||||||
|
for dynamic serializer classes based on the current action, customizable
|
||||||
|
permissions, and rendering formats.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
action_serializer_classes: Dictionary mapping action names to their specific
|
||||||
|
serializer classes.
|
||||||
|
additional: Dictionary to hold additional data related to the view.
|
||||||
|
permission_classes: List of permission classes applicable to this viewset.
|
||||||
|
renderer_classes: List of renderer classes supported for response formatting.
|
||||||
|
|
||||||
|
Methods:
|
||||||
|
get_serializer_class(self):
|
||||||
|
Returns the serializer class for the current action or the default
|
||||||
|
serializer class from the parent ModelViewSet.
|
||||||
|
"""
|
||||||
|
|
||||||
action_serializer_classes: dict = {}
|
action_serializer_classes: dict = {}
|
||||||
additional: dict = {}
|
additional: dict = {}
|
||||||
permission_classes = [EvibesPermission]
|
permission_classes = [EvibesPermission]
|
||||||
|
|
@ -122,6 +143,27 @@ class EvibesViewSet(ModelViewSet):
|
||||||
|
|
||||||
@extend_schema_view(**ATTRIBUTE_GROUP_SCHEMA)
|
@extend_schema_view(**ATTRIBUTE_GROUP_SCHEMA)
|
||||||
class AttributeGroupViewSet(EvibesViewSet):
|
class AttributeGroupViewSet(EvibesViewSet):
|
||||||
|
"""
|
||||||
|
Represents a viewset for managing AttributeGroup objects.
|
||||||
|
|
||||||
|
Handles operations related to AttributeGroup, including filtering,
|
||||||
|
serialization, and retrieval of data. This class is part of the
|
||||||
|
application's API layer and provides a standardized way to process
|
||||||
|
requests and responses for AttributeGroup data.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
queryset (QuerySet): QuerySet for retrieving all AttributeGroup objects.
|
||||||
|
filter_backends (list): List of filter backends used to process filters
|
||||||
|
in requests.
|
||||||
|
filterset_fields (list): List of fields on which filtering operations
|
||||||
|
can be performed.
|
||||||
|
serializer_class (Serializer): Default serializer class used for
|
||||||
|
processing AttributeGroup data during non-list view operations.
|
||||||
|
action_serializer_classes (dict): Mapping of view actions to their
|
||||||
|
specific serializer classes, allowing customization of serialization
|
||||||
|
behavior for certain actions.
|
||||||
|
"""
|
||||||
|
|
||||||
queryset = AttributeGroup.objects.all()
|
queryset = AttributeGroup.objects.all()
|
||||||
filter_backends = [DjangoFilterBackend]
|
filter_backends = [DjangoFilterBackend]
|
||||||
filterset_fields = ["is_active"]
|
filterset_fields = ["is_active"]
|
||||||
|
|
@ -133,6 +175,27 @@ class AttributeGroupViewSet(EvibesViewSet):
|
||||||
|
|
||||||
@extend_schema_view(**ATTRIBUTE_SCHEMA)
|
@extend_schema_view(**ATTRIBUTE_SCHEMA)
|
||||||
class AttributeViewSet(EvibesViewSet):
|
class AttributeViewSet(EvibesViewSet):
|
||||||
|
"""
|
||||||
|
Handles operations related to Attribute objects within the application.
|
||||||
|
|
||||||
|
Provides a set of API endpoints to interact with Attribute data. This class
|
||||||
|
manages querying, filtering, and serialization of Attribute objects, allowing
|
||||||
|
dynamic control over the data returned, such as filtering by specific fields
|
||||||
|
or retrieving detailed versus simplified information depending on the request.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
queryset: The base QuerySet used to represent the set of Attribute
|
||||||
|
objects available to this viewset.
|
||||||
|
filter_backends: Defines the backends used for filtering request data,
|
||||||
|
enabling query flexibility.
|
||||||
|
filterset_fields: A list of model fields that can be filtered via the API.
|
||||||
|
serializer_class: Represents the serializer used by default for
|
||||||
|
serialization and deserialization of Attribute data.
|
||||||
|
action_serializer_classes: A mapping that defines serializers used for
|
||||||
|
specific actions, such as returning less detailed data for a `list`
|
||||||
|
action.
|
||||||
|
"""
|
||||||
|
|
||||||
queryset = Attribute.objects.all()
|
queryset = Attribute.objects.all()
|
||||||
filter_backends = [DjangoFilterBackend]
|
filter_backends = [DjangoFilterBackend]
|
||||||
filterset_fields = ["group", "value_type", "is_active"]
|
filterset_fields = ["group", "value_type", "is_active"]
|
||||||
|
|
@ -144,6 +207,23 @@ class AttributeViewSet(EvibesViewSet):
|
||||||
|
|
||||||
@extend_schema_view(**ATTRIBUTE_VALUE_SCHEMA)
|
@extend_schema_view(**ATTRIBUTE_VALUE_SCHEMA)
|
||||||
class AttributeValueViewSet(EvibesViewSet):
|
class AttributeValueViewSet(EvibesViewSet):
|
||||||
|
"""
|
||||||
|
A viewset for managing AttributeValue objects.
|
||||||
|
|
||||||
|
This viewset provides functionality for listing, retrieving, creating, updating, and deleting
|
||||||
|
AttributeValue objects. It integrates with Django REST Framework's viewset mechanisms and uses
|
||||||
|
appropriate serializers for different actions. Filtering capabilities are provided through the
|
||||||
|
DjangoFilterBackend.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
queryset (QuerySet): The base queryset for AttributeValue objects.
|
||||||
|
filter_backends (list): A list of filtering backends applied to the viewset.
|
||||||
|
filterset_fields (list): Fields of the model that can be used for filtering.
|
||||||
|
serializer_class (Serializer): The default serializer class for the viewset.
|
||||||
|
action_serializer_classes (dict): A dictionary mapping action names to their corresponding
|
||||||
|
serializer classes.
|
||||||
|
"""
|
||||||
|
|
||||||
queryset = AttributeValue.objects.all()
|
queryset = AttributeValue.objects.all()
|
||||||
filter_backends = [DjangoFilterBackend]
|
filter_backends = [DjangoFilterBackend]
|
||||||
filterset_fields = ["attribute", "is_active"]
|
filterset_fields = ["attribute", "is_active"]
|
||||||
|
|
@ -155,6 +235,34 @@ class AttributeValueViewSet(EvibesViewSet):
|
||||||
|
|
||||||
@extend_schema_view(**CATEGORY_SCHEMA)
|
@extend_schema_view(**CATEGORY_SCHEMA)
|
||||||
class CategoryViewSet(EvibesViewSet):
|
class CategoryViewSet(EvibesViewSet):
|
||||||
|
"""
|
||||||
|
Manages views for Category-related operations.
|
||||||
|
|
||||||
|
The CategoryViewSet class is responsible for handling operations related to
|
||||||
|
the Category model in the system. It supports retrieving, filtering, and
|
||||||
|
serializing category data. The viewset also enforces permissions to ensure
|
||||||
|
that only authorized users can access specific data.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
queryset: The base queryset used to retrieve category data, including
|
||||||
|
prefetching related objects such as parent, children, attributes,
|
||||||
|
and tags.
|
||||||
|
filter_backends: A list of backends for applying filters to the category
|
||||||
|
data.
|
||||||
|
filterset_class: The filter class used to define filtering behavior for
|
||||||
|
the category queryset.
|
||||||
|
serializer_class: The default serializer class used for category objects
|
||||||
|
when no specific action serializer is applied.
|
||||||
|
action_serializer_classes: A dictionary mapping specific viewset actions
|
||||||
|
(e.g., "list") to their corresponding serializer classes.
|
||||||
|
|
||||||
|
Methods:
|
||||||
|
get_queryset():
|
||||||
|
Retrieves the queryset for the viewset, applying permission checks
|
||||||
|
and filtering out inactive categories for users without sufficient
|
||||||
|
permissions.
|
||||||
|
"""
|
||||||
|
|
||||||
queryset = Category.objects.all().prefetch_related("parent", "children", "attributes", "tags")
|
queryset = Category.objects.all().prefetch_related("parent", "children", "attributes", "tags")
|
||||||
filter_backends = [DjangoFilterBackend]
|
filter_backends = [DjangoFilterBackend]
|
||||||
filterset_class = CategoryFilter
|
filterset_class = CategoryFilter
|
||||||
|
|
@ -171,6 +279,27 @@ class CategoryViewSet(EvibesViewSet):
|
||||||
|
|
||||||
|
|
||||||
class BrandViewSet(EvibesViewSet):
|
class BrandViewSet(EvibesViewSet):
|
||||||
|
"""
|
||||||
|
Represents a viewset for managing Brand instances.
|
||||||
|
|
||||||
|
This class provides functionality for querying, filtering, and
|
||||||
|
serializing Brand objects. It uses Django's ViewSet framework
|
||||||
|
to simplify the implementation of API endpoints for Brand objects.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
queryset: The base queryset containing all Brand instances.
|
||||||
|
filter_backends: A list of filtering backends to apply to the
|
||||||
|
queryset. The default is [DjangoFilterBackend].
|
||||||
|
filterset_class: The filter class used to define the filtering
|
||||||
|
logic for this viewset. The default is BrandFilter.
|
||||||
|
serializer_class: The default serializer class used for the
|
||||||
|
detailed representation of Brand objects. The default is
|
||||||
|
BrandDetailSerializer.
|
||||||
|
action_serializer_classes: A dictionary mapping specific actions
|
||||||
|
to their corresponding serializer classes. The "list" action
|
||||||
|
uses the BrandSimpleSerializer class.
|
||||||
|
"""
|
||||||
|
|
||||||
queryset = Brand.objects.all()
|
queryset = Brand.objects.all()
|
||||||
filter_backends = [DjangoFilterBackend]
|
filter_backends = [DjangoFilterBackend]
|
||||||
filterset_class = BrandFilter
|
filterset_class = BrandFilter
|
||||||
|
|
@ -182,6 +311,30 @@ class BrandViewSet(EvibesViewSet):
|
||||||
|
|
||||||
@extend_schema_view(**PRODUCT_SCHEMA)
|
@extend_schema_view(**PRODUCT_SCHEMA)
|
||||||
class ProductViewSet(EvibesViewSet):
|
class ProductViewSet(EvibesViewSet):
|
||||||
|
"""
|
||||||
|
Manages operations related to the `Product` model in the system.
|
||||||
|
|
||||||
|
This class provides a viewset for managing products, including their filtering, serialization,
|
||||||
|
and operations on specific instances. It extends from `EvibesViewSet` to utilize common
|
||||||
|
functionality and integrates with Django REST framework for RESTful API operations.
|
||||||
|
Includes methods for retrieving product details, applying permissions, and accessing
|
||||||
|
related feedback of a product.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
queryset: The base queryset to retrieve `Product` objects with prefetch optimization.
|
||||||
|
filter_backends: Specifies the filtering mechanism for the list views.
|
||||||
|
filterset_class: Defines the filter class to be used for filtering products.
|
||||||
|
serializer_class: The default serializer class for product details.
|
||||||
|
action_serializer_classes: Specific serializer mappings for action methods.
|
||||||
|
lookup_field: Field representing the object's lookup value in URLs.
|
||||||
|
lookup_url_kwarg: Field key used to extract the object's lookup value from URL.
|
||||||
|
|
||||||
|
Methods:
|
||||||
|
get_queryset: Retrieves the queryset with user-specific filtering applied.
|
||||||
|
get_object: Fetches a single object based on its identifier, applying permissions.
|
||||||
|
feedbacks: Fetches feedback associated with a specific product.
|
||||||
|
"""
|
||||||
|
|
||||||
queryset = Product.objects.prefetch_related("tags", "attributes", "stocks", "images").all()
|
queryset = Product.objects.prefetch_related("tags", "attributes", "stocks", "images").all()
|
||||||
filter_backends = [DjangoFilterBackend]
|
filter_backends = [DjangoFilterBackend]
|
||||||
filterset_class = ProductFilter
|
filterset_class = ProductFilter
|
||||||
|
|
@ -237,6 +390,26 @@ class ProductViewSet(EvibesViewSet):
|
||||||
|
|
||||||
|
|
||||||
class VendorViewSet(EvibesViewSet):
|
class VendorViewSet(EvibesViewSet):
|
||||||
|
"""
|
||||||
|
Represents a viewset for managing Vendor objects.
|
||||||
|
|
||||||
|
This viewset allows fetching, filtering, and serializing Vendor data.
|
||||||
|
It defines the queryset, filter configurations, and serializer classes
|
||||||
|
used to handle different actions. The purpose of this class is to
|
||||||
|
provide streamlined access to Vendor-related resources through the
|
||||||
|
Django REST framework.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
queryset: A QuerySet containing all Vendor objects.
|
||||||
|
filter_backends: A list containing configured filter backends.
|
||||||
|
filterset_fields: A list of fields that can be used for filtering
|
||||||
|
Vendor records.
|
||||||
|
serializer_class: The default serializer class used for this
|
||||||
|
viewset.
|
||||||
|
action_serializer_classes: A dictionary mapping specific actions
|
||||||
|
(e.g., "list") to custom serializer classes for those actions.
|
||||||
|
"""
|
||||||
|
|
||||||
queryset = Vendor.objects.all()
|
queryset = Vendor.objects.all()
|
||||||
filter_backends = [DjangoFilterBackend]
|
filter_backends = [DjangoFilterBackend]
|
||||||
filterset_fields = ["name", "markup_percent", "is_active"]
|
filterset_fields = ["name", "markup_percent", "is_active"]
|
||||||
|
|
@ -248,6 +421,27 @@ class VendorViewSet(EvibesViewSet):
|
||||||
|
|
||||||
@extend_schema_view(**FEEDBACK_SCHEMA)
|
@extend_schema_view(**FEEDBACK_SCHEMA)
|
||||||
class FeedbackViewSet(EvibesViewSet):
|
class FeedbackViewSet(EvibesViewSet):
|
||||||
|
"""
|
||||||
|
Representation of a view set handling Feedback objects.
|
||||||
|
|
||||||
|
This class manages operations related to Feedback objects, including listing,
|
||||||
|
filtering, and retrieving details. The purpose of this view set is to provide
|
||||||
|
different serializers for different actions and implement permission-based
|
||||||
|
handling of accessible Feedback objects. It extends the base `EvibesViewSet`
|
||||||
|
and makes use of Django's filtering system for querying data.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
queryset: The base queryset for Feedback objects used in this view set.
|
||||||
|
filter_backends: List of filter backends to apply, specifically
|
||||||
|
`DjangoFilterBackend` for this view set.
|
||||||
|
filterset_class: Class specifying the filter set used for querying
|
||||||
|
Feedback objects.
|
||||||
|
serializer_class: Default serializer class used for this view set.
|
||||||
|
action_serializer_classes: A dictionary mapping action names to specific
|
||||||
|
serializer classes. For example, the "list" action uses
|
||||||
|
`FeedbackSimpleSerializer`.
|
||||||
|
"""
|
||||||
|
|
||||||
queryset = Feedback.objects.all()
|
queryset = Feedback.objects.all()
|
||||||
filter_backends = [DjangoFilterBackend]
|
filter_backends = [DjangoFilterBackend]
|
||||||
filterset_class = FeedbackFilter
|
filterset_class = FeedbackFilter
|
||||||
|
|
@ -265,6 +459,52 @@ class FeedbackViewSet(EvibesViewSet):
|
||||||
|
|
||||||
@extend_schema_view(**ORDER_SCHEMA)
|
@extend_schema_view(**ORDER_SCHEMA)
|
||||||
class OrderViewSet(EvibesViewSet):
|
class OrderViewSet(EvibesViewSet):
|
||||||
|
"""
|
||||||
|
ViewSet for managing orders and related operations.
|
||||||
|
|
||||||
|
This class provides functionality to retrieve, modify, and manage order objects.
|
||||||
|
It includes various endpoints for handling order operations such as adding or
|
||||||
|
removing products, performing purchases for registered as well as unregistered
|
||||||
|
users, and retrieving the current authenticated user's pending orders.
|
||||||
|
|
||||||
|
The ViewSet uses multiple serializers based on the specific action being
|
||||||
|
performed and enforces permissions accordingly while interacting with order data.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
lookup_field (str): Field name used for performing object lookup.
|
||||||
|
lookup_url_kwarg (str): URL keyword argument used for object lookup. Defaults
|
||||||
|
to `lookup_field`.
|
||||||
|
queryset (QuerySet): Default queryset for retrieving order objects, with
|
||||||
|
prefetched related order products.
|
||||||
|
filter_backends (list): List of backends applied for filtering the queryset.
|
||||||
|
filterset_class (type): Filtering class applied to the queryset for request-based
|
||||||
|
customizations.
|
||||||
|
serializer_class (type): Default serializer used if no specific serializer is
|
||||||
|
defined for an action.
|
||||||
|
action_serializer_classes (dict): Mapping of actions to their respective serializers.
|
||||||
|
Used to determine the serializer dynamically based on the requested action.
|
||||||
|
additional (dict): Additional settings for specific actions.
|
||||||
|
|
||||||
|
Methods:
|
||||||
|
get_serializer_class: Returns the serializer class based on the specific
|
||||||
|
action being requested.
|
||||||
|
get_queryset: Adjusts the queryset based on the request user's permissions,
|
||||||
|
favoring anonymous or limited query access for unauthenticated users.
|
||||||
|
get_object: Retrieves a specific order object based on the lookup value, either
|
||||||
|
its UUID or a human-readable ID.
|
||||||
|
current: Retrieves the authenticated user's current pending order.
|
||||||
|
buy: Processes an order purchase for an authenticated user with optional parameters
|
||||||
|
such as balance and payment overrides, promocodes, and billing/shipping addresses.
|
||||||
|
buy_unregistered: Processes an order purchase for unauthenticated users with product,
|
||||||
|
customer details, and payment information.
|
||||||
|
add_order_product: Adds a product, with optional attributes, to an order specified by UUID.
|
||||||
|
remove_order_product: Removes a product, with optional attributes, from an order specified
|
||||||
|
by UUID.
|
||||||
|
bulk_add_order_products: Adds multiple products with optional attributes to an order.
|
||||||
|
bulk_remove_order_products: Removes multiple products with optional attributes from
|
||||||
|
an order.
|
||||||
|
"""
|
||||||
|
|
||||||
lookup_field = "lookup_value"
|
lookup_field = "lookup_value"
|
||||||
lookup_url_kwarg = "lookup_value"
|
lookup_url_kwarg = "lookup_value"
|
||||||
queryset = Order.objects.prefetch_related("order_products").all()
|
queryset = Order.objects.prefetch_related("order_products").all()
|
||||||
|
|
@ -435,6 +675,34 @@ class OrderViewSet(EvibesViewSet):
|
||||||
|
|
||||||
@extend_schema_view(**ORDER_PRODUCT_SCHEMA)
|
@extend_schema_view(**ORDER_PRODUCT_SCHEMA)
|
||||||
class OrderProductViewSet(EvibesViewSet):
|
class OrderProductViewSet(EvibesViewSet):
|
||||||
|
"""
|
||||||
|
Provides a viewset for managing OrderProduct entities.
|
||||||
|
|
||||||
|
This viewset enables CRUD operations and custom actions specific to the
|
||||||
|
OrderProduct model. It includes filtering, permission checks, and
|
||||||
|
serializer switching based on the requested action. Additionally, it
|
||||||
|
provides a detailed action for handling feedback on OrderProduct
|
||||||
|
instances.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
queryset (QuerySet): The base queryset for OrderProduct objects.
|
||||||
|
filter_backends (list): Backends responsible for handling filtering
|
||||||
|
mechanisms.
|
||||||
|
filterset_fields (list[str]): Fields available for API filtering.
|
||||||
|
serializer_class (Serializer): Default serializer class for CRUD
|
||||||
|
operations.
|
||||||
|
action_serializer_classes (dict[str, Serializer]): Mapping of
|
||||||
|
specific actions to their corresponding serializer classes.
|
||||||
|
|
||||||
|
Methods:
|
||||||
|
get_queryset: Overrides the default queryset to enforce user
|
||||||
|
permissions.
|
||||||
|
|
||||||
|
Actions:
|
||||||
|
do_feedback: Custom action to add, remove, or manage feedback for
|
||||||
|
an OrderProduct instance.
|
||||||
|
"""
|
||||||
|
|
||||||
queryset = OrderProduct.objects.all()
|
queryset = OrderProduct.objects.all()
|
||||||
filter_backends = [DjangoFilterBackend]
|
filter_backends = [DjangoFilterBackend]
|
||||||
filterset_fields = ["order", "product", "status", "is_active"]
|
filterset_fields = ["order", "product", "status", "is_active"]
|
||||||
|
|
@ -478,6 +746,28 @@ class OrderProductViewSet(EvibesViewSet):
|
||||||
|
|
||||||
|
|
||||||
class ProductImageViewSet(EvibesViewSet):
|
class ProductImageViewSet(EvibesViewSet):
|
||||||
|
"""
|
||||||
|
Manages operations related to Product images in the application.
|
||||||
|
|
||||||
|
This class-based view set provides endpoints to manage and access ProductImage
|
||||||
|
objects. It supports filtering, serialization, and customized serializers for
|
||||||
|
different actions to handle ProductImage data.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
queryset (QuerySet): A Django QuerySet consisting of all ProductImage
|
||||||
|
instances within the system.
|
||||||
|
filter_backends (list): A list of filter backends that determine the
|
||||||
|
filtering behavior on querysets. Set to [DjangoFilterBackend].
|
||||||
|
filterset_fields (list): Fields that can be used for filtering data.
|
||||||
|
Includes "product", "priority", and "is_active".
|
||||||
|
serializer_class (Serializer): The default serializer class used for
|
||||||
|
serializing and deserializing ProductImage data. Set to
|
||||||
|
ProductImageDetailSerializer.
|
||||||
|
action_serializer_classes (dict): A mapping of action names to specific
|
||||||
|
serializer classes. For the "list" action, ProductImageSimpleSerializer
|
||||||
|
is used.
|
||||||
|
"""
|
||||||
|
|
||||||
queryset = ProductImage.objects.all()
|
queryset = ProductImage.objects.all()
|
||||||
filter_backends = [DjangoFilterBackend]
|
filter_backends = [DjangoFilterBackend]
|
||||||
filterset_fields = ["product", "priority", "is_active"]
|
filterset_fields = ["product", "priority", "is_active"]
|
||||||
|
|
@ -488,6 +778,26 @@ class ProductImageViewSet(EvibesViewSet):
|
||||||
|
|
||||||
|
|
||||||
class PromoCodeViewSet(EvibesViewSet):
|
class PromoCodeViewSet(EvibesViewSet):
|
||||||
|
"""
|
||||||
|
Manages the retrieval and handling of PromoCode instances through various
|
||||||
|
API actions.
|
||||||
|
|
||||||
|
This class extends the functionality of the EvibesViewSet to provide a
|
||||||
|
customized view set for PromoCode objects. It includes filtering capabilities,
|
||||||
|
utilizes specific serializers for different actions, and limits data access
|
||||||
|
based on user permissions. The primary purpose is to enable API operations
|
||||||
|
related to PromoCodes while enforcing security and filtering.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
queryset: A queryset of all PromoCode objects in the database.
|
||||||
|
filter_backends: Backend classes responsible for filtering queryset data.
|
||||||
|
filterset_fields: Fields supported for filtering PromoCode data.
|
||||||
|
serializer_class: The default serializer class used for instances when no
|
||||||
|
specific action-based serializer is defined.
|
||||||
|
action_serializer_classes: A dictionary mapping specific actions (like
|
||||||
|
"list") to their corresponding serializer classes.
|
||||||
|
"""
|
||||||
|
|
||||||
queryset = PromoCode.objects.all()
|
queryset = PromoCode.objects.all()
|
||||||
filter_backends = [DjangoFilterBackend]
|
filter_backends = [DjangoFilterBackend]
|
||||||
filterset_fields = ["code", "discount_amount", "discount_percent", "start_time", "end_time", "used_on", "is_active"]
|
filterset_fields = ["code", "discount_amount", "discount_percent", "start_time", "end_time", "used_on", "is_active"]
|
||||||
|
|
@ -507,6 +817,15 @@ class PromoCodeViewSet(EvibesViewSet):
|
||||||
|
|
||||||
|
|
||||||
class PromotionViewSet(EvibesViewSet):
|
class PromotionViewSet(EvibesViewSet):
|
||||||
|
"""
|
||||||
|
Represents a view set for managing promotions.
|
||||||
|
|
||||||
|
This class provides operations to handle retrieval, filtering, and serialization
|
||||||
|
of promotion objects. It leverages Django REST framework capabilities such as
|
||||||
|
queryset management, filter backends, and serializer customization for handling
|
||||||
|
different views or actions efficiently.
|
||||||
|
"""
|
||||||
|
|
||||||
queryset = Promotion.objects.all()
|
queryset = Promotion.objects.all()
|
||||||
filter_backends = [DjangoFilterBackend]
|
filter_backends = [DjangoFilterBackend]
|
||||||
filterset_fields = ["name", "discount_percent", "is_active"]
|
filterset_fields = ["name", "discount_percent", "is_active"]
|
||||||
|
|
@ -517,6 +836,27 @@ class PromotionViewSet(EvibesViewSet):
|
||||||
|
|
||||||
|
|
||||||
class StockViewSet(EvibesViewSet):
|
class StockViewSet(EvibesViewSet):
|
||||||
|
"""
|
||||||
|
Handles operations related to Stock data in the system.
|
||||||
|
|
||||||
|
The StockViewSet class is a viewset that provides methods for retrieving,
|
||||||
|
filtering, and serializing Stock data. It utilizes Django's filter
|
||||||
|
backends to enable filtering based on specified fields and supports
|
||||||
|
custom serializers for different actions.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
queryset (QuerySet): A queryset of all Stock objects.
|
||||||
|
filter_backends (list): A list of filter backends to be applied.
|
||||||
|
filterset_fields (list of str): Fields on which the filtering
|
||||||
|
is permitted. These fields include "vendor", "product", "sku",
|
||||||
|
and "is_active".
|
||||||
|
serializer_class (Serializer): The primary serializer used
|
||||||
|
for Stock detail representation.
|
||||||
|
action_serializer_classes (dict): A dictionary mapping action names
|
||||||
|
to their respective serializers. For the "list" action,
|
||||||
|
StockSimpleSerializer is used.
|
||||||
|
"""
|
||||||
|
|
||||||
queryset = Stock.objects.all()
|
queryset = Stock.objects.all()
|
||||||
filter_backends = [DjangoFilterBackend]
|
filter_backends = [DjangoFilterBackend]
|
||||||
filterset_fields = ["vendor", "product", "sku", "is_active"]
|
filterset_fields = ["vendor", "product", "sku", "is_active"]
|
||||||
|
|
@ -528,6 +868,45 @@ class StockViewSet(EvibesViewSet):
|
||||||
|
|
||||||
@extend_schema_view(**WISHLIST_SCHEMA)
|
@extend_schema_view(**WISHLIST_SCHEMA)
|
||||||
class WishlistViewSet(EvibesViewSet):
|
class WishlistViewSet(EvibesViewSet):
|
||||||
|
"""
|
||||||
|
ViewSet for managing Wishlist operations.
|
||||||
|
|
||||||
|
The WishlistViewSet provides endpoints for interacting with a user's wish list,
|
||||||
|
allowing for the retrieval, modification, and customization of products within
|
||||||
|
the wish list. This ViewSet facilitates functionality such as adding, removing,
|
||||||
|
and bulk actions for wishlist products. Permission checks are integrated to
|
||||||
|
ensure that users can only manage their own wishlists, unless explicit permissions
|
||||||
|
are granted.
|
||||||
|
|
||||||
|
Attributes
|
||||||
|
----------
|
||||||
|
queryset : QuerySet
|
||||||
|
The base queryset for retrieving wishlist objects.
|
||||||
|
filter_backends : list
|
||||||
|
List of backend filters to apply to the queryset.
|
||||||
|
filterset_fields : list
|
||||||
|
Fields for which filtering is allowed in queries.
|
||||||
|
serializer_class : Serializer
|
||||||
|
The default serializer class used for wishlist objects.
|
||||||
|
action_serializer_classes : dict
|
||||||
|
A map of serializers used for specific actions.
|
||||||
|
|
||||||
|
Methods
|
||||||
|
-------
|
||||||
|
get_queryset()
|
||||||
|
Retrieves the queryset, filtered based on the user's permissions.
|
||||||
|
current(request)
|
||||||
|
Retrieves the currently authenticated user's wishlist.
|
||||||
|
add_wishlist_product(request, **kwargs)
|
||||||
|
Adds a product to a specific wishlist.
|
||||||
|
remove_wishlist_product(request, **kwargs)
|
||||||
|
Removes a product from a specific wishlist.
|
||||||
|
bulk_add_wishlist_products(request, **kwargs)
|
||||||
|
Adds multiple products to a specific wishlist.
|
||||||
|
bulk_remove_wishlist_products(request, **kwargs)
|
||||||
|
Removes multiple products from a specific wishlist.
|
||||||
|
"""
|
||||||
|
|
||||||
queryset = Wishlist.objects.all()
|
queryset = Wishlist.objects.all()
|
||||||
filter_backends = [DjangoFilterBackend]
|
filter_backends = [DjangoFilterBackend]
|
||||||
filterset_fields = ["user", "is_active"]
|
filterset_fields = ["user", "is_active"]
|
||||||
|
|
@ -628,6 +1007,22 @@ class WishlistViewSet(EvibesViewSet):
|
||||||
|
|
||||||
@extend_schema_view(**ADDRESS_SCHEMA)
|
@extend_schema_view(**ADDRESS_SCHEMA)
|
||||||
class AddressViewSet(EvibesViewSet):
|
class AddressViewSet(EvibesViewSet):
|
||||||
|
"""
|
||||||
|
This class provides viewset functionality for managing `Address` objects.
|
||||||
|
|
||||||
|
The AddressViewSet class enables CRUD operations, filtering, and custom actions
|
||||||
|
related to address entities. It includes specialized behaviors for different HTTP
|
||||||
|
methods, serializer overrides, and permission handling based on the request context.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
pagination_class: Specifies pagination class for the viewset, set to None.
|
||||||
|
filter_backends: List of backend classes for filtering querysets.
|
||||||
|
filterset_class: Specifies the filter class for filtering address objects.
|
||||||
|
queryset: Default queryset containing all Address objects.
|
||||||
|
serializer_class: Default serializer class for address objects.
|
||||||
|
additional: Dictionary of additional options for this viewset.
|
||||||
|
"""
|
||||||
|
|
||||||
pagination_class = None
|
pagination_class = None
|
||||||
filter_backends = [DjangoFilterBackend]
|
filter_backends = [DjangoFilterBackend]
|
||||||
filterset_class = AddressFilter
|
filterset_class = AddressFilter
|
||||||
|
|
@ -687,6 +1082,27 @@ class AddressViewSet(EvibesViewSet):
|
||||||
|
|
||||||
|
|
||||||
class ProductTagViewSet(EvibesViewSet):
|
class ProductTagViewSet(EvibesViewSet):
|
||||||
|
"""
|
||||||
|
Handles operations related to Product Tags within the application.
|
||||||
|
|
||||||
|
This class provides functionality for retrieving, filtering, and serializing
|
||||||
|
Product Tag objects. It supports flexible filtering on specific attributes
|
||||||
|
using the specified filter backend and dynamically uses different serializers
|
||||||
|
based on the action being performed.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
queryset: The base queryset containing all ProductTag objects.
|
||||||
|
filter_backends: A list of backends used to filter the queryset.
|
||||||
|
filterset_fields: Fields available for filtering the queryset. Includes
|
||||||
|
'tag_name' for filtering by the name of the tag, and 'is_active' for
|
||||||
|
filtering active/inactive tags.
|
||||||
|
serializer_class: The default serializer class used when no specific
|
||||||
|
serializer is defined for an action.
|
||||||
|
action_serializer_classes: A dictionary mapping specific actions (e.g.,
|
||||||
|
'list') to custom serializers. Utilizes ProductTagSimpleSerializer
|
||||||
|
for the 'list' action.
|
||||||
|
"""
|
||||||
|
|
||||||
queryset = ProductTag.objects.all()
|
queryset = ProductTag.objects.all()
|
||||||
filter_backends = [DjangoFilterBackend]
|
filter_backends = [DjangoFilterBackend]
|
||||||
filterset_fields = ["tag_name", "is_active"]
|
filterset_fields = ["tag_name", "is_active"]
|
||||||
|
|
|
||||||
|
|
@ -17,12 +17,9 @@ from core.views import (
|
||||||
from evibes.settings import SPECTACULAR_PLATFORM_SETTINGS
|
from evibes.settings import SPECTACULAR_PLATFORM_SETTINGS
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path(r"health/", include("health_check.urls")),
|
path(r"health/", include("health_check.urls", namespace="health_check")),
|
||||||
path("prometheus/", include("django_prometheus.urls")),
|
path("prometheus/", include("django_prometheus.urls")),
|
||||||
path(
|
path(r"graphql/", csrf_exempt(CustomGraphQLView.as_view(graphiql=True, schema=schema)), name="graphql-platform"),
|
||||||
r"graphql/",
|
|
||||||
csrf_exempt(CustomGraphQLView.as_view(graphiql=True, schema=schema)),
|
|
||||||
),
|
|
||||||
path(
|
path(
|
||||||
r"docs/",
|
r"docs/",
|
||||||
SpectacularAPIView.as_view(urlconf="evibes.api_urls", custom_settings=SPECTACULAR_PLATFORM_SETTINGS),
|
SpectacularAPIView.as_view(urlconf="evibes.api_urls", custom_settings=SPECTACULAR_PLATFORM_SETTINGS),
|
||||||
|
|
@ -42,10 +39,11 @@ urlpatterns = [
|
||||||
path(r"i18n/", include("django.conf.urls.i18n")),
|
path(r"i18n/", include("django.conf.urls.i18n")),
|
||||||
path(r"favicon.ico", favicon_view),
|
path(r"favicon.ico", favicon_view),
|
||||||
path(r"", index),
|
path(r"", index),
|
||||||
path(r"", include("core.api_urls")),
|
path(r"", include("core.api_urls", namespace="core")),
|
||||||
path(r"auth/", include("vibes_auth.urls")),
|
path(r"auth/", include("vibes_auth.urls", namespace="vibes_auth")),
|
||||||
path(r"payments/", include("payments.urls")),
|
path(r"payments/", include("payments.urls", namespace="payments")),
|
||||||
path(r"blog/", include("blog.urls")),
|
path(r"blog/", include("blog.urls", namespace="blog")),
|
||||||
|
path("admin/doc/", include("django.contrib.admindocs.urls")),
|
||||||
] + i18n_patterns(path("admin/", admin.site.urls))
|
] + i18n_patterns(path("admin/", admin.site.urls))
|
||||||
|
|
||||||
if settings.DEBUG:
|
if settings.DEBUG:
|
||||||
|
|
|
||||||
|
|
@ -7,8 +7,6 @@ from core.views import CustomRedocView, CustomSwaggerView, favicon_view
|
||||||
from evibes.settings import SPECTACULAR_B2B_SETTINGS
|
from evibes.settings import SPECTACULAR_B2B_SETTINGS
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
# path(r'graphql/', csrf_exempt(CustomGraphQLView.as_view(graphiql=True, schema=schema))),
|
|
||||||
path("prometheus/", include("django_prometheus.urls")),
|
|
||||||
path(
|
path(
|
||||||
r"docs/",
|
r"docs/",
|
||||||
SpectacularAPIView.as_view(urlconf="evibes.b2b_urls", custom_settings=SPECTACULAR_B2B_SETTINGS),
|
SpectacularAPIView.as_view(urlconf="evibes.b2b_urls", custom_settings=SPECTACULAR_B2B_SETTINGS),
|
||||||
|
|
@ -17,7 +15,7 @@ urlpatterns = [
|
||||||
path(r"docs/swagger/", CustomSwaggerView.as_view(url_name="schema-b2b"), name="swagger-ui-b2b"),
|
path(r"docs/swagger/", CustomSwaggerView.as_view(url_name="schema-b2b"), name="swagger-ui-b2b"),
|
||||||
path(r"docs/redoc/", CustomRedocView.as_view(url_name="schema-b2b"), name="redoc-ui-b2b"),
|
path(r"docs/redoc/", CustomRedocView.as_view(url_name="schema-b2b"), name="redoc-ui-b2b"),
|
||||||
path(r"favicon.ico", favicon_view),
|
path(r"favicon.ico", favicon_view),
|
||||||
path(r"", include("core.b2b_urls")),
|
path(r"", include("core.b2b_urls", namespace="core_b2b")),
|
||||||
]
|
]
|
||||||
|
|
||||||
if settings.DEBUG:
|
if settings.DEBUG:
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -1,201 +1,240 @@
|
||||||
# EVIBES GETTEXT TRANSLATIONS
|
|
||||||
# Copyright (C) 2025 EGOR <FUREUNOIR> GORBUNOV
|
|
||||||
# This file is distributed under the same license as the EVIBES package.
|
|
||||||
# EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>, 2025.
|
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2.8.10\n"
|
"Project-Id-Version: EVIBES 2.8.10\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-06-21 22:42+0100\n"
|
"POT-Creation-Date: 2025-06-29 17:46+0100\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"
|
||||||
"Language: \n"
|
"Language: ar-ar\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:18
|
#: evibes/settings/constance.py:18
|
||||||
msgid "Name of the project"
|
msgid "Name of the project"
|
||||||
msgstr ""
|
msgstr "اسم المشروع"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:19
|
#: evibes/settings/constance.py:19
|
||||||
msgid "Frontend domain name"
|
msgid "Frontend domain name"
|
||||||
msgstr ""
|
msgstr "اسم نطاق الواجهة الأمامية"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:20
|
#: evibes/settings/constance.py:20
|
||||||
msgid "Base domain name"
|
msgid "Base domain name"
|
||||||
msgstr ""
|
msgstr "اسم النطاق الأساسي"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:21
|
#: evibes/settings/constance.py:21
|
||||||
msgid "Name of the company"
|
msgid "Name of the company"
|
||||||
msgstr ""
|
msgstr "اسم الشركة"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:22
|
#: evibes/settings/constance.py:22
|
||||||
msgid "Address of the company"
|
msgid "Address of the company"
|
||||||
msgstr ""
|
msgstr "عنوان الشركة"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:23
|
#: evibes/settings/constance.py:23
|
||||||
msgid "Phone number of the company"
|
msgid "Phone number of the company"
|
||||||
msgstr ""
|
msgstr "رقم هاتف الشركة"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:24
|
||||||
|
msgid "SMTP host"
|
||||||
|
msgstr "مضيف SMTP"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:25
|
||||||
|
msgid "SMTP port"
|
||||||
|
msgstr "منفذ SMTP"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:26
|
#: evibes/settings/constance.py:26
|
||||||
msgid "Designates whether every product has one stock or not"
|
msgid "Use TLS (Specify 0 for No and 1 for Yes)"
|
||||||
msgstr ""
|
msgstr "استخدام TLS (حدد 0 ل لا و1 لنعم)"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:27
|
||||||
|
msgid "Use SSL (Specify 0 for No and 1 for Yes)"
|
||||||
|
msgstr "استخدام SSL (حدد 0 ل لا و1 لنعم)"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:28
|
#: evibes/settings/constance.py:28
|
||||||
msgid "SMTP host"
|
msgid "SMTP username"
|
||||||
msgstr ""
|
msgstr "اسم مستخدم SMTP"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:29
|
#: evibes/settings/constance.py:29
|
||||||
msgid "SMTP port"
|
msgid "SMTP password"
|
||||||
msgstr ""
|
msgstr "كلمة مرور SMTP"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:30
|
#: evibes/settings/constance.py:30
|
||||||
msgid "Use TLS (Specify 0 for No and 1 for Yes)"
|
msgid "Mail from option"
|
||||||
msgstr ""
|
msgstr "عنوان مرسل البريد الإلكتروني"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:31
|
#: evibes/settings/constance.py:31
|
||||||
msgid "Use SSL (Specify 0 for No and 1 for Yes)"
|
msgid "Payment gateway URL"
|
||||||
msgstr ""
|
msgstr "عنوان URL لبوابة الدفع"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:32
|
#: evibes/settings/constance.py:32
|
||||||
msgid "SMTP username"
|
msgid "Payment gateway token"
|
||||||
msgstr ""
|
msgstr "الرمز المميز لبوابة الدفع"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:33
|
#: evibes/settings/constance.py:33
|
||||||
msgid "SMTP password"
|
msgid "Payment gateway minimum amount"
|
||||||
msgstr ""
|
msgstr "الحد الأدنى لمبلغ بوابة الدفع"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:34
|
#: evibes/settings/constance.py:34
|
||||||
msgid "Mail from option"
|
msgid "Payment gateway maximum amount"
|
||||||
msgstr ""
|
msgstr "الحد الأقصى لمبلغ بوابة الدفع"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:35
|
#: evibes/settings/constance.py:35
|
||||||
msgid "Payment gateway URL"
|
msgid "Exchange rate API key"
|
||||||
msgstr ""
|
msgstr "مفتاح API لسعر الصرف"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:36
|
#: evibes/settings/constance.py:36
|
||||||
msgid "Payment gateway token"
|
msgid "OpenStreetMap Nominatim API URL"
|
||||||
msgstr ""
|
msgstr "عنوان URL لواجهة برمجة تطبيقات OpenStreetMap Nominatim"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:37
|
#: evibes/settings/constance.py:37
|
||||||
msgid "Payment gateway minimum amount"
|
msgid "OpenAI API Key"
|
||||||
msgstr ""
|
msgstr "مفتاح واجهة برمجة تطبيقات OpenAI"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:38
|
|
||||||
msgid "Payment gateway maximum amount"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:39
|
|
||||||
msgid "Exchange rate API key"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:40
|
#: evibes/settings/constance.py:40
|
||||||
msgid "OpenStreetMap Nominatim API URL"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:41
|
|
||||||
msgid "OpenAI API Key"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:44
|
|
||||||
msgid "Abstract API Key, if empty - no Abstract features provided"
|
msgid "Abstract API Key, if empty - no Abstract features provided"
|
||||||
msgstr ""
|
msgstr "مفتاح API المجرد، إذا كان فارغًا - لا توجد ميزات مجردة متوفرة"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:42
|
||||||
|
msgid "HTTP Proxy"
|
||||||
|
msgstr "وكيل HTTP"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:43
|
||||||
|
msgid "Disable buy functionality"
|
||||||
|
msgstr "تعطيل وظيفة الشراء"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:46
|
#: evibes/settings/constance.py:46
|
||||||
msgid "HTTP Proxy"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:47
|
|
||||||
msgid "Disable buy functionality"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:50
|
|
||||||
msgid "An entity for storing advertisiment data"
|
msgid "An entity for storing advertisiment data"
|
||||||
msgstr ""
|
msgstr "كيان لتخزين بيانات الإعلانات"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:55
|
#: evibes/settings/constance.py:51
|
||||||
msgid "An entity for storing analytics data"
|
msgid "An entity for storing analytics data"
|
||||||
msgstr ""
|
msgstr "كيان لتخزين بيانات التحليلات"
|
||||||
|
|
||||||
#: evibes/settings/drf.py:49
|
#: evibes/settings/drf.py:49
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API "
|
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API documentation.\n"
|
||||||
"documentation.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API is designed to "
|
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API is designed to provide seamless integration for merchants selling a wide range of electronics. Through this API, partnered merchants can manage products, orders, and inventory with ease, while accessing real-time stock levels.\n"
|
||||||
"provide seamless integration for merchants selling a wide range of "
|
|
||||||
"electronics. Through this API, partnered merchants can manage products, "
|
|
||||||
"orders, and inventory with ease, while accessing real-time stock levels.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Key Features\n"
|
"## Key Features\n"
|
||||||
"- **Product Management:** Easily create, update, and manage your product "
|
"- **Product Management:** Easily create, update, and manage your product listings with detailed specifications.\n"
|
||||||
"listings with detailed specifications.\n"
|
"- **Order Processing:** Handle bulk orders efficiently with streamlined operations for merchants.\n"
|
||||||
"- **Order Processing:** Handle bulk orders efficiently with streamlined "
|
"- **Inventory Management:** Keep track of stock levels in real-time, ensuring smooth fulfillment.\n"
|
||||||
"operations for merchants.\n"
|
"- **Secure Transactions:** Secure and encrypted transactions to protect sensitive business information.\n"
|
||||||
"- **Inventory Management:** Keep track of stock levels in real-time, "
|
"- **Multi-Currency Support:** Expand your market reach with multi-currency transactions.\n"
|
||||||
"ensuring smooth fulfillment.\n"
|
"- **Real-Time Notifications:** Stay updated with instant alerts on stock changes and order statuses.\n"
|
||||||
"- **Secure Transactions:** Secure and encrypted transactions to protect "
|
|
||||||
"sensitive business information.\n"
|
|
||||||
"- **Multi-Currency Support:** Expand your market reach with multi-currency "
|
|
||||||
"transactions.\n"
|
|
||||||
"- **Real-Time Notifications:** Stay updated with instant alerts on stock "
|
|
||||||
"changes and order statuses.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Authentication\n"
|
"## Authentication\n"
|
||||||
"- Authentication is handled via your merchant token. Include the token in "
|
"- Authentication is handled via your merchant token. Include the token in the `X-EVIBES-B2B-AUTH` header of your requests in the format `Bearer <your_token>`.\n"
|
||||||
"the `X-EVIBES-B2B-AUTH` header of your requests in the format `Bearer "
|
|
||||||
"<your_token>`.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## I18N\n"
|
"## I18N\n"
|
||||||
"- Apply an `Accept-Language` header to use non-default language. A list of "
|
"- Apply an `Accept-Language` header to use non-default language. A list of all languages is available at `/app/languages/`.\n"
|
||||||
"all languages is available at `/app/languages/`.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Version\n"
|
"## Version\n"
|
||||||
"Current API version: {EVIBES_VERSION}\n"
|
"Current API version: {EVIBES_VERSION}\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"مرحبًا بك في _PH_0_____} وثائق واجهة برمجة تطبيقات B2B.\n"
|
||||||
|
"\n"
|
||||||
|
"إن {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} صُممت واجهة برمجة تطبيقات B2B لتوفير تكامل سلس للتجار الذين يبيعون مجموعة كبيرة من الإلكترونيات. من خلال واجهة برمجة التطبيقات هذه، يمكن للتجار الشركاء إدارة المنتجات والطلبات والمخزون بسهولة، مع الوصول إلى مستويات المخزون في الوقت الفعلي.\n"
|
||||||
|
"\n"
|
||||||
|
"## الميزات الرئيسية\n"
|
||||||
|
"- ** إدارة المنتجات:** إنشاء قوائم منتجاتك وتحديثها وإدارتها بسهولة مع مواصفات مفصلة.\n"
|
||||||
|
"- **معالجة الطلبات:** التعامل مع الطلبات المجمعة بكفاءة مع عمليات مبسطة للتجار.\n"
|
||||||
|
"- **إدارة المخزون:** تتبّع مستويات المخزون في الوقت الفعلي، مما يضمن سلاسة التنفيذ.\n"
|
||||||
|
"- **معاملات آمنة:** معاملات آمنة ومشفرة لحماية المعلومات التجارية الحساسة.\n"
|
||||||
|
"- ** دعم العملات المتعددة:** وسّع نطاق وصولك إلى السوق من خلال المعاملات متعددة العملات.\n"
|
||||||
|
"- ** إشعارات في الوقت الفعلي:** ابقَ على اطلاع دائم بالتنبيهات الفورية بشأن تغييرات المخزون وحالات الطلبات.\n"
|
||||||
|
"\n"
|
||||||
|
"## المصادقة\n"
|
||||||
|
"- تتم المصادقة عبر رمز التاجر المميز الخاص بك. قم بتضمين الرمز المميز في رأس \"X-EVIBES-B2B-AUTH\" لطلباتك بصيغة \"حامل الرمز المميز <y_token>\".\n"
|
||||||
|
"\n"
|
||||||
|
"## I18N\n"
|
||||||
|
"- قم بتطبيق رأس \"قبول اللغة\" لاستخدام لغة غير افتراضية. تتوفر قائمة بجميع اللغات على '/التطبيق/اللغات/'.\n"
|
||||||
|
"\n"
|
||||||
|
"## الإصدار\n"
|
||||||
|
"إصدار API الحالي: {EVIBES_VERSION}\n"
|
||||||
|
|
||||||
#: evibes/settings/drf.py:74
|
#: evibes/settings/drf.py:74
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} Platform API "
|
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} Platform API documentation.\n"
|
||||||
"documentation.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} API is the central hub for "
|
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} API is the central hub for managing product listings, monitoring orders, and accessing analytics for your electronics store. It provides RESTful endpoints for managing your store’s backend operations and includes both REST and GraphQL options.\n"
|
||||||
"managing product listings, monitoring orders, and accessing analytics for "
|
|
||||||
"your electronics store. It provides RESTful endpoints for managing your "
|
|
||||||
"store’s backend operations and includes both REST and GraphQL options.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Key Features\n"
|
"## Key Features\n"
|
||||||
"- **Product Catalog:** Manage product details, pricing, and availability.\n"
|
"- **Product Catalog:** Manage product details, pricing, and availability.\n"
|
||||||
"- **Order Management:** Access detailed order information and process "
|
"- **Order Management:** Access detailed order information and process customer requests efficiently.\n"
|
||||||
"customer requests efficiently.\n"
|
"- **User Roles & Permissions:** Set user roles and permissions for internal management.\n"
|
||||||
"- **User Roles & Permissions:** Set user roles and permissions for internal "
|
"- **Custom Integrations:** Connect your system with external platforms through powerful APIs.\n"
|
||||||
"management.\n"
|
"- **Detailed Reporting:** Generate comprehensive reports on orders, sales performance, and product data.\n"
|
||||||
"- **Custom Integrations:** Connect your system with external platforms "
|
"- **Real-Time Data:** Get live updates on inventory, pricing, and order statuses.\n"
|
||||||
"through powerful APIs.\n"
|
|
||||||
"- **Detailed Reporting:** Generate comprehensive reports on orders, sales "
|
|
||||||
"performance, and product data.\n"
|
|
||||||
"- **Real-Time Data:** Get live updates on inventory, pricing, and order "
|
|
||||||
"statuses.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Authentication\n"
|
"## Authentication\n"
|
||||||
"- Authentication is handled via JWT tokens. Include the token in the `X-"
|
"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer <your_token>`.\n"
|
||||||
"EVIBES-AUTH` header of your requests in the format `Bearer <your_token>`.\n"
|
"- Access token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600} {\"minutes\" if not DEBUG else \"hours\"}.\n"
|
||||||
"- Access token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\")."
|
"- Refresh token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 3600} hours.\n"
|
||||||
"total_seconds() // 60 if not DEBUG else 3600} {\"minutes\" if not DEBUG else "
|
|
||||||
"\"hours\"}.\n"
|
|
||||||
"- Refresh token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\")."
|
|
||||||
"total_seconds() // 3600} hours.\n"
|
|
||||||
"- Refresh tokens are automatically invalidated after usage.\n"
|
"- Refresh tokens are automatically invalidated after usage.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"## I18N\n"
|
"## I18N\n"
|
||||||
"- Apply an `Accept-Language` header to use non-default language. A list of "
|
"- Apply an `Accept-Language` header to use non-default language. A list of all languages is available at `/app/languages/`.\n"
|
||||||
"all languages is available at `/app/languages/`.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Version\n"
|
"## Version\n"
|
||||||
"Current API version: {EVIBES_VERSION}\n"
|
"Current API version: {EVIBES_VERSION}\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"{CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} وثائق واجهة برمجة تطبيقات المنصة.\n"
|
||||||
|
"\n"
|
||||||
|
"إن {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} واجهة برمجة التطبيقات هي المحور المركزي لإدارة قوائم المنتجات ومراقبة الطلبات والوصول إلى تحليلات متجر الإلكترونيات الخاص بك. وهي توفر نقاط نهاية RESTful لإدارة عمليات الواجهة الخلفية لمتجرك وتتضمن كلاً من خيارات REST و GraphQL.\n"
|
||||||
|
"\n"
|
||||||
|
"## الميزات الرئيسية\n"
|
||||||
|
"- ** كتالوج المنتجات:** إدارة تفاصيل المنتج والتسعير والتوافر.\n"
|
||||||
|
"- **إدارة الطلبات:** الوصول إلى معلومات الطلبات التفصيلية ومعالجة طلبات العملاء بكفاءة.\n"
|
||||||
|
"- **أدوار المستخدم والأذونات:** تعيين أدوار المستخدم والأذونات للإدارة الداخلية.\n"
|
||||||
|
"- **التكاملات المخصصة:** قم بتوصيل نظامك بالمنصات الخارجية من خلال واجهات برمجة التطبيقات القوية.\n"
|
||||||
|
"- **تقارير مفصلة:** إنشاء تقارير شاملة عن الطلبات وأداء المبيعات وبيانات المنتجات.\n"
|
||||||
|
"- ** بيانات في الوقت الحقيقي:** احصل على تحديثات مباشرة عن المخزون والتسعير وحالات الطلبات.\n"
|
||||||
|
"\n"
|
||||||
|
"## المصادقة\n"
|
||||||
|
"- تتم المصادقة عبر رموز JWT المميزة. قم بتضمين الرمز المميز في رأس \"X-EVIBES-AUTH\" لطلباتك بصيغة \"حامل <رمزك المميز>\".\n"
|
||||||
|
"- عمر رمز الوصول الرمزي هو {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600} {\"minutes\" if not DEBUG else \"hours\"}.\n"
|
||||||
|
"- عمر الرمز المميز للتحديث هو {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 3600} ساعة.\n"
|
||||||
|
"- يتم إبطال رموز التحديث تلقائيًا بعد الاستخدام.\n"
|
||||||
|
"\n"
|
||||||
|
"## I18N\n"
|
||||||
|
"- قم بتطبيق رأس \"قبول اللغة\" لاستخدام لغة غير افتراضية. تتوفر قائمة بجميع اللغات في '/التطبيق/اللغات/'.\n"
|
||||||
|
"\n"
|
||||||
|
"## الإصدار\n"
|
||||||
|
"إصدار API الحالي: {EVIBES_VERSION}\n"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:20
|
||||||
|
msgid "Home"
|
||||||
|
msgstr "الصفحة الرئيسية"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:21
|
||||||
|
msgid "Documentation"
|
||||||
|
msgstr "التوثيق"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:22
|
||||||
|
msgid "Storefront"
|
||||||
|
msgstr "واجهة المتجر"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:23
|
||||||
|
msgid "Support"
|
||||||
|
msgstr "الدعم"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:26
|
||||||
|
msgid "GraphQL Docs"
|
||||||
|
msgstr "مستندات GraphQL"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:31
|
||||||
|
msgid "Platform REST Docs"
|
||||||
|
msgstr "مستندات النظام الأساسي REST"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:36
|
||||||
|
msgid "B2B REST Docs"
|
||||||
|
msgstr "مستندات B2B REST"
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -1,201 +1,242 @@
|
||||||
# EVIBES GETTEXT TRANSLATIONS
|
|
||||||
# Copyright (C) 2025 EGOR <FUREUNOIR> GORBUNOV
|
|
||||||
# This file is distributed under the same license as the EVIBES package.
|
|
||||||
# EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>, 2025.
|
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2.8.10\n"
|
"Project-Id-Version: EVIBES 2.8.10\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-06-21 22:42+0100\n"
|
"POT-Creation-Date: 2025-06-29 17:46+0100\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"
|
||||||
"Language: \n"
|
"Language: cs-cz\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:18
|
#: evibes/settings/constance.py:18
|
||||||
msgid "Name of the project"
|
msgid "Name of the project"
|
||||||
msgstr ""
|
msgstr "Název projektu"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:19
|
#: evibes/settings/constance.py:19
|
||||||
msgid "Frontend domain name"
|
msgid "Frontend domain name"
|
||||||
msgstr ""
|
msgstr "Název domény frontendu"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:20
|
#: evibes/settings/constance.py:20
|
||||||
msgid "Base domain name"
|
msgid "Base domain name"
|
||||||
msgstr ""
|
msgstr "Název základní domény"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:21
|
#: evibes/settings/constance.py:21
|
||||||
msgid "Name of the company"
|
msgid "Name of the company"
|
||||||
msgstr ""
|
msgstr "Název společnosti"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:22
|
#: evibes/settings/constance.py:22
|
||||||
msgid "Address of the company"
|
msgid "Address of the company"
|
||||||
msgstr ""
|
msgstr "Adresa společnosti"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:23
|
#: evibes/settings/constance.py:23
|
||||||
msgid "Phone number of the company"
|
msgid "Phone number of the company"
|
||||||
msgstr ""
|
msgstr "Telefonní číslo společnosti"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:24
|
||||||
|
msgid "SMTP host"
|
||||||
|
msgstr "SMTP host"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:25
|
||||||
|
msgid "SMTP port"
|
||||||
|
msgstr "Port SMTP"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:26
|
#: evibes/settings/constance.py:26
|
||||||
msgid "Designates whether every product has one stock or not"
|
msgid "Use TLS (Specify 0 for No and 1 for Yes)"
|
||||||
msgstr ""
|
msgstr "Použít TLS (zadejte 0 pro Ne a 1 pro Ano)"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:27
|
||||||
|
msgid "Use SSL (Specify 0 for No and 1 for Yes)"
|
||||||
|
msgstr "Použít SSL (zadejte 0 pro Ne a 1 pro Ano)"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:28
|
#: evibes/settings/constance.py:28
|
||||||
msgid "SMTP host"
|
msgid "SMTP username"
|
||||||
msgstr ""
|
msgstr "Uživatelské jméno SMTP"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:29
|
#: evibes/settings/constance.py:29
|
||||||
msgid "SMTP port"
|
msgid "SMTP password"
|
||||||
msgstr ""
|
msgstr "Heslo SMTP"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:30
|
#: evibes/settings/constance.py:30
|
||||||
msgid "Use TLS (Specify 0 for No and 1 for Yes)"
|
msgid "Mail from option"
|
||||||
msgstr ""
|
msgstr "Adresa odesílatele e-mailů"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:31
|
#: evibes/settings/constance.py:31
|
||||||
msgid "Use SSL (Specify 0 for No and 1 for Yes)"
|
msgid "Payment gateway URL"
|
||||||
msgstr ""
|
msgstr "Adresa URL platební brány"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:32
|
#: evibes/settings/constance.py:32
|
||||||
msgid "SMTP username"
|
msgid "Payment gateway token"
|
||||||
msgstr ""
|
msgstr "Token platební brány"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:33
|
#: evibes/settings/constance.py:33
|
||||||
msgid "SMTP password"
|
msgid "Payment gateway minimum amount"
|
||||||
msgstr ""
|
msgstr "Minimální částka platební brány"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:34
|
#: evibes/settings/constance.py:34
|
||||||
msgid "Mail from option"
|
msgid "Payment gateway maximum amount"
|
||||||
msgstr ""
|
msgstr "Maximální částka platební brány"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:35
|
#: evibes/settings/constance.py:35
|
||||||
msgid "Payment gateway URL"
|
msgid "Exchange rate API key"
|
||||||
msgstr ""
|
msgstr "Klíč API pro směnný kurz"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:36
|
#: evibes/settings/constance.py:36
|
||||||
msgid "Payment gateway token"
|
msgid "OpenStreetMap Nominatim API URL"
|
||||||
msgstr ""
|
msgstr "URL rozhraní API OpenStreetMap Nominatim"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:37
|
#: evibes/settings/constance.py:37
|
||||||
msgid "Payment gateway minimum amount"
|
msgid "OpenAI API Key"
|
||||||
msgstr ""
|
msgstr "Klíč API OpenAI"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:38
|
|
||||||
msgid "Payment gateway maximum amount"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:39
|
|
||||||
msgid "Exchange rate API key"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:40
|
#: evibes/settings/constance.py:40
|
||||||
msgid "OpenStreetMap Nominatim API URL"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:41
|
|
||||||
msgid "OpenAI API Key"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:44
|
|
||||||
msgid "Abstract API Key, if empty - no Abstract features provided"
|
msgid "Abstract API Key, if empty - no Abstract features provided"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Abstraktní klíč API, pokud je prázdný - nejsou poskytovány žádné abstraktní "
|
||||||
|
"funkce"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:42
|
||||||
|
msgid "HTTP Proxy"
|
||||||
|
msgstr "Proxy server HTTP"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:43
|
||||||
|
msgid "Disable buy functionality"
|
||||||
|
msgstr "Zakázat funkci nákupu"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:46
|
#: evibes/settings/constance.py:46
|
||||||
msgid "HTTP Proxy"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:47
|
|
||||||
msgid "Disable buy functionality"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:50
|
|
||||||
msgid "An entity for storing advertisiment data"
|
msgid "An entity for storing advertisiment data"
|
||||||
msgstr ""
|
msgstr "Subjekt pro ukládání dat inzerátů"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:55
|
#: evibes/settings/constance.py:51
|
||||||
msgid "An entity for storing analytics data"
|
msgid "An entity for storing analytics data"
|
||||||
msgstr ""
|
msgstr "Subjekt pro ukládání analytických dat"
|
||||||
|
|
||||||
#: evibes/settings/drf.py:49
|
#: evibes/settings/drf.py:49
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API "
|
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API documentation.\n"
|
||||||
"documentation.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API is designed to "
|
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API is designed to provide seamless integration for merchants selling a wide range of electronics. Through this API, partnered merchants can manage products, orders, and inventory with ease, while accessing real-time stock levels.\n"
|
||||||
"provide seamless integration for merchants selling a wide range of "
|
|
||||||
"electronics. Through this API, partnered merchants can manage products, "
|
|
||||||
"orders, and inventory with ease, while accessing real-time stock levels.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Key Features\n"
|
"## Key Features\n"
|
||||||
"- **Product Management:** Easily create, update, and manage your product "
|
"- **Product Management:** Easily create, update, and manage your product listings with detailed specifications.\n"
|
||||||
"listings with detailed specifications.\n"
|
"- **Order Processing:** Handle bulk orders efficiently with streamlined operations for merchants.\n"
|
||||||
"- **Order Processing:** Handle bulk orders efficiently with streamlined "
|
"- **Inventory Management:** Keep track of stock levels in real-time, ensuring smooth fulfillment.\n"
|
||||||
"operations for merchants.\n"
|
"- **Secure Transactions:** Secure and encrypted transactions to protect sensitive business information.\n"
|
||||||
"- **Inventory Management:** Keep track of stock levels in real-time, "
|
"- **Multi-Currency Support:** Expand your market reach with multi-currency transactions.\n"
|
||||||
"ensuring smooth fulfillment.\n"
|
"- **Real-Time Notifications:** Stay updated with instant alerts on stock changes and order statuses.\n"
|
||||||
"- **Secure Transactions:** Secure and encrypted transactions to protect "
|
|
||||||
"sensitive business information.\n"
|
|
||||||
"- **Multi-Currency Support:** Expand your market reach with multi-currency "
|
|
||||||
"transactions.\n"
|
|
||||||
"- **Real-Time Notifications:** Stay updated with instant alerts on stock "
|
|
||||||
"changes and order statuses.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Authentication\n"
|
"## Authentication\n"
|
||||||
"- Authentication is handled via your merchant token. Include the token in "
|
"- Authentication is handled via your merchant token. Include the token in the `X-EVIBES-B2B-AUTH` header of your requests in the format `Bearer <your_token>`.\n"
|
||||||
"the `X-EVIBES-B2B-AUTH` header of your requests in the format `Bearer "
|
|
||||||
"<your_token>`.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## I18N\n"
|
"## I18N\n"
|
||||||
"- Apply an `Accept-Language` header to use non-default language. A list of "
|
"- Apply an `Accept-Language` header to use non-default language. A list of all languages is available at `/app/languages/`.\n"
|
||||||
"all languages is available at `/app/languages/`.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Version\n"
|
"## Version\n"
|
||||||
"Current API version: {EVIBES_VERSION}\n"
|
"Current API version: {EVIBES_VERSION}\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"Vítejte v {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API dokumentaci.\n"
|
||||||
|
"\n"
|
||||||
|
"{CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API je navrženo tak, aby poskytovalo bezproblémovou integraci pro obchodníky prodávající širokou škálu elektroniky. Prostřednictvím tohoto rozhraní API mohou partnerští obchodníci snadno spravovat produkty, objednávky a skladové zásoby, přičemž mají přístup k úrovni zásob v reálném čase.\n"
|
||||||
|
"\n"
|
||||||
|
"## Klíčové funkce\n"
|
||||||
|
"- **Správa produktů:** Snadné vytváření, aktualizace a správa výpisů produktů s podrobnými specifikacemi.\n"
|
||||||
|
"- **Zpracování objednávek:** Efektivní zpracování hromadných objednávek se zjednodušenými operacemi pro obchodníky.\n"
|
||||||
|
"- **Správa zásob:** Sledujte stav zásob v reálném čase a zajistěte hladké plnění.\n"
|
||||||
|
"- **Zabezpečené transakce:** Zabezpečené a šifrované transakce chránící citlivé obchodní informace.\n"
|
||||||
|
"- **Podpora více měn:** Rozšiřte svůj dosah na trhu díky transakcím ve více měnách.\n"
|
||||||
|
"- **Upozornění v reálném čase:** Buďte informováni pomocí okamžitých upozornění na změny stavu zásob a objednávek.\n"
|
||||||
|
"\n"
|
||||||
|
"## Ověřování\n"
|
||||||
|
"- Ověřování probíhá prostřednictvím vašeho obchodního tokenu. Token zahrňte do hlavičky `X-EVIBES-B2B-AUTH` svých požadavků ve formátu `Bearer <vůj_token>`.\n"
|
||||||
|
"\n"
|
||||||
|
"## I18N\n"
|
||||||
|
"- Použijte hlavičku `Accept-Language` pro použití jiného než výchozího jazyka. Seznam všech jazyků je k dispozici na adrese `/app/languages/`.\n"
|
||||||
|
"\n"
|
||||||
|
"## Verze\n"
|
||||||
|
"Aktuální verze API: {EVIBES_VERSION}\n"
|
||||||
|
|
||||||
#: evibes/settings/drf.py:74
|
#: evibes/settings/drf.py:74
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} Platform API "
|
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} Platform API documentation.\n"
|
||||||
"documentation.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} API is the central hub for "
|
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} API is the central hub for managing product listings, monitoring orders, and accessing analytics for your electronics store. It provides RESTful endpoints for managing your store’s backend operations and includes both REST and GraphQL options.\n"
|
||||||
"managing product listings, monitoring orders, and accessing analytics for "
|
|
||||||
"your electronics store. It provides RESTful endpoints for managing your "
|
|
||||||
"store’s backend operations and includes both REST and GraphQL options.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Key Features\n"
|
"## Key Features\n"
|
||||||
"- **Product Catalog:** Manage product details, pricing, and availability.\n"
|
"- **Product Catalog:** Manage product details, pricing, and availability.\n"
|
||||||
"- **Order Management:** Access detailed order information and process "
|
"- **Order Management:** Access detailed order information and process customer requests efficiently.\n"
|
||||||
"customer requests efficiently.\n"
|
"- **User Roles & Permissions:** Set user roles and permissions for internal management.\n"
|
||||||
"- **User Roles & Permissions:** Set user roles and permissions for internal "
|
"- **Custom Integrations:** Connect your system with external platforms through powerful APIs.\n"
|
||||||
"management.\n"
|
"- **Detailed Reporting:** Generate comprehensive reports on orders, sales performance, and product data.\n"
|
||||||
"- **Custom Integrations:** Connect your system with external platforms "
|
"- **Real-Time Data:** Get live updates on inventory, pricing, and order statuses.\n"
|
||||||
"through powerful APIs.\n"
|
|
||||||
"- **Detailed Reporting:** Generate comprehensive reports on orders, sales "
|
|
||||||
"performance, and product data.\n"
|
|
||||||
"- **Real-Time Data:** Get live updates on inventory, pricing, and order "
|
|
||||||
"statuses.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Authentication\n"
|
"## Authentication\n"
|
||||||
"- Authentication is handled via JWT tokens. Include the token in the `X-"
|
"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer <your_token>`.\n"
|
||||||
"EVIBES-AUTH` header of your requests in the format `Bearer <your_token>`.\n"
|
"- Access token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600} {\"minutes\" if not DEBUG else \"hours\"}.\n"
|
||||||
"- Access token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\")."
|
"- Refresh token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 3600} hours.\n"
|
||||||
"total_seconds() // 60 if not DEBUG else 3600} {\"minutes\" if not DEBUG else "
|
|
||||||
"\"hours\"}.\n"
|
|
||||||
"- Refresh token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\")."
|
|
||||||
"total_seconds() // 3600} hours.\n"
|
|
||||||
"- Refresh tokens are automatically invalidated after usage.\n"
|
"- Refresh tokens are automatically invalidated after usage.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"## I18N\n"
|
"## I18N\n"
|
||||||
"- Apply an `Accept-Language` header to use non-default language. A list of "
|
"- Apply an `Accept-Language` header to use non-default language. A list of all languages is available at `/app/languages/`.\n"
|
||||||
"all languages is available at `/app/languages/`.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Version\n"
|
"## Version\n"
|
||||||
"Current API version: {EVIBES_VERSION}\n"
|
"Current API version: {EVIBES_VERSION}\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"Vítejte v {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} Dokumentace API platformy.\n"
|
||||||
|
"\n"
|
||||||
|
"{CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} API je centrálním centrem pro správu výpisů produktů, sledování objednávek a přístup k analytickým údajům vašeho obchodu s elektronikou. Poskytuje koncové body RESTful pro správu backendových operací vašeho obchodu a obsahuje možnosti REST i GraphQL.\n"
|
||||||
|
"\n"
|
||||||
|
"## Klíčové funkce\n"
|
||||||
|
"- **Katalog produktů:** Správa podrobností o produktech, cen a dostupnosti.\n"
|
||||||
|
"- **Správa objednávek:** Přístup k podrobným informacím o objednávkách a efektivní zpracování požadavků zákazníků.\n"
|
||||||
|
"- **Úživatelské role a oprávnění:** Nastavení uživatelských rolí a oprávnění pro interní správu.\n"
|
||||||
|
"- **Vlastní integrace:** Propojte svůj systém s externími platformami prostřednictvím výkonných rozhraní API.\n"
|
||||||
|
"- **Podrobné reporty:** Generování komplexních reportů o objednávkách, prodejních výsledcích a produktových datech.\n"
|
||||||
|
"- **Data v reálném čase:** Získávejte živé aktualizace o stavu zásob, cenách a objednávkách.\n"
|
||||||
|
"\n"
|
||||||
|
"## Ověřování\n"
|
||||||
|
"- Ověřování probíhá prostřednictvím tokenů JWT. Token zahrňte do hlavičky `X-EVIBES-AUTH` svých požadavků ve formátu `Bearer <vůj_token>`.\n"
|
||||||
|
"- Životnost přístupového tokenu je {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600}. {\"minutes\" if not DEBUG else \"hours\"}.\n"
|
||||||
|
"- Životnost tokenu pro obnovení je {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 3600} hodin.\n"
|
||||||
|
"- Tokeny pro obnovení jsou po použití automaticky zneplatněny.\n"
|
||||||
|
"\n"
|
||||||
|
"## I18N\n"
|
||||||
|
"- Použijte hlavičku `Accept-Language` pro použití jiného než výchozího jazyka. Seznam všech jazyků je k dispozici na adrese `/app/languages/`.\n"
|
||||||
|
"\n"
|
||||||
|
"## Verze\n"
|
||||||
|
"Aktuální verze API: {EVIBES_VERSION}\n"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:20
|
||||||
|
msgid "Home"
|
||||||
|
msgstr "Home"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:21
|
||||||
|
msgid "Documentation"
|
||||||
|
msgstr "Dokumentace"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:22
|
||||||
|
msgid "Storefront"
|
||||||
|
msgstr "Výloha"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:23
|
||||||
|
msgid "Support"
|
||||||
|
msgstr "Podpora"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:26
|
||||||
|
msgid "GraphQL Docs"
|
||||||
|
msgstr "Dokumenty GraphQL"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:31
|
||||||
|
msgid "Platform REST Docs"
|
||||||
|
msgstr "Dokumenty platformy REST"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:36
|
||||||
|
msgid "B2B REST Docs"
|
||||||
|
msgstr "Dokumenty B2B REST"
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -1,201 +1,241 @@
|
||||||
# EVIBES GETTEXT TRANSLATIONS
|
|
||||||
# Copyright (C) 2025 EGOR <FUREUNOIR> GORBUNOV
|
|
||||||
# This file is distributed under the same license as the EVIBES package.
|
|
||||||
# EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>, 2025.
|
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2.8.10\n"
|
"Project-Id-Version: EVIBES 2.8.10\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-06-21 22:42+0100\n"
|
"POT-Creation-Date: 2025-06-29 17:46+0100\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"
|
||||||
"Language: \n"
|
"Language: da-dk\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:18
|
#: evibes/settings/constance.py:18
|
||||||
msgid "Name of the project"
|
msgid "Name of the project"
|
||||||
msgstr ""
|
msgstr "Projektets navn"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:19
|
#: evibes/settings/constance.py:19
|
||||||
msgid "Frontend domain name"
|
msgid "Frontend domain name"
|
||||||
msgstr ""
|
msgstr "Frontend-domænenavn"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:20
|
#: evibes/settings/constance.py:20
|
||||||
msgid "Base domain name"
|
msgid "Base domain name"
|
||||||
msgstr ""
|
msgstr "Basisdomænenavn"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:21
|
#: evibes/settings/constance.py:21
|
||||||
msgid "Name of the company"
|
msgid "Name of the company"
|
||||||
msgstr ""
|
msgstr "Virksomhedens navn"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:22
|
#: evibes/settings/constance.py:22
|
||||||
msgid "Address of the company"
|
msgid "Address of the company"
|
||||||
msgstr ""
|
msgstr "Virksomhedens adresse"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:23
|
#: evibes/settings/constance.py:23
|
||||||
msgid "Phone number of the company"
|
msgid "Phone number of the company"
|
||||||
msgstr ""
|
msgstr "Virksomhedens telefonnummer"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:24
|
||||||
|
msgid "SMTP host"
|
||||||
|
msgstr "SMTP-vært"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:25
|
||||||
|
msgid "SMTP port"
|
||||||
|
msgstr "SMTP-port"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:26
|
#: evibes/settings/constance.py:26
|
||||||
msgid "Designates whether every product has one stock or not"
|
msgid "Use TLS (Specify 0 for No and 1 for Yes)"
|
||||||
msgstr ""
|
msgstr "Brug TLS (Angiv 0 for Nej og 1 for Ja)"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:27
|
||||||
|
msgid "Use SSL (Specify 0 for No and 1 for Yes)"
|
||||||
|
msgstr "Brug SSL (Angiv 0 for Nej og 1 for Ja)"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:28
|
#: evibes/settings/constance.py:28
|
||||||
msgid "SMTP host"
|
msgid "SMTP username"
|
||||||
msgstr ""
|
msgstr "SMTP-brugernavn"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:29
|
#: evibes/settings/constance.py:29
|
||||||
msgid "SMTP port"
|
msgid "SMTP password"
|
||||||
msgstr ""
|
msgstr "SMTP-adgangskode"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:30
|
#: evibes/settings/constance.py:30
|
||||||
msgid "Use TLS (Specify 0 for No and 1 for Yes)"
|
msgid "Mail from option"
|
||||||
msgstr ""
|
msgstr "Adressen på e-mailens afsender"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:31
|
#: evibes/settings/constance.py:31
|
||||||
msgid "Use SSL (Specify 0 for No and 1 for Yes)"
|
msgid "Payment gateway URL"
|
||||||
msgstr ""
|
msgstr "URL til betalingsgateway"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:32
|
#: evibes/settings/constance.py:32
|
||||||
msgid "SMTP username"
|
msgid "Payment gateway token"
|
||||||
msgstr ""
|
msgstr "Token til betalingsgateway"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:33
|
#: evibes/settings/constance.py:33
|
||||||
msgid "SMTP password"
|
msgid "Payment gateway minimum amount"
|
||||||
msgstr ""
|
msgstr "Minimumsbeløb for betalingsgateway"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:34
|
#: evibes/settings/constance.py:34
|
||||||
msgid "Mail from option"
|
msgid "Payment gateway maximum amount"
|
||||||
msgstr ""
|
msgstr "Betalingsgatewayens maksimale beløb"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:35
|
#: evibes/settings/constance.py:35
|
||||||
msgid "Payment gateway URL"
|
msgid "Exchange rate API key"
|
||||||
msgstr ""
|
msgstr "API-nøgle til valutakurs"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:36
|
#: evibes/settings/constance.py:36
|
||||||
msgid "Payment gateway token"
|
msgid "OpenStreetMap Nominatim API URL"
|
||||||
msgstr ""
|
msgstr "OpenStreetMap Nominatim API URL"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:37
|
#: evibes/settings/constance.py:37
|
||||||
msgid "Payment gateway minimum amount"
|
msgid "OpenAI API Key"
|
||||||
msgstr ""
|
msgstr "OpenAI API-nøgle"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:38
|
|
||||||
msgid "Payment gateway maximum amount"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:39
|
|
||||||
msgid "Exchange rate API key"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:40
|
#: evibes/settings/constance.py:40
|
||||||
msgid "OpenStreetMap Nominatim API URL"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:41
|
|
||||||
msgid "OpenAI API Key"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:44
|
|
||||||
msgid "Abstract API Key, if empty - no Abstract features provided"
|
msgid "Abstract API Key, if empty - no Abstract features provided"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Abstrakt API-nøgle, hvis den er tom - ingen abstrakte funktioner leveret"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:42
|
||||||
|
msgid "HTTP Proxy"
|
||||||
|
msgstr "HTTP-proxy"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:43
|
||||||
|
msgid "Disable buy functionality"
|
||||||
|
msgstr "Deaktiver købsfunktionalitet"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:46
|
#: evibes/settings/constance.py:46
|
||||||
msgid "HTTP Proxy"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:47
|
|
||||||
msgid "Disable buy functionality"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:50
|
|
||||||
msgid "An entity for storing advertisiment data"
|
msgid "An entity for storing advertisiment data"
|
||||||
msgstr ""
|
msgstr "En enhed til lagring af annonceringsdata"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:55
|
#: evibes/settings/constance.py:51
|
||||||
msgid "An entity for storing analytics data"
|
msgid "An entity for storing analytics data"
|
||||||
msgstr ""
|
msgstr "En enhed til lagring af analysedata"
|
||||||
|
|
||||||
#: evibes/settings/drf.py:49
|
#: evibes/settings/drf.py:49
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API "
|
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API documentation.\n"
|
||||||
"documentation.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API is designed to "
|
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API is designed to provide seamless integration for merchants selling a wide range of electronics. Through this API, partnered merchants can manage products, orders, and inventory with ease, while accessing real-time stock levels.\n"
|
||||||
"provide seamless integration for merchants selling a wide range of "
|
|
||||||
"electronics. Through this API, partnered merchants can manage products, "
|
|
||||||
"orders, and inventory with ease, while accessing real-time stock levels.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Key Features\n"
|
"## Key Features\n"
|
||||||
"- **Product Management:** Easily create, update, and manage your product "
|
"- **Product Management:** Easily create, update, and manage your product listings with detailed specifications.\n"
|
||||||
"listings with detailed specifications.\n"
|
"- **Order Processing:** Handle bulk orders efficiently with streamlined operations for merchants.\n"
|
||||||
"- **Order Processing:** Handle bulk orders efficiently with streamlined "
|
"- **Inventory Management:** Keep track of stock levels in real-time, ensuring smooth fulfillment.\n"
|
||||||
"operations for merchants.\n"
|
"- **Secure Transactions:** Secure and encrypted transactions to protect sensitive business information.\n"
|
||||||
"- **Inventory Management:** Keep track of stock levels in real-time, "
|
"- **Multi-Currency Support:** Expand your market reach with multi-currency transactions.\n"
|
||||||
"ensuring smooth fulfillment.\n"
|
"- **Real-Time Notifications:** Stay updated with instant alerts on stock changes and order statuses.\n"
|
||||||
"- **Secure Transactions:** Secure and encrypted transactions to protect "
|
|
||||||
"sensitive business information.\n"
|
|
||||||
"- **Multi-Currency Support:** Expand your market reach with multi-currency "
|
|
||||||
"transactions.\n"
|
|
||||||
"- **Real-Time Notifications:** Stay updated with instant alerts on stock "
|
|
||||||
"changes and order statuses.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Authentication\n"
|
"## Authentication\n"
|
||||||
"- Authentication is handled via your merchant token. Include the token in "
|
"- Authentication is handled via your merchant token. Include the token in the `X-EVIBES-B2B-AUTH` header of your requests in the format `Bearer <your_token>`.\n"
|
||||||
"the `X-EVIBES-B2B-AUTH` header of your requests in the format `Bearer "
|
|
||||||
"<your_token>`.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## I18N\n"
|
"## I18N\n"
|
||||||
"- Apply an `Accept-Language` header to use non-default language. A list of "
|
"- Apply an `Accept-Language` header to use non-default language. A list of all languages is available at `/app/languages/`.\n"
|
||||||
"all languages is available at `/app/languages/`.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Version\n"
|
"## Version\n"
|
||||||
"Current API version: {EVIBES_VERSION}\n"
|
"Current API version: {EVIBES_VERSION}\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"Velkommen til {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API-dokumentation.\n"
|
||||||
|
"\n"
|
||||||
|
"Den {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API er designet til at give problemfri integration til forhandlere, der sælger en bred vifte af elektronik. Gennem denne API kan partnere nemt administrere produkter, ordrer og lagerbeholdning, samtidig med at de får adgang til lagerniveauer i realtid.\n"
|
||||||
|
"\n"
|
||||||
|
"## Nøglefunktioner\n"
|
||||||
|
"- Produktstyring:** Opret, opdater og administrer nemt dine produktfortegnelser med detaljerede specifikationer.\n"
|
||||||
|
"- Ordrebehandling: ** Håndter bulkordrer effektivt med strømlinede operationer for købmænd.\n"
|
||||||
|
"- Lagerstyring: ** Hold styr på lagerbeholdningen i realtid, og sørg for en problemfri levering.\n"
|
||||||
|
"- Sikre transaktioner:** Sikre og krypterede transaktioner for at beskytte følsomme forretningsoplysninger.\n"
|
||||||
|
"- Understøttelse af flere valutaer:** Udvid din markedsdækning med transaktioner i flere valutaer.\n"
|
||||||
|
"- Meddelelser i realtid:** Hold dig opdateret med øjeblikkelige advarsler om lagerændringer og ordrestatus.\n"
|
||||||
|
"\n"
|
||||||
|
"## Godkendelse\n"
|
||||||
|
"- Autentificering håndteres via dit merchant token. Inkluder tokenet i `X-EVIBES-B2B-AUTH`-headeren i dine anmodninger i formatet `Bearer <your_token>`.\n"
|
||||||
|
"\n"
|
||||||
|
"## I18N\n"
|
||||||
|
"- Anvend en `Accept-Language`-header for at bruge et andet sprog end standardsproget. En liste over alle sprog er tilgængelig på `/app/languages/`.\n"
|
||||||
|
"\n"
|
||||||
|
"## Version\n"
|
||||||
|
"Nuværende API-version: {EVIBES_VERSION}\n"
|
||||||
|
|
||||||
#: evibes/settings/drf.py:74
|
#: evibes/settings/drf.py:74
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} Platform API "
|
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} Platform API documentation.\n"
|
||||||
"documentation.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} API is the central hub for "
|
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} API is the central hub for managing product listings, monitoring orders, and accessing analytics for your electronics store. It provides RESTful endpoints for managing your store’s backend operations and includes both REST and GraphQL options.\n"
|
||||||
"managing product listings, monitoring orders, and accessing analytics for "
|
|
||||||
"your electronics store. It provides RESTful endpoints for managing your "
|
|
||||||
"store’s backend operations and includes both REST and GraphQL options.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Key Features\n"
|
"## Key Features\n"
|
||||||
"- **Product Catalog:** Manage product details, pricing, and availability.\n"
|
"- **Product Catalog:** Manage product details, pricing, and availability.\n"
|
||||||
"- **Order Management:** Access detailed order information and process "
|
"- **Order Management:** Access detailed order information and process customer requests efficiently.\n"
|
||||||
"customer requests efficiently.\n"
|
"- **User Roles & Permissions:** Set user roles and permissions for internal management.\n"
|
||||||
"- **User Roles & Permissions:** Set user roles and permissions for internal "
|
"- **Custom Integrations:** Connect your system with external platforms through powerful APIs.\n"
|
||||||
"management.\n"
|
"- **Detailed Reporting:** Generate comprehensive reports on orders, sales performance, and product data.\n"
|
||||||
"- **Custom Integrations:** Connect your system with external platforms "
|
"- **Real-Time Data:** Get live updates on inventory, pricing, and order statuses.\n"
|
||||||
"through powerful APIs.\n"
|
|
||||||
"- **Detailed Reporting:** Generate comprehensive reports on orders, sales "
|
|
||||||
"performance, and product data.\n"
|
|
||||||
"- **Real-Time Data:** Get live updates on inventory, pricing, and order "
|
|
||||||
"statuses.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Authentication\n"
|
"## Authentication\n"
|
||||||
"- Authentication is handled via JWT tokens. Include the token in the `X-"
|
"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer <your_token>`.\n"
|
||||||
"EVIBES-AUTH` header of your requests in the format `Bearer <your_token>`.\n"
|
"- Access token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600} {\"minutes\" if not DEBUG else \"hours\"}.\n"
|
||||||
"- Access token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\")."
|
"- Refresh token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 3600} hours.\n"
|
||||||
"total_seconds() // 60 if not DEBUG else 3600} {\"minutes\" if not DEBUG else "
|
|
||||||
"\"hours\"}.\n"
|
|
||||||
"- Refresh token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\")."
|
|
||||||
"total_seconds() // 3600} hours.\n"
|
|
||||||
"- Refresh tokens are automatically invalidated after usage.\n"
|
"- Refresh tokens are automatically invalidated after usage.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"## I18N\n"
|
"## I18N\n"
|
||||||
"- Apply an `Accept-Language` header to use non-default language. A list of "
|
"- Apply an `Accept-Language` header to use non-default language. A list of all languages is available at `/app/languages/`.\n"
|
||||||
"all languages is available at `/app/languages/`.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Version\n"
|
"## Version\n"
|
||||||
"Current API version: {EVIBES_VERSION}\n"
|
"Current API version: {EVIBES_VERSION}\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"Velkommen til {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} Platform API-dokumentation.\n"
|
||||||
|
"\n"
|
||||||
|
"Den {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} API er det centrale knudepunkt for administration af produktlister, overvågning af ordrer og adgang til analyser for din elektronikbutik. Det giver RESTful endpoints til styring af din butiks backend-operationer og inkluderer både REST- og GraphQL-muligheder.\n"
|
||||||
|
"\n"
|
||||||
|
"## Nøglefunktioner\n"
|
||||||
|
"- Produktkatalog:** Administrer produktdetaljer, priser og tilgængelighed.\n"
|
||||||
|
"- Ordrehåndtering:** Få adgang til detaljerede ordreoplysninger, og behandl kundeanmodninger effektivt.\n"
|
||||||
|
"- Brugerroller og -tilladelser:** Indstil brugerroller og -tilladelser til intern administration.\n"
|
||||||
|
"- Brugerdefinerede integrationer:** Forbind dit system med eksterne platforme via effektive API'er.\n"
|
||||||
|
"- Detaljeret rapportering:** Generer omfattende rapporter om ordrer, salgsresultater og produktdata.\n"
|
||||||
|
"- Realtidsdata:** Få liveopdateringer om lagerbeholdning, priser og ordrestatus.\n"
|
||||||
|
"\n"
|
||||||
|
"## Godkendelse\n"
|
||||||
|
"- Autentificering håndteres via JWT-tokens. Inkluder tokenet i `X-EVIBES-AUTH`-headeren i dine anmodninger i formatet `Bearer <your_token>`.\n"
|
||||||
|
"- Adgangstokenets levetid er {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600}. {\"minutes\" if not DEBUG else \"hours\"}.\n"
|
||||||
|
"- Refresh-tokens levetid er {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 3600} timer.\n"
|
||||||
|
"- Refresh-tokens bliver automatisk ugyldiggjort efter brug.\n"
|
||||||
|
"\n"
|
||||||
|
"## I18N\n"
|
||||||
|
"- Anvend en `Accept-Language` header for at bruge et andet sprog end standardsproget. En liste over alle sprog er tilgængelig på `/app/languages/`.\n"
|
||||||
|
"\n"
|
||||||
|
"## Version\n"
|
||||||
|
"Nuværende API-version: {EVIBES_VERSION}\n"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:20
|
||||||
|
msgid "Home"
|
||||||
|
msgstr "Hjem"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:21
|
||||||
|
msgid "Documentation"
|
||||||
|
msgstr "Dokumentation"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:22
|
||||||
|
msgid "Storefront"
|
||||||
|
msgstr "Butiksfacade"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:23
|
||||||
|
msgid "Support"
|
||||||
|
msgstr "Støtte"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:26
|
||||||
|
msgid "GraphQL Docs"
|
||||||
|
msgstr "GraphQL-dokumenter"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:31
|
||||||
|
msgid "Platform REST Docs"
|
||||||
|
msgstr "Platform REST-dokumenter"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:36
|
||||||
|
msgid "B2B REST Docs"
|
||||||
|
msgstr "B2B REST-dokumenter"
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -1,201 +1,241 @@
|
||||||
# EVIBES GETTEXT TRANSLATIONS
|
|
||||||
# Copyright (C) 2025 EGOR <FUREUNOIR> GORBUNOV
|
|
||||||
# This file is distributed under the same license as the EVIBES package.
|
|
||||||
# EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>, 2025.
|
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2.8.10\n"
|
"Project-Id-Version: EVIBES 2.8.10\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-06-21 22:42+0100\n"
|
"POT-Creation-Date: 2025-06-29 17:46+0100\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"
|
||||||
"Language: \n"
|
"Language: de-de\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:18
|
#: evibes/settings/constance.py:18
|
||||||
msgid "Name of the project"
|
msgid "Name of the project"
|
||||||
msgstr ""
|
msgstr "Name des Projekts"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:19
|
#: evibes/settings/constance.py:19
|
||||||
msgid "Frontend domain name"
|
msgid "Frontend domain name"
|
||||||
msgstr ""
|
msgstr "Frontend-Domain-Name"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:20
|
#: evibes/settings/constance.py:20
|
||||||
msgid "Base domain name"
|
msgid "Base domain name"
|
||||||
msgstr ""
|
msgstr "Basis-Domainname"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:21
|
#: evibes/settings/constance.py:21
|
||||||
msgid "Name of the company"
|
msgid "Name of the company"
|
||||||
msgstr ""
|
msgstr "Name des Unternehmens"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:22
|
#: evibes/settings/constance.py:22
|
||||||
msgid "Address of the company"
|
msgid "Address of the company"
|
||||||
msgstr ""
|
msgstr "Anschrift des Unternehmens"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:23
|
#: evibes/settings/constance.py:23
|
||||||
msgid "Phone number of the company"
|
msgid "Phone number of the company"
|
||||||
msgstr ""
|
msgstr "Telefonnummer des Unternehmens"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:24
|
||||||
|
msgid "SMTP host"
|
||||||
|
msgstr "SMTP-Host"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:25
|
||||||
|
msgid "SMTP port"
|
||||||
|
msgstr "SMTP-Port"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:26
|
#: evibes/settings/constance.py:26
|
||||||
msgid "Designates whether every product has one stock or not"
|
msgid "Use TLS (Specify 0 for No and 1 for Yes)"
|
||||||
msgstr ""
|
msgstr "TLS verwenden (Geben Sie 0 für Nein und 1 für Ja an)"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:27
|
||||||
|
msgid "Use SSL (Specify 0 for No and 1 for Yes)"
|
||||||
|
msgstr "SSL verwenden (Geben Sie 0 für Nein und 1 für Ja an)"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:28
|
#: evibes/settings/constance.py:28
|
||||||
msgid "SMTP host"
|
msgid "SMTP username"
|
||||||
msgstr ""
|
msgstr "SMTP-Benutzername"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:29
|
#: evibes/settings/constance.py:29
|
||||||
msgid "SMTP port"
|
msgid "SMTP password"
|
||||||
msgstr ""
|
msgstr "SMTP-Kennwort"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:30
|
#: evibes/settings/constance.py:30
|
||||||
msgid "Use TLS (Specify 0 for No and 1 for Yes)"
|
msgid "Mail from option"
|
||||||
msgstr ""
|
msgstr "Die Adresse des Absenders der E-Mail"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:31
|
#: evibes/settings/constance.py:31
|
||||||
msgid "Use SSL (Specify 0 for No and 1 for Yes)"
|
msgid "Payment gateway URL"
|
||||||
msgstr ""
|
msgstr "URL des Zahlungsgateways"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:32
|
#: evibes/settings/constance.py:32
|
||||||
msgid "SMTP username"
|
msgid "Payment gateway token"
|
||||||
msgstr ""
|
msgstr "Zahlungsgateway-Token"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:33
|
#: evibes/settings/constance.py:33
|
||||||
msgid "SMTP password"
|
msgid "Payment gateway minimum amount"
|
||||||
msgstr ""
|
msgstr "Mindestbetrag für das Zahlungsgateway"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:34
|
#: evibes/settings/constance.py:34
|
||||||
msgid "Mail from option"
|
msgid "Payment gateway maximum amount"
|
||||||
msgstr ""
|
msgstr "Höchstbetrag des Zahlungsgateways"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:35
|
#: evibes/settings/constance.py:35
|
||||||
msgid "Payment gateway URL"
|
msgid "Exchange rate API key"
|
||||||
msgstr ""
|
msgstr "Wechselkurs-API-Schlüssel"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:36
|
#: evibes/settings/constance.py:36
|
||||||
msgid "Payment gateway token"
|
msgid "OpenStreetMap Nominatim API URL"
|
||||||
msgstr ""
|
msgstr "OpenStreetMap Nominatim API URL"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:37
|
#: evibes/settings/constance.py:37
|
||||||
msgid "Payment gateway minimum amount"
|
msgid "OpenAI API Key"
|
||||||
msgstr ""
|
msgstr "OpenAI API Key"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:38
|
|
||||||
msgid "Payment gateway maximum amount"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:39
|
|
||||||
msgid "Exchange rate API key"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:40
|
#: evibes/settings/constance.py:40
|
||||||
msgid "OpenStreetMap Nominatim API URL"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:41
|
|
||||||
msgid "OpenAI API Key"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:44
|
|
||||||
msgid "Abstract API Key, if empty - no Abstract features provided"
|
msgid "Abstract API Key, if empty - no Abstract features provided"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Abstrakter API-Schlüssel, falls leer - keine abstrakten Merkmale vorhanden"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:42
|
||||||
|
msgid "HTTP Proxy"
|
||||||
|
msgstr "HTTP-Proxy"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:43
|
||||||
|
msgid "Disable buy functionality"
|
||||||
|
msgstr "Kauffunktionalität deaktivieren"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:46
|
#: evibes/settings/constance.py:46
|
||||||
msgid "HTTP Proxy"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:47
|
|
||||||
msgid "Disable buy functionality"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:50
|
|
||||||
msgid "An entity for storing advertisiment data"
|
msgid "An entity for storing advertisiment data"
|
||||||
msgstr ""
|
msgstr "Eine Einheit zur Speicherung von Werbedaten"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:55
|
#: evibes/settings/constance.py:51
|
||||||
msgid "An entity for storing analytics data"
|
msgid "An entity for storing analytics data"
|
||||||
msgstr ""
|
msgstr "Eine Einheit zur Speicherung von Analysedaten"
|
||||||
|
|
||||||
#: evibes/settings/drf.py:49
|
#: evibes/settings/drf.py:49
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API "
|
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API documentation.\n"
|
||||||
"documentation.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API is designed to "
|
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API is designed to provide seamless integration for merchants selling a wide range of electronics. Through this API, partnered merchants can manage products, orders, and inventory with ease, while accessing real-time stock levels.\n"
|
||||||
"provide seamless integration for merchants selling a wide range of "
|
|
||||||
"electronics. Through this API, partnered merchants can manage products, "
|
|
||||||
"orders, and inventory with ease, while accessing real-time stock levels.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Key Features\n"
|
"## Key Features\n"
|
||||||
"- **Product Management:** Easily create, update, and manage your product "
|
"- **Product Management:** Easily create, update, and manage your product listings with detailed specifications.\n"
|
||||||
"listings with detailed specifications.\n"
|
"- **Order Processing:** Handle bulk orders efficiently with streamlined operations for merchants.\n"
|
||||||
"- **Order Processing:** Handle bulk orders efficiently with streamlined "
|
"- **Inventory Management:** Keep track of stock levels in real-time, ensuring smooth fulfillment.\n"
|
||||||
"operations for merchants.\n"
|
"- **Secure Transactions:** Secure and encrypted transactions to protect sensitive business information.\n"
|
||||||
"- **Inventory Management:** Keep track of stock levels in real-time, "
|
"- **Multi-Currency Support:** Expand your market reach with multi-currency transactions.\n"
|
||||||
"ensuring smooth fulfillment.\n"
|
"- **Real-Time Notifications:** Stay updated with instant alerts on stock changes and order statuses.\n"
|
||||||
"- **Secure Transactions:** Secure and encrypted transactions to protect "
|
|
||||||
"sensitive business information.\n"
|
|
||||||
"- **Multi-Currency Support:** Expand your market reach with multi-currency "
|
|
||||||
"transactions.\n"
|
|
||||||
"- **Real-Time Notifications:** Stay updated with instant alerts on stock "
|
|
||||||
"changes and order statuses.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Authentication\n"
|
"## Authentication\n"
|
||||||
"- Authentication is handled via your merchant token. Include the token in "
|
"- Authentication is handled via your merchant token. Include the token in the `X-EVIBES-B2B-AUTH` header of your requests in the format `Bearer <your_token>`.\n"
|
||||||
"the `X-EVIBES-B2B-AUTH` header of your requests in the format `Bearer "
|
|
||||||
"<your_token>`.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## I18N\n"
|
"## I18N\n"
|
||||||
"- Apply an `Accept-Language` header to use non-default language. A list of "
|
"- Apply an `Accept-Language` header to use non-default language. A list of all languages is available at `/app/languages/`.\n"
|
||||||
"all languages is available at `/app/languages/`.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Version\n"
|
"## Version\n"
|
||||||
"Current API version: {EVIBES_VERSION}\n"
|
"Current API version: {EVIBES_VERSION}\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"Willkommen bei der {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B-API-Dokumentation.\n"
|
||||||
|
"\n"
|
||||||
|
"Die {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API wurde entwickelt, um eine nahtlose Integration für Händler zu ermöglichen, die eine breite Palette von Elektronikprodukten verkaufen. Über diese API können Partnerhändler Produkte, Bestellungen und Bestände einfach verwalten und gleichzeitig auf Echtzeit-Bestände zugreifen.\n"
|
||||||
|
"\n"
|
||||||
|
"## Hauptmerkmale\n"
|
||||||
|
"- **Produktmanagement:** Einfaches Erstellen, Aktualisieren und Verwalten Ihrer Produktlisten mit detaillierten Spezifikationen.\n"
|
||||||
|
"- **Auftragsabwicklung:** Effiziente Abwicklung von Großaufträgen mit optimierten Abläufen für Händler.\n"
|
||||||
|
"- **Bestandsverwaltung:** Behalten Sie den Überblick über die Lagerbestände in Echtzeit, um eine reibungslose Abwicklung zu gewährleisten.\n"
|
||||||
|
"- **Sichere Transaktionen:** Sichere und verschlüsselte Transaktionen zum Schutz sensibler Geschäftsinformationen.\n"
|
||||||
|
"- **Mehrwährungsunterstützung:** Erweitern Sie Ihre Marktreichweite mit Transaktionen in mehreren Währungen.\n"
|
||||||
|
"- **Echtzeit-Benachrichtigungen:** Bleiben Sie mit sofortigen Benachrichtigungen über Bestandsänderungen und Auftragsstatus auf dem Laufenden.\n"
|
||||||
|
"\n"
|
||||||
|
"## Authentifizierung\n"
|
||||||
|
"- Die Authentifizierung erfolgt über Ihr Merchant Token. Fügen Sie das Token in den `X-EVIBES-B2B-AUTH`-Header Ihrer Anfragen im Format `Bearer <Ihr_token>` ein.\n"
|
||||||
|
"\n"
|
||||||
|
"## I18N\n"
|
||||||
|
"- Wenden Sie einen `Accept-Language`-Header an, um eine nicht standardmäßige Sprache zu verwenden. Eine Liste aller Sprachen ist unter `/app/languages/` verfügbar.\n"
|
||||||
|
"\n"
|
||||||
|
"## Version\n"
|
||||||
|
"Aktuelle API-Version: {EVIBES_VERSION}\n"
|
||||||
|
|
||||||
#: evibes/settings/drf.py:74
|
#: evibes/settings/drf.py:74
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} Platform API "
|
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} Platform API documentation.\n"
|
||||||
"documentation.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} API is the central hub for "
|
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} API is the central hub for managing product listings, monitoring orders, and accessing analytics for your electronics store. It provides RESTful endpoints for managing your store’s backend operations and includes both REST and GraphQL options.\n"
|
||||||
"managing product listings, monitoring orders, and accessing analytics for "
|
|
||||||
"your electronics store. It provides RESTful endpoints for managing your "
|
|
||||||
"store’s backend operations and includes both REST and GraphQL options.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Key Features\n"
|
"## Key Features\n"
|
||||||
"- **Product Catalog:** Manage product details, pricing, and availability.\n"
|
"- **Product Catalog:** Manage product details, pricing, and availability.\n"
|
||||||
"- **Order Management:** Access detailed order information and process "
|
"- **Order Management:** Access detailed order information and process customer requests efficiently.\n"
|
||||||
"customer requests efficiently.\n"
|
"- **User Roles & Permissions:** Set user roles and permissions for internal management.\n"
|
||||||
"- **User Roles & Permissions:** Set user roles and permissions for internal "
|
"- **Custom Integrations:** Connect your system with external platforms through powerful APIs.\n"
|
||||||
"management.\n"
|
"- **Detailed Reporting:** Generate comprehensive reports on orders, sales performance, and product data.\n"
|
||||||
"- **Custom Integrations:** Connect your system with external platforms "
|
"- **Real-Time Data:** Get live updates on inventory, pricing, and order statuses.\n"
|
||||||
"through powerful APIs.\n"
|
|
||||||
"- **Detailed Reporting:** Generate comprehensive reports on orders, sales "
|
|
||||||
"performance, and product data.\n"
|
|
||||||
"- **Real-Time Data:** Get live updates on inventory, pricing, and order "
|
|
||||||
"statuses.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Authentication\n"
|
"## Authentication\n"
|
||||||
"- Authentication is handled via JWT tokens. Include the token in the `X-"
|
"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer <your_token>`.\n"
|
||||||
"EVIBES-AUTH` header of your requests in the format `Bearer <your_token>`.\n"
|
"- Access token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600} {\"minutes\" if not DEBUG else \"hours\"}.\n"
|
||||||
"- Access token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\")."
|
"- Refresh token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 3600} hours.\n"
|
||||||
"total_seconds() // 60 if not DEBUG else 3600} {\"minutes\" if not DEBUG else "
|
|
||||||
"\"hours\"}.\n"
|
|
||||||
"- Refresh token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\")."
|
|
||||||
"total_seconds() // 3600} hours.\n"
|
|
||||||
"- Refresh tokens are automatically invalidated after usage.\n"
|
"- Refresh tokens are automatically invalidated after usage.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"## I18N\n"
|
"## I18N\n"
|
||||||
"- Apply an `Accept-Language` header to use non-default language. A list of "
|
"- Apply an `Accept-Language` header to use non-default language. A list of all languages is available at `/app/languages/`.\n"
|
||||||
"all languages is available at `/app/languages/`.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Version\n"
|
"## Version\n"
|
||||||
"Current API version: {EVIBES_VERSION}\n"
|
"Current API version: {EVIBES_VERSION}\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"Willkommen bei der {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} Plattform-API-Dokumentation.\n"
|
||||||
|
"\n"
|
||||||
|
"Die {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} API ist der zentrale Knotenpunkt für die Verwaltung von Produktlisten, die Überwachung von Bestellungen und den Zugriff auf Analysen für Ihren Elektronikshop. Sie bietet RESTful-Endpunkte für die Verwaltung der Backend-Operationen Ihres Shops und umfasst sowohl REST- als auch GraphQL-Optionen.\n"
|
||||||
|
"\n"
|
||||||
|
"## Hauptmerkmale\n"
|
||||||
|
"- **Produktkatalog:** Verwalten Sie Produktdetails, Preise und Verfügbarkeit.\n"
|
||||||
|
"- **Bestellverwaltung:** Zugriff auf detaillierte Bestellinformationen und effiziente Bearbeitung von Kundenanfragen.\n"
|
||||||
|
"- **Benutzerrollen & Berechtigungen:** Legen Sie Benutzerrollen und Berechtigungen für die interne Verwaltung fest.\n"
|
||||||
|
"- **Benutzerdefinierte Integrationen:** Verbinden Sie Ihr System mit externen Plattformen über leistungsstarke APIs.\n"
|
||||||
|
"- **Detailliertes Reporting:** Erstellen Sie umfassende Berichte über Bestellungen, Verkaufsleistung und Produktdaten.\n"
|
||||||
|
"- **Echtzeitdaten:** Erhalten Sie Live-Updates zu Bestand, Preisen und Bestellstatus.\n"
|
||||||
|
"\n"
|
||||||
|
"## Authentifizierung\n"
|
||||||
|
"- Die Authentifizierung erfolgt über JWT-Tokens. Fügen Sie das Token in den `X-EVIBES-AUTH`-Header Ihrer Anfragen im Format `Bearer <Ihr_token>` ein.\n"
|
||||||
|
"- Die Lebensdauer des Zugangstokens beträgt {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600} {\"minutes\" if not DEBUG else \"hours\"}.\n"
|
||||||
|
"- Die Lebensdauer von Auffrischungstoken beträgt {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 3600} Stunden.\n"
|
||||||
|
"- Aktualisierungs-Token werden nach der Verwendung automatisch ungültig gemacht.\n"
|
||||||
|
"\n"
|
||||||
|
"## I18N\n"
|
||||||
|
"- Wenden Sie einen `Accept-Language`-Header an, um eine nicht standardmäßige Sprache zu verwenden. Eine Liste aller Sprachen ist unter `/app/languages/` verfügbar.\n"
|
||||||
|
"\n"
|
||||||
|
"## Version\n"
|
||||||
|
"Aktuelle API-Version: {EVIBES_VERSION}\n"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:20
|
||||||
|
msgid "Home"
|
||||||
|
msgstr "Startseite"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:21
|
||||||
|
msgid "Documentation"
|
||||||
|
msgstr "Dokumentation"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:22
|
||||||
|
msgid "Storefront"
|
||||||
|
msgstr "Schaufenster"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:23
|
||||||
|
msgid "Support"
|
||||||
|
msgstr "Unterstützung"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:26
|
||||||
|
msgid "GraphQL Docs"
|
||||||
|
msgstr "GraphQL Docs"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:31
|
||||||
|
msgid "Platform REST Docs"
|
||||||
|
msgstr "Plattform REST Docs"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:36
|
||||||
|
msgid "B2B REST Docs"
|
||||||
|
msgstr "B2B REST-Dokumente"
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -7,7 +7,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2.8.10\n"
|
"Project-Id-Version: EVIBES 2.8.10\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-06-21 22:42+0100\n"
|
"POT-Creation-Date: 2025-06-29 17:46+0100\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"
|
||||||
|
|
@ -19,184 +19,226 @@ msgstr ""
|
||||||
|
|
||||||
#: evibes/settings/constance.py:18
|
#: evibes/settings/constance.py:18
|
||||||
msgid "Name of the project"
|
msgid "Name of the project"
|
||||||
msgstr ""
|
msgstr "Name of the project"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:19
|
#: evibes/settings/constance.py:19
|
||||||
msgid "Frontend domain name"
|
msgid "Frontend domain name"
|
||||||
msgstr ""
|
msgstr "Frontend domain name"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:20
|
#: evibes/settings/constance.py:20
|
||||||
msgid "Base domain name"
|
msgid "Base domain name"
|
||||||
msgstr ""
|
msgstr "Base domain name"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:21
|
#: evibes/settings/constance.py:21
|
||||||
msgid "Name of the company"
|
msgid "Name of the company"
|
||||||
msgstr ""
|
msgstr "Name of the company"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:22
|
#: evibes/settings/constance.py:22
|
||||||
msgid "Address of the company"
|
msgid "Address of the company"
|
||||||
msgstr ""
|
msgstr "Address of the company"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:23
|
#: evibes/settings/constance.py:23
|
||||||
msgid "Phone number of the company"
|
msgid "Phone number of the company"
|
||||||
msgstr ""
|
msgstr "Phone number of the company"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:24
|
||||||
|
msgid "SMTP host"
|
||||||
|
msgstr "SMTP host"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:25
|
||||||
|
msgid "SMTP port"
|
||||||
|
msgstr "SMTP port"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:26
|
#: evibes/settings/constance.py:26
|
||||||
msgid "Designates whether every product has one stock or not"
|
msgid "Use TLS (Specify 0 for No and 1 for Yes)"
|
||||||
msgstr ""
|
msgstr "Use TLS (Specify 0 for No and 1 for Yes)"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:27
|
||||||
|
msgid "Use SSL (Specify 0 for No and 1 for Yes)"
|
||||||
|
msgstr "Use SSL (Specify 0 for No and 1 for Yes)"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:28
|
#: evibes/settings/constance.py:28
|
||||||
msgid "SMTP host"
|
msgid "SMTP username"
|
||||||
msgstr ""
|
msgstr "SMTP username"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:29
|
#: evibes/settings/constance.py:29
|
||||||
msgid "SMTP port"
|
msgid "SMTP password"
|
||||||
msgstr ""
|
msgstr "SMTP password"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:30
|
#: evibes/settings/constance.py:30
|
||||||
msgid "Use TLS (Specify 0 for No and 1 for Yes)"
|
msgid "Mail from option"
|
||||||
msgstr ""
|
msgstr "The address of the emails sender"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:31
|
#: evibes/settings/constance.py:31
|
||||||
msgid "Use SSL (Specify 0 for No and 1 for Yes)"
|
msgid "Payment gateway URL"
|
||||||
msgstr ""
|
msgstr "Payment gateway URL"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:32
|
#: evibes/settings/constance.py:32
|
||||||
msgid "SMTP username"
|
msgid "Payment gateway token"
|
||||||
msgstr ""
|
msgstr "Payment gateway token"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:33
|
#: evibes/settings/constance.py:33
|
||||||
msgid "SMTP password"
|
msgid "Payment gateway minimum amount"
|
||||||
msgstr ""
|
msgstr "Payment gateway minimum amount"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:34
|
#: evibes/settings/constance.py:34
|
||||||
msgid "Mail from option"
|
msgid "Payment gateway maximum amount"
|
||||||
msgstr ""
|
msgstr "Payment gateway maximum amount"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:35
|
#: evibes/settings/constance.py:35
|
||||||
msgid "Payment gateway URL"
|
msgid "Exchange rate API key"
|
||||||
msgstr ""
|
msgstr "Exchange rate API key"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:36
|
#: evibes/settings/constance.py:36
|
||||||
msgid "Payment gateway token"
|
msgid "OpenStreetMap Nominatim API URL"
|
||||||
msgstr ""
|
msgstr "OpenStreetMap Nominatim API URL"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:37
|
#: evibes/settings/constance.py:37
|
||||||
msgid "Payment gateway minimum amount"
|
msgid "OpenAI API Key"
|
||||||
msgstr ""
|
msgstr "OpenAI API Key"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:38
|
|
||||||
msgid "Payment gateway maximum amount"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:39
|
|
||||||
msgid "Exchange rate API key"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:40
|
#: evibes/settings/constance.py:40
|
||||||
msgid "OpenStreetMap Nominatim API URL"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:41
|
|
||||||
msgid "OpenAI API Key"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:44
|
|
||||||
msgid "Abstract API Key, if empty - no Abstract features provided"
|
msgid "Abstract API Key, if empty - no Abstract features provided"
|
||||||
msgstr ""
|
msgstr "Abstract API Key, if empty - no Abstract features provided"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:42
|
||||||
|
msgid "HTTP Proxy"
|
||||||
|
msgstr "HTTP Proxy"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:43
|
||||||
|
msgid "Disable buy functionality"
|
||||||
|
msgstr "Disable buy functionality"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:46
|
#: evibes/settings/constance.py:46
|
||||||
msgid "HTTP Proxy"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:47
|
|
||||||
msgid "Disable buy functionality"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:50
|
|
||||||
msgid "An entity for storing advertisiment data"
|
msgid "An entity for storing advertisiment data"
|
||||||
msgstr ""
|
msgstr "An entity for storing advertisiment data"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:55
|
#: evibes/settings/constance.py:51
|
||||||
msgid "An entity for storing analytics data"
|
msgid "An entity for storing analytics data"
|
||||||
msgstr ""
|
msgstr "An entity for storing analytics data"
|
||||||
|
|
||||||
#: evibes/settings/drf.py:49
|
#: evibes/settings/drf.py:49
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API "
|
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API documentation.\n"
|
||||||
"documentation.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API is designed to "
|
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API is designed to provide seamless integration for merchants selling a wide range of electronics. Through this API, partnered merchants can manage products, orders, and inventory with ease, while accessing real-time stock levels.\n"
|
||||||
"provide seamless integration for merchants selling a wide range of "
|
|
||||||
"electronics. Through this API, partnered merchants can manage products, "
|
|
||||||
"orders, and inventory with ease, while accessing real-time stock levels.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Key Features\n"
|
"## Key Features\n"
|
||||||
"- **Product Management:** Easily create, update, and manage your product "
|
"- **Product Management:** Easily create, update, and manage your product listings with detailed specifications.\n"
|
||||||
"listings with detailed specifications.\n"
|
"- **Order Processing:** Handle bulk orders efficiently with streamlined operations for merchants.\n"
|
||||||
"- **Order Processing:** Handle bulk orders efficiently with streamlined "
|
"- **Inventory Management:** Keep track of stock levels in real-time, ensuring smooth fulfillment.\n"
|
||||||
"operations for merchants.\n"
|
"- **Secure Transactions:** Secure and encrypted transactions to protect sensitive business information.\n"
|
||||||
"- **Inventory Management:** Keep track of stock levels in real-time, "
|
"- **Multi-Currency Support:** Expand your market reach with multi-currency transactions.\n"
|
||||||
"ensuring smooth fulfillment.\n"
|
"- **Real-Time Notifications:** Stay updated with instant alerts on stock changes and order statuses.\n"
|
||||||
"- **Secure Transactions:** Secure and encrypted transactions to protect "
|
|
||||||
"sensitive business information.\n"
|
|
||||||
"- **Multi-Currency Support:** Expand your market reach with multi-currency "
|
|
||||||
"transactions.\n"
|
|
||||||
"- **Real-Time Notifications:** Stay updated with instant alerts on stock "
|
|
||||||
"changes and order statuses.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Authentication\n"
|
"## Authentication\n"
|
||||||
"- Authentication is handled via your merchant token. Include the token in "
|
"- Authentication is handled via your merchant token. Include the token in the `X-EVIBES-B2B-AUTH` header of your requests in the format `Bearer <your_token>`.\n"
|
||||||
"the `X-EVIBES-B2B-AUTH` header of your requests in the format `Bearer "
|
|
||||||
"<your_token>`.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## I18N\n"
|
"## I18N\n"
|
||||||
"- Apply an `Accept-Language` header to use non-default language. A list of "
|
"- Apply an `Accept-Language` header to use non-default language. A list of all languages is available at `/app/languages/`.\n"
|
||||||
"all languages is available at `/app/languages/`.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Version\n"
|
"## Version\n"
|
||||||
"Current API version: {EVIBES_VERSION}\n"
|
"Current API version: {EVIBES_VERSION}\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API documentation.\n"
|
||||||
|
"\n"
|
||||||
|
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API is designed to provide seamless integration for merchants selling a wide range of electronics. Through this API, partnered merchants can manage products, orders, and inventory with ease, while accessing real-time stock levels.\n"
|
||||||
|
"\n"
|
||||||
|
"## Key Features\n"
|
||||||
|
"- **Product Management:** Easily create, update, and manage your product listings with detailed specifications.\n"
|
||||||
|
"- **Order Processing:** Handle bulk orders efficiently with streamlined operations for merchants.\n"
|
||||||
|
"- **Inventory Management:** Keep track of stock levels in real-time, ensuring smooth fulfillment.\n"
|
||||||
|
"- **Secure Transactions:** Secure and encrypted transactions to protect sensitive business information.\n"
|
||||||
|
"- **Multi-Currency Support:** Expand your market reach with multi-currency transactions.\n"
|
||||||
|
"- **Real-Time Notifications:** Stay updated with instant alerts on stock changes and order statuses.\n"
|
||||||
|
"\n"
|
||||||
|
"## Authentication\n"
|
||||||
|
"- Authentication is handled via your merchant token. Include the token in the `X-EVIBES-B2B-AUTH` header of your requests in the format `Bearer <your_token>`.\n"
|
||||||
|
"\n"
|
||||||
|
"## I18N\n"
|
||||||
|
"- Apply an `Accept-Language` header to use non-default language. A list of all languages is available at `/app/languages/`.\n"
|
||||||
|
"\n"
|
||||||
|
"## Version\n"
|
||||||
|
"Current API version: {EVIBES_VERSION}\n"
|
||||||
|
|
||||||
#: evibes/settings/drf.py:74
|
#: evibes/settings/drf.py:74
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} Platform API "
|
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} Platform API documentation.\n"
|
||||||
"documentation.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} API is the central hub for "
|
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} API is the central hub for managing product listings, monitoring orders, and accessing analytics for your electronics store. It provides RESTful endpoints for managing your store’s backend operations and includes both REST and GraphQL options.\n"
|
||||||
"managing product listings, monitoring orders, and accessing analytics for "
|
|
||||||
"your electronics store. It provides RESTful endpoints for managing your "
|
|
||||||
"store’s backend operations and includes both REST and GraphQL options.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Key Features\n"
|
"## Key Features\n"
|
||||||
"- **Product Catalog:** Manage product details, pricing, and availability.\n"
|
"- **Product Catalog:** Manage product details, pricing, and availability.\n"
|
||||||
"- **Order Management:** Access detailed order information and process "
|
"- **Order Management:** Access detailed order information and process customer requests efficiently.\n"
|
||||||
"customer requests efficiently.\n"
|
"- **User Roles & Permissions:** Set user roles and permissions for internal management.\n"
|
||||||
"- **User Roles & Permissions:** Set user roles and permissions for internal "
|
"- **Custom Integrations:** Connect your system with external platforms through powerful APIs.\n"
|
||||||
"management.\n"
|
"- **Detailed Reporting:** Generate comprehensive reports on orders, sales performance, and product data.\n"
|
||||||
"- **Custom Integrations:** Connect your system with external platforms "
|
"- **Real-Time Data:** Get live updates on inventory, pricing, and order statuses.\n"
|
||||||
"through powerful APIs.\n"
|
|
||||||
"- **Detailed Reporting:** Generate comprehensive reports on orders, sales "
|
|
||||||
"performance, and product data.\n"
|
|
||||||
"- **Real-Time Data:** Get live updates on inventory, pricing, and order "
|
|
||||||
"statuses.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Authentication\n"
|
"## Authentication\n"
|
||||||
"- Authentication is handled via JWT tokens. Include the token in the `X-"
|
"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer <your_token>`.\n"
|
||||||
"EVIBES-AUTH` header of your requests in the format `Bearer <your_token>`.\n"
|
"- Access token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600} {\"minutes\" if not DEBUG else \"hours\"}.\n"
|
||||||
"- Access token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\")."
|
"- Refresh token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 3600} hours.\n"
|
||||||
"total_seconds() // 60 if not DEBUG else 3600} {\"minutes\" if not DEBUG else "
|
|
||||||
"\"hours\"}.\n"
|
|
||||||
"- Refresh token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\")."
|
|
||||||
"total_seconds() // 3600} hours.\n"
|
|
||||||
"- Refresh tokens are automatically invalidated after usage.\n"
|
"- Refresh tokens are automatically invalidated after usage.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"## I18N\n"
|
"## I18N\n"
|
||||||
"- Apply an `Accept-Language` header to use non-default language. A list of "
|
"- Apply an `Accept-Language` header to use non-default language. A list of all languages is available at `/app/languages/`.\n"
|
||||||
"all languages is available at `/app/languages/`.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Version\n"
|
"## Version\n"
|
||||||
"Current API version: {EVIBES_VERSION}\n"
|
"Current API version: {EVIBES_VERSION}\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} Platform API documentation.\n"
|
||||||
|
"\n"
|
||||||
|
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} API is the central hub for managing product listings, monitoring orders, and accessing analytics for your electronics store. It provides RESTful endpoints for managing your store’s backend operations and includes both REST and GraphQL options.\n"
|
||||||
|
"\n"
|
||||||
|
"## Key Features\n"
|
||||||
|
"- **Product Catalog:** Manage product details, pricing, and availability.\n"
|
||||||
|
"- **Order Management:** Access detailed order information and process customer requests efficiently.\n"
|
||||||
|
"- **User Roles & Permissions:** Set user roles and permissions for internal management.\n"
|
||||||
|
"- **Custom Integrations:** Connect your system with external platforms through powerful APIs.\n"
|
||||||
|
"- **Detailed Reporting:** Generate comprehensive reports on orders, sales performance, and product data.\n"
|
||||||
|
"- **Real-Time Data:** Get live updates on inventory, pricing, and order statuses.\n"
|
||||||
|
"\n"
|
||||||
|
"## Authentication\n"
|
||||||
|
"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer <your_token>`.\n"
|
||||||
|
"- Access token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600} {\"minutes\" if not DEBUG else \"hours\"}.\n"
|
||||||
|
"- Refresh token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 3600} hours.\n"
|
||||||
|
"- Refresh tokens are automatically invalidated after usage.\n"
|
||||||
|
"\n"
|
||||||
|
"## I18N\n"
|
||||||
|
"- Apply an `Accept-Language` header to use non-default language. A list of all languages is available at `/app/languages/`.\n"
|
||||||
|
"\n"
|
||||||
|
"## Version\n"
|
||||||
|
"Current API version: {EVIBES_VERSION}\n"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:20
|
||||||
|
msgid "Home"
|
||||||
|
msgstr "Home"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:21
|
||||||
|
msgid "Documentation"
|
||||||
|
msgstr "Documentation"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:22
|
||||||
|
msgid "Storefront"
|
||||||
|
msgstr "Storefront"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:23
|
||||||
|
msgid "Support"
|
||||||
|
msgstr "Support"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:26
|
||||||
|
msgid "GraphQL Docs"
|
||||||
|
msgstr "GraphQL Docs"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:31
|
||||||
|
msgid "Platform REST Docs"
|
||||||
|
msgstr "Platform REST Docs"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:36
|
||||||
|
msgid "B2B REST Docs"
|
||||||
|
msgstr "B2B REST Docs"
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -1,201 +1,240 @@
|
||||||
# EVIBES GETTEXT TRANSLATIONS
|
|
||||||
# Copyright (C) 2025 EGOR <FUREUNOIR> GORBUNOV
|
|
||||||
# This file is distributed under the same license as the EVIBES package.
|
|
||||||
# EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>, 2025.
|
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2.8.10\n"
|
"Project-Id-Version: EVIBES 2.8.10\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-06-21 22:42+0100\n"
|
"POT-Creation-Date: 2025-06-29 17:46+0100\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"
|
||||||
"Language: \n"
|
"Language: en-us\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:18
|
#: evibes/settings/constance.py:18
|
||||||
msgid "Name of the project"
|
msgid "Name of the project"
|
||||||
msgstr ""
|
msgstr "Name of the project"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:19
|
#: evibes/settings/constance.py:19
|
||||||
msgid "Frontend domain name"
|
msgid "Frontend domain name"
|
||||||
msgstr ""
|
msgstr "Frontend domain name"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:20
|
#: evibes/settings/constance.py:20
|
||||||
msgid "Base domain name"
|
msgid "Base domain name"
|
||||||
msgstr ""
|
msgstr "Base domain name"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:21
|
#: evibes/settings/constance.py:21
|
||||||
msgid "Name of the company"
|
msgid "Name of the company"
|
||||||
msgstr ""
|
msgstr "Name of the company"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:22
|
#: evibes/settings/constance.py:22
|
||||||
msgid "Address of the company"
|
msgid "Address of the company"
|
||||||
msgstr ""
|
msgstr "Address of the company"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:23
|
#: evibes/settings/constance.py:23
|
||||||
msgid "Phone number of the company"
|
msgid "Phone number of the company"
|
||||||
msgstr ""
|
msgstr "Phone number of the company"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:24
|
||||||
|
msgid "SMTP host"
|
||||||
|
msgstr "SMTP host"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:25
|
||||||
|
msgid "SMTP port"
|
||||||
|
msgstr "SMTP port"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:26
|
#: evibes/settings/constance.py:26
|
||||||
msgid "Designates whether every product has one stock or not"
|
msgid "Use TLS (Specify 0 for No and 1 for Yes)"
|
||||||
msgstr ""
|
msgstr "Use TLS (Specify 0 for No and 1 for Yes)"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:27
|
||||||
|
msgid "Use SSL (Specify 0 for No and 1 for Yes)"
|
||||||
|
msgstr "Use SSL (Specify 0 for No and 1 for Yes)"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:28
|
#: evibes/settings/constance.py:28
|
||||||
msgid "SMTP host"
|
msgid "SMTP username"
|
||||||
msgstr ""
|
msgstr "SMTP username"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:29
|
#: evibes/settings/constance.py:29
|
||||||
msgid "SMTP port"
|
msgid "SMTP password"
|
||||||
msgstr ""
|
msgstr "SMTP password"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:30
|
#: evibes/settings/constance.py:30
|
||||||
msgid "Use TLS (Specify 0 for No and 1 for Yes)"
|
msgid "Mail from option"
|
||||||
msgstr ""
|
msgstr "The address of the emails sender"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:31
|
#: evibes/settings/constance.py:31
|
||||||
msgid "Use SSL (Specify 0 for No and 1 for Yes)"
|
msgid "Payment gateway URL"
|
||||||
msgstr ""
|
msgstr "Payment gateway URL"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:32
|
#: evibes/settings/constance.py:32
|
||||||
msgid "SMTP username"
|
msgid "Payment gateway token"
|
||||||
msgstr ""
|
msgstr "Payment gateway token"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:33
|
#: evibes/settings/constance.py:33
|
||||||
msgid "SMTP password"
|
msgid "Payment gateway minimum amount"
|
||||||
msgstr ""
|
msgstr "Payment gateway minimum amount"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:34
|
#: evibes/settings/constance.py:34
|
||||||
msgid "Mail from option"
|
msgid "Payment gateway maximum amount"
|
||||||
msgstr ""
|
msgstr "Payment gateway maximum amount"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:35
|
#: evibes/settings/constance.py:35
|
||||||
msgid "Payment gateway URL"
|
msgid "Exchange rate API key"
|
||||||
msgstr ""
|
msgstr "Exchange rate API key"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:36
|
#: evibes/settings/constance.py:36
|
||||||
msgid "Payment gateway token"
|
msgid "OpenStreetMap Nominatim API URL"
|
||||||
msgstr ""
|
msgstr "OpenStreetMap Nominatim API URL"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:37
|
#: evibes/settings/constance.py:37
|
||||||
msgid "Payment gateway minimum amount"
|
msgid "OpenAI API Key"
|
||||||
msgstr ""
|
msgstr "OpenAI API Key"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:38
|
|
||||||
msgid "Payment gateway maximum amount"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:39
|
|
||||||
msgid "Exchange rate API key"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:40
|
#: evibes/settings/constance.py:40
|
||||||
msgid "OpenStreetMap Nominatim API URL"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:41
|
|
||||||
msgid "OpenAI API Key"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:44
|
|
||||||
msgid "Abstract API Key, if empty - no Abstract features provided"
|
msgid "Abstract API Key, if empty - no Abstract features provided"
|
||||||
msgstr ""
|
msgstr "Abstract API Key, if empty - no Abstract features provided"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:42
|
||||||
|
msgid "HTTP Proxy"
|
||||||
|
msgstr "HTTP Proxy"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:43
|
||||||
|
msgid "Disable buy functionality"
|
||||||
|
msgstr "Disable buy functionality"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:46
|
#: evibes/settings/constance.py:46
|
||||||
msgid "HTTP Proxy"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:47
|
|
||||||
msgid "Disable buy functionality"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:50
|
|
||||||
msgid "An entity for storing advertisiment data"
|
msgid "An entity for storing advertisiment data"
|
||||||
msgstr ""
|
msgstr "An entity for storing advertisiment data"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:55
|
#: evibes/settings/constance.py:51
|
||||||
msgid "An entity for storing analytics data"
|
msgid "An entity for storing analytics data"
|
||||||
msgstr ""
|
msgstr "An entity for storing analytics data"
|
||||||
|
|
||||||
#: evibes/settings/drf.py:49
|
#: evibes/settings/drf.py:49
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API "
|
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API documentation.\n"
|
||||||
"documentation.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API is designed to "
|
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API is designed to provide seamless integration for merchants selling a wide range of electronics. Through this API, partnered merchants can manage products, orders, and inventory with ease, while accessing real-time stock levels.\n"
|
||||||
"provide seamless integration for merchants selling a wide range of "
|
|
||||||
"electronics. Through this API, partnered merchants can manage products, "
|
|
||||||
"orders, and inventory with ease, while accessing real-time stock levels.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Key Features\n"
|
"## Key Features\n"
|
||||||
"- **Product Management:** Easily create, update, and manage your product "
|
"- **Product Management:** Easily create, update, and manage your product listings with detailed specifications.\n"
|
||||||
"listings with detailed specifications.\n"
|
"- **Order Processing:** Handle bulk orders efficiently with streamlined operations for merchants.\n"
|
||||||
"- **Order Processing:** Handle bulk orders efficiently with streamlined "
|
"- **Inventory Management:** Keep track of stock levels in real-time, ensuring smooth fulfillment.\n"
|
||||||
"operations for merchants.\n"
|
"- **Secure Transactions:** Secure and encrypted transactions to protect sensitive business information.\n"
|
||||||
"- **Inventory Management:** Keep track of stock levels in real-time, "
|
"- **Multi-Currency Support:** Expand your market reach with multi-currency transactions.\n"
|
||||||
"ensuring smooth fulfillment.\n"
|
"- **Real-Time Notifications:** Stay updated with instant alerts on stock changes and order statuses.\n"
|
||||||
"- **Secure Transactions:** Secure and encrypted transactions to protect "
|
|
||||||
"sensitive business information.\n"
|
|
||||||
"- **Multi-Currency Support:** Expand your market reach with multi-currency "
|
|
||||||
"transactions.\n"
|
|
||||||
"- **Real-Time Notifications:** Stay updated with instant alerts on stock "
|
|
||||||
"changes and order statuses.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Authentication\n"
|
"## Authentication\n"
|
||||||
"- Authentication is handled via your merchant token. Include the token in "
|
"- Authentication is handled via your merchant token. Include the token in the `X-EVIBES-B2B-AUTH` header of your requests in the format `Bearer <your_token>`.\n"
|
||||||
"the `X-EVIBES-B2B-AUTH` header of your requests in the format `Bearer "
|
|
||||||
"<your_token>`.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## I18N\n"
|
"## I18N\n"
|
||||||
"- Apply an `Accept-Language` header to use non-default language. A list of "
|
"- Apply an `Accept-Language` header to use non-default language. A list of all languages is available at `/app/languages/`.\n"
|
||||||
"all languages is available at `/app/languages/`.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Version\n"
|
"## Version\n"
|
||||||
"Current API version: {EVIBES_VERSION}\n"
|
"Current API version: {EVIBES_VERSION}\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API documentation.\n"
|
||||||
|
"\n"
|
||||||
|
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API is designed to provide seamless integration for merchants selling a wide range of electronics. Through this API, partnered merchants can manage products, orders, and inventory with ease, while accessing real-time stock levels.\n"
|
||||||
|
"\n"
|
||||||
|
"## Key Features\n"
|
||||||
|
"- **Product Management:** Easily create, update, and manage your product listings with detailed specifications.\n"
|
||||||
|
"- **Order Processing:** Handle bulk orders efficiently with streamlined operations for merchants.\n"
|
||||||
|
"- **Inventory Management:** Keep track of stock levels in real-time, ensuring smooth fulfillment.\n"
|
||||||
|
"- **Secure Transactions:** Secure and encrypted transactions to protect sensitive business information.\n"
|
||||||
|
"- **Multi-Currency Support:** Expand your market reach with multi-currency transactions.\n"
|
||||||
|
"- **Real-Time Notifications:** Stay updated with instant alerts on stock changes and order statuses.\n"
|
||||||
|
"\n"
|
||||||
|
"## Authentication\n"
|
||||||
|
"- Authentication is handled via your merchant token. Include the token in the `X-EVIBES-B2B-AUTH` header of your requests in the format `Bearer <your_token>`.\n"
|
||||||
|
"\n"
|
||||||
|
"## I18N\n"
|
||||||
|
"- Apply an `Accept-Language` header to use non-default language. A list of all languages is available at `/app/languages/`.\n"
|
||||||
|
"\n"
|
||||||
|
"## Version\n"
|
||||||
|
"Current API version: {EVIBES_VERSION}\n"
|
||||||
|
|
||||||
#: evibes/settings/drf.py:74
|
#: evibes/settings/drf.py:74
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} Platform API "
|
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} Platform API documentation.\n"
|
||||||
"documentation.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} API is the central hub for "
|
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} API is the central hub for managing product listings, monitoring orders, and accessing analytics for your electronics store. It provides RESTful endpoints for managing your store’s backend operations and includes both REST and GraphQL options.\n"
|
||||||
"managing product listings, monitoring orders, and accessing analytics for "
|
|
||||||
"your electronics store. It provides RESTful endpoints for managing your "
|
|
||||||
"store’s backend operations and includes both REST and GraphQL options.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Key Features\n"
|
"## Key Features\n"
|
||||||
"- **Product Catalog:** Manage product details, pricing, and availability.\n"
|
"- **Product Catalog:** Manage product details, pricing, and availability.\n"
|
||||||
"- **Order Management:** Access detailed order information and process "
|
"- **Order Management:** Access detailed order information and process customer requests efficiently.\n"
|
||||||
"customer requests efficiently.\n"
|
"- **User Roles & Permissions:** Set user roles and permissions for internal management.\n"
|
||||||
"- **User Roles & Permissions:** Set user roles and permissions for internal "
|
"- **Custom Integrations:** Connect your system with external platforms through powerful APIs.\n"
|
||||||
"management.\n"
|
"- **Detailed Reporting:** Generate comprehensive reports on orders, sales performance, and product data.\n"
|
||||||
"- **Custom Integrations:** Connect your system with external platforms "
|
"- **Real-Time Data:** Get live updates on inventory, pricing, and order statuses.\n"
|
||||||
"through powerful APIs.\n"
|
|
||||||
"- **Detailed Reporting:** Generate comprehensive reports on orders, sales "
|
|
||||||
"performance, and product data.\n"
|
|
||||||
"- **Real-Time Data:** Get live updates on inventory, pricing, and order "
|
|
||||||
"statuses.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Authentication\n"
|
"## Authentication\n"
|
||||||
"- Authentication is handled via JWT tokens. Include the token in the `X-"
|
"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer <your_token>`.\n"
|
||||||
"EVIBES-AUTH` header of your requests in the format `Bearer <your_token>`.\n"
|
"- Access token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600} {\"minutes\" if not DEBUG else \"hours\"}.\n"
|
||||||
"- Access token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\")."
|
"- Refresh token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 3600} hours.\n"
|
||||||
"total_seconds() // 60 if not DEBUG else 3600} {\"minutes\" if not DEBUG else "
|
|
||||||
"\"hours\"}.\n"
|
|
||||||
"- Refresh token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\")."
|
|
||||||
"total_seconds() // 3600} hours.\n"
|
|
||||||
"- Refresh tokens are automatically invalidated after usage.\n"
|
"- Refresh tokens are automatically invalidated after usage.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"## I18N\n"
|
"## I18N\n"
|
||||||
"- Apply an `Accept-Language` header to use non-default language. A list of "
|
"- Apply an `Accept-Language` header to use non-default language. A list of all languages is available at `/app/languages/`.\n"
|
||||||
"all languages is available at `/app/languages/`.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Version\n"
|
"## Version\n"
|
||||||
"Current API version: {EVIBES_VERSION}\n"
|
"Current API version: {EVIBES_VERSION}\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} Platform API documentation.\n"
|
||||||
|
"\n"
|
||||||
|
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} API is the central hub for managing product listings, monitoring orders, and accessing analytics for your electronics store. It provides RESTful endpoints for managing your store’s backend operations and includes both REST and GraphQL options.\n"
|
||||||
|
"\n"
|
||||||
|
"## Key Features\n"
|
||||||
|
"- **Product Catalog:** Manage product details, pricing, and availability.\n"
|
||||||
|
"- **Order Management:** Access detailed order information and process customer requests efficiently.\n"
|
||||||
|
"- **User Roles & Permissions:** Set user roles and permissions for internal management.\n"
|
||||||
|
"- **Custom Integrations:** Connect your system with external platforms through powerful APIs.\n"
|
||||||
|
"- **Detailed Reporting:** Generate comprehensive reports on orders, sales performance, and product data.\n"
|
||||||
|
"- **Real-Time Data:** Get live updates on inventory, pricing, and order statuses.\n"
|
||||||
|
"\n"
|
||||||
|
"## Authentication\n"
|
||||||
|
"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer <your_token>`.\n"
|
||||||
|
"- Access token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600} {\"minutes\" if not DEBUG else \"hours\"}.\n"
|
||||||
|
"- Refresh token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 3600} hours.\n"
|
||||||
|
"- Refresh tokens are automatically invalidated after usage.\n"
|
||||||
|
"\n"
|
||||||
|
"## I18N\n"
|
||||||
|
"- Apply an `Accept-Language` header to use non-default language. A list of all languages is available at `/app/languages/`.\n"
|
||||||
|
"\n"
|
||||||
|
"## Version\n"
|
||||||
|
"Current API version: {EVIBES_VERSION}\n"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:20
|
||||||
|
msgid "Home"
|
||||||
|
msgstr "Home"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:21
|
||||||
|
msgid "Documentation"
|
||||||
|
msgstr "Documentation"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:22
|
||||||
|
msgid "Storefront"
|
||||||
|
msgstr "Storefront"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:23
|
||||||
|
msgid "Support"
|
||||||
|
msgstr "Support"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:26
|
||||||
|
msgid "GraphQL Docs"
|
||||||
|
msgstr "GraphQL Docs"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:31
|
||||||
|
msgid "Platform REST Docs"
|
||||||
|
msgstr "Platform REST Docs"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:36
|
||||||
|
msgid "B2B REST Docs"
|
||||||
|
msgstr "B2B REST Docs"
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -1,201 +1,242 @@
|
||||||
# EVIBES GETTEXT TRANSLATIONS
|
|
||||||
# Copyright (C) 2025 EGOR <FUREUNOIR> GORBUNOV
|
|
||||||
# This file is distributed under the same license as the EVIBES package.
|
|
||||||
# EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>, 2025.
|
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2.8.10\n"
|
"Project-Id-Version: EVIBES 2.8.10\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-06-21 22:42+0100\n"
|
"POT-Creation-Date: 2025-06-29 17:46+0100\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"
|
||||||
"Language: \n"
|
"Language: es-es\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:18
|
#: evibes/settings/constance.py:18
|
||||||
msgid "Name of the project"
|
msgid "Name of the project"
|
||||||
msgstr ""
|
msgstr "Nombre del proyecto"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:19
|
#: evibes/settings/constance.py:19
|
||||||
msgid "Frontend domain name"
|
msgid "Frontend domain name"
|
||||||
msgstr ""
|
msgstr "Nombre de dominio frontend"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:20
|
#: evibes/settings/constance.py:20
|
||||||
msgid "Base domain name"
|
msgid "Base domain name"
|
||||||
msgstr ""
|
msgstr "Nombre de dominio base"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:21
|
#: evibes/settings/constance.py:21
|
||||||
msgid "Name of the company"
|
msgid "Name of the company"
|
||||||
msgstr ""
|
msgstr "Nombre de la empresa"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:22
|
#: evibes/settings/constance.py:22
|
||||||
msgid "Address of the company"
|
msgid "Address of the company"
|
||||||
msgstr ""
|
msgstr "Dirección de la empresa"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:23
|
#: evibes/settings/constance.py:23
|
||||||
msgid "Phone number of the company"
|
msgid "Phone number of the company"
|
||||||
msgstr ""
|
msgstr "Número de teléfono de la empresa"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:24
|
||||||
|
msgid "SMTP host"
|
||||||
|
msgstr "Host SMTP"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:25
|
||||||
|
msgid "SMTP port"
|
||||||
|
msgstr "Puerto SMTP"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:26
|
#: evibes/settings/constance.py:26
|
||||||
msgid "Designates whether every product has one stock or not"
|
msgid "Use TLS (Specify 0 for No and 1 for Yes)"
|
||||||
msgstr ""
|
msgstr "Usar TLS (Especifique 0 para No y 1 para Sí)"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:27
|
||||||
|
msgid "Use SSL (Specify 0 for No and 1 for Yes)"
|
||||||
|
msgstr "Usar SSL (Especifique 0 para No y 1 para Sí)"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:28
|
#: evibes/settings/constance.py:28
|
||||||
msgid "SMTP host"
|
msgid "SMTP username"
|
||||||
msgstr ""
|
msgstr "Nombre de usuario SMTP"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:29
|
#: evibes/settings/constance.py:29
|
||||||
msgid "SMTP port"
|
msgid "SMTP password"
|
||||||
msgstr ""
|
msgstr "Contraseña SMTP"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:30
|
#: evibes/settings/constance.py:30
|
||||||
msgid "Use TLS (Specify 0 for No and 1 for Yes)"
|
msgid "Mail from option"
|
||||||
msgstr ""
|
msgstr "Dirección del remitente del correo electrónico"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:31
|
#: evibes/settings/constance.py:31
|
||||||
msgid "Use SSL (Specify 0 for No and 1 for Yes)"
|
msgid "Payment gateway URL"
|
||||||
msgstr ""
|
msgstr "URL de la pasarela de pago"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:32
|
#: evibes/settings/constance.py:32
|
||||||
msgid "SMTP username"
|
msgid "Payment gateway token"
|
||||||
msgstr ""
|
msgstr "Token de pasarela de pago"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:33
|
#: evibes/settings/constance.py:33
|
||||||
msgid "SMTP password"
|
msgid "Payment gateway minimum amount"
|
||||||
msgstr ""
|
msgstr "Importe mínimo de la pasarela de pago"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:34
|
#: evibes/settings/constance.py:34
|
||||||
msgid "Mail from option"
|
msgid "Payment gateway maximum amount"
|
||||||
msgstr ""
|
msgstr "Importe máximo de la pasarela de pago"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:35
|
#: evibes/settings/constance.py:35
|
||||||
msgid "Payment gateway URL"
|
msgid "Exchange rate API key"
|
||||||
msgstr ""
|
msgstr "Clave API de tipo de cambio"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:36
|
#: evibes/settings/constance.py:36
|
||||||
msgid "Payment gateway token"
|
msgid "OpenStreetMap Nominatim API URL"
|
||||||
msgstr ""
|
msgstr "URL de la API Nominatim de OpenStreetMap"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:37
|
#: evibes/settings/constance.py:37
|
||||||
msgid "Payment gateway minimum amount"
|
msgid "OpenAI API Key"
|
||||||
msgstr ""
|
msgstr "Clave API de OpenAI"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:38
|
|
||||||
msgid "Payment gateway maximum amount"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:39
|
|
||||||
msgid "Exchange rate API key"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:40
|
#: evibes/settings/constance.py:40
|
||||||
msgid "OpenStreetMap Nominatim API URL"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:41
|
|
||||||
msgid "OpenAI API Key"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:44
|
|
||||||
msgid "Abstract API Key, if empty - no Abstract features provided"
|
msgid "Abstract API Key, if empty - no Abstract features provided"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Clave API abstracta, si está vacía - no se proporcionan características "
|
||||||
|
"abstractas"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:42
|
||||||
|
msgid "HTTP Proxy"
|
||||||
|
msgstr "Proxy HTTP"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:43
|
||||||
|
msgid "Disable buy functionality"
|
||||||
|
msgstr "Desactivar la función de compra"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:46
|
#: evibes/settings/constance.py:46
|
||||||
msgid "HTTP Proxy"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:47
|
|
||||||
msgid "Disable buy functionality"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:50
|
|
||||||
msgid "An entity for storing advertisiment data"
|
msgid "An entity for storing advertisiment data"
|
||||||
msgstr ""
|
msgstr "Una entidad para almacenar datos publicitarios"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:55
|
#: evibes/settings/constance.py:51
|
||||||
msgid "An entity for storing analytics data"
|
msgid "An entity for storing analytics data"
|
||||||
msgstr ""
|
msgstr "Una entidad para almacenar datos analíticos"
|
||||||
|
|
||||||
#: evibes/settings/drf.py:49
|
#: evibes/settings/drf.py:49
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API "
|
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API documentation.\n"
|
||||||
"documentation.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API is designed to "
|
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API is designed to provide seamless integration for merchants selling a wide range of electronics. Through this API, partnered merchants can manage products, orders, and inventory with ease, while accessing real-time stock levels.\n"
|
||||||
"provide seamless integration for merchants selling a wide range of "
|
|
||||||
"electronics. Through this API, partnered merchants can manage products, "
|
|
||||||
"orders, and inventory with ease, while accessing real-time stock levels.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Key Features\n"
|
"## Key Features\n"
|
||||||
"- **Product Management:** Easily create, update, and manage your product "
|
"- **Product Management:** Easily create, update, and manage your product listings with detailed specifications.\n"
|
||||||
"listings with detailed specifications.\n"
|
"- **Order Processing:** Handle bulk orders efficiently with streamlined operations for merchants.\n"
|
||||||
"- **Order Processing:** Handle bulk orders efficiently with streamlined "
|
"- **Inventory Management:** Keep track of stock levels in real-time, ensuring smooth fulfillment.\n"
|
||||||
"operations for merchants.\n"
|
"- **Secure Transactions:** Secure and encrypted transactions to protect sensitive business information.\n"
|
||||||
"- **Inventory Management:** Keep track of stock levels in real-time, "
|
"- **Multi-Currency Support:** Expand your market reach with multi-currency transactions.\n"
|
||||||
"ensuring smooth fulfillment.\n"
|
"- **Real-Time Notifications:** Stay updated with instant alerts on stock changes and order statuses.\n"
|
||||||
"- **Secure Transactions:** Secure and encrypted transactions to protect "
|
|
||||||
"sensitive business information.\n"
|
|
||||||
"- **Multi-Currency Support:** Expand your market reach with multi-currency "
|
|
||||||
"transactions.\n"
|
|
||||||
"- **Real-Time Notifications:** Stay updated with instant alerts on stock "
|
|
||||||
"changes and order statuses.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Authentication\n"
|
"## Authentication\n"
|
||||||
"- Authentication is handled via your merchant token. Include the token in "
|
"- Authentication is handled via your merchant token. Include the token in the `X-EVIBES-B2B-AUTH` header of your requests in the format `Bearer <your_token>`.\n"
|
||||||
"the `X-EVIBES-B2B-AUTH` header of your requests in the format `Bearer "
|
|
||||||
"<your_token>`.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## I18N\n"
|
"## I18N\n"
|
||||||
"- Apply an `Accept-Language` header to use non-default language. A list of "
|
"- Apply an `Accept-Language` header to use non-default language. A list of all languages is available at `/app/languages/`.\n"
|
||||||
"all languages is available at `/app/languages/`.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Version\n"
|
"## Version\n"
|
||||||
"Current API version: {EVIBES_VERSION}\n"
|
"Current API version: {EVIBES_VERSION}\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"Bienvenido a la {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} Documentación de la API B2B.\n"
|
||||||
|
"\n"
|
||||||
|
"La {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API está diseñada para proporcionar una integración perfecta para los comerciantes que venden una amplia gama de productos electrónicos. A través de esta API, los comerciantes asociados pueden gestionar productos, pedidos e inventario con facilidad, al tiempo que acceden a los niveles de existencias en tiempo real.\n"
|
||||||
|
"\n"
|
||||||
|
"## Características principales\n"
|
||||||
|
"- Gestión de productos:** Cree, actualice y gestione fácilmente sus listados de productos con especificaciones detalladas.\n"
|
||||||
|
"- **Procesamiento de Pedidos:** Maneje los pedidos a granel de manera eficiente con operaciones simplificadas para los comerciantes.\n"
|
||||||
|
"- **Gestión de Inventario:** Mantenga un seguimiento de los niveles de existencias en tiempo real, asegurando el cumplimiento sin problemas.\n"
|
||||||
|
"- Transacciones seguras:** Transacciones seguras y encriptadas para proteger la información comercial confidencial.\n"
|
||||||
|
"- **Soporte multidivisa:** Amplíe el alcance de su mercado con transacciones multidivisa.\n"
|
||||||
|
"- **Notificaciones en tiempo real:** Manténgase actualizado con alertas instantáneas sobre los cambios en las existencias y el estado de los pedidos.\n"
|
||||||
|
"\n"
|
||||||
|
"## Autenticación\n"
|
||||||
|
"- La autenticación se gestiona a través de su token de comerciante. Incluya el token en la cabecera `X-EVIBES-B2B-AUTH` de sus solicitudes con el formato `Bearer <your_token>`.\n"
|
||||||
|
"\n"
|
||||||
|
"## I18N\n"
|
||||||
|
"- Aplique una cabecera `Accept-Language` para utilizar un idioma no predeterminado. Una lista de todos los idiomas está disponible en `/app/languages/`.\n"
|
||||||
|
"\n"
|
||||||
|
"## Versión\n"
|
||||||
|
"Versión actual de la API: {EVIBES_VERSION}\n"
|
||||||
|
|
||||||
#: evibes/settings/drf.py:74
|
#: evibes/settings/drf.py:74
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} Platform API "
|
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} Platform API documentation.\n"
|
||||||
"documentation.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} API is the central hub for "
|
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} API is the central hub for managing product listings, monitoring orders, and accessing analytics for your electronics store. It provides RESTful endpoints for managing your store’s backend operations and includes both REST and GraphQL options.\n"
|
||||||
"managing product listings, monitoring orders, and accessing analytics for "
|
|
||||||
"your electronics store. It provides RESTful endpoints for managing your "
|
|
||||||
"store’s backend operations and includes both REST and GraphQL options.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Key Features\n"
|
"## Key Features\n"
|
||||||
"- **Product Catalog:** Manage product details, pricing, and availability.\n"
|
"- **Product Catalog:** Manage product details, pricing, and availability.\n"
|
||||||
"- **Order Management:** Access detailed order information and process "
|
"- **Order Management:** Access detailed order information and process customer requests efficiently.\n"
|
||||||
"customer requests efficiently.\n"
|
"- **User Roles & Permissions:** Set user roles and permissions for internal management.\n"
|
||||||
"- **User Roles & Permissions:** Set user roles and permissions for internal "
|
"- **Custom Integrations:** Connect your system with external platforms through powerful APIs.\n"
|
||||||
"management.\n"
|
"- **Detailed Reporting:** Generate comprehensive reports on orders, sales performance, and product data.\n"
|
||||||
"- **Custom Integrations:** Connect your system with external platforms "
|
"- **Real-Time Data:** Get live updates on inventory, pricing, and order statuses.\n"
|
||||||
"through powerful APIs.\n"
|
|
||||||
"- **Detailed Reporting:** Generate comprehensive reports on orders, sales "
|
|
||||||
"performance, and product data.\n"
|
|
||||||
"- **Real-Time Data:** Get live updates on inventory, pricing, and order "
|
|
||||||
"statuses.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Authentication\n"
|
"## Authentication\n"
|
||||||
"- Authentication is handled via JWT tokens. Include the token in the `X-"
|
"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer <your_token>`.\n"
|
||||||
"EVIBES-AUTH` header of your requests in the format `Bearer <your_token>`.\n"
|
"- Access token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600} {\"minutes\" if not DEBUG else \"hours\"}.\n"
|
||||||
"- Access token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\")."
|
"- Refresh token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 3600} hours.\n"
|
||||||
"total_seconds() // 60 if not DEBUG else 3600} {\"minutes\" if not DEBUG else "
|
|
||||||
"\"hours\"}.\n"
|
|
||||||
"- Refresh token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\")."
|
|
||||||
"total_seconds() // 3600} hours.\n"
|
|
||||||
"- Refresh tokens are automatically invalidated after usage.\n"
|
"- Refresh tokens are automatically invalidated after usage.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"## I18N\n"
|
"## I18N\n"
|
||||||
"- Apply an `Accept-Language` header to use non-default language. A list of "
|
"- Apply an `Accept-Language` header to use non-default language. A list of all languages is available at `/app/languages/`.\n"
|
||||||
"all languages is available at `/app/languages/`.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Version\n"
|
"## Version\n"
|
||||||
"Current API version: {EVIBES_VERSION}\n"
|
"Current API version: {EVIBES_VERSION}\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"Bienvenido a la {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} Documentación de la API de la Plataforma.\n"
|
||||||
|
"\n"
|
||||||
|
"La {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} API es el eje central para la gestión de listados de productos, seguimiento de pedidos, y el acceso a los análisis de su tienda de electrónica. Proporciona puntos finales RESTful para gestionar las operaciones de backend de su tienda e incluye opciones REST y GraphQL.\n"
|
||||||
|
"\n"
|
||||||
|
"## Características principales\n"
|
||||||
|
"- **Catálogo de productos:** Gestiona los detalles de los productos, precios y disponibilidad.\n"
|
||||||
|
"- **Gestión de pedidos:** Acceda a información detallada de los pedidos y procese las solicitudes de los clientes de forma eficiente.\n"
|
||||||
|
"- **Roles y Permisos de Usuario:** Establecer roles y permisos de usuario para la gestión interna.\n"
|
||||||
|
"- **Integraciones personalizadas:** Conecte su sistema con plataformas externas a través de potentes API.\n"
|
||||||
|
"- **Informes detallados:** Genere informes completos sobre pedidos, rendimiento de ventas y datos de productos.\n"
|
||||||
|
"- **Datos en tiempo real:** Obtenga actualizaciones en tiempo real sobre el inventario, los precios y el estado de los pedidos.\n"
|
||||||
|
"\n"
|
||||||
|
"## Autenticación\n"
|
||||||
|
"- La autenticación se gestiona mediante tokens JWT. Incluya el token en la cabecera `X-EVIBES-AUTH` de sus peticiones con el formato `Bearer <your_token>`.\n"
|
||||||
|
"- El tiempo de vida del token de acceso es {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600} {\"minutes\" if not DEBUG else \"hours\"}.\n"
|
||||||
|
"- La vida útil del token de actualización es de {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 3600} horas.\n"
|
||||||
|
"- Los tokens de actualización se invalidan automáticamente después de su uso.\n"
|
||||||
|
"\n"
|
||||||
|
"## I18N\n"
|
||||||
|
"- Aplicar una cabecera `Accept-Language` para utilizar un idioma no predeterminado. Una lista de todos los idiomas está disponible en `/app/languages/`.\n"
|
||||||
|
"\n"
|
||||||
|
"## Versión\n"
|
||||||
|
"Versión actual de la API: {EVIBES_VERSION}\n"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:20
|
||||||
|
msgid "Home"
|
||||||
|
msgstr "Inicio"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:21
|
||||||
|
msgid "Documentation"
|
||||||
|
msgstr "Documentación"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:22
|
||||||
|
msgid "Storefront"
|
||||||
|
msgstr "Escaparate"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:23
|
||||||
|
msgid "Support"
|
||||||
|
msgstr "Ayuda"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:26
|
||||||
|
msgid "GraphQL Docs"
|
||||||
|
msgstr "Documentos GraphQL"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:31
|
||||||
|
msgid "Platform REST Docs"
|
||||||
|
msgstr "Plataforma REST Docs"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:36
|
||||||
|
msgid "B2B REST Docs"
|
||||||
|
msgstr "Documentos B2B REST"
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -1,201 +1,242 @@
|
||||||
# EVIBES GETTEXT TRANSLATIONS
|
|
||||||
# Copyright (C) 2025 EGOR <FUREUNOIR> GORBUNOV
|
|
||||||
# This file is distributed under the same license as the EVIBES package.
|
|
||||||
# EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>, 2025.
|
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2.8.10\n"
|
"Project-Id-Version: EVIBES 2.8.10\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-06-21 22:42+0100\n"
|
"POT-Creation-Date: 2025-06-29 17:46+0100\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"
|
||||||
"Language: \n"
|
"Language: fr-fr\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:18
|
#: evibes/settings/constance.py:18
|
||||||
msgid "Name of the project"
|
msgid "Name of the project"
|
||||||
msgstr ""
|
msgstr "Nom du projet"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:19
|
#: evibes/settings/constance.py:19
|
||||||
msgid "Frontend domain name"
|
msgid "Frontend domain name"
|
||||||
msgstr ""
|
msgstr "Nom de domaine du frontend"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:20
|
#: evibes/settings/constance.py:20
|
||||||
msgid "Base domain name"
|
msgid "Base domain name"
|
||||||
msgstr ""
|
msgstr "Nom de domaine de base"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:21
|
#: evibes/settings/constance.py:21
|
||||||
msgid "Name of the company"
|
msgid "Name of the company"
|
||||||
msgstr ""
|
msgstr "Nom de l'entreprise"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:22
|
#: evibes/settings/constance.py:22
|
||||||
msgid "Address of the company"
|
msgid "Address of the company"
|
||||||
msgstr ""
|
msgstr "Adresse de l'entreprise"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:23
|
#: evibes/settings/constance.py:23
|
||||||
msgid "Phone number of the company"
|
msgid "Phone number of the company"
|
||||||
msgstr ""
|
msgstr "Numéro de téléphone de l'entreprise"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:24
|
||||||
|
msgid "SMTP host"
|
||||||
|
msgstr "Hôte SMTP"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:25
|
||||||
|
msgid "SMTP port"
|
||||||
|
msgstr "SMTP port"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:26
|
#: evibes/settings/constance.py:26
|
||||||
msgid "Designates whether every product has one stock or not"
|
msgid "Use TLS (Specify 0 for No and 1 for Yes)"
|
||||||
msgstr ""
|
msgstr "Utiliser TLS (spécifier 0 pour Non et 1 pour Oui)"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:27
|
||||||
|
msgid "Use SSL (Specify 0 for No and 1 for Yes)"
|
||||||
|
msgstr "Utiliser SSL (spécifier 0 pour Non et 1 pour Oui)"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:28
|
#: evibes/settings/constance.py:28
|
||||||
msgid "SMTP host"
|
msgid "SMTP username"
|
||||||
msgstr ""
|
msgstr "Nom d'utilisateur SMTP"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:29
|
#: evibes/settings/constance.py:29
|
||||||
msgid "SMTP port"
|
msgid "SMTP password"
|
||||||
msgstr ""
|
msgstr "Mot de passe SMTP"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:30
|
#: evibes/settings/constance.py:30
|
||||||
msgid "Use TLS (Specify 0 for No and 1 for Yes)"
|
msgid "Mail from option"
|
||||||
msgstr ""
|
msgstr "L'adresse de l'expéditeur du courrier électronique"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:31
|
#: evibes/settings/constance.py:31
|
||||||
msgid "Use SSL (Specify 0 for No and 1 for Yes)"
|
msgid "Payment gateway URL"
|
||||||
msgstr ""
|
msgstr "URL de la passerelle de paiement"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:32
|
#: evibes/settings/constance.py:32
|
||||||
msgid "SMTP username"
|
msgid "Payment gateway token"
|
||||||
msgstr ""
|
msgstr "Jeton de passerelle de paiement"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:33
|
#: evibes/settings/constance.py:33
|
||||||
msgid "SMTP password"
|
msgid "Payment gateway minimum amount"
|
||||||
msgstr ""
|
msgstr "Montant minimum de la passerelle de paiement"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:34
|
#: evibes/settings/constance.py:34
|
||||||
msgid "Mail from option"
|
msgid "Payment gateway maximum amount"
|
||||||
msgstr ""
|
msgstr "Montant maximum de la passerelle de paiement"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:35
|
#: evibes/settings/constance.py:35
|
||||||
msgid "Payment gateway URL"
|
msgid "Exchange rate API key"
|
||||||
msgstr ""
|
msgstr "Clé API pour le taux de change"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:36
|
#: evibes/settings/constance.py:36
|
||||||
msgid "Payment gateway token"
|
msgid "OpenStreetMap Nominatim API URL"
|
||||||
msgstr ""
|
msgstr "URL de l'API OpenStreetMap Nominatim"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:37
|
#: evibes/settings/constance.py:37
|
||||||
msgid "Payment gateway minimum amount"
|
msgid "OpenAI API Key"
|
||||||
msgstr ""
|
msgstr "OpenAI API Key"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:38
|
|
||||||
msgid "Payment gateway maximum amount"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:39
|
|
||||||
msgid "Exchange rate API key"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:40
|
#: evibes/settings/constance.py:40
|
||||||
msgid "OpenStreetMap Nominatim API URL"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:41
|
|
||||||
msgid "OpenAI API Key"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:44
|
|
||||||
msgid "Abstract API Key, if empty - no Abstract features provided"
|
msgid "Abstract API Key, if empty - no Abstract features provided"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Clé API abstraite, si elle est vide - aucune caractéristique abstraite n'est"
|
||||||
|
" fournie"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:42
|
||||||
|
msgid "HTTP Proxy"
|
||||||
|
msgstr "HTTP Proxy"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:43
|
||||||
|
msgid "Disable buy functionality"
|
||||||
|
msgstr "Désactiver la fonctionnalité d'achat"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:46
|
#: evibes/settings/constance.py:46
|
||||||
msgid "HTTP Proxy"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:47
|
|
||||||
msgid "Disable buy functionality"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:50
|
|
||||||
msgid "An entity for storing advertisiment data"
|
msgid "An entity for storing advertisiment data"
|
||||||
msgstr ""
|
msgstr "Une entité pour stocker des données publicitaires"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:55
|
#: evibes/settings/constance.py:51
|
||||||
msgid "An entity for storing analytics data"
|
msgid "An entity for storing analytics data"
|
||||||
msgstr ""
|
msgstr "Une entité pour stocker des données analytiques"
|
||||||
|
|
||||||
#: evibes/settings/drf.py:49
|
#: evibes/settings/drf.py:49
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API "
|
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API documentation.\n"
|
||||||
"documentation.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API is designed to "
|
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API is designed to provide seamless integration for merchants selling a wide range of electronics. Through this API, partnered merchants can manage products, orders, and inventory with ease, while accessing real-time stock levels.\n"
|
||||||
"provide seamless integration for merchants selling a wide range of "
|
|
||||||
"electronics. Through this API, partnered merchants can manage products, "
|
|
||||||
"orders, and inventory with ease, while accessing real-time stock levels.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Key Features\n"
|
"## Key Features\n"
|
||||||
"- **Product Management:** Easily create, update, and manage your product "
|
"- **Product Management:** Easily create, update, and manage your product listings with detailed specifications.\n"
|
||||||
"listings with detailed specifications.\n"
|
"- **Order Processing:** Handle bulk orders efficiently with streamlined operations for merchants.\n"
|
||||||
"- **Order Processing:** Handle bulk orders efficiently with streamlined "
|
"- **Inventory Management:** Keep track of stock levels in real-time, ensuring smooth fulfillment.\n"
|
||||||
"operations for merchants.\n"
|
"- **Secure Transactions:** Secure and encrypted transactions to protect sensitive business information.\n"
|
||||||
"- **Inventory Management:** Keep track of stock levels in real-time, "
|
"- **Multi-Currency Support:** Expand your market reach with multi-currency transactions.\n"
|
||||||
"ensuring smooth fulfillment.\n"
|
"- **Real-Time Notifications:** Stay updated with instant alerts on stock changes and order statuses.\n"
|
||||||
"- **Secure Transactions:** Secure and encrypted transactions to protect "
|
|
||||||
"sensitive business information.\n"
|
|
||||||
"- **Multi-Currency Support:** Expand your market reach with multi-currency "
|
|
||||||
"transactions.\n"
|
|
||||||
"- **Real-Time Notifications:** Stay updated with instant alerts on stock "
|
|
||||||
"changes and order statuses.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Authentication\n"
|
"## Authentication\n"
|
||||||
"- Authentication is handled via your merchant token. Include the token in "
|
"- Authentication is handled via your merchant token. Include the token in the `X-EVIBES-B2B-AUTH` header of your requests in the format `Bearer <your_token>`.\n"
|
||||||
"the `X-EVIBES-B2B-AUTH` header of your requests in the format `Bearer "
|
|
||||||
"<your_token>`.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## I18N\n"
|
"## I18N\n"
|
||||||
"- Apply an `Accept-Language` header to use non-default language. A list of "
|
"- Apply an `Accept-Language` header to use non-default language. A list of all languages is available at `/app/languages/`.\n"
|
||||||
"all languages is available at `/app/languages/`.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Version\n"
|
"## Version\n"
|
||||||
"Current API version: {EVIBES_VERSION}\n"
|
"Current API version: {EVIBES_VERSION}\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"Bienvenue dans la documentation de l'API {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} Documentation de l'API B2B.\n"
|
||||||
|
"\n"
|
||||||
|
"L'API {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API est conçue pour offrir une intégration transparente aux commerçants qui vendent une large gamme de produits électroniques. Grâce à cette API, les commerçants partenaires peuvent gérer facilement les produits, les commandes et les stocks, tout en accédant aux niveaux de stock en temps réel.\n"
|
||||||
|
"\n"
|
||||||
|
"## Caractéristiques principales\n"
|
||||||
|
"- Gestion des produits:** Créez, mettez à jour et gérez facilement vos listes de produits avec des spécifications détaillées.\n"
|
||||||
|
"- Traitement des commandes:** Traitez efficacement les commandes en gros grâce à des opérations rationalisées pour les commerçants.\n"
|
||||||
|
"- Gestion des stocks:** Gardez une trace des niveaux de stock en temps réel, garantissant une exécution sans faille.\n"
|
||||||
|
"- Transactions sécurisées:** Transactions sécurisées et cryptées pour protéger les informations commerciales sensibles.\n"
|
||||||
|
"- Support multi-devises:** Élargissez votre marché grâce aux transactions multi-devises.\n"
|
||||||
|
"- Notifications en temps réel:** Restez informé grâce à des alertes instantanées sur les variations de stock et l'état des commandes.\n"
|
||||||
|
"\n"
|
||||||
|
"## Authentification\n"
|
||||||
|
"- L'authentification est gérée par votre jeton de commerçant. Incluez le jeton dans l'en-tête `X-EVIBES-B2B-AUTH` de vos requêtes au format `Bearer <votre_token>`.\n"
|
||||||
|
"\n"
|
||||||
|
"## I18N\n"
|
||||||
|
"- Appliquez un en-tête `Accept-Language` pour utiliser une langue autre que celle par défaut. Une liste de toutes les langues est disponible dans `/app/languages/`.\n"
|
||||||
|
"\n"
|
||||||
|
"## Version\n"
|
||||||
|
"Version actuelle de l'API : {EVIBES_VERSION}\n"
|
||||||
|
|
||||||
#: evibes/settings/drf.py:74
|
#: evibes/settings/drf.py:74
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} Platform API "
|
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} Platform API documentation.\n"
|
||||||
"documentation.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} API is the central hub for "
|
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} API is the central hub for managing product listings, monitoring orders, and accessing analytics for your electronics store. It provides RESTful endpoints for managing your store’s backend operations and includes both REST and GraphQL options.\n"
|
||||||
"managing product listings, monitoring orders, and accessing analytics for "
|
|
||||||
"your electronics store. It provides RESTful endpoints for managing your "
|
|
||||||
"store’s backend operations and includes both REST and GraphQL options.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Key Features\n"
|
"## Key Features\n"
|
||||||
"- **Product Catalog:** Manage product details, pricing, and availability.\n"
|
"- **Product Catalog:** Manage product details, pricing, and availability.\n"
|
||||||
"- **Order Management:** Access detailed order information and process "
|
"- **Order Management:** Access detailed order information and process customer requests efficiently.\n"
|
||||||
"customer requests efficiently.\n"
|
"- **User Roles & Permissions:** Set user roles and permissions for internal management.\n"
|
||||||
"- **User Roles & Permissions:** Set user roles and permissions for internal "
|
"- **Custom Integrations:** Connect your system with external platforms through powerful APIs.\n"
|
||||||
"management.\n"
|
"- **Detailed Reporting:** Generate comprehensive reports on orders, sales performance, and product data.\n"
|
||||||
"- **Custom Integrations:** Connect your system with external platforms "
|
"- **Real-Time Data:** Get live updates on inventory, pricing, and order statuses.\n"
|
||||||
"through powerful APIs.\n"
|
|
||||||
"- **Detailed Reporting:** Generate comprehensive reports on orders, sales "
|
|
||||||
"performance, and product data.\n"
|
|
||||||
"- **Real-Time Data:** Get live updates on inventory, pricing, and order "
|
|
||||||
"statuses.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Authentication\n"
|
"## Authentication\n"
|
||||||
"- Authentication is handled via JWT tokens. Include the token in the `X-"
|
"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer <your_token>`.\n"
|
||||||
"EVIBES-AUTH` header of your requests in the format `Bearer <your_token>`.\n"
|
"- Access token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600} {\"minutes\" if not DEBUG else \"hours\"}.\n"
|
||||||
"- Access token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\")."
|
"- Refresh token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 3600} hours.\n"
|
||||||
"total_seconds() // 60 if not DEBUG else 3600} {\"minutes\" if not DEBUG else "
|
|
||||||
"\"hours\"}.\n"
|
|
||||||
"- Refresh token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\")."
|
|
||||||
"total_seconds() // 3600} hours.\n"
|
|
||||||
"- Refresh tokens are automatically invalidated after usage.\n"
|
"- Refresh tokens are automatically invalidated after usage.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"## I18N\n"
|
"## I18N\n"
|
||||||
"- Apply an `Accept-Language` header to use non-default language. A list of "
|
"- Apply an `Accept-Language` header to use non-default language. A list of all languages is available at `/app/languages/`.\n"
|
||||||
"all languages is available at `/app/languages/`.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Version\n"
|
"## Version\n"
|
||||||
"Current API version: {EVIBES_VERSION}\n"
|
"Current API version: {EVIBES_VERSION}\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"Bienvenue dans la documentation de l'API {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} Documentation de l'API de la plate-forme.\n"
|
||||||
|
"\n"
|
||||||
|
"L'API {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} est le centre névralgique de la gestion des listes de produits, du suivi des commandes et de l'accès aux analyses pour votre magasin d'électronique. Elle fournit des points d'extrémité RESTful pour gérer les opérations de backend de votre magasin et comprend des options REST et GraphQL.\n"
|
||||||
|
"\n"
|
||||||
|
"## Caractéristiques principales\n"
|
||||||
|
"- Catalogue de produits:** Gérer les détails, les prix et la disponibilité des produits.\n"
|
||||||
|
"- Gestion des commandes:** Accédez aux informations détaillées des commandes et traitez efficacement les demandes des clients.\n"
|
||||||
|
"- Rôles et permissions des utilisateurs:** Définissez les rôles et permissions des utilisateurs pour la gestion interne.\n"
|
||||||
|
"- Intégrations personnalisées:** Connectez votre système à des plateformes externes grâce à des API puissantes.\n"
|
||||||
|
"- Rapports détaillés:** Générez des rapports complets sur les commandes, les performances de vente et les données sur les produits.\n"
|
||||||
|
"- Données en temps réel:** Obtenez des mises à jour en direct sur les stocks, les prix et les statuts des commandes.\n"
|
||||||
|
"\n"
|
||||||
|
"## Authentification\n"
|
||||||
|
"- L'authentification est gérée par des jetons JWT. Incluez le jeton dans l'en-tête `X-EVIBES-AUTH` de vos requêtes au format `Bearer <your_token>`.\n"
|
||||||
|
"- La durée de vie du jeton d'accès est de {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600} {\"minutes\" if not DEBUG else \"hours\"}.\n"
|
||||||
|
"- La durée de vie du jeton de rafraîchissement est de {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 3600} heures.\n"
|
||||||
|
"- Les jetons de rafraîchissement sont automatiquement invalidés après utilisation.\n"
|
||||||
|
"\n"
|
||||||
|
"## I18N\n"
|
||||||
|
"- Appliquer un en-tête `Accept-Language` pour utiliser une langue autre que celle par défaut. Une liste de toutes les langues est disponible dans `/app/languages/`.\n"
|
||||||
|
"\n"
|
||||||
|
"## Version\n"
|
||||||
|
"Version actuelle de l'API : {EVIBES_VERSION}\n"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:20
|
||||||
|
msgid "Home"
|
||||||
|
msgstr "Accueil"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:21
|
||||||
|
msgid "Documentation"
|
||||||
|
msgstr "Documentation"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:22
|
||||||
|
msgid "Storefront"
|
||||||
|
msgstr "Vitrine"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:23
|
||||||
|
msgid "Support"
|
||||||
|
msgstr "Soutien"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:26
|
||||||
|
msgid "GraphQL Docs"
|
||||||
|
msgstr "Docs GraphQL"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:31
|
||||||
|
msgid "Platform REST Docs"
|
||||||
|
msgstr "Docs REST de la plateforme"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:36
|
||||||
|
msgid "B2B REST Docs"
|
||||||
|
msgstr "B2B REST Docs"
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2.8.10\n"
|
"Project-Id-Version: EVIBES 2.8.10\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-06-21 22:42+0100\n"
|
"POT-Creation-Date: 2025-06-29 17:46+0100\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"
|
||||||
|
|
@ -40,83 +40,79 @@ msgstr ""
|
||||||
msgid "Phone number of the company"
|
msgid "Phone number of the company"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: evibes/settings/constance.py:26
|
#: evibes/settings/constance.py:24
|
||||||
msgid "Designates whether every product has one stock or not"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:28
|
|
||||||
msgid "SMTP host"
|
msgid "SMTP host"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: evibes/settings/constance.py:29
|
#: evibes/settings/constance.py:25
|
||||||
msgid "SMTP port"
|
msgid "SMTP port"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: evibes/settings/constance.py:30
|
#: evibes/settings/constance.py:26
|
||||||
msgid "Use TLS (Specify 0 for No and 1 for Yes)"
|
msgid "Use TLS (Specify 0 for No and 1 for Yes)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: evibes/settings/constance.py:31
|
#: evibes/settings/constance.py:27
|
||||||
msgid "Use SSL (Specify 0 for No and 1 for Yes)"
|
msgid "Use SSL (Specify 0 for No and 1 for Yes)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: evibes/settings/constance.py:32
|
#: evibes/settings/constance.py:28
|
||||||
msgid "SMTP username"
|
msgid "SMTP username"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: evibes/settings/constance.py:33
|
#: evibes/settings/constance.py:29
|
||||||
msgid "SMTP password"
|
msgid "SMTP password"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: evibes/settings/constance.py:34
|
#: evibes/settings/constance.py:30
|
||||||
msgid "Mail from option"
|
msgid "Mail from option"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: evibes/settings/constance.py:35
|
#: evibes/settings/constance.py:31
|
||||||
msgid "Payment gateway URL"
|
msgid "Payment gateway URL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: evibes/settings/constance.py:36
|
#: evibes/settings/constance.py:32
|
||||||
msgid "Payment gateway token"
|
msgid "Payment gateway token"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: evibes/settings/constance.py:37
|
#: evibes/settings/constance.py:33
|
||||||
msgid "Payment gateway minimum amount"
|
msgid "Payment gateway minimum amount"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: evibes/settings/constance.py:38
|
#: evibes/settings/constance.py:34
|
||||||
msgid "Payment gateway maximum amount"
|
msgid "Payment gateway maximum amount"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: evibes/settings/constance.py:39
|
#: evibes/settings/constance.py:35
|
||||||
msgid "Exchange rate API key"
|
msgid "Exchange rate API key"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: evibes/settings/constance.py:40
|
#: evibes/settings/constance.py:36
|
||||||
msgid "OpenStreetMap Nominatim API URL"
|
msgid "OpenStreetMap Nominatim API URL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: evibes/settings/constance.py:41
|
#: evibes/settings/constance.py:37
|
||||||
msgid "OpenAI API Key"
|
msgid "OpenAI API Key"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: evibes/settings/constance.py:44
|
#: evibes/settings/constance.py:40
|
||||||
msgid "Abstract API Key, if empty - no Abstract features provided"
|
msgid "Abstract API Key, if empty - no Abstract features provided"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: evibes/settings/constance.py:46
|
#: evibes/settings/constance.py:42
|
||||||
msgid "HTTP Proxy"
|
msgid "HTTP Proxy"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: evibes/settings/constance.py:47
|
#: evibes/settings/constance.py:43
|
||||||
msgid "Disable buy functionality"
|
msgid "Disable buy functionality"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: evibes/settings/constance.py:50
|
#: evibes/settings/constance.py:46
|
||||||
msgid "An entity for storing advertisiment data"
|
msgid "An entity for storing advertisiment data"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: evibes/settings/constance.py:55
|
#: evibes/settings/constance.py:51
|
||||||
msgid "An entity for storing analytics data"
|
msgid "An entity for storing analytics data"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
@ -199,3 +195,31 @@ msgid ""
|
||||||
"## Version\n"
|
"## Version\n"
|
||||||
"Current API version: {EVIBES_VERSION}\n"
|
"Current API version: {EVIBES_VERSION}\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:20
|
||||||
|
msgid "Home"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:21
|
||||||
|
msgid "Documentation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:22
|
||||||
|
msgid "Storefront"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:23
|
||||||
|
msgid "Support"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:26
|
||||||
|
msgid "GraphQL Docs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:31
|
||||||
|
msgid "Platform REST Docs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:36
|
||||||
|
msgid "B2B REST Docs"
|
||||||
|
msgstr ""
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -1,201 +1,241 @@
|
||||||
# EVIBES GETTEXT TRANSLATIONS
|
|
||||||
# Copyright (C) 2025 EGOR <FUREUNOIR> GORBUNOV
|
|
||||||
# This file is distributed under the same license as the EVIBES package.
|
|
||||||
# EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>, 2025.
|
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2.8.10\n"
|
"Project-Id-Version: EVIBES 2.8.10\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-06-21 22:42+0100\n"
|
"POT-Creation-Date: 2025-06-29 17:46+0100\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"
|
||||||
"Language: \n"
|
"Language: it-it\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:18
|
#: evibes/settings/constance.py:18
|
||||||
msgid "Name of the project"
|
msgid "Name of the project"
|
||||||
msgstr ""
|
msgstr "Nome del progetto"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:19
|
#: evibes/settings/constance.py:19
|
||||||
msgid "Frontend domain name"
|
msgid "Frontend domain name"
|
||||||
msgstr ""
|
msgstr "Nome di dominio del frontend"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:20
|
#: evibes/settings/constance.py:20
|
||||||
msgid "Base domain name"
|
msgid "Base domain name"
|
||||||
msgstr ""
|
msgstr "Nome di dominio di base"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:21
|
#: evibes/settings/constance.py:21
|
||||||
msgid "Name of the company"
|
msgid "Name of the company"
|
||||||
msgstr ""
|
msgstr "Nome della società"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:22
|
#: evibes/settings/constance.py:22
|
||||||
msgid "Address of the company"
|
msgid "Address of the company"
|
||||||
msgstr ""
|
msgstr "Indirizzo dell'azienda"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:23
|
#: evibes/settings/constance.py:23
|
||||||
msgid "Phone number of the company"
|
msgid "Phone number of the company"
|
||||||
msgstr ""
|
msgstr "Numero di telefono dell'azienda"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:24
|
||||||
|
msgid "SMTP host"
|
||||||
|
msgstr "Host SMTP"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:25
|
||||||
|
msgid "SMTP port"
|
||||||
|
msgstr "Porta SMTP"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:26
|
#: evibes/settings/constance.py:26
|
||||||
msgid "Designates whether every product has one stock or not"
|
msgid "Use TLS (Specify 0 for No and 1 for Yes)"
|
||||||
msgstr ""
|
msgstr "Usa TLS (specificare 0 per No e 1 per Sì)"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:27
|
||||||
|
msgid "Use SSL (Specify 0 for No and 1 for Yes)"
|
||||||
|
msgstr "Usa SSL (specificare 0 per No e 1 per Sì)"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:28
|
#: evibes/settings/constance.py:28
|
||||||
msgid "SMTP host"
|
msgid "SMTP username"
|
||||||
msgstr ""
|
msgstr "Nome utente SMTP"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:29
|
#: evibes/settings/constance.py:29
|
||||||
msgid "SMTP port"
|
msgid "SMTP password"
|
||||||
msgstr ""
|
msgstr "Password SMTP"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:30
|
#: evibes/settings/constance.py:30
|
||||||
msgid "Use TLS (Specify 0 for No and 1 for Yes)"
|
msgid "Mail from option"
|
||||||
msgstr ""
|
msgstr "L'indirizzo del mittente dell'e-mail"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:31
|
#: evibes/settings/constance.py:31
|
||||||
msgid "Use SSL (Specify 0 for No and 1 for Yes)"
|
msgid "Payment gateway URL"
|
||||||
msgstr ""
|
msgstr "URL del gateway di pagamento"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:32
|
#: evibes/settings/constance.py:32
|
||||||
msgid "SMTP username"
|
msgid "Payment gateway token"
|
||||||
msgstr ""
|
msgstr "Token del gateway di pagamento"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:33
|
#: evibes/settings/constance.py:33
|
||||||
msgid "SMTP password"
|
msgid "Payment gateway minimum amount"
|
||||||
msgstr ""
|
msgstr "Importo minimo del gateway di pagamento"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:34
|
#: evibes/settings/constance.py:34
|
||||||
msgid "Mail from option"
|
msgid "Payment gateway maximum amount"
|
||||||
msgstr ""
|
msgstr "Importo massimo del gateway di pagamento"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:35
|
#: evibes/settings/constance.py:35
|
||||||
msgid "Payment gateway URL"
|
msgid "Exchange rate API key"
|
||||||
msgstr ""
|
msgstr "Chiave API del tasso di cambio"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:36
|
#: evibes/settings/constance.py:36
|
||||||
msgid "Payment gateway token"
|
msgid "OpenStreetMap Nominatim API URL"
|
||||||
msgstr ""
|
msgstr "URL dell'API OpenStreetMap Nominatim"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:37
|
#: evibes/settings/constance.py:37
|
||||||
msgid "Payment gateway minimum amount"
|
msgid "OpenAI API Key"
|
||||||
msgstr ""
|
msgstr "Chiave API OpenAI"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:38
|
|
||||||
msgid "Payment gateway maximum amount"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:39
|
|
||||||
msgid "Exchange rate API key"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:40
|
#: evibes/settings/constance.py:40
|
||||||
msgid "OpenStreetMap Nominatim API URL"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:41
|
|
||||||
msgid "OpenAI API Key"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:44
|
|
||||||
msgid "Abstract API Key, if empty - no Abstract features provided"
|
msgid "Abstract API Key, if empty - no Abstract features provided"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Chiave API astratta, se vuota - non sono state fornite funzioni astratte."
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:42
|
||||||
|
msgid "HTTP Proxy"
|
||||||
|
msgstr "Proxy HTTP"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:43
|
||||||
|
msgid "Disable buy functionality"
|
||||||
|
msgstr "Disattivare la funzionalità di acquisto"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:46
|
#: evibes/settings/constance.py:46
|
||||||
msgid "HTTP Proxy"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:47
|
|
||||||
msgid "Disable buy functionality"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:50
|
|
||||||
msgid "An entity for storing advertisiment data"
|
msgid "An entity for storing advertisiment data"
|
||||||
msgstr ""
|
msgstr "Un'entità per la memorizzazione dei dati pubblicitari"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:55
|
#: evibes/settings/constance.py:51
|
||||||
msgid "An entity for storing analytics data"
|
msgid "An entity for storing analytics data"
|
||||||
msgstr ""
|
msgstr "Un'entità per la memorizzazione dei dati analitici"
|
||||||
|
|
||||||
#: evibes/settings/drf.py:49
|
#: evibes/settings/drf.py:49
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API "
|
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API documentation.\n"
|
||||||
"documentation.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API is designed to "
|
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API is designed to provide seamless integration for merchants selling a wide range of electronics. Through this API, partnered merchants can manage products, orders, and inventory with ease, while accessing real-time stock levels.\n"
|
||||||
"provide seamless integration for merchants selling a wide range of "
|
|
||||||
"electronics. Through this API, partnered merchants can manage products, "
|
|
||||||
"orders, and inventory with ease, while accessing real-time stock levels.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Key Features\n"
|
"## Key Features\n"
|
||||||
"- **Product Management:** Easily create, update, and manage your product "
|
"- **Product Management:** Easily create, update, and manage your product listings with detailed specifications.\n"
|
||||||
"listings with detailed specifications.\n"
|
"- **Order Processing:** Handle bulk orders efficiently with streamlined operations for merchants.\n"
|
||||||
"- **Order Processing:** Handle bulk orders efficiently with streamlined "
|
"- **Inventory Management:** Keep track of stock levels in real-time, ensuring smooth fulfillment.\n"
|
||||||
"operations for merchants.\n"
|
"- **Secure Transactions:** Secure and encrypted transactions to protect sensitive business information.\n"
|
||||||
"- **Inventory Management:** Keep track of stock levels in real-time, "
|
"- **Multi-Currency Support:** Expand your market reach with multi-currency transactions.\n"
|
||||||
"ensuring smooth fulfillment.\n"
|
"- **Real-Time Notifications:** Stay updated with instant alerts on stock changes and order statuses.\n"
|
||||||
"- **Secure Transactions:** Secure and encrypted transactions to protect "
|
|
||||||
"sensitive business information.\n"
|
|
||||||
"- **Multi-Currency Support:** Expand your market reach with multi-currency "
|
|
||||||
"transactions.\n"
|
|
||||||
"- **Real-Time Notifications:** Stay updated with instant alerts on stock "
|
|
||||||
"changes and order statuses.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Authentication\n"
|
"## Authentication\n"
|
||||||
"- Authentication is handled via your merchant token. Include the token in "
|
"- Authentication is handled via your merchant token. Include the token in the `X-EVIBES-B2B-AUTH` header of your requests in the format `Bearer <your_token>`.\n"
|
||||||
"the `X-EVIBES-B2B-AUTH` header of your requests in the format `Bearer "
|
|
||||||
"<your_token>`.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## I18N\n"
|
"## I18N\n"
|
||||||
"- Apply an `Accept-Language` header to use non-default language. A list of "
|
"- Apply an `Accept-Language` header to use non-default language. A list of all languages is available at `/app/languages/`.\n"
|
||||||
"all languages is available at `/app/languages/`.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Version\n"
|
"## Version\n"
|
||||||
"Current API version: {EVIBES_VERSION}\n"
|
"Current API version: {EVIBES_VERSION}\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"Benvenuti nella documentazione di {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} Documentazione dell'API B2B.\n"
|
||||||
|
"\n"
|
||||||
|
"L'API {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} API B2B è stata progettata per fornire un'integrazione perfetta ai commercianti che vendono un'ampia gamma di prodotti elettronici. Attraverso questa API, i commercianti partner possono gestire prodotti, ordini e inventario con facilità, accedendo ai livelli di stock in tempo reale.\n"
|
||||||
|
"\n"
|
||||||
|
"## Caratteristiche principali\n"
|
||||||
|
"- **Gestione dei prodotti:** Creare, aggiornare e gestire facilmente gli elenchi dei prodotti con specifiche dettagliate.\n"
|
||||||
|
"- Elaborazione degli ordini:** Gestione efficiente degli ordini di massa con operazioni semplificate per i commercianti.\n"
|
||||||
|
"- Gestione dell'inventario:** Tenere sotto controllo i livelli delle scorte in tempo reale, per garantire un'evasione senza intoppi.\n"
|
||||||
|
"- Transazioni sicure:** Transazioni sicure e crittografate per proteggere le informazioni aziendali sensibili.\n"
|
||||||
|
"- Supporto per più valute:** Espandete il vostro mercato con transazioni in più valute.\n"
|
||||||
|
"- Notifiche in tempo reale:** Rimanete aggiornati con avvisi istantanei sulle variazioni di stock e sullo stato degli ordini.\n"
|
||||||
|
"\n"
|
||||||
|
"## Autenticazione\n"
|
||||||
|
"- L'autenticazione è gestita tramite il token del commerciante. Includete il token nell'intestazione `X-EVIBES-B2B-AUTH` delle vostre richieste nel formato `Bearer <your_token>`.\n"
|
||||||
|
"\n"
|
||||||
|
"## I18N\n"
|
||||||
|
"- Applicare un'intestazione `Accept-Language` per utilizzare una lingua non predefinita. Un elenco di tutte le lingue è disponibile in `/app/languages/`.\n"
|
||||||
|
"\n"
|
||||||
|
"## Versione\n"
|
||||||
|
"Versione attuale dell'API: {EVIBES_VERSION}\n"
|
||||||
|
|
||||||
#: evibes/settings/drf.py:74
|
#: evibes/settings/drf.py:74
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} Platform API "
|
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} Platform API documentation.\n"
|
||||||
"documentation.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} API is the central hub for "
|
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} API is the central hub for managing product listings, monitoring orders, and accessing analytics for your electronics store. It provides RESTful endpoints for managing your store’s backend operations and includes both REST and GraphQL options.\n"
|
||||||
"managing product listings, monitoring orders, and accessing analytics for "
|
|
||||||
"your electronics store. It provides RESTful endpoints for managing your "
|
|
||||||
"store’s backend operations and includes both REST and GraphQL options.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Key Features\n"
|
"## Key Features\n"
|
||||||
"- **Product Catalog:** Manage product details, pricing, and availability.\n"
|
"- **Product Catalog:** Manage product details, pricing, and availability.\n"
|
||||||
"- **Order Management:** Access detailed order information and process "
|
"- **Order Management:** Access detailed order information and process customer requests efficiently.\n"
|
||||||
"customer requests efficiently.\n"
|
"- **User Roles & Permissions:** Set user roles and permissions for internal management.\n"
|
||||||
"- **User Roles & Permissions:** Set user roles and permissions for internal "
|
"- **Custom Integrations:** Connect your system with external platforms through powerful APIs.\n"
|
||||||
"management.\n"
|
"- **Detailed Reporting:** Generate comprehensive reports on orders, sales performance, and product data.\n"
|
||||||
"- **Custom Integrations:** Connect your system with external platforms "
|
"- **Real-Time Data:** Get live updates on inventory, pricing, and order statuses.\n"
|
||||||
"through powerful APIs.\n"
|
|
||||||
"- **Detailed Reporting:** Generate comprehensive reports on orders, sales "
|
|
||||||
"performance, and product data.\n"
|
|
||||||
"- **Real-Time Data:** Get live updates on inventory, pricing, and order "
|
|
||||||
"statuses.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Authentication\n"
|
"## Authentication\n"
|
||||||
"- Authentication is handled via JWT tokens. Include the token in the `X-"
|
"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer <your_token>`.\n"
|
||||||
"EVIBES-AUTH` header of your requests in the format `Bearer <your_token>`.\n"
|
"- Access token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600} {\"minutes\" if not DEBUG else \"hours\"}.\n"
|
||||||
"- Access token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\")."
|
"- Refresh token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 3600} hours.\n"
|
||||||
"total_seconds() // 60 if not DEBUG else 3600} {\"minutes\" if not DEBUG else "
|
|
||||||
"\"hours\"}.\n"
|
|
||||||
"- Refresh token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\")."
|
|
||||||
"total_seconds() // 3600} hours.\n"
|
|
||||||
"- Refresh tokens are automatically invalidated after usage.\n"
|
"- Refresh tokens are automatically invalidated after usage.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"## I18N\n"
|
"## I18N\n"
|
||||||
"- Apply an `Accept-Language` header to use non-default language. A list of "
|
"- Apply an `Accept-Language` header to use non-default language. A list of all languages is available at `/app/languages/`.\n"
|
||||||
"all languages is available at `/app/languages/`.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Version\n"
|
"## Version\n"
|
||||||
"Current API version: {EVIBES_VERSION}\n"
|
"Current API version: {EVIBES_VERSION}\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"Benvenuti nella documentazione della {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} Documentazione dell'API della piattaforma.\n"
|
||||||
|
"\n"
|
||||||
|
"L'API {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} è l'hub centrale per la gestione delle inserzioni dei prodotti, il monitoraggio degli ordini e l'accesso alle analisi del vostro negozio di elettronica. Fornisce endpoint REST per la gestione delle operazioni di backend del negozio e include opzioni REST e GraphQL.\n"
|
||||||
|
"\n"
|
||||||
|
"## Caratteristiche principali\n"
|
||||||
|
"- **Catalogo dei prodotti:** Gestione dei dettagli dei prodotti, dei prezzi e della disponibilità.\n"
|
||||||
|
"- Gestione degli ordini:** Accesso a informazioni dettagliate sugli ordini e gestione efficiente delle richieste dei clienti.\n"
|
||||||
|
"- Ruoli e permessi degli utenti:** Impostazione dei ruoli e dei permessi degli utenti per la gestione interna.\n"
|
||||||
|
"- Integrazioni personalizzate:** Collegare il sistema a piattaforme esterne tramite potenti API.\n"
|
||||||
|
"- Reporting dettagliato:** Generazione di report completi su ordini, performance di vendita e dati di prodotto.\n"
|
||||||
|
"- Dati in tempo reale:** Ricevere aggiornamenti in tempo reale su inventario, prezzi e stato degli ordini.\n"
|
||||||
|
"\n"
|
||||||
|
"## Autenticazione\n"
|
||||||
|
"- L'autenticazione è gestita tramite token JWT. Includere il token nell'intestazione `X-EVIBES-AUTH` delle richieste nel formato `Bearer <your_token>`.\n"
|
||||||
|
"- La durata del token di accesso è di {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600} {\"minutes\" if not DEBUG else \"hours\"}.\n"
|
||||||
|
"- La durata del token di aggiornamento è di {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 3600} ore.\n"
|
||||||
|
"- I token di aggiornamento vengono automaticamente invalidati dopo l'uso.\n"
|
||||||
|
"\n"
|
||||||
|
"## I18N\n"
|
||||||
|
"- Applicare un'intestazione `Accept-Language` per usare una lingua non predefinita. Un elenco di tutte le lingue è disponibile in `/app/languages/`.\n"
|
||||||
|
"\n"
|
||||||
|
"## Versione\n"
|
||||||
|
"Versione attuale dell'API: {EVIBES_VERSION}\n"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:20
|
||||||
|
msgid "Home"
|
||||||
|
msgstr "Casa"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:21
|
||||||
|
msgid "Documentation"
|
||||||
|
msgstr "Documentazione"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:22
|
||||||
|
msgid "Storefront"
|
||||||
|
msgstr "Storefront"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:23
|
||||||
|
msgid "Support"
|
||||||
|
msgstr "Supporto"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:26
|
||||||
|
msgid "GraphQL Docs"
|
||||||
|
msgstr "Documenti GraphQL"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:31
|
||||||
|
msgid "Platform REST Docs"
|
||||||
|
msgstr "Documenti della piattaforma REST"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:36
|
||||||
|
msgid "B2B REST Docs"
|
||||||
|
msgstr "Documenti REST B2B"
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -1,201 +1,240 @@
|
||||||
# EVIBES GETTEXT TRANSLATIONS
|
|
||||||
# Copyright (C) 2025 EGOR <FUREUNOIR> GORBUNOV
|
|
||||||
# This file is distributed under the same license as the EVIBES package.
|
|
||||||
# EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>, 2025.
|
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2.8.10\n"
|
"Project-Id-Version: EVIBES 2.8.10\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-06-21 22:42+0100\n"
|
"POT-Creation-Date: 2025-06-29 17:46+0100\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"
|
||||||
"Language: \n"
|
"Language: ja-jp\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:18
|
#: evibes/settings/constance.py:18
|
||||||
msgid "Name of the project"
|
msgid "Name of the project"
|
||||||
msgstr ""
|
msgstr "プロジェクト名"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:19
|
#: evibes/settings/constance.py:19
|
||||||
msgid "Frontend domain name"
|
msgid "Frontend domain name"
|
||||||
msgstr ""
|
msgstr "フロントエンド・ドメイン名"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:20
|
#: evibes/settings/constance.py:20
|
||||||
msgid "Base domain name"
|
msgid "Base domain name"
|
||||||
msgstr ""
|
msgstr "ベースドメイン名"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:21
|
#: evibes/settings/constance.py:21
|
||||||
msgid "Name of the company"
|
msgid "Name of the company"
|
||||||
msgstr ""
|
msgstr "会社名"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:22
|
#: evibes/settings/constance.py:22
|
||||||
msgid "Address of the company"
|
msgid "Address of the company"
|
||||||
msgstr ""
|
msgstr "会社住所"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:23
|
#: evibes/settings/constance.py:23
|
||||||
msgid "Phone number of the company"
|
msgid "Phone number of the company"
|
||||||
msgstr ""
|
msgstr "会社の電話番号"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:24
|
||||||
|
msgid "SMTP host"
|
||||||
|
msgstr "SMTPホスト"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:25
|
||||||
|
msgid "SMTP port"
|
||||||
|
msgstr "SMTPポート"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:26
|
#: evibes/settings/constance.py:26
|
||||||
msgid "Designates whether every product has one stock or not"
|
msgid "Use TLS (Specify 0 for No and 1 for Yes)"
|
||||||
msgstr ""
|
msgstr "TLSを使用する(「いいえ」は0、「はい」は1を指定する)"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:27
|
||||||
|
msgid "Use SSL (Specify 0 for No and 1 for Yes)"
|
||||||
|
msgstr "SSLを使用する(「いいえ」は0、「はい」は1を指定する)"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:28
|
#: evibes/settings/constance.py:28
|
||||||
msgid "SMTP host"
|
msgid "SMTP username"
|
||||||
msgstr ""
|
msgstr "SMTPユーザー名"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:29
|
#: evibes/settings/constance.py:29
|
||||||
msgid "SMTP port"
|
msgid "SMTP password"
|
||||||
msgstr ""
|
msgstr "SMTPパスワード"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:30
|
#: evibes/settings/constance.py:30
|
||||||
msgid "Use TLS (Specify 0 for No and 1 for Yes)"
|
msgid "Mail from option"
|
||||||
msgstr ""
|
msgstr "メール送信者のアドレス"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:31
|
#: evibes/settings/constance.py:31
|
||||||
msgid "Use SSL (Specify 0 for No and 1 for Yes)"
|
msgid "Payment gateway URL"
|
||||||
msgstr ""
|
msgstr "決済ゲートウェイURL"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:32
|
#: evibes/settings/constance.py:32
|
||||||
msgid "SMTP username"
|
msgid "Payment gateway token"
|
||||||
msgstr ""
|
msgstr "ペイメントゲートウェイ・トークン"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:33
|
#: evibes/settings/constance.py:33
|
||||||
msgid "SMTP password"
|
msgid "Payment gateway minimum amount"
|
||||||
msgstr ""
|
msgstr "ペイメントゲートウェイの最低金額"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:34
|
#: evibes/settings/constance.py:34
|
||||||
msgid "Mail from option"
|
msgid "Payment gateway maximum amount"
|
||||||
msgstr ""
|
msgstr "支払ゲートウェイ上限額"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:35
|
#: evibes/settings/constance.py:35
|
||||||
msgid "Payment gateway URL"
|
msgid "Exchange rate API key"
|
||||||
msgstr ""
|
msgstr "為替レートAPIキー"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:36
|
#: evibes/settings/constance.py:36
|
||||||
msgid "Payment gateway token"
|
msgid "OpenStreetMap Nominatim API URL"
|
||||||
msgstr ""
|
msgstr "OpenStreetMap Nominatim API URL"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:37
|
#: evibes/settings/constance.py:37
|
||||||
msgid "Payment gateway minimum amount"
|
msgid "OpenAI API Key"
|
||||||
msgstr ""
|
msgstr "OpenAI APIキー"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:38
|
|
||||||
msgid "Payment gateway maximum amount"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:39
|
|
||||||
msgid "Exchange rate API key"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:40
|
#: evibes/settings/constance.py:40
|
||||||
msgid "OpenStreetMap Nominatim API URL"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:41
|
|
||||||
msgid "OpenAI API Key"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:44
|
|
||||||
msgid "Abstract API Key, if empty - no Abstract features provided"
|
msgid "Abstract API Key, if empty - no Abstract features provided"
|
||||||
msgstr ""
|
msgstr "抽象APIキー、空の場合 - 抽象機能は提供されない"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:42
|
||||||
|
msgid "HTTP Proxy"
|
||||||
|
msgstr "HTTPプロキシ"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:43
|
||||||
|
msgid "Disable buy functionality"
|
||||||
|
msgstr "購入機能を無効にする"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:46
|
#: evibes/settings/constance.py:46
|
||||||
msgid "HTTP Proxy"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:47
|
|
||||||
msgid "Disable buy functionality"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:50
|
|
||||||
msgid "An entity for storing advertisiment data"
|
msgid "An entity for storing advertisiment data"
|
||||||
msgstr ""
|
msgstr "広告データを保存するエンティティ"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:55
|
#: evibes/settings/constance.py:51
|
||||||
msgid "An entity for storing analytics data"
|
msgid "An entity for storing analytics data"
|
||||||
msgstr ""
|
msgstr "分析データを保存するエンティティ"
|
||||||
|
|
||||||
#: evibes/settings/drf.py:49
|
#: evibes/settings/drf.py:49
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API "
|
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API documentation.\n"
|
||||||
"documentation.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API is designed to "
|
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API is designed to provide seamless integration for merchants selling a wide range of electronics. Through this API, partnered merchants can manage products, orders, and inventory with ease, while accessing real-time stock levels.\n"
|
||||||
"provide seamless integration for merchants selling a wide range of "
|
|
||||||
"electronics. Through this API, partnered merchants can manage products, "
|
|
||||||
"orders, and inventory with ease, while accessing real-time stock levels.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Key Features\n"
|
"## Key Features\n"
|
||||||
"- **Product Management:** Easily create, update, and manage your product "
|
"- **Product Management:** Easily create, update, and manage your product listings with detailed specifications.\n"
|
||||||
"listings with detailed specifications.\n"
|
"- **Order Processing:** Handle bulk orders efficiently with streamlined operations for merchants.\n"
|
||||||
"- **Order Processing:** Handle bulk orders efficiently with streamlined "
|
"- **Inventory Management:** Keep track of stock levels in real-time, ensuring smooth fulfillment.\n"
|
||||||
"operations for merchants.\n"
|
"- **Secure Transactions:** Secure and encrypted transactions to protect sensitive business information.\n"
|
||||||
"- **Inventory Management:** Keep track of stock levels in real-time, "
|
"- **Multi-Currency Support:** Expand your market reach with multi-currency transactions.\n"
|
||||||
"ensuring smooth fulfillment.\n"
|
"- **Real-Time Notifications:** Stay updated with instant alerts on stock changes and order statuses.\n"
|
||||||
"- **Secure Transactions:** Secure and encrypted transactions to protect "
|
|
||||||
"sensitive business information.\n"
|
|
||||||
"- **Multi-Currency Support:** Expand your market reach with multi-currency "
|
|
||||||
"transactions.\n"
|
|
||||||
"- **Real-Time Notifications:** Stay updated with instant alerts on stock "
|
|
||||||
"changes and order statuses.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Authentication\n"
|
"## Authentication\n"
|
||||||
"- Authentication is handled via your merchant token. Include the token in "
|
"- Authentication is handled via your merchant token. Include the token in the `X-EVIBES-B2B-AUTH` header of your requests in the format `Bearer <your_token>`.\n"
|
||||||
"the `X-EVIBES-B2B-AUTH` header of your requests in the format `Bearer "
|
|
||||||
"<your_token>`.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## I18N\n"
|
"## I18N\n"
|
||||||
"- Apply an `Accept-Language` header to use non-default language. A list of "
|
"- Apply an `Accept-Language` header to use non-default language. A list of all languages is available at `/app/languages/`.\n"
|
||||||
"all languages is available at `/app/languages/`.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Version\n"
|
"## Version\n"
|
||||||
"Current API version: {EVIBES_VERSION}\n"
|
"Current API version: {EVIBES_VERSION}\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"ようこそ{CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]}へ。B2B API ドキュメントへようこそ。\n"
|
||||||
|
"\n"
|
||||||
|
"PH_1__}はB2B API は、さまざまな電子機器を販売するマーチャントにシームレスな統合を提供するように設計されています。このAPIを通じて、パートナーである販売業者は、リアルタイムの在庫レベルにアクセスしながら、商品、注文、在庫を簡単に管理できます。\n"
|
||||||
|
"\n"
|
||||||
|
"## 主な機能\n"
|
||||||
|
"- 商品管理:** 商品リストを簡単に作成、更新、詳細な仕様で管理できます。\n"
|
||||||
|
"- 注文処理:**商人のための合理化された操作で効率的に大量注文を処理します。\n"
|
||||||
|
"- 在庫管理:**リアルタイムで在庫レベルを追跡し、円滑な履行を確保します。\n"
|
||||||
|
"- **安全なトランザクション: **機密ビジネス情報を保護する安全な、暗号化されたトランザクション。\n"
|
||||||
|
"- **多通貨サポート: **多通貨トランザクションとのあなたの市場の範囲を拡大して下さい。\n"
|
||||||
|
"- リアルタイム通知:**在庫変更と注文ステータスのインスタントアラートで更新されます。\n"
|
||||||
|
"\n"
|
||||||
|
"## 認証\n"
|
||||||
|
"- 認証はマーチャントトークンによって行われます。リクエストの `X-EVIBES-B2B-AUTH` ヘッダーに `Bearer <your_token>` という形式でトークンを含めてください。\n"
|
||||||
|
"\n"
|
||||||
|
"## 国際化\n"
|
||||||
|
"- デフォルト以外の言語を使う場合は `Accept-Language` ヘッダを付ける。全言語のリストは `/app/languages/` にあります。\n"
|
||||||
|
"\n"
|
||||||
|
"## バージョン\n"
|
||||||
|
"現在のAPIバージョン:現在のAPIバージョン: {EVIBES_VERSION}.\n"
|
||||||
|
|
||||||
#: evibes/settings/drf.py:74
|
#: evibes/settings/drf.py:74
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} Platform API "
|
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} Platform API documentation.\n"
|
||||||
"documentation.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} API is the central hub for "
|
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} API is the central hub for managing product listings, monitoring orders, and accessing analytics for your electronics store. It provides RESTful endpoints for managing your store’s backend operations and includes both REST and GraphQL options.\n"
|
||||||
"managing product listings, monitoring orders, and accessing analytics for "
|
|
||||||
"your electronics store. It provides RESTful endpoints for managing your "
|
|
||||||
"store’s backend operations and includes both REST and GraphQL options.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Key Features\n"
|
"## Key Features\n"
|
||||||
"- **Product Catalog:** Manage product details, pricing, and availability.\n"
|
"- **Product Catalog:** Manage product details, pricing, and availability.\n"
|
||||||
"- **Order Management:** Access detailed order information and process "
|
"- **Order Management:** Access detailed order information and process customer requests efficiently.\n"
|
||||||
"customer requests efficiently.\n"
|
"- **User Roles & Permissions:** Set user roles and permissions for internal management.\n"
|
||||||
"- **User Roles & Permissions:** Set user roles and permissions for internal "
|
"- **Custom Integrations:** Connect your system with external platforms through powerful APIs.\n"
|
||||||
"management.\n"
|
"- **Detailed Reporting:** Generate comprehensive reports on orders, sales performance, and product data.\n"
|
||||||
"- **Custom Integrations:** Connect your system with external platforms "
|
"- **Real-Time Data:** Get live updates on inventory, pricing, and order statuses.\n"
|
||||||
"through powerful APIs.\n"
|
|
||||||
"- **Detailed Reporting:** Generate comprehensive reports on orders, sales "
|
|
||||||
"performance, and product data.\n"
|
|
||||||
"- **Real-Time Data:** Get live updates on inventory, pricing, and order "
|
|
||||||
"statuses.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Authentication\n"
|
"## Authentication\n"
|
||||||
"- Authentication is handled via JWT tokens. Include the token in the `X-"
|
"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer <your_token>`.\n"
|
||||||
"EVIBES-AUTH` header of your requests in the format `Bearer <your_token>`.\n"
|
"- Access token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600} {\"minutes\" if not DEBUG else \"hours\"}.\n"
|
||||||
"- Access token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\")."
|
"- Refresh token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 3600} hours.\n"
|
||||||
"total_seconds() // 60 if not DEBUG else 3600} {\"minutes\" if not DEBUG else "
|
|
||||||
"\"hours\"}.\n"
|
|
||||||
"- Refresh token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\")."
|
|
||||||
"total_seconds() // 3600} hours.\n"
|
|
||||||
"- Refresh tokens are automatically invalidated after usage.\n"
|
"- Refresh tokens are automatically invalidated after usage.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"## I18N\n"
|
"## I18N\n"
|
||||||
"- Apply an `Accept-Language` header to use non-default language. A list of "
|
"- Apply an `Accept-Language` header to use non-default language. A list of all languages is available at `/app/languages/`.\n"
|
||||||
"all languages is available at `/app/languages/`.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Version\n"
|
"## Version\n"
|
||||||
"Current API version: {EVIBES_VERSION}\n"
|
"Current API version: {EVIBES_VERSION}\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"ようこそ{CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]}へ。Platform API ドキュメントへようこそ。\n"
|
||||||
|
"\n"
|
||||||
|
"PH_1__}はAPI は、商品リストの管理、注文の監視、家電量販店の分析へのアクセスを行うための中心的なハブです。ストアのバックエンド操作を管理するためのRESTfulエンドポイントを提供し、RESTとGraphQLの両方のオプションがあります。\n"
|
||||||
|
"\n"
|
||||||
|
"## 主な機能\n"
|
||||||
|
"- 商品カタログ:** 商品の詳細、価格、在庫状況を管理します。\n"
|
||||||
|
"- 注文管理:** 詳細な注文情報にアクセスし、顧客のリクエストを効率的に処理します。\n"
|
||||||
|
"- ユーザーの役割と権限:**内部管理のためのユーザーの役割と権限を設定します。\n"
|
||||||
|
"- カスタム統合:**強力なAPIを介して外部プラットフォームとシステムを接続します。\n"
|
||||||
|
"- **詳細なレポート:**受注、販売実績、および製品データに関する包括的なレポートを生成します。\n"
|
||||||
|
"- **リアルタイムデータ:**在庫、価格、注文状況のライブ更新を取得します。\n"
|
||||||
|
"\n"
|
||||||
|
"## 認証\n"
|
||||||
|
"- 認証はJWTトークンで行われます。リクエストの `X-EVIBES-AUTH` ヘッダーに、`Bearer <your_token>` という形式でトークンを含めてください。\n"
|
||||||
|
"- アクセストークンの有効期限は {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600} です。{\"minutes\" if not DEBUG else \"hours\"}です。\n"
|
||||||
|
"- リフレッシュ・トークンの有効期限は {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 3600} 時間です。\n"
|
||||||
|
"- リフレッシュトークンは使用後に自動的に無効になります。\n"
|
||||||
|
"\n"
|
||||||
|
"## I18N\n"
|
||||||
|
"- デフォルト以外の言語を使用するには `Accept-Language` ヘッダーを適用する。全言語のリストは `/app/languages/` にあります。\n"
|
||||||
|
"\n"
|
||||||
|
"## バージョン\n"
|
||||||
|
"現在のAPIバージョン:現在のAPIバージョン: {EVIBES_VERSION}.\n"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:20
|
||||||
|
msgid "Home"
|
||||||
|
msgstr "ホーム"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:21
|
||||||
|
msgid "Documentation"
|
||||||
|
msgstr "ドキュメンテーション"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:22
|
||||||
|
msgid "Storefront"
|
||||||
|
msgstr "ストアフロント"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:23
|
||||||
|
msgid "Support"
|
||||||
|
msgstr "サポート"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:26
|
||||||
|
msgid "GraphQL Docs"
|
||||||
|
msgstr "GraphQLドキュメント"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:31
|
||||||
|
msgid "Platform REST Docs"
|
||||||
|
msgstr "プラットフォームRESTドキュメント"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:36
|
||||||
|
msgid "B2B REST Docs"
|
||||||
|
msgstr "B2B REST ドキュメント"
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2.8.10\n"
|
"Project-Id-Version: EVIBES 2.8.10\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-06-21 22:42+0100\n"
|
"POT-Creation-Date: 2025-06-29 17:46+0100\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"
|
||||||
|
|
@ -40,83 +40,79 @@ msgstr ""
|
||||||
msgid "Phone number of the company"
|
msgid "Phone number of the company"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: evibes/settings/constance.py:26
|
#: evibes/settings/constance.py:24
|
||||||
msgid "Designates whether every product has one stock or not"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:28
|
|
||||||
msgid "SMTP host"
|
msgid "SMTP host"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: evibes/settings/constance.py:29
|
#: evibes/settings/constance.py:25
|
||||||
msgid "SMTP port"
|
msgid "SMTP port"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: evibes/settings/constance.py:30
|
#: evibes/settings/constance.py:26
|
||||||
msgid "Use TLS (Specify 0 for No and 1 for Yes)"
|
msgid "Use TLS (Specify 0 for No and 1 for Yes)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: evibes/settings/constance.py:31
|
#: evibes/settings/constance.py:27
|
||||||
msgid "Use SSL (Specify 0 for No and 1 for Yes)"
|
msgid "Use SSL (Specify 0 for No and 1 for Yes)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: evibes/settings/constance.py:32
|
#: evibes/settings/constance.py:28
|
||||||
msgid "SMTP username"
|
msgid "SMTP username"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: evibes/settings/constance.py:33
|
#: evibes/settings/constance.py:29
|
||||||
msgid "SMTP password"
|
msgid "SMTP password"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: evibes/settings/constance.py:34
|
#: evibes/settings/constance.py:30
|
||||||
msgid "Mail from option"
|
msgid "Mail from option"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: evibes/settings/constance.py:35
|
#: evibes/settings/constance.py:31
|
||||||
msgid "Payment gateway URL"
|
msgid "Payment gateway URL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: evibes/settings/constance.py:36
|
#: evibes/settings/constance.py:32
|
||||||
msgid "Payment gateway token"
|
msgid "Payment gateway token"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: evibes/settings/constance.py:37
|
#: evibes/settings/constance.py:33
|
||||||
msgid "Payment gateway minimum amount"
|
msgid "Payment gateway minimum amount"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: evibes/settings/constance.py:38
|
#: evibes/settings/constance.py:34
|
||||||
msgid "Payment gateway maximum amount"
|
msgid "Payment gateway maximum amount"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: evibes/settings/constance.py:39
|
#: evibes/settings/constance.py:35
|
||||||
msgid "Exchange rate API key"
|
msgid "Exchange rate API key"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: evibes/settings/constance.py:40
|
#: evibes/settings/constance.py:36
|
||||||
msgid "OpenStreetMap Nominatim API URL"
|
msgid "OpenStreetMap Nominatim API URL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: evibes/settings/constance.py:41
|
#: evibes/settings/constance.py:37
|
||||||
msgid "OpenAI API Key"
|
msgid "OpenAI API Key"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: evibes/settings/constance.py:44
|
#: evibes/settings/constance.py:40
|
||||||
msgid "Abstract API Key, if empty - no Abstract features provided"
|
msgid "Abstract API Key, if empty - no Abstract features provided"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: evibes/settings/constance.py:46
|
#: evibes/settings/constance.py:42
|
||||||
msgid "HTTP Proxy"
|
msgid "HTTP Proxy"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: evibes/settings/constance.py:47
|
#: evibes/settings/constance.py:43
|
||||||
msgid "Disable buy functionality"
|
msgid "Disable buy functionality"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: evibes/settings/constance.py:50
|
#: evibes/settings/constance.py:46
|
||||||
msgid "An entity for storing advertisiment data"
|
msgid "An entity for storing advertisiment data"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: evibes/settings/constance.py:55
|
#: evibes/settings/constance.py:51
|
||||||
msgid "An entity for storing analytics data"
|
msgid "An entity for storing analytics data"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
@ -199,3 +195,31 @@ msgid ""
|
||||||
"## Version\n"
|
"## Version\n"
|
||||||
"Current API version: {EVIBES_VERSION}\n"
|
"Current API version: {EVIBES_VERSION}\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:20
|
||||||
|
msgid "Home"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:21
|
||||||
|
msgid "Documentation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:22
|
||||||
|
msgid "Storefront"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:23
|
||||||
|
msgid "Support"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:26
|
||||||
|
msgid "GraphQL Docs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:31
|
||||||
|
msgid "Platform REST Docs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:36
|
||||||
|
msgid "B2B REST Docs"
|
||||||
|
msgstr ""
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -1,201 +1,241 @@
|
||||||
# EVIBES GETTEXT TRANSLATIONS
|
|
||||||
# Copyright (C) 2025 EGOR <FUREUNOIR> GORBUNOV
|
|
||||||
# This file is distributed under the same license as the EVIBES package.
|
|
||||||
# EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>, 2025.
|
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2.8.10\n"
|
"Project-Id-Version: EVIBES 2.8.10\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-06-21 22:42+0100\n"
|
"POT-Creation-Date: 2025-06-29 17:46+0100\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"
|
||||||
"Language: \n"
|
"Language: nl-nl\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:18
|
#: evibes/settings/constance.py:18
|
||||||
msgid "Name of the project"
|
msgid "Name of the project"
|
||||||
msgstr ""
|
msgstr "Naam van het project"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:19
|
#: evibes/settings/constance.py:19
|
||||||
msgid "Frontend domain name"
|
msgid "Frontend domain name"
|
||||||
msgstr ""
|
msgstr "Frontend domeinnaam"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:20
|
#: evibes/settings/constance.py:20
|
||||||
msgid "Base domain name"
|
msgid "Base domain name"
|
||||||
msgstr ""
|
msgstr "Basis domeinnaam"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:21
|
#: evibes/settings/constance.py:21
|
||||||
msgid "Name of the company"
|
msgid "Name of the company"
|
||||||
msgstr ""
|
msgstr "Naam van het bedrijf"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:22
|
#: evibes/settings/constance.py:22
|
||||||
msgid "Address of the company"
|
msgid "Address of the company"
|
||||||
msgstr ""
|
msgstr "Adres van het bedrijf"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:23
|
#: evibes/settings/constance.py:23
|
||||||
msgid "Phone number of the company"
|
msgid "Phone number of the company"
|
||||||
msgstr ""
|
msgstr "Telefoonnummer van het bedrijf"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:24
|
||||||
|
msgid "SMTP host"
|
||||||
|
msgstr "SMTP host"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:25
|
||||||
|
msgid "SMTP port"
|
||||||
|
msgstr "SMTP poort"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:26
|
#: evibes/settings/constance.py:26
|
||||||
msgid "Designates whether every product has one stock or not"
|
msgid "Use TLS (Specify 0 for No and 1 for Yes)"
|
||||||
msgstr ""
|
msgstr "TLS gebruiken (geef 0 op voor Nee en 1 voor Ja)"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:27
|
||||||
|
msgid "Use SSL (Specify 0 for No and 1 for Yes)"
|
||||||
|
msgstr "SSL gebruiken (geef 0 op voor Nee en 1 voor Ja)"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:28
|
#: evibes/settings/constance.py:28
|
||||||
msgid "SMTP host"
|
msgid "SMTP username"
|
||||||
msgstr ""
|
msgstr "SMTP gebruikersnaam"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:29
|
#: evibes/settings/constance.py:29
|
||||||
msgid "SMTP port"
|
msgid "SMTP password"
|
||||||
msgstr ""
|
msgstr "SMTP wachtwoord"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:30
|
#: evibes/settings/constance.py:30
|
||||||
msgid "Use TLS (Specify 0 for No and 1 for Yes)"
|
msgid "Mail from option"
|
||||||
msgstr ""
|
msgstr "Het adres van de afzender van de e-mail"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:31
|
#: evibes/settings/constance.py:31
|
||||||
msgid "Use SSL (Specify 0 for No and 1 for Yes)"
|
msgid "Payment gateway URL"
|
||||||
msgstr ""
|
msgstr "URL betalingsgateway"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:32
|
#: evibes/settings/constance.py:32
|
||||||
msgid "SMTP username"
|
msgid "Payment gateway token"
|
||||||
msgstr ""
|
msgstr "Betaal gateway token"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:33
|
#: evibes/settings/constance.py:33
|
||||||
msgid "SMTP password"
|
msgid "Payment gateway minimum amount"
|
||||||
msgstr ""
|
msgstr "Minimumbedrag betalingsgateway"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:34
|
#: evibes/settings/constance.py:34
|
||||||
msgid "Mail from option"
|
msgid "Payment gateway maximum amount"
|
||||||
msgstr ""
|
msgstr "Maximumbedrag betalingsgateway"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:35
|
#: evibes/settings/constance.py:35
|
||||||
msgid "Payment gateway URL"
|
msgid "Exchange rate API key"
|
||||||
msgstr ""
|
msgstr "Wisselkoers API sleutel"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:36
|
#: evibes/settings/constance.py:36
|
||||||
msgid "Payment gateway token"
|
msgid "OpenStreetMap Nominatim API URL"
|
||||||
msgstr ""
|
msgstr "OpenStreetMap Nominatim API URL"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:37
|
#: evibes/settings/constance.py:37
|
||||||
msgid "Payment gateway minimum amount"
|
msgid "OpenAI API Key"
|
||||||
msgstr ""
|
msgstr "OpenAI API sleutel"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:38
|
|
||||||
msgid "Payment gateway maximum amount"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:39
|
|
||||||
msgid "Exchange rate API key"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:40
|
#: evibes/settings/constance.py:40
|
||||||
msgid "OpenStreetMap Nominatim API URL"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:41
|
|
||||||
msgid "OpenAI API Key"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:44
|
|
||||||
msgid "Abstract API Key, if empty - no Abstract features provided"
|
msgid "Abstract API Key, if empty - no Abstract features provided"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Abstracte API-sleutel, indien leeg - geen abstracte functies beschikbaar"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:42
|
||||||
|
msgid "HTTP Proxy"
|
||||||
|
msgstr "HTTP-proxy"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:43
|
||||||
|
msgid "Disable buy functionality"
|
||||||
|
msgstr "Koopfunctie uitschakelen"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:46
|
#: evibes/settings/constance.py:46
|
||||||
msgid "HTTP Proxy"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:47
|
|
||||||
msgid "Disable buy functionality"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:50
|
|
||||||
msgid "An entity for storing advertisiment data"
|
msgid "An entity for storing advertisiment data"
|
||||||
msgstr ""
|
msgstr "Een entiteit voor het opslaan van adverteerdersgegevens"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:55
|
#: evibes/settings/constance.py:51
|
||||||
msgid "An entity for storing analytics data"
|
msgid "An entity for storing analytics data"
|
||||||
msgstr ""
|
msgstr "Een entiteit voor het opslaan van analytische gegevens"
|
||||||
|
|
||||||
#: evibes/settings/drf.py:49
|
#: evibes/settings/drf.py:49
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API "
|
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API documentation.\n"
|
||||||
"documentation.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API is designed to "
|
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API is designed to provide seamless integration for merchants selling a wide range of electronics. Through this API, partnered merchants can manage products, orders, and inventory with ease, while accessing real-time stock levels.\n"
|
||||||
"provide seamless integration for merchants selling a wide range of "
|
|
||||||
"electronics. Through this API, partnered merchants can manage products, "
|
|
||||||
"orders, and inventory with ease, while accessing real-time stock levels.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Key Features\n"
|
"## Key Features\n"
|
||||||
"- **Product Management:** Easily create, update, and manage your product "
|
"- **Product Management:** Easily create, update, and manage your product listings with detailed specifications.\n"
|
||||||
"listings with detailed specifications.\n"
|
"- **Order Processing:** Handle bulk orders efficiently with streamlined operations for merchants.\n"
|
||||||
"- **Order Processing:** Handle bulk orders efficiently with streamlined "
|
"- **Inventory Management:** Keep track of stock levels in real-time, ensuring smooth fulfillment.\n"
|
||||||
"operations for merchants.\n"
|
"- **Secure Transactions:** Secure and encrypted transactions to protect sensitive business information.\n"
|
||||||
"- **Inventory Management:** Keep track of stock levels in real-time, "
|
"- **Multi-Currency Support:** Expand your market reach with multi-currency transactions.\n"
|
||||||
"ensuring smooth fulfillment.\n"
|
"- **Real-Time Notifications:** Stay updated with instant alerts on stock changes and order statuses.\n"
|
||||||
"- **Secure Transactions:** Secure and encrypted transactions to protect "
|
|
||||||
"sensitive business information.\n"
|
|
||||||
"- **Multi-Currency Support:** Expand your market reach with multi-currency "
|
|
||||||
"transactions.\n"
|
|
||||||
"- **Real-Time Notifications:** Stay updated with instant alerts on stock "
|
|
||||||
"changes and order statuses.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Authentication\n"
|
"## Authentication\n"
|
||||||
"- Authentication is handled via your merchant token. Include the token in "
|
"- Authentication is handled via your merchant token. Include the token in the `X-EVIBES-B2B-AUTH` header of your requests in the format `Bearer <your_token>`.\n"
|
||||||
"the `X-EVIBES-B2B-AUTH` header of your requests in the format `Bearer "
|
|
||||||
"<your_token>`.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## I18N\n"
|
"## I18N\n"
|
||||||
"- Apply an `Accept-Language` header to use non-default language. A list of "
|
"- Apply an `Accept-Language` header to use non-default language. A list of all languages is available at `/app/languages/`.\n"
|
||||||
"all languages is available at `/app/languages/`.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Version\n"
|
"## Version\n"
|
||||||
"Current API version: {EVIBES_VERSION}\n"
|
"Current API version: {EVIBES_VERSION}\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"Welkom bij de {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API documentatie.\n"
|
||||||
|
"\n"
|
||||||
|
"De {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API is ontworpen om naadloze integratie te bieden voor verkopers van een breed scala aan elektronica. Via deze API kunnen handelaren met wie u samenwerkt eenvoudig producten, bestellingen en voorraden beheren, terwijl u ook toegang hebt tot realtime voorraadniveaus.\n"
|
||||||
|
"\n"
|
||||||
|
"## Belangrijkste functies\n"
|
||||||
|
"- **Productbeheer:**Maak, update en beheer eenvoudig je productlijsten met gedetailleerde specificaties.\n"
|
||||||
|
"- Orderverwerking:** Behandel bulkorders efficiënt met gestroomlijnde operaties voor verkopers.\n"
|
||||||
|
"- Voorraadbeheer:** Houd voorraadniveaus in real-time bij, voor een soepele afhandeling.\n"
|
||||||
|
"- **Veilige transacties:**Veiligde en versleutelde transacties om gevoelige bedrijfsinformatie te beschermen.\n"
|
||||||
|
"- Ondersteuning voor meerdere valuta:** Vergroot uw marktbereik met transacties in meerdere valuta.\n"
|
||||||
|
"- **Real-Time Meldingen:** Blijf op de hoogte met directe meldingen over voorraadwijzigingen en orderstatussen.\n"
|
||||||
|
"\n"
|
||||||
|
"## Authenticatie\n"
|
||||||
|
"- Authenticatie wordt afgehandeld via uw handelaarstoken. Neem het token op in de `X-EVIBES-B2B-AUTH` header van je verzoeken in het formaat `Bearer <uw_token>`.\n"
|
||||||
|
"\n"
|
||||||
|
"## I18N\n"
|
||||||
|
"- Gebruik een `Accept-Language` header om een niet-standaard taal te gebruiken. Een lijst van alle talen is beschikbaar op `/app/languages/`.\n"
|
||||||
|
"\n"
|
||||||
|
"## Versie\n"
|
||||||
|
"Huidige API-versie: {EVIBES_VERSION}\n"
|
||||||
|
|
||||||
#: evibes/settings/drf.py:74
|
#: evibes/settings/drf.py:74
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} Platform API "
|
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} Platform API documentation.\n"
|
||||||
"documentation.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} API is the central hub for "
|
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} API is the central hub for managing product listings, monitoring orders, and accessing analytics for your electronics store. It provides RESTful endpoints for managing your store’s backend operations and includes both REST and GraphQL options.\n"
|
||||||
"managing product listings, monitoring orders, and accessing analytics for "
|
|
||||||
"your electronics store. It provides RESTful endpoints for managing your "
|
|
||||||
"store’s backend operations and includes both REST and GraphQL options.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Key Features\n"
|
"## Key Features\n"
|
||||||
"- **Product Catalog:** Manage product details, pricing, and availability.\n"
|
"- **Product Catalog:** Manage product details, pricing, and availability.\n"
|
||||||
"- **Order Management:** Access detailed order information and process "
|
"- **Order Management:** Access detailed order information and process customer requests efficiently.\n"
|
||||||
"customer requests efficiently.\n"
|
"- **User Roles & Permissions:** Set user roles and permissions for internal management.\n"
|
||||||
"- **User Roles & Permissions:** Set user roles and permissions for internal "
|
"- **Custom Integrations:** Connect your system with external platforms through powerful APIs.\n"
|
||||||
"management.\n"
|
"- **Detailed Reporting:** Generate comprehensive reports on orders, sales performance, and product data.\n"
|
||||||
"- **Custom Integrations:** Connect your system with external platforms "
|
"- **Real-Time Data:** Get live updates on inventory, pricing, and order statuses.\n"
|
||||||
"through powerful APIs.\n"
|
|
||||||
"- **Detailed Reporting:** Generate comprehensive reports on orders, sales "
|
|
||||||
"performance, and product data.\n"
|
|
||||||
"- **Real-Time Data:** Get live updates on inventory, pricing, and order "
|
|
||||||
"statuses.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Authentication\n"
|
"## Authentication\n"
|
||||||
"- Authentication is handled via JWT tokens. Include the token in the `X-"
|
"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer <your_token>`.\n"
|
||||||
"EVIBES-AUTH` header of your requests in the format `Bearer <your_token>`.\n"
|
"- Access token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600} {\"minutes\" if not DEBUG else \"hours\"}.\n"
|
||||||
"- Access token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\")."
|
"- Refresh token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 3600} hours.\n"
|
||||||
"total_seconds() // 60 if not DEBUG else 3600} {\"minutes\" if not DEBUG else "
|
|
||||||
"\"hours\"}.\n"
|
|
||||||
"- Refresh token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\")."
|
|
||||||
"total_seconds() // 3600} hours.\n"
|
|
||||||
"- Refresh tokens are automatically invalidated after usage.\n"
|
"- Refresh tokens are automatically invalidated after usage.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"## I18N\n"
|
"## I18N\n"
|
||||||
"- Apply an `Accept-Language` header to use non-default language. A list of "
|
"- Apply an `Accept-Language` header to use non-default language. A list of all languages is available at `/app/languages/`.\n"
|
||||||
"all languages is available at `/app/languages/`.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Version\n"
|
"## Version\n"
|
||||||
"Current API version: {EVIBES_VERSION}\n"
|
"Current API version: {EVIBES_VERSION}\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"Welkom bij de {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} Platform API documentatie.\n"
|
||||||
|
"\n"
|
||||||
|
"De {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} API is de centrale hub voor het beheren van productoverzichten, het controleren van bestellingen en het opvragen van analyses voor uw elektronicawinkel. De API biedt REST-achtige eindpunten voor het beheer van de back-end activiteiten van uw winkel en bevat zowel REST- als GraphQL-opties.\n"
|
||||||
|
"\n"
|
||||||
|
"## Belangrijkste functies\n"
|
||||||
|
"- **Productcatalogus:** Beheer productgegevens, prijzen en beschikbaarheid.\n"
|
||||||
|
"- Orderbeheer:**Toegang tot gedetailleerde orderinformatie en efficiënte verwerking van klantverzoeken.\n"
|
||||||
|
"- **Gebruikersrollen en -rechten:** Stel gebruikersrollen en -rechten in voor intern beheer.\n"
|
||||||
|
"- **Aangepaste integraties:** Verbind uw systeem met externe platforms via krachtige API's.\n"
|
||||||
|
"- **Detailrapportage:** Genereer uitgebreide rapporten over bestellingen, verkoopprestaties en productgegevens.\n"
|
||||||
|
"- Realtime gegevens:** Ontvang live updates over voorraad, prijzen en orderstatussen.\n"
|
||||||
|
"\n"
|
||||||
|
"## Authenticatie\n"
|
||||||
|
"- Authenticatie wordt afgehandeld via JWT-tokens. Neem het token op in de `X-EVIBES-AUTH` header van uw verzoeken in het formaat `Bearer <uw_token>`.\n"
|
||||||
|
"- De levensduur van het toegangstoken is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600} {\"minutes\" if not DEBUG else \"hours\"}.\n"
|
||||||
|
"- De levensduur van een verversingstoken is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 3600} uur.\n"
|
||||||
|
"- Refresh tokens worden na gebruik automatisch ongeldig gemaakt.\n"
|
||||||
|
"\n"
|
||||||
|
"## I18N\n"
|
||||||
|
"- Pas een `Accept-Language` header toe om een niet-standaard taal te gebruiken. Een lijst van alle talen is beschikbaar op `/app/languages/`.\n"
|
||||||
|
"\n"
|
||||||
|
"## Versie\n"
|
||||||
|
"Huidige API-versie: {EVIBES_VERSION}\n"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:20
|
||||||
|
msgid "Home"
|
||||||
|
msgstr "Home"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:21
|
||||||
|
msgid "Documentation"
|
||||||
|
msgstr "Documentatie"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:22
|
||||||
|
msgid "Storefront"
|
||||||
|
msgstr "Winkelpui"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:23
|
||||||
|
msgid "Support"
|
||||||
|
msgstr "Ondersteuning"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:26
|
||||||
|
msgid "GraphQL Docs"
|
||||||
|
msgstr "GraphQL-documenten"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:31
|
||||||
|
msgid "Platform REST Docs"
|
||||||
|
msgstr "Platform REST-documenten"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:36
|
||||||
|
msgid "B2B REST Docs"
|
||||||
|
msgstr "B2B REST-documenten"
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -1,201 +1,240 @@
|
||||||
# EVIBES GETTEXT TRANSLATIONS
|
|
||||||
# Copyright (C) 2025 EGOR <FUREUNOIR> GORBUNOV
|
|
||||||
# This file is distributed under the same license as the EVIBES package.
|
|
||||||
# EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>, 2025.
|
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: EVIBES 2.8.10\n"
|
"Project-Id-Version: EVIBES 2.8.10\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-06-21 22:42+0100\n"
|
"POT-Creation-Date: 2025-06-29 17:46+0100\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"
|
||||||
"Language: \n"
|
"Language: pl-pl\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:18
|
#: evibes/settings/constance.py:18
|
||||||
msgid "Name of the project"
|
msgid "Name of the project"
|
||||||
msgstr ""
|
msgstr "Nazwa projektu"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:19
|
#: evibes/settings/constance.py:19
|
||||||
msgid "Frontend domain name"
|
msgid "Frontend domain name"
|
||||||
msgstr ""
|
msgstr "Nazwa domeny frontendu"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:20
|
#: evibes/settings/constance.py:20
|
||||||
msgid "Base domain name"
|
msgid "Base domain name"
|
||||||
msgstr ""
|
msgstr "Nazwa domeny podstawowej"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:21
|
#: evibes/settings/constance.py:21
|
||||||
msgid "Name of the company"
|
msgid "Name of the company"
|
||||||
msgstr ""
|
msgstr "Nazwa firmy"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:22
|
#: evibes/settings/constance.py:22
|
||||||
msgid "Address of the company"
|
msgid "Address of the company"
|
||||||
msgstr ""
|
msgstr "Adres spółki"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:23
|
#: evibes/settings/constance.py:23
|
||||||
msgid "Phone number of the company"
|
msgid "Phone number of the company"
|
||||||
msgstr ""
|
msgstr "Numer telefonu firmy"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:24
|
||||||
|
msgid "SMTP host"
|
||||||
|
msgstr "Host SMTP"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:25
|
||||||
|
msgid "SMTP port"
|
||||||
|
msgstr "Port SMTP"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:26
|
#: evibes/settings/constance.py:26
|
||||||
msgid "Designates whether every product has one stock or not"
|
msgid "Use TLS (Specify 0 for No and 1 for Yes)"
|
||||||
msgstr ""
|
msgstr "Użyj TLS (określ 0 dla Nie i 1 dla Tak)"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:27
|
||||||
|
msgid "Use SSL (Specify 0 for No and 1 for Yes)"
|
||||||
|
msgstr "Użyj SSL (określ 0 dla Nie i 1 dla Tak)"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:28
|
#: evibes/settings/constance.py:28
|
||||||
msgid "SMTP host"
|
msgid "SMTP username"
|
||||||
msgstr ""
|
msgstr "Nazwa użytkownika SMTP"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:29
|
#: evibes/settings/constance.py:29
|
||||||
msgid "SMTP port"
|
msgid "SMTP password"
|
||||||
msgstr ""
|
msgstr "Hasło SMTP"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:30
|
#: evibes/settings/constance.py:30
|
||||||
msgid "Use TLS (Specify 0 for No and 1 for Yes)"
|
msgid "Mail from option"
|
||||||
msgstr ""
|
msgstr "Adres nadawcy wiadomości e-mail"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:31
|
#: evibes/settings/constance.py:31
|
||||||
msgid "Use SSL (Specify 0 for No and 1 for Yes)"
|
msgid "Payment gateway URL"
|
||||||
msgstr ""
|
msgstr "Adres URL bramki płatności"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:32
|
#: evibes/settings/constance.py:32
|
||||||
msgid "SMTP username"
|
msgid "Payment gateway token"
|
||||||
msgstr ""
|
msgstr "Token bramki płatności"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:33
|
#: evibes/settings/constance.py:33
|
||||||
msgid "SMTP password"
|
msgid "Payment gateway minimum amount"
|
||||||
msgstr ""
|
msgstr "Minimalna kwota bramki płatności"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:34
|
#: evibes/settings/constance.py:34
|
||||||
msgid "Mail from option"
|
msgid "Payment gateway maximum amount"
|
||||||
msgstr ""
|
msgstr "Maksymalna kwota bramki płatności"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:35
|
#: evibes/settings/constance.py:35
|
||||||
msgid "Payment gateway URL"
|
msgid "Exchange rate API key"
|
||||||
msgstr ""
|
msgstr "Klucz API kursu wymiany"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:36
|
#: evibes/settings/constance.py:36
|
||||||
msgid "Payment gateway token"
|
msgid "OpenStreetMap Nominatim API URL"
|
||||||
msgstr ""
|
msgstr "Adres URL interfejsu API OpenStreetMap Nominatim"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:37
|
#: evibes/settings/constance.py:37
|
||||||
msgid "Payment gateway minimum amount"
|
msgid "OpenAI API Key"
|
||||||
msgstr ""
|
msgstr "Klucz API OpenAI"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:38
|
|
||||||
msgid "Payment gateway maximum amount"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:39
|
|
||||||
msgid "Exchange rate API key"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:40
|
#: evibes/settings/constance.py:40
|
||||||
msgid "OpenStreetMap Nominatim API URL"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:41
|
|
||||||
msgid "OpenAI API Key"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:44
|
|
||||||
msgid "Abstract API Key, if empty - no Abstract features provided"
|
msgid "Abstract API Key, if empty - no Abstract features provided"
|
||||||
msgstr ""
|
msgstr "Abstract API Key, jeśli pusty - brak funkcji Abstract"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:42
|
||||||
|
msgid "HTTP Proxy"
|
||||||
|
msgstr "Serwer proxy HTTP"
|
||||||
|
|
||||||
|
#: evibes/settings/constance.py:43
|
||||||
|
msgid "Disable buy functionality"
|
||||||
|
msgstr "Wyłączenie funkcji kupowania"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:46
|
#: evibes/settings/constance.py:46
|
||||||
msgid "HTTP Proxy"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:47
|
|
||||||
msgid "Disable buy functionality"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: evibes/settings/constance.py:50
|
|
||||||
msgid "An entity for storing advertisiment data"
|
msgid "An entity for storing advertisiment data"
|
||||||
msgstr ""
|
msgstr "Jednostka do przechowywania danych reklamowych"
|
||||||
|
|
||||||
#: evibes/settings/constance.py:55
|
#: evibes/settings/constance.py:51
|
||||||
msgid "An entity for storing analytics data"
|
msgid "An entity for storing analytics data"
|
||||||
msgstr ""
|
msgstr "Jednostka do przechowywania danych analitycznych"
|
||||||
|
|
||||||
#: evibes/settings/drf.py:49
|
#: evibes/settings/drf.py:49
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API "
|
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API documentation.\n"
|
||||||
"documentation.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API is designed to "
|
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API is designed to provide seamless integration for merchants selling a wide range of electronics. Through this API, partnered merchants can manage products, orders, and inventory with ease, while accessing real-time stock levels.\n"
|
||||||
"provide seamless integration for merchants selling a wide range of "
|
|
||||||
"electronics. Through this API, partnered merchants can manage products, "
|
|
||||||
"orders, and inventory with ease, while accessing real-time stock levels.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Key Features\n"
|
"## Key Features\n"
|
||||||
"- **Product Management:** Easily create, update, and manage your product "
|
"- **Product Management:** Easily create, update, and manage your product listings with detailed specifications.\n"
|
||||||
"listings with detailed specifications.\n"
|
"- **Order Processing:** Handle bulk orders efficiently with streamlined operations for merchants.\n"
|
||||||
"- **Order Processing:** Handle bulk orders efficiently with streamlined "
|
"- **Inventory Management:** Keep track of stock levels in real-time, ensuring smooth fulfillment.\n"
|
||||||
"operations for merchants.\n"
|
"- **Secure Transactions:** Secure and encrypted transactions to protect sensitive business information.\n"
|
||||||
"- **Inventory Management:** Keep track of stock levels in real-time, "
|
"- **Multi-Currency Support:** Expand your market reach with multi-currency transactions.\n"
|
||||||
"ensuring smooth fulfillment.\n"
|
"- **Real-Time Notifications:** Stay updated with instant alerts on stock changes and order statuses.\n"
|
||||||
"- **Secure Transactions:** Secure and encrypted transactions to protect "
|
|
||||||
"sensitive business information.\n"
|
|
||||||
"- **Multi-Currency Support:** Expand your market reach with multi-currency "
|
|
||||||
"transactions.\n"
|
|
||||||
"- **Real-Time Notifications:** Stay updated with instant alerts on stock "
|
|
||||||
"changes and order statuses.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Authentication\n"
|
"## Authentication\n"
|
||||||
"- Authentication is handled via your merchant token. Include the token in "
|
"- Authentication is handled via your merchant token. Include the token in the `X-EVIBES-B2B-AUTH` header of your requests in the format `Bearer <your_token>`.\n"
|
||||||
"the `X-EVIBES-B2B-AUTH` header of your requests in the format `Bearer "
|
|
||||||
"<your_token>`.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## I18N\n"
|
"## I18N\n"
|
||||||
"- Apply an `Accept-Language` header to use non-default language. A list of "
|
"- Apply an `Accept-Language` header to use non-default language. A list of all languages is available at `/app/languages/`.\n"
|
||||||
"all languages is available at `/app/languages/`.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Version\n"
|
"## Version\n"
|
||||||
"Current API version: {EVIBES_VERSION}\n"
|
"Current API version: {EVIBES_VERSION}\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"Witamy w dokumentacji {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API.\n"
|
||||||
|
"\n"
|
||||||
|
"Interfejs {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} B2B API został zaprojektowany w celu zapewnienia płynnej integracji dla sprzedawców sprzedających szeroką gamę elektroniki. Dzięki temu interfejsowi API współpracujący sprzedawcy mogą z łatwością zarządzać produktami, zamówieniami i zapasami, uzyskując jednocześnie dostęp do stanów magazynowych w czasie rzeczywistym.\n"
|
||||||
|
"\n"
|
||||||
|
"## Kluczowe funkcje\n"
|
||||||
|
"- Zarządzanie produktami:** Łatwe tworzenie, aktualizowanie i zarządzanie listami produktów ze szczegółowymi specyfikacjami.\n"
|
||||||
|
"- Przetwarzanie zamówień:** Efektywna obsługa zamówień masowych dzięki usprawnionym operacjom dla sprzedawców.\n"
|
||||||
|
"- Zarządzanie zapasami:** Śledź poziomy zapasów w czasie rzeczywistym, zapewniając płynną realizację zamówień.\n"
|
||||||
|
"- Bezpieczne transakcje:** Bezpieczne i szyfrowane transakcje w celu ochrony poufnych informacji biznesowych.\n"
|
||||||
|
"- Obsługa wielu walut:** Rozszerz swój zasięg rynkowy dzięki transakcjom wielowalutowym.\n"
|
||||||
|
"- Powiadomienia w czasie rzeczywistym:** Bądź na bieżąco dzięki natychmiastowym alertom o zmianach zapasów i statusach zamówień.\n"
|
||||||
|
"\n"
|
||||||
|
"## Uwierzytelnianie\n"
|
||||||
|
"- Uwierzytelnianie jest obsługiwane przez token sprzedawcy. Dołącz token w nagłówku `X-EVIBES-B2B-AUTH` swoich żądań w formacie `Bearer <your_token>`.\n"
|
||||||
|
"\n"
|
||||||
|
"## I18N\n"
|
||||||
|
"- Zastosuj nagłówek `Accept-Language`, aby użyć języka innego niż domyślny. Lista wszystkich języków jest dostępna pod adresem `/app/languages/`.\n"
|
||||||
|
"\n"
|
||||||
|
"## Wersja\n"
|
||||||
|
"Aktualna wersja API: {EVIBES_VERSION}\n"
|
||||||
|
|
||||||
#: evibes/settings/drf.py:74
|
#: evibes/settings/drf.py:74
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} Platform API "
|
"Welcome to the {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} Platform API documentation.\n"
|
||||||
"documentation.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} API is the central hub for "
|
"The {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} API is the central hub for managing product listings, monitoring orders, and accessing analytics for your electronics store. It provides RESTful endpoints for managing your store’s backend operations and includes both REST and GraphQL options.\n"
|
||||||
"managing product listings, monitoring orders, and accessing analytics for "
|
|
||||||
"your electronics store. It provides RESTful endpoints for managing your "
|
|
||||||
"store’s backend operations and includes both REST and GraphQL options.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Key Features\n"
|
"## Key Features\n"
|
||||||
"- **Product Catalog:** Manage product details, pricing, and availability.\n"
|
"- **Product Catalog:** Manage product details, pricing, and availability.\n"
|
||||||
"- **Order Management:** Access detailed order information and process "
|
"- **Order Management:** Access detailed order information and process customer requests efficiently.\n"
|
||||||
"customer requests efficiently.\n"
|
"- **User Roles & Permissions:** Set user roles and permissions for internal management.\n"
|
||||||
"- **User Roles & Permissions:** Set user roles and permissions for internal "
|
"- **Custom Integrations:** Connect your system with external platforms through powerful APIs.\n"
|
||||||
"management.\n"
|
"- **Detailed Reporting:** Generate comprehensive reports on orders, sales performance, and product data.\n"
|
||||||
"- **Custom Integrations:** Connect your system with external platforms "
|
"- **Real-Time Data:** Get live updates on inventory, pricing, and order statuses.\n"
|
||||||
"through powerful APIs.\n"
|
|
||||||
"- **Detailed Reporting:** Generate comprehensive reports on orders, sales "
|
|
||||||
"performance, and product data.\n"
|
|
||||||
"- **Real-Time Data:** Get live updates on inventory, pricing, and order "
|
|
||||||
"statuses.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Authentication\n"
|
"## Authentication\n"
|
||||||
"- Authentication is handled via JWT tokens. Include the token in the `X-"
|
"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer <your_token>`.\n"
|
||||||
"EVIBES-AUTH` header of your requests in the format `Bearer <your_token>`.\n"
|
"- Access token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600} {\"minutes\" if not DEBUG else \"hours\"}.\n"
|
||||||
"- Access token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\")."
|
"- Refresh token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 3600} hours.\n"
|
||||||
"total_seconds() // 60 if not DEBUG else 3600} {\"minutes\" if not DEBUG else "
|
|
||||||
"\"hours\"}.\n"
|
|
||||||
"- Refresh token lifetime is {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\")."
|
|
||||||
"total_seconds() // 3600} hours.\n"
|
|
||||||
"- Refresh tokens are automatically invalidated after usage.\n"
|
"- Refresh tokens are automatically invalidated after usage.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"## I18N\n"
|
"## I18N\n"
|
||||||
"- Apply an `Accept-Language` header to use non-default language. A list of "
|
"- Apply an `Accept-Language` header to use non-default language. A list of all languages is available at `/app/languages/`.\n"
|
||||||
"all languages is available at `/app/languages/`.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"## Version\n"
|
"## Version\n"
|
||||||
"Current API version: {EVIBES_VERSION}\n"
|
"Current API version: {EVIBES_VERSION}\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"Witamy w dokumentacji {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} Dokumentacja API platformy.\n"
|
||||||
|
"\n"
|
||||||
|
"Interfejs API {CONSTANCE_CONFIG.get(\"PROJECT_NAME\")[0]} API to centralne centrum zarządzania listami produktów, monitorowania zamówień i uzyskiwania dostępu do analiz dla sklepu elektronicznego. Zapewnia punkty końcowe RESTful do zarządzania operacjami zaplecza sklepu i zawiera zarówno opcje REST, jak i GraphQL.\n"
|
||||||
|
"\n"
|
||||||
|
"## Kluczowe funkcje\n"
|
||||||
|
"- Katalog produktów:** Zarządzanie szczegółami produktów, cenami i dostępnością.\n"
|
||||||
|
"- Zarządzanie zamówieniami:** Dostęp do szczegółowych informacji o zamówieniach i wydajne przetwarzanie żądań klientów.\n"
|
||||||
|
"- **User Roles & Permissions:** Ustawianie ról i uprawnień użytkowników dla wewnętrznego zarządzania.\n"
|
||||||
|
"- Niestandardowe integracje:** Połącz swój system z zewnętrznymi platformami za pomocą potężnych interfejsów API.\n"
|
||||||
|
"- **Szczegółowe raportowanie:** Generowanie kompleksowych raportów dotyczących zamówień, wyników sprzedaży i danych produktowych.\n"
|
||||||
|
"- **Dane w czasie rzeczywistym:** Uzyskaj aktualizacje na żywo dotyczące zapasów, cen i statusów zamówień.\n"
|
||||||
|
"\n"
|
||||||
|
"## Uwierzytelnianie\n"
|
||||||
|
"- Uwierzytelnianie jest obsługiwane za pomocą tokenów JWT. Dołącz token w nagłówku `X-EVIBES-AUTH` swoich żądań w formacie `Bearer <your_token>`.\n"
|
||||||
|
"- Okres ważności tokenu dostępu wynosi {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600} {\"minutes\" if not DEBUG else \"hours\"}.\n"
|
||||||
|
"- Okres ważności tokenu odświeżania wynosi {SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 3600} godzin.\n"
|
||||||
|
"- Tokeny odświeżania są automatycznie unieważniane po użyciu.\n"
|
||||||
|
"\n"
|
||||||
|
"## I18N\n"
|
||||||
|
"- Zastosuj nagłówek `Accept-Language`, aby użyć języka innego niż domyślny. Lista wszystkich języków jest dostępna pod adresem `/app/languages/`.\n"
|
||||||
|
"\n"
|
||||||
|
"## Wersja\n"
|
||||||
|
"Aktualna wersja API: {EVIBES_VERSION}\n"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:20
|
||||||
|
msgid "Home"
|
||||||
|
msgstr "Strona główna"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:21
|
||||||
|
msgid "Documentation"
|
||||||
|
msgstr "Dokumentacja"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:22
|
||||||
|
msgid "Storefront"
|
||||||
|
msgstr "Witryna sklepowa"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:23
|
||||||
|
msgid "Support"
|
||||||
|
msgstr "Wsparcie"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:26
|
||||||
|
msgid "GraphQL Docs"
|
||||||
|
msgstr "Dokumenty GraphQL"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:31
|
||||||
|
msgid "Platform REST Docs"
|
||||||
|
msgstr "Dokumenty platformy REST"
|
||||||
|
|
||||||
|
#: evibes/settings/jazzmin.py:36
|
||||||
|
msgid "B2B REST Docs"
|
||||||
|
msgstr "Dokumenty B2B REST"
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue