Features: 1) Added new language options to User model's language field in vibes_auth; 2) Introduced localized title and content fields to Post model in blog; 3) Implemented multilingual support for various fields in Attribute, AttributeGroup, AttributeValue, Brand, Category, CategoryTag, and Product models in core;
Fixes: None; Extra: None;
This commit is contained in:
parent
700b55a9b6
commit
6f4e952b9b
227 changed files with 43699 additions and 6013 deletions
|
|
@ -3,7 +3,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: EVIBES 3.0.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-09-13 15:25+0300\n"
|
||||
"POT-Creation-Date: 2025-09-19 15:04+0300\n"
|
||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: EVIBES 3.0.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-09-13 15:25+0300\n"
|
||||
"POT-Creation-Date: 2025-09-19 15:04+0300\n"
|
||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: EVIBES 3.0.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-09-13 15:25+0300\n"
|
||||
"POT-Creation-Date: 2025-09-19 15:04+0300\n"
|
||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: EVIBES 3.0.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-09-13 15:25+0300\n"
|
||||
"POT-Creation-Date: 2025-09-19 15:04+0300\n"
|
||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: EVIBES 3.0.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-09-13 15:25+0300\n"
|
||||
"POT-Creation-Date: 2025-09-19 15:04+0300\n"
|
||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: EVIBES 3.0.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-09-13 15:25+0300\n"
|
||||
"POT-Creation-Date: 2025-09-19 15:04+0300\n"
|
||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: EVIBES 3.0.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-09-13 15:25+0300\n"
|
||||
"POT-Creation-Date: 2025-09-19 15:04+0300\n"
|
||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||
|
|
|
|||
BIN
blog/locale/fa_IR/LC_MESSAGES/django.mo
Normal file
BIN
blog/locale/fa_IR/LC_MESSAGES/django.mo
Normal file
Binary file not shown.
70
blog/locale/fa_IR/LC_MESSAGES/django.po
Normal file
70
blog/locale/fa_IR/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-09-19 15:04+0300\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: blog/apps.py:8
|
||||
msgid "blog"
|
||||
msgstr ""
|
||||
|
||||
#: blog/models.py:36
|
||||
msgid "post title"
|
||||
msgstr ""
|
||||
|
||||
#: blog/models.py:36
|
||||
msgid "title"
|
||||
msgstr ""
|
||||
|
||||
#: blog/models.py:83
|
||||
msgid "post"
|
||||
msgstr ""
|
||||
|
||||
#: blog/models.py:84
|
||||
msgid "posts"
|
||||
msgstr ""
|
||||
|
||||
#: blog/models.py:88
|
||||
msgid "markdown files are not supported yet - use markdown content instead"
|
||||
msgstr ""
|
||||
|
||||
#: blog/models.py:90
|
||||
msgid ""
|
||||
"a markdown file or markdown content must be provided - mutually exclusive"
|
||||
msgstr ""
|
||||
|
||||
#: blog/models.py:122
|
||||
msgid "internal tag identifier for the post tag"
|
||||
msgstr ""
|
||||
|
||||
#: blog/models.py:123
|
||||
msgid "tag name"
|
||||
msgstr ""
|
||||
|
||||
#: blog/models.py:127
|
||||
msgid "user-friendly name for the post tag"
|
||||
msgstr ""
|
||||
|
||||
#: blog/models.py:128
|
||||
msgid "tag display name"
|
||||
msgstr ""
|
||||
|
||||
#: blog/models.py:136
|
||||
msgid "post tag"
|
||||
msgstr ""
|
||||
|
||||
#: blog/models.py:137
|
||||
msgid "post tags"
|
||||
msgstr ""
|
||||
|
|
@ -3,7 +3,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: EVIBES 3.0.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-09-13 15:25+0300\n"
|
||||
"POT-Creation-Date: 2025-09-19 15:04+0300\n"
|
||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||
|
|
|
|||
BIN
blog/locale/he_IL/LC_MESSAGES/django.mo
Normal file
BIN
blog/locale/he_IL/LC_MESSAGES/django.mo
Normal file
Binary file not shown.
67
blog/locale/he_IL/LC_MESSAGES/django.po
Normal file
67
blog/locale/he_IL/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: EVIBES 3.0.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-09-19 15:04+0300\n"
|
||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||
"Language: he-il\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: blog/apps.py:8
|
||||
msgid "blog"
|
||||
msgstr "בלוג"
|
||||
|
||||
#: blog/models.py:36
|
||||
msgid "post title"
|
||||
msgstr "כותרת הפוסט"
|
||||
|
||||
#: blog/models.py:36
|
||||
msgid "title"
|
||||
msgstr "כותרת"
|
||||
|
||||
#: blog/models.py:83
|
||||
msgid "post"
|
||||
msgstr "פוסט"
|
||||
|
||||
#: blog/models.py:84
|
||||
msgid "posts"
|
||||
msgstr "פוסטים"
|
||||
|
||||
#: blog/models.py:88
|
||||
msgid "markdown files are not supported yet - use markdown content instead"
|
||||
msgstr "קובצי Markdown אינם נתמכים עדיין - השתמש בתוכן Markdown במקום!"
|
||||
|
||||
#: blog/models.py:90
|
||||
msgid ""
|
||||
"a markdown file or markdown content must be provided - mutually exclusive"
|
||||
msgstr "יש לספק קובץ markdown או תוכן markdown - באופן בלעדי"
|
||||
|
||||
#: blog/models.py:122
|
||||
msgid "internal tag identifier for the post tag"
|
||||
msgstr "מזהה תגיות פנימי עבור תגיות הפוסט"
|
||||
|
||||
#: blog/models.py:123
|
||||
msgid "tag name"
|
||||
msgstr "שם היום"
|
||||
|
||||
#: blog/models.py:127
|
||||
msgid "user-friendly name for the post tag"
|
||||
msgstr "שם ידידותי למשתמש עבור תגיות הפוסט"
|
||||
|
||||
#: blog/models.py:128
|
||||
msgid "tag display name"
|
||||
msgstr "שם תצוגה של התג"
|
||||
|
||||
#: blog/models.py:136
|
||||
msgid "post tag"
|
||||
msgstr "תגית פוסט"
|
||||
|
||||
#: blog/models.py:137
|
||||
msgid "post tags"
|
||||
msgstr "תגיות פוסט"
|
||||
|
|
@ -7,7 +7,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: EVIBES 3.0.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-09-13 15:25+0300\n"
|
||||
"POT-Creation-Date: 2025-09-19 15:04+0300\n"
|
||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||
|
|
|
|||
BIN
blog/locale/hr_HR/LC_MESSAGES/django.mo
Normal file
BIN
blog/locale/hr_HR/LC_MESSAGES/django.mo
Normal file
Binary file not shown.
70
blog/locale/hr_HR/LC_MESSAGES/django.po
Normal file
70
blog/locale/hr_HR/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-09-19 15:04+0300\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: blog/apps.py:8
|
||||
msgid "blog"
|
||||
msgstr ""
|
||||
|
||||
#: blog/models.py:36
|
||||
msgid "post title"
|
||||
msgstr ""
|
||||
|
||||
#: blog/models.py:36
|
||||
msgid "title"
|
||||
msgstr ""
|
||||
|
||||
#: blog/models.py:83
|
||||
msgid "post"
|
||||
msgstr ""
|
||||
|
||||
#: blog/models.py:84
|
||||
msgid "posts"
|
||||
msgstr ""
|
||||
|
||||
#: blog/models.py:88
|
||||
msgid "markdown files are not supported yet - use markdown content instead"
|
||||
msgstr ""
|
||||
|
||||
#: blog/models.py:90
|
||||
msgid ""
|
||||
"a markdown file or markdown content must be provided - mutually exclusive"
|
||||
msgstr ""
|
||||
|
||||
#: blog/models.py:122
|
||||
msgid "internal tag identifier for the post tag"
|
||||
msgstr ""
|
||||
|
||||
#: blog/models.py:123
|
||||
msgid "tag name"
|
||||
msgstr ""
|
||||
|
||||
#: blog/models.py:127
|
||||
msgid "user-friendly name for the post tag"
|
||||
msgstr ""
|
||||
|
||||
#: blog/models.py:128
|
||||
msgid "tag display name"
|
||||
msgstr ""
|
||||
|
||||
#: blog/models.py:136
|
||||
msgid "post tag"
|
||||
msgstr ""
|
||||
|
||||
#: blog/models.py:137
|
||||
msgid "post tags"
|
||||
msgstr ""
|
||||
BIN
blog/locale/id_ID/LC_MESSAGES/django.mo
Normal file
BIN
blog/locale/id_ID/LC_MESSAGES/django.mo
Normal file
Binary file not shown.
71
blog/locale/id_ID/LC_MESSAGES/django.po
Normal file
71
blog/locale/id_ID/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: EVIBES 3.0.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-09-19 15:04+0300\n"
|
||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||
"Language: id-id\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: blog/apps.py:8
|
||||
msgid "blog"
|
||||
msgstr "Blog"
|
||||
|
||||
#: blog/models.py:36
|
||||
msgid "post title"
|
||||
msgstr "Judul postingan"
|
||||
|
||||
#: blog/models.py:36
|
||||
msgid "title"
|
||||
msgstr "Judul"
|
||||
|
||||
#: blog/models.py:83
|
||||
msgid "post"
|
||||
msgstr "Pos"
|
||||
|
||||
#: blog/models.py:84
|
||||
msgid "posts"
|
||||
msgstr "Posting"
|
||||
|
||||
#: blog/models.py:88
|
||||
msgid "markdown files are not supported yet - use markdown content instead"
|
||||
msgstr ""
|
||||
"File penurunan harga tidak didukung - gunakan konten penurunan harga sebagai"
|
||||
" gantinya!"
|
||||
|
||||
#: blog/models.py:90
|
||||
msgid ""
|
||||
"a markdown file or markdown content must be provided - mutually exclusive"
|
||||
msgstr ""
|
||||
"file penurunan harga atau konten penurunan harga harus disediakan - tidak "
|
||||
"boleh ada yang sama"
|
||||
|
||||
#: blog/models.py:122
|
||||
msgid "internal tag identifier for the post tag"
|
||||
msgstr "pengidentifikasi tag internal untuk tag pos"
|
||||
|
||||
#: blog/models.py:123
|
||||
msgid "tag name"
|
||||
msgstr "Nama tag"
|
||||
|
||||
#: blog/models.py:127
|
||||
msgid "user-friendly name for the post tag"
|
||||
msgstr "Nama yang mudah digunakan untuk tag postingan"
|
||||
|
||||
#: blog/models.py:128
|
||||
msgid "tag display name"
|
||||
msgstr "Nama tampilan tag"
|
||||
|
||||
#: blog/models.py:136
|
||||
msgid "post tag"
|
||||
msgstr "Tag pos"
|
||||
|
||||
#: blog/models.py:137
|
||||
msgid "post tags"
|
||||
msgstr "Tag pos"
|
||||
|
|
@ -3,7 +3,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: EVIBES 3.0.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-09-13 15:25+0300\n"
|
||||
"POT-Creation-Date: 2025-09-19 15:04+0300\n"
|
||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: EVIBES 3.0.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-09-13 15:25+0300\n"
|
||||
"POT-Creation-Date: 2025-09-19 15:04+0300\n"
|
||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: EVIBES 3.0.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-09-13 15:25+0300\n"
|
||||
"POT-Creation-Date: 2025-09-19 15:04+0300\n"
|
||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||
|
|
|
|||
BIN
blog/locale/ko_KR/LC_MESSAGES/django.mo
Normal file
BIN
blog/locale/ko_KR/LC_MESSAGES/django.mo
Normal file
Binary file not shown.
67
blog/locale/ko_KR/LC_MESSAGES/django.po
Normal file
67
blog/locale/ko_KR/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: EVIBES 3.0.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-09-19 15:04+0300\n"
|
||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||
"Language: ko-kr\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: blog/apps.py:8
|
||||
msgid "blog"
|
||||
msgstr "블로그"
|
||||
|
||||
#: blog/models.py:36
|
||||
msgid "post title"
|
||||
msgstr "게시물 제목"
|
||||
|
||||
#: blog/models.py:36
|
||||
msgid "title"
|
||||
msgstr "제목"
|
||||
|
||||
#: blog/models.py:83
|
||||
msgid "post"
|
||||
msgstr "게시물"
|
||||
|
||||
#: blog/models.py:84
|
||||
msgid "posts"
|
||||
msgstr "게시물"
|
||||
|
||||
#: blog/models.py:88
|
||||
msgid "markdown files are not supported yet - use markdown content instead"
|
||||
msgstr "마크다운 파일은 지원되지 않습니다 예 - 대신 마크다운 콘텐츠를 사용하세요!"
|
||||
|
||||
#: blog/models.py:90
|
||||
msgid ""
|
||||
"a markdown file or markdown content must be provided - mutually exclusive"
|
||||
msgstr "마크다운 파일 또는 마크다운 콘텐츠가 제공되어야 합니다."
|
||||
|
||||
#: blog/models.py:122
|
||||
msgid "internal tag identifier for the post tag"
|
||||
msgstr "게시물 태그의 내부 태그 식별자"
|
||||
|
||||
#: blog/models.py:123
|
||||
msgid "tag name"
|
||||
msgstr "태그 이름"
|
||||
|
||||
#: blog/models.py:127
|
||||
msgid "user-friendly name for the post tag"
|
||||
msgstr "게시물 태그의 사용자 친화적인 이름"
|
||||
|
||||
#: blog/models.py:128
|
||||
msgid "tag display name"
|
||||
msgstr "태그 표시 이름"
|
||||
|
||||
#: blog/models.py:136
|
||||
msgid "post tag"
|
||||
msgstr "게시물 태그"
|
||||
|
||||
#: blog/models.py:137
|
||||
msgid "post tags"
|
||||
msgstr "게시물 태그"
|
||||
|
|
@ -3,7 +3,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: EVIBES 3.0.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-09-13 15:25+0300\n"
|
||||
"POT-Creation-Date: 2025-09-19 15:04+0300\n"
|
||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||
|
|
|
|||
BIN
blog/locale/no_NO/LC_MESSAGES/django.mo
Normal file
BIN
blog/locale/no_NO/LC_MESSAGES/django.mo
Normal file
Binary file not shown.
68
blog/locale/no_NO/LC_MESSAGES/django.po
Normal file
68
blog/locale/no_NO/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: EVIBES 3.0.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-09-19 15:04+0300\n"
|
||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||
"Language: no-no\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: blog/apps.py:8
|
||||
msgid "blog"
|
||||
msgstr "Blogg"
|
||||
|
||||
#: blog/models.py:36
|
||||
msgid "post title"
|
||||
msgstr "Innleggets tittel"
|
||||
|
||||
#: blog/models.py:36
|
||||
msgid "title"
|
||||
msgstr "Title"
|
||||
|
||||
#: blog/models.py:83
|
||||
msgid "post"
|
||||
msgstr "Post"
|
||||
|
||||
#: blog/models.py:84
|
||||
msgid "posts"
|
||||
msgstr "Innlegg"
|
||||
|
||||
#: blog/models.py:88
|
||||
msgid "markdown files are not supported yet - use markdown content instead"
|
||||
msgstr "Markdown-filer støttes ikke - bruk markdown-innhold i stedet!"
|
||||
|
||||
#: blog/models.py:90
|
||||
msgid ""
|
||||
"a markdown file or markdown content must be provided - mutually exclusive"
|
||||
msgstr ""
|
||||
"en markdown-fil eller markdown-innhold må oppgis - gjensidig utelukkende"
|
||||
|
||||
#: blog/models.py:122
|
||||
msgid "internal tag identifier for the post tag"
|
||||
msgstr "intern tagg-identifikator for innleggstaggen"
|
||||
|
||||
#: blog/models.py:123
|
||||
msgid "tag name"
|
||||
msgstr "Tagg navn"
|
||||
|
||||
#: blog/models.py:127
|
||||
msgid "user-friendly name for the post tag"
|
||||
msgstr "Brukervennlig navn for innleggstaggen"
|
||||
|
||||
#: blog/models.py:128
|
||||
msgid "tag display name"
|
||||
msgstr "Visningsnavn for taggen"
|
||||
|
||||
#: blog/models.py:136
|
||||
msgid "post tag"
|
||||
msgstr "Post tag"
|
||||
|
||||
#: blog/models.py:137
|
||||
msgid "post tags"
|
||||
msgstr "Tagger for innlegg"
|
||||
|
|
@ -3,7 +3,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: EVIBES 3.0.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-09-13 15:25+0300\n"
|
||||
"POT-Creation-Date: 2025-09-19 15:04+0300\n"
|
||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: EVIBES 3.0.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-09-13 15:25+0300\n"
|
||||
"POT-Creation-Date: 2025-09-19 15:04+0300\n"
|
||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: EVIBES 3.0.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-09-13 15:25+0300\n"
|
||||
"POT-Creation-Date: 2025-09-19 15:04+0300\n"
|
||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: EVIBES 3.0.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-09-13 15:25+0300\n"
|
||||
"POT-Creation-Date: 2025-09-19 15:04+0300\n"
|
||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||
|
|
|
|||
BIN
blog/locale/sv_SE/LC_MESSAGES/django.mo
Normal file
BIN
blog/locale/sv_SE/LC_MESSAGES/django.mo
Normal file
Binary file not shown.
69
blog/locale/sv_SE/LC_MESSAGES/django.po
Normal file
69
blog/locale/sv_SE/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: EVIBES 3.0.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-09-19 15:04+0300\n"
|
||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||
"Language: sv-se\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: blog/apps.py:8
|
||||
msgid "blog"
|
||||
msgstr "Blogg"
|
||||
|
||||
#: blog/models.py:36
|
||||
msgid "post title"
|
||||
msgstr "Inläggets titel"
|
||||
|
||||
#: blog/models.py:36
|
||||
msgid "title"
|
||||
msgstr "Titel"
|
||||
|
||||
#: blog/models.py:83
|
||||
msgid "post"
|
||||
msgstr "Post"
|
||||
|
||||
#: blog/models.py:84
|
||||
msgid "posts"
|
||||
msgstr "Inlägg"
|
||||
|
||||
#: blog/models.py:88
|
||||
msgid "markdown files are not supported yet - use markdown content instead"
|
||||
msgstr "Markdown-filer stöds inte - använd markdown-innehåll istället!"
|
||||
|
||||
#: blog/models.py:90
|
||||
msgid ""
|
||||
"a markdown file or markdown content must be provided - mutually exclusive"
|
||||
msgstr ""
|
||||
"en markdown-fil eller markdown-innehåll måste tillhandahållas - ömsesidigt "
|
||||
"uteslutande"
|
||||
|
||||
#: blog/models.py:122
|
||||
msgid "internal tag identifier for the post tag"
|
||||
msgstr "intern taggidentifierare för inläggstaggen"
|
||||
|
||||
#: blog/models.py:123
|
||||
msgid "tag name"
|
||||
msgstr "Tagg namn"
|
||||
|
||||
#: blog/models.py:127
|
||||
msgid "user-friendly name for the post tag"
|
||||
msgstr "Användarvänligt namn för inläggstaggen"
|
||||
|
||||
#: blog/models.py:128
|
||||
msgid "tag display name"
|
||||
msgstr "Taggens visningsnamn"
|
||||
|
||||
#: blog/models.py:136
|
||||
msgid "post tag"
|
||||
msgstr "Post tagg"
|
||||
|
||||
#: blog/models.py:137
|
||||
msgid "post tags"
|
||||
msgstr "Taggar för inlägg"
|
||||
BIN
blog/locale/th_TH/LC_MESSAGES/django.mo
Normal file
BIN
blog/locale/th_TH/LC_MESSAGES/django.mo
Normal file
Binary file not shown.
69
blog/locale/th_TH/LC_MESSAGES/django.po
Normal file
69
blog/locale/th_TH/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: EVIBES 3.0.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-09-19 15:04+0300\n"
|
||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||
"Language: th-th\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: blog/apps.py:8
|
||||
msgid "blog"
|
||||
msgstr "บล็อก"
|
||||
|
||||
#: blog/models.py:36
|
||||
msgid "post title"
|
||||
msgstr "ชื่อโพสต์"
|
||||
|
||||
#: blog/models.py:36
|
||||
msgid "title"
|
||||
msgstr "ชื่อเรื่อง"
|
||||
|
||||
#: blog/models.py:83
|
||||
msgid "post"
|
||||
msgstr "โพสต์"
|
||||
|
||||
#: blog/models.py:84
|
||||
msgid "posts"
|
||||
msgstr "โพสต์"
|
||||
|
||||
#: blog/models.py:88
|
||||
msgid "markdown files are not supported yet - use markdown content instead"
|
||||
msgstr "ไฟล์มาร์กดาวน์ยังไม่รองรับในตอนนี้ - กรุณาใช้เนื้อหาแบบมาร์กดาวน์แทน!"
|
||||
|
||||
#: blog/models.py:90
|
||||
msgid ""
|
||||
"a markdown file or markdown content must be provided - mutually exclusive"
|
||||
msgstr ""
|
||||
"ไฟล์มาร์กดาวน์หรือเนื้อหาแบบมาร์กดาวน์ต้องได้รับการจัดเตรียมไว้ - "
|
||||
"ไม่สามารถใช้ร่วมกันได้"
|
||||
|
||||
#: blog/models.py:122
|
||||
msgid "internal tag identifier for the post tag"
|
||||
msgstr "ตัวระบุแท็กภายในสำหรับแท็กโพสต์"
|
||||
|
||||
#: blog/models.py:123
|
||||
msgid "tag name"
|
||||
msgstr "ชื่อวัน"
|
||||
|
||||
#: blog/models.py:127
|
||||
msgid "user-friendly name for the post tag"
|
||||
msgstr "ชื่อที่ใช้งานได้ง่ายสำหรับแท็กโพสต์"
|
||||
|
||||
#: blog/models.py:128
|
||||
msgid "tag display name"
|
||||
msgstr "แสดงชื่อแท็ก"
|
||||
|
||||
#: blog/models.py:136
|
||||
msgid "post tag"
|
||||
msgstr "โพสต์แท็ก"
|
||||
|
||||
#: blog/models.py:137
|
||||
msgid "post tags"
|
||||
msgstr "ป้ายกำกับโพสต์"
|
||||
BIN
blog/locale/tr_TR/LC_MESSAGES/django.mo
Normal file
BIN
blog/locale/tr_TR/LC_MESSAGES/django.mo
Normal file
Binary file not shown.
71
blog/locale/tr_TR/LC_MESSAGES/django.po
Normal file
71
blog/locale/tr_TR/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: EVIBES 3.0.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-09-19 15:04+0300\n"
|
||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||
"Language: tr-tr\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: blog/apps.py:8
|
||||
msgid "blog"
|
||||
msgstr "Blog"
|
||||
|
||||
#: blog/models.py:36
|
||||
msgid "post title"
|
||||
msgstr "Gönderinin başlığı"
|
||||
|
||||
#: blog/models.py:36
|
||||
msgid "title"
|
||||
msgstr "Başlık"
|
||||
|
||||
#: blog/models.py:83
|
||||
msgid "post"
|
||||
msgstr "Posta"
|
||||
|
||||
#: blog/models.py:84
|
||||
msgid "posts"
|
||||
msgstr "Mesajlar"
|
||||
|
||||
#: blog/models.py:88
|
||||
msgid "markdown files are not supported yet - use markdown content instead"
|
||||
msgstr ""
|
||||
"Markdown dosyaları desteklenmiyor yer - bunun yerine markdown içeriği "
|
||||
"kullanın!"
|
||||
|
||||
#: blog/models.py:90
|
||||
msgid ""
|
||||
"a markdown file or markdown content must be provided - mutually exclusive"
|
||||
msgstr ""
|
||||
"bir markdown dosyası veya markdown içeriği sağlanmalıdır - birbirini "
|
||||
"dışlayan"
|
||||
|
||||
#: blog/models.py:122
|
||||
msgid "internal tag identifier for the post tag"
|
||||
msgstr "gönderi etiketi için dahili etiket tanımlayıcısı"
|
||||
|
||||
#: blog/models.py:123
|
||||
msgid "tag name"
|
||||
msgstr "Etiket adı"
|
||||
|
||||
#: blog/models.py:127
|
||||
msgid "user-friendly name for the post tag"
|
||||
msgstr "Gönderi etiketi için kullanıcı dostu ad"
|
||||
|
||||
#: blog/models.py:128
|
||||
msgid "tag display name"
|
||||
msgstr "Etiket görünen adı"
|
||||
|
||||
#: blog/models.py:136
|
||||
msgid "post tag"
|
||||
msgstr "Mesaj etiketi"
|
||||
|
||||
#: blog/models.py:137
|
||||
msgid "post tags"
|
||||
msgstr "Gönderi etiketleri"
|
||||
BIN
blog/locale/vi_VN/LC_MESSAGES/django.mo
Normal file
BIN
blog/locale/vi_VN/LC_MESSAGES/django.mo
Normal file
Binary file not shown.
70
blog/locale/vi_VN/LC_MESSAGES/django.po
Normal file
70
blog/locale/vi_VN/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: EVIBES 3.0.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-09-19 15:04+0300\n"
|
||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||
"Language: vi-vn\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: blog/apps.py:8
|
||||
msgid "blog"
|
||||
msgstr "Blog"
|
||||
|
||||
#: blog/models.py:36
|
||||
msgid "post title"
|
||||
msgstr "Tiêu đề bài đăng"
|
||||
|
||||
#: blog/models.py:36
|
||||
msgid "title"
|
||||
msgstr "Tiêu đề"
|
||||
|
||||
#: blog/models.py:83
|
||||
msgid "post"
|
||||
msgstr "Bài đăng"
|
||||
|
||||
#: blog/models.py:84
|
||||
msgid "posts"
|
||||
msgstr "Bài đăng"
|
||||
|
||||
#: blog/models.py:88
|
||||
msgid "markdown files are not supported yet - use markdown content instead"
|
||||
msgstr ""
|
||||
"Tệp Markdown hiện chưa được hỗ trợ - hãy sử dụng nội dung Markdown thay thế!"
|
||||
|
||||
#: blog/models.py:90
|
||||
msgid ""
|
||||
"a markdown file or markdown content must be provided - mutually exclusive"
|
||||
msgstr ""
|
||||
"Phải cung cấp tệp Markdown hoặc nội dung Markdown - hai tùy chọn này là "
|
||||
"tương phản nhau."
|
||||
|
||||
#: blog/models.py:122
|
||||
msgid "internal tag identifier for the post tag"
|
||||
msgstr "Mã định danh thẻ nội bộ cho thẻ bài viết"
|
||||
|
||||
#: blog/models.py:123
|
||||
msgid "tag name"
|
||||
msgstr "Tên ngày"
|
||||
|
||||
#: blog/models.py:127
|
||||
msgid "user-friendly name for the post tag"
|
||||
msgstr "Tên thân thiện với người dùng cho thẻ bài viết"
|
||||
|
||||
#: blog/models.py:128
|
||||
msgid "tag display name"
|
||||
msgstr "Hiển thị tên thẻ"
|
||||
|
||||
#: blog/models.py:136
|
||||
msgid "post tag"
|
||||
msgstr "Thẻ bài viết"
|
||||
|
||||
#: blog/models.py:137
|
||||
msgid "post tags"
|
||||
msgstr "Thẻ bài viết"
|
||||
|
|
@ -3,7 +3,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: EVIBES 3.0.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-09-13 15:25+0300\n"
|
||||
"POT-Creation-Date: 2025-09-19 15:04+0300\n"
|
||||
"PO-Revision-Date: 2025-06-16 08:59+0100\n"
|
||||
"Last-Translator: EGOR GORBUNOV <CONTACT@FUREUNOIR.COM>\n"
|
||||
"Language-Team: LANGUAGE <CONTACT@FUREUNOIR.COM>\n"
|
||||
|
|
|
|||
|
|
@ -0,0 +1,173 @@
|
|||
# Generated by Django 5.2 on 2025-09-19 11:59
|
||||
|
||||
import markdown_field.fields
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [
|
||||
("blog", "0004_post_content_ar_ar_post_content_cs_cz_and_more"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name="post",
|
||||
name="content_fa_ir",
|
||||
field=markdown_field.fields.MarkdownField(blank=True, null=True, verbose_name="content"),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="post",
|
||||
name="content_he_il",
|
||||
field=markdown_field.fields.MarkdownField(blank=True, null=True, verbose_name="content"),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="post",
|
||||
name="content_hr_hr",
|
||||
field=markdown_field.fields.MarkdownField(blank=True, null=True, verbose_name="content"),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="post",
|
||||
name="content_id_id",
|
||||
field=markdown_field.fields.MarkdownField(blank=True, null=True, verbose_name="content"),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="post",
|
||||
name="content_ko_kr",
|
||||
field=markdown_field.fields.MarkdownField(blank=True, null=True, verbose_name="content"),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="post",
|
||||
name="content_no_no",
|
||||
field=markdown_field.fields.MarkdownField(blank=True, null=True, verbose_name="content"),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="post",
|
||||
name="content_sv_se",
|
||||
field=markdown_field.fields.MarkdownField(blank=True, null=True, verbose_name="content"),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="post",
|
||||
name="content_th_th",
|
||||
field=markdown_field.fields.MarkdownField(blank=True, null=True, verbose_name="content"),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="post",
|
||||
name="content_tr_tr",
|
||||
field=markdown_field.fields.MarkdownField(blank=True, null=True, verbose_name="content"),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="post",
|
||||
name="content_vi_vn",
|
||||
field=markdown_field.fields.MarkdownField(blank=True, null=True, verbose_name="content"),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="post",
|
||||
name="title_fa_ir",
|
||||
field=models.CharField(
|
||||
help_text="post title",
|
||||
max_length=128,
|
||||
null=True,
|
||||
unique=True,
|
||||
verbose_name="title",
|
||||
),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="post",
|
||||
name="title_he_il",
|
||||
field=models.CharField(
|
||||
help_text="post title",
|
||||
max_length=128,
|
||||
null=True,
|
||||
unique=True,
|
||||
verbose_name="title",
|
||||
),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="post",
|
||||
name="title_hr_hr",
|
||||
field=models.CharField(
|
||||
help_text="post title",
|
||||
max_length=128,
|
||||
null=True,
|
||||
unique=True,
|
||||
verbose_name="title",
|
||||
),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="post",
|
||||
name="title_id_id",
|
||||
field=models.CharField(
|
||||
help_text="post title",
|
||||
max_length=128,
|
||||
null=True,
|
||||
unique=True,
|
||||
verbose_name="title",
|
||||
),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="post",
|
||||
name="title_ko_kr",
|
||||
field=models.CharField(
|
||||
help_text="post title",
|
||||
max_length=128,
|
||||
null=True,
|
||||
unique=True,
|
||||
verbose_name="title",
|
||||
),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="post",
|
||||
name="title_no_no",
|
||||
field=models.CharField(
|
||||
help_text="post title",
|
||||
max_length=128,
|
||||
null=True,
|
||||
unique=True,
|
||||
verbose_name="title",
|
||||
),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="post",
|
||||
name="title_sv_se",
|
||||
field=models.CharField(
|
||||
help_text="post title",
|
||||
max_length=128,
|
||||
null=True,
|
||||
unique=True,
|
||||
verbose_name="title",
|
||||
),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="post",
|
||||
name="title_th_th",
|
||||
field=models.CharField(
|
||||
help_text="post title",
|
||||
max_length=128,
|
||||
null=True,
|
||||
unique=True,
|
||||
verbose_name="title",
|
||||
),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="post",
|
||||
name="title_tr_tr",
|
||||
field=models.CharField(
|
||||
help_text="post title",
|
||||
max_length=128,
|
||||
null=True,
|
||||
unique=True,
|
||||
verbose_name="title",
|
||||
),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="post",
|
||||
name="title_vi_vn",
|
||||
field=models.CharField(
|
||||
help_text="post title",
|
||||
max_length=128,
|
||||
null=True,
|
||||
unique=True,
|
||||
verbose_name="title",
|
||||
),
|
||||
),
|
||||
]
|
||||
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
BIN
core/locale/fa_IR/LC_MESSAGES/django.mo
Normal file
BIN
core/locale/fa_IR/LC_MESSAGES/django.mo
Normal file
Binary file not shown.
2432
core/locale/fa_IR/LC_MESSAGES/django.po
Normal file
2432
core/locale/fa_IR/LC_MESSAGES/django.po
Normal file
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
BIN
core/locale/he_IL/LC_MESSAGES/django.mo
Normal file
BIN
core/locale/he_IL/LC_MESSAGES/django.mo
Normal file
Binary file not shown.
2498
core/locale/he_IL/LC_MESSAGES/django.po
Normal file
2498
core/locale/he_IL/LC_MESSAGES/django.po
Normal file
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
BIN
core/locale/hr_HR/LC_MESSAGES/django.mo
Normal file
BIN
core/locale/hr_HR/LC_MESSAGES/django.mo
Normal file
Binary file not shown.
2432
core/locale/hr_HR/LC_MESSAGES/django.po
Normal file
2432
core/locale/hr_HR/LC_MESSAGES/django.po
Normal file
File diff suppressed because it is too large
Load diff
BIN
core/locale/id_ID/LC_MESSAGES/django.mo
Normal file
BIN
core/locale/id_ID/LC_MESSAGES/django.mo
Normal file
Binary file not shown.
2623
core/locale/id_ID/LC_MESSAGES/django.po
Normal file
2623
core/locale/id_ID/LC_MESSAGES/django.po
Normal file
File diff suppressed because it is too large
Load diff
Binary file not shown.
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
BIN
core/locale/ko_KR/LC_MESSAGES/django.mo
Normal file
BIN
core/locale/ko_KR/LC_MESSAGES/django.mo
Normal file
Binary file not shown.
2479
core/locale/ko_KR/LC_MESSAGES/django.po
Normal file
2479
core/locale/ko_KR/LC_MESSAGES/django.po
Normal file
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
BIN
core/locale/no_NO/LC_MESSAGES/django.mo
Normal file
BIN
core/locale/no_NO/LC_MESSAGES/django.mo
Normal file
Binary file not shown.
2607
core/locale/no_NO/LC_MESSAGES/django.po
Normal file
2607
core/locale/no_NO/LC_MESSAGES/django.po
Normal file
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
BIN
core/locale/sv_SE/LC_MESSAGES/django.mo
Normal file
BIN
core/locale/sv_SE/LC_MESSAGES/django.mo
Normal file
Binary file not shown.
2587
core/locale/sv_SE/LC_MESSAGES/django.po
Normal file
2587
core/locale/sv_SE/LC_MESSAGES/django.po
Normal file
File diff suppressed because it is too large
Load diff
BIN
core/locale/th_TH/LC_MESSAGES/django.mo
Normal file
BIN
core/locale/th_TH/LC_MESSAGES/django.mo
Normal file
Binary file not shown.
2557
core/locale/th_TH/LC_MESSAGES/django.po
Normal file
2557
core/locale/th_TH/LC_MESSAGES/django.po
Normal file
File diff suppressed because it is too large
Load diff
BIN
core/locale/tr_TR/LC_MESSAGES/django.mo
Normal file
BIN
core/locale/tr_TR/LC_MESSAGES/django.mo
Normal file
Binary file not shown.
2602
core/locale/tr_TR/LC_MESSAGES/django.po
Normal file
2602
core/locale/tr_TR/LC_MESSAGES/django.po
Normal file
File diff suppressed because it is too large
Load diff
BIN
core/locale/vi_VN/LC_MESSAGES/django.mo
Normal file
BIN
core/locale/vi_VN/LC_MESSAGES/django.mo
Normal file
Binary file not shown.
2620
core/locale/vi_VN/LC_MESSAGES/django.po
Normal file
2620
core/locale/vi_VN/LC_MESSAGES/django.po
Normal file
File diff suppressed because it is too large
Load diff
Binary file not shown.
File diff suppressed because it is too large
Load diff
|
|
@ -5,3 +5,38 @@ class RootDirectory:
|
|||
def __init__(self):
|
||||
self.label = "root"
|
||||
self.path = settings.BASE_DIR / "evibes"
|
||||
|
||||
|
||||
# Mapping from Django locale codes to DeepL API codes
|
||||
DEEPL_TARGET_LANGUAGES_MAPPING = {
|
||||
"ar-ar": "AR",
|
||||
"cs-cz": "CS",
|
||||
"da-dk": "DA",
|
||||
"de-de": "DE",
|
||||
"en-gb": "EN-GB",
|
||||
"en-us": "EN-US",
|
||||
"es-es": "ES",
|
||||
"fa-ir": "unsupported",
|
||||
"fr-fr": "FR",
|
||||
"he-il": "HE",
|
||||
"hi-in": "unsupported",
|
||||
"hr-hr": "unsupported",
|
||||
"id-id": "ID",
|
||||
"it-it": "IT",
|
||||
"ja-jp": "JA",
|
||||
"kk-kz": "unsupported",
|
||||
"ko-kr": "KO",
|
||||
"nl-nl": "NL",
|
||||
"no-no": "NB",
|
||||
"pl-pl": "PL",
|
||||
"pt-br": "PT-BR",
|
||||
"ro-ro": "RO",
|
||||
"ru-ru": "RU",
|
||||
"sv-se": "SV",
|
||||
"th-th": "TH",
|
||||
"tr-tr": "TR",
|
||||
"vi-vn": "VI",
|
||||
"zh-hans": "ZH-HANS",
|
||||
}
|
||||
|
||||
TRANSLATABLE_APPS = ["core", "vibes_auth", "blog", "payments", "root"]
|
||||
|
|
|
|||
|
|
@ -5,9 +5,10 @@ from tempfile import NamedTemporaryFile
|
|||
|
||||
import polib
|
||||
from django.apps import apps
|
||||
from django.conf import settings
|
||||
from django.core.management.base import BaseCommand, CommandError
|
||||
|
||||
from core.management.commands import RootDirectory
|
||||
from core.management.commands import RootDirectory, TRANSLATABLE_APPS
|
||||
|
||||
# Patterns to identify placeholders
|
||||
PLACEHOLDER_REGEXES = [
|
||||
|
|
@ -93,13 +94,19 @@ class Command(BaseCommand):
|
|||
|
||||
def handle(self, *args, **options) -> None:
|
||||
langs: list[str] = options["target_languages"]
|
||||
if "ALL" in langs:
|
||||
langs = list(dict(settings.LANGUAGES).keys())
|
||||
apps_to_scan: set[str] = set(options["target_apps"])
|
||||
if "ALL" in apps_to_scan:
|
||||
apps_to_scan = set(TRANSLATABLE_APPS)
|
||||
root_path: str = options.get("root_path") or "/app/"
|
||||
|
||||
configs = list(apps.get_app_configs())
|
||||
# noinspection PyTypeChecker
|
||||
configs.append(RootDirectory()) # type: ignore [arg-type]
|
||||
|
||||
errors = 0
|
||||
|
||||
for app_conf in configs:
|
||||
if app_conf.label not in apps_to_scan:
|
||||
continue
|
||||
|
|
@ -143,6 +150,7 @@ class Command(BaseCommand):
|
|||
if app_issues:
|
||||
self.stdout.write(f"→ App: {app_conf.label}")
|
||||
for line in app_issues:
|
||||
errors += 1
|
||||
self.stdout.write(line)
|
||||
self.stdout.write("")
|
||||
else:
|
||||
|
|
@ -151,3 +159,5 @@ class Command(BaseCommand):
|
|||
self.stdout.write("")
|
||||
|
||||
self.stdout.write(self.style.SUCCESS("Done scanning."))
|
||||
if errors:
|
||||
exit(1)
|
||||
|
|
|
|||
|
|
@ -7,29 +7,7 @@ import requests
|
|||
from django.apps import apps
|
||||
from django.core.management.base import BaseCommand, CommandError
|
||||
|
||||
from core.management.commands import RootDirectory
|
||||
|
||||
# Mapping from Django locale codes to DeepL API codes
|
||||
DEEPL_TARGET_LANGUAGES_MAPPING = {
|
||||
"en-gb": "EN-GB",
|
||||
"ar-ar": "AR",
|
||||
"cs-cz": "CS",
|
||||
"da-dk": "DA",
|
||||
"de-de": "DE",
|
||||
"en-us": "EN-US",
|
||||
"es-es": "ES",
|
||||
"fr-fr": "FR",
|
||||
"hi-in": "unsupported",
|
||||
"it-it": "IT",
|
||||
"ja-jp": "JA",
|
||||
"kk-kz": "unsupported",
|
||||
"nl-nl": "NL",
|
||||
"pl-pl": "PL",
|
||||
"pt-br": "PT-BR",
|
||||
"ro-ro": "RO",
|
||||
"ru-ru": "RU",
|
||||
"zh-hans": "ZH-HANS",
|
||||
}
|
||||
from core.management.commands import RootDirectory, DEEPL_TARGET_LANGUAGES_MAPPING, TRANSLATABLE_APPS
|
||||
|
||||
# Patterns to identify placeholders
|
||||
PLACEHOLDER_REGEXES = [
|
||||
|
|
@ -107,7 +85,7 @@ class Command(BaseCommand):
|
|||
action="append",
|
||||
required=True,
|
||||
metavar="LANG",
|
||||
help="Locale code for translation, e.g. de-DE, fr-FR.",
|
||||
help="Locale code for translation, e.g. de-DE, fr-FR. Use ALL to translate all languages.",
|
||||
)
|
||||
parser.add_argument(
|
||||
"-a",
|
||||
|
|
@ -116,12 +94,20 @@ class Command(BaseCommand):
|
|||
action="append",
|
||||
required=True,
|
||||
metavar="APP",
|
||||
help="App label for translation, e.g. core, payments.",
|
||||
help="App label for translation, e.g. core, payments. Use ALL to translate all apps.",
|
||||
)
|
||||
|
||||
def handle(self, *args, **options) -> None:
|
||||
target_langs = options["target_languages"]
|
||||
if "ALL" in target_langs:
|
||||
target_langs = DEEPL_TARGET_LANGUAGES_MAPPING.keys()
|
||||
target_apps = set(options["target_apps"])
|
||||
if "ALL" in target_apps:
|
||||
target_apps = {
|
||||
app_conf.label
|
||||
for app_conf in list(apps.get_app_configs()) + [RootDirectory()]
|
||||
if app_conf.label in TRANSLATABLE_APPS
|
||||
}
|
||||
auth_key = os.environ.get("DEEPL_AUTH_KEY")
|
||||
if not auth_key:
|
||||
raise CommandError("DEEPL_AUTH_KEY not set")
|
||||
|
|
|
|||
|
|
@ -5,28 +5,9 @@ import requests
|
|||
from django.core.management.base import BaseCommand, CommandError
|
||||
from django.db import transaction
|
||||
|
||||
DEEPL_API_URL = "https://api.deepl.com/v2/translate"
|
||||
from core.management.commands import DEEPL_TARGET_LANGUAGES_MAPPING
|
||||
|
||||
DEEPL_TARGET_LANGUAGES_MAPPING = {
|
||||
"en-gb": "EN-GB",
|
||||
"ar-ar": "AR",
|
||||
"cs-cz": "CS",
|
||||
"da-dk": "DA",
|
||||
"de-de": "DE",
|
||||
"en-us": "EN-US",
|
||||
"es-es": "ES",
|
||||
"fr-fr": "FR",
|
||||
"hi-in": "unsupported",
|
||||
"it-it": "IT",
|
||||
"ja-jp": "JA",
|
||||
"kk-kz": "unsupported",
|
||||
"nl-nl": "NL",
|
||||
"pl-pl": "PL",
|
||||
"pt-br": "PT-BR",
|
||||
"ro-ro": "RO",
|
||||
"ru-ru": "RU",
|
||||
"zh-hans": "ZH-HANS",
|
||||
}
|
||||
DEEPL_API_URL = "https://api.deepl.com/v2/translate"
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
317
core/models.py
317
core/models.py
|
|
@ -66,29 +66,12 @@ logger = logging.getLogger("django")
|
|||
|
||||
|
||||
class AttributeGroup(ExportModelOperationsMixin("attribute_group"), NiceModel): # type: ignore [misc, django-manager-missing]
|
||||
"""
|
||||
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'.
|
||||
"""
|
||||
__doc__ = _(
|
||||
"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 acomplex system."
|
||||
)
|
||||
|
||||
is_publicly_visible = True
|
||||
attributes: QuerySet["Attribute"]
|
||||
|
|
@ -119,33 +102,14 @@ class AttributeGroup(ExportModelOperationsMixin("attribute_group"), NiceModel):
|
|||
|
||||
|
||||
class Vendor(ExportModelOperationsMixin("vendor"), NiceModel): # type: ignore [misc, django-manager-missing]
|
||||
"""
|
||||
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.
|
||||
"""
|
||||
__doc__ = _(
|
||||
"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."
|
||||
)
|
||||
|
||||
is_publicly_visible = False
|
||||
|
||||
|
|
@ -195,21 +159,12 @@ class Vendor(ExportModelOperationsMixin("vendor"), NiceModel): # type: ignore [
|
|||
|
||||
|
||||
class ProductTag(ExportModelOperationsMixin("product_tag"), NiceModel): # type: ignore [misc, django-manager-missing]
|
||||
"""
|
||||
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.
|
||||
|
||||
"""
|
||||
__doc__ = _(
|
||||
"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."
|
||||
)
|
||||
|
||||
is_publicly_visible = True
|
||||
|
||||
|
|
@ -236,18 +191,11 @@ class ProductTag(ExportModelOperationsMixin("product_tag"), NiceModel): # type:
|
|||
|
||||
|
||||
class CategoryTag(ExportModelOperationsMixin("category_tag"), NiceModel): # type: ignore [misc, django-manager-missing]
|
||||
"""
|
||||
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.
|
||||
|
||||
"""
|
||||
__doc__ = _(
|
||||
"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."
|
||||
)
|
||||
|
||||
is_publicly_visible = True
|
||||
|
||||
|
|
@ -274,72 +222,15 @@ class CategoryTag(ExportModelOperationsMixin("category_tag"), NiceModel): # typ
|
|||
|
||||
|
||||
class Category(ExportModelOperationsMixin("category"), NiceModel, MPTTModel): # type: ignore [misc, django-manager-missing]
|
||||
"""
|
||||
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
|
||||
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
|
||||
Specifies the markup percentage for products in this category. It is validated
|
||||
to ensure values fall between 0 and 100.
|
||||
|
||||
parent
|
||||
Represents the parent category in a hierarchical structure. This forms category
|
||||
relationships to enable nesting.
|
||||
|
||||
name
|
||||
The name of the category, which also must be unique. This serves as the primary
|
||||
identifier for the category.
|
||||
|
||||
description
|
||||
An optional detailed description explaining the purpose or details of the category.
|
||||
|
||||
slug
|
||||
A unique, auto-generated field created from the category's name and parent name,
|
||||
suitable for use in URLs and identifying the category.
|
||||
|
||||
tags
|
||||
Optional tags used to group or describe the category better.
|
||||
|
||||
priority
|
||||
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.
|
||||
|
||||
------------
|
||||
verbose_name
|
||||
Specifies the singular human-readable name for the category model.
|
||||
|
||||
verbose_name_plural
|
||||
Specifies the plural human-readable name for the category model.
|
||||
|
||||
ordering : list
|
||||
Defines the default ordering for category instances, based on their hierarchical
|
||||
structure.
|
||||
"""
|
||||
__doc__ = _(
|
||||
"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."
|
||||
)
|
||||
|
||||
is_publicly_visible = True
|
||||
|
||||
|
|
@ -505,25 +396,13 @@ class Brand(ExportModelOperationsMixin("brand"), NiceModel): # type: ignore [mi
|
|||
|
||||
|
||||
class Stock(ExportModelOperationsMixin("stock"), NiceModel): # type: ignore [misc, django-manager-missing]
|
||||
"""
|
||||
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.
|
||||
"""
|
||||
__doc__ = _(
|
||||
"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."
|
||||
)
|
||||
|
||||
is_publicly_visible = False
|
||||
|
||||
|
|
@ -580,40 +459,14 @@ class Stock(ExportModelOperationsMixin("stock"), NiceModel): # type: ignore [mi
|
|||
|
||||
|
||||
class Product(ExportModelOperationsMixin("product"), NiceModel): # type: ignore [misc, django-manager-missing]
|
||||
"""
|
||||
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 highest 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.
|
||||
"""
|
||||
__doc__ = _(
|
||||
"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."
|
||||
)
|
||||
|
||||
is_publicly_visible = True
|
||||
|
||||
|
|
@ -750,32 +603,14 @@ class Product(ExportModelOperationsMixin("product"), NiceModel): # type: ignore
|
|||
|
||||
|
||||
class Attribute(ExportModelOperationsMixin("attribute"), NiceModel): # type: ignore [misc, django-manager-missing]
|
||||
"""
|
||||
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 the `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.
|
||||
"""
|
||||
|
||||
__doc__ = _(
|
||||
"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."
|
||||
)
|
||||
is_publicly_visible = True
|
||||
|
||||
categories = ManyToManyField(
|
||||
|
|
@ -813,10 +648,20 @@ class Attribute(ExportModelOperationsMixin("attribute"), NiceModel): # type: ig
|
|||
unique=True,
|
||||
)
|
||||
|
||||
is_filterable = BooleanField(
|
||||
default=True,
|
||||
verbose_name=_("is filterable"),
|
||||
help_text=_("designates whether this attribute can be used for filtering or not"),
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
class Meta:
|
||||
unique_together = (
|
||||
"name",
|
||||
"group",
|
||||
)
|
||||
verbose_name = _("attribute")
|
||||
verbose_name_plural = _("attributes")
|
||||
|
||||
|
|
@ -1331,25 +1176,15 @@ class PromoCode(ExportModelOperationsMixin("promocode"), NiceModel): # type: ig
|
|||
|
||||
|
||||
class Order(ExportModelOperationsMixin("order"), NiceModel): # type: ignore [misc, django-manager-missing]
|
||||
"""
|
||||
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.
|
||||
"""
|
||||
__doc__ = _(
|
||||
"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."
|
||||
)
|
||||
|
||||
is_publicly_visible = False
|
||||
|
||||
|
|
|
|||
BIN
core/static/flags/fa-ir.png
Normal file
BIN
core/static/flags/fa-ir.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 297 B |
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue