diff --git a/core/filters.py b/core/filters.py index 7755956c..f2a1084c 100644 --- a/core/filters.py +++ b/core/filters.py @@ -5,6 +5,7 @@ import uuid from django.db.models import Avg, FloatField, OuterRef, Q, Subquery, Value from django.db.models.functions import Coalesce from django.utils.http import urlsafe_base64_decode +from django.utils.translation import gettext_lazy as _ from django_filters import ( BaseInFilter, BooleanFilter, @@ -33,20 +34,27 @@ class CaseInsensitiveListFilter(BaseInFilter, CharFilter): class ProductFilter(FilterSet): - uuid = UUIDFilter(field_name="uuid", lookup_expr="exact", label="UUID") - name = CharFilter(field_name="name", lookup_expr="icontains", label="Name") - categories = CaseInsensitiveListFilter(field_name="category__name", label="Categories") - category_uuid = CharFilter(field_name="category__uuid", lookup_expr="exact", label="Category") - category_slugs = CaseInsensitiveListFilter(field_name="category__slug", label="Categories Slug") - tags = CaseInsensitiveListFilter(field_name="tags__tag_name", label="Tags") - min_price = NumberFilter(field_name="stocks__price", lookup_expr="gte", label="Min Price") - max_price = NumberFilter(field_name="stocks__price", lookup_expr="lte", label="Max Price") - is_active = BooleanFilter(field_name="is_active", label="Is Active") - brand = CharFilter(field_name="brand__name", lookup_expr="iexact", label="Brand") - attributes = CharFilter(method="filter_attributes", label="Attributes") - quantity = NumberFilter(field_name="stocks__quantity", lookup_expr="gt", label="Quantity") - slug = CharFilter(field_name="slug", lookup_expr="exact", label="Slug") - is_digital = BooleanFilter(field_name="is_digital", label="Is Digital") + uuid = UUIDFilter(field_name="uuid", lookup_expr="exact", label=_("UUID")) + name = CharFilter(field_name="name", lookup_expr="icontains", label=_("Name")) + categories = CaseInsensitiveListFilter(field_name="category__name", label=_("Categories")) + category_uuid = CharFilter( + method="filter_category", + label="Category (UUID)" + ) + categories_slugs = CaseInsensitiveListFilter(field_name="category__slug", label=_("Categories Slugs")) + tags = CaseInsensitiveListFilter(field_name="tags__tag_name", label=_("Tags")) + min_price = NumberFilter(field_name="stocks__price", lookup_expr="gte", label=_("Min Price")) + max_price = NumberFilter(field_name="stocks__price", lookup_expr="lte", label=_("Max Price")) + is_active = BooleanFilter(field_name="is_active", label=_("Is Active")) + brand = CharFilter(field_name="brand__name", lookup_expr="iexact", label=_("Brand")) + attributes = CharFilter(method="filter_attributes", label=_("Attributes")) + quantity = NumberFilter(field_name="stocks__quantity", lookup_expr="gt", label=_("Quantity")) + slug = CharFilter(field_name="slug", lookup_expr="exact", label=_("Slug")) + is_digital = BooleanFilter(field_name="is_digital", label=_("Is Digital")) + include_subcategories = BooleanFilter( + method="filter_include_flag", + label=_("Include sub-categories") + ) order_by = OrderingFilter( fields=( @@ -101,6 +109,10 @@ class ProductFilter(FilterSet): ) ) + def filter_include_flag(self, queryset, name, value): + # just a placeholder method + return queryset + def filter_attributes(self, queryset, _name, value): if not value: return queryset @@ -163,6 +175,24 @@ class ProductFilter(FilterSet): return queryset + def filter_category(self, queryset, name, value): + if not value: + return queryset + + include = self.data.get("include_subcategories") + include_children = str(include).lower() in ("1", "true", "t", "yes") + + try: + root = Category.objects.get(uuid=value) + except Category.DoesNotExist: + return queryset.none() + + if include_children: + descendants = root.get_descendants(include_self=True) + return queryset.filter(category__in=descendants) + else: + return queryset.filter(category__uuid=value) + @staticmethod def _infer_type(value): try: @@ -189,21 +219,12 @@ class ProductFilter(FilterSet): @property def qs(self): - """ - Override the queryset property to annotate a “rating” field - when the ordering parameters include “rating”. This makes ordering - by rating possible. - """ qs = super().qs - # Check if ordering by rating is requested (could be "rating" or "-rating") ordering_param = self.data.get("order_by", "") if ordering_param: order_fields = [field.strip() for field in ordering_param.split(",")] if any(field.lstrip("-") == "rating" for field in order_fields): - # Annotate each product with its average rating. - # Here we use a Subquery to calculate the average rating from the Feedback model. - # Adjust the filter in Feedback.objects.filter(...) if your relationships differ. feedback_qs = ( Feedback.objects.filter(order_product__product_id=OuterRef("pk")) .values("order_product__product_id") @@ -220,26 +241,18 @@ class ProductFilter(FilterSet): class OrderFilter(FilterSet): search = CharFilter( - method='filter_search', - label='Search (ID, product name or part number)', + method="filter_search", + label=_("Search (ID, product name or part number)"), ) - min_buy_time = DateTimeFilter( - field_name='buy_time', - lookup_expr='gte', - label='Bought after (inclusive)' - ) - max_buy_time = DateTimeFilter( - field_name='buy_time', - lookup_expr='lte', - label='Bought before (inclusive)' - ) + min_buy_time = DateTimeFilter(field_name="buy_time", lookup_expr="gte", label=_("Bought after (inclusive)")) + max_buy_time = DateTimeFilter(field_name="buy_time", lookup_expr="lte", label=_("Bought before (inclusive)")) - uuid = UUIDFilter(field_name='uuid', lookup_expr='exact') - user_email = CharFilter(field_name='user__email', lookup_expr='iexact') - user = UUIDFilter(field_name='user__uuid', lookup_expr='exact') - status = CharFilter(field_name='status', lookup_expr='icontains', label='Status') - human_readable_id = CharFilter(field_name='human_readable_id', lookup_expr='exact') + uuid = UUIDFilter(field_name="uuid", lookup_expr="exact") + user_email = CharFilter(field_name="user__email", lookup_expr="iexact", label=_("User email")) + user = UUIDFilter(field_name="user__uuid", lookup_expr="exact", label=_("User UUID")) + status = CharFilter(field_name="status", lookup_expr="icontains", label=_("Status")) + human_readable_id = CharFilter(field_name="human_readable_id", lookup_expr="exact", label=_("Human Readable ID")) order_by = OrderingFilter( fields=( @@ -270,21 +283,17 @@ class OrderFilter(FilterSet): ] def filter_search(self, queryset, _name, value): - return ( - queryset - .filter( - Q(human_readable_id__icontains=value) | - Q(order_products__product__name__icontains=value) | - Q(order_products__product__partnumber__icontains=value) - ) - .distinct() - ) + return queryset.filter( + Q(human_readable_id__icontains=value) + | Q(order_products__product__name__icontains=value) + | Q(order_products__product__partnumber__icontains=value) + ).distinct() class WishlistFilter(FilterSet): uuid = UUIDFilter(field_name="uuid", lookup_expr="exact") - user_email = CharFilter(field_name="user__email", lookup_expr="iexact") - user = UUIDFilter(field_name="user__uuid", lookup_expr="exact") + user_email = CharFilter(field_name="user__email", lookup_expr="iexact", label=_("User email")) + user = UUIDFilter(field_name="user__uuid", lookup_expr="exact", label=_("User UUID")) order_by = OrderingFilter( fields=(("uuid", "uuid"), ("created", "created"), ("modified", "modified"), ("?", "random")) @@ -297,9 +306,10 @@ class WishlistFilter(FilterSet): class CategoryFilter(FilterSet): uuid = UUIDFilter(field_name="uuid", lookup_expr="exact") - name = CharFilter(field_name="name", lookup_expr="icontains") - parent_uuid = CharFilter(method="filter_parent_uuid") - slug = CharFilter(field_name="slug", lookup_expr="exact") + name = CharFilter(field_name="name", lookup_expr="icontains", label=_("Name")) + parent_uuid = CharFilter(method="filter_parent_uuid", label=_("Parent")) + slug = CharFilter(field_name="slug", lookup_expr="exact", label=_("Slug")) + tags = CaseInsensitiveListFilter(field_name="tags__tag_name", label=_("Tags")) order_by = OrderingFilter( fields=( @@ -311,13 +321,9 @@ class CategoryFilter(FilterSet): class Meta: model = Category - fields = ["uuid", "name", "parent_uuid", "slug"] + fields = ["uuid", "name", "parent_uuid", "slug", "tags"] def filter_parent_uuid(self, queryset, _name, value): - """ - If ?parent_uuid= or ?parent_uuid=null, return items with parent=None. - Otherwise treat `value` as a real UUID and filter parent__uuid=value. - """ if value in ("", "null", "None"): return queryset.filter(parent=None) @@ -331,8 +337,8 @@ class CategoryFilter(FilterSet): class BrandFilter(FilterSet): uuid = UUIDFilter(field_name="uuid", lookup_expr="exact") - name = CharFilter(field_name="name", lookup_expr="icontains") - categories = CaseInsensitiveListFilter(field_name="categories__uuid", lookup_expr="exact") + name = CharFilter(field_name="name", lookup_expr="icontains", label=_("Name")) + categories = CaseInsensitiveListFilter(field_name="categories__uuid", lookup_expr="exact", label=_("Categories")) order_by = OrderingFilter( fields=( @@ -348,9 +354,9 @@ class BrandFilter(FilterSet): class FeedbackFilter(FilterSet): - uuid = UUIDFilter(field_name="uuid", lookup_expr="exact") - product_uuid = UUIDFilter(field_name="order_product__product__uuid", lookup_expr="exact") - user_uuid = UUIDFilter(field_name="order_product__order__user__uuid", lookup_expr="exact") + uuid = UUIDFilter(field_name="uuid", lookup_expr="exact", label=_("UUID")) + product_uuid = UUIDFilter(field_name="order_product__product__uuid", lookup_expr="exact", label=_("Product UUID")) + user_uuid = UUIDFilter(field_name="order_product__order__user__uuid", lookup_expr="exact", label=_("User UUID")) order_by = OrderingFilter( fields=( diff --git a/core/locale/ar_AR/LC_MESSAGES/django.mo b/core/locale/ar_AR/LC_MESSAGES/django.mo index 28bf2ed2..44691096 100644 Binary files a/core/locale/ar_AR/LC_MESSAGES/django.mo and b/core/locale/ar_AR/LC_MESSAGES/django.mo differ diff --git a/core/locale/ar_AR/LC_MESSAGES/django.po b/core/locale/ar_AR/LC_MESSAGES/django.po index 313186f5..764dd620 100644 --- a/core/locale/ar_AR/LC_MESSAGES/django.po +++ b/core/locale/ar_AR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-08 19:42+0100\n" +"POT-Creation-Date: 2025-06-10 03:32+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -80,7 +80,7 @@ msgstr "الصورة" msgid "images" msgstr "الصور" -#: core/admin.py:162 core/models.py:1180 +#: core/admin.py:162 core/models.py:1212 msgid "stock" msgstr "المخزون" @@ -108,11 +108,11 @@ msgstr "معلومات أساسية" msgid "important dates" msgstr "تواريخ مهمة" -#: core/admin.py:253 core/models.py:874 +#: core/admin.py:253 core/models.py:881 msgid "order product" msgstr "طلب المنتج" -#: core/admin.py:254 core/graphene/object_types.py:262 core/models.py:875 +#: core/admin.py:254 core/graphene/object_types.py:262 core/models.py:882 msgid "order products" msgstr "اطلب المنتجات" @@ -730,6 +730,98 @@ msgstr "إضافة أو إزالة الملاحظات على العلاقة بي msgid "no search term provided." msgstr "لم يتم توفير مصطلح بحث." +#: core/filters.py:37 core/filters.py:357 +msgid "UUID" +msgstr "UUID" + +#: core/filters.py:38 core/filters.py:309 core/filters.py:340 +msgid "Name" +msgstr "الاسم" + +#: core/filters.py:39 core/filters.py:341 +msgid "Categories" +msgstr "الفئات" + +#: core/filters.py:44 +msgid "Categories Slugs" +msgstr "الفئات الرخويات" + +#: core/filters.py:45 core/filters.py:312 +msgid "Tags" +msgstr "الوسوم" + +#: core/filters.py:46 +msgid "Min Price" +msgstr "الحد الأدنى للسعر" + +#: core/filters.py:47 +msgid "Max Price" +msgstr "ماكس برايس" + +#: core/filters.py:48 +msgid "Is Active" +msgstr "نشط" + +#: core/filters.py:49 +msgid "Brand" +msgstr "العلامة التجارية" + +#: core/filters.py:50 +msgid "Attributes" +msgstr "السمات" + +#: core/filters.py:51 +msgid "Quantity" +msgstr "الكمية" + +#: core/filters.py:52 core/filters.py:311 +msgid "Slug" +msgstr "سبيكة" + +#: core/filters.py:53 +msgid "Is Digital" +msgstr "هو رقمي" + +#: core/filters.py:56 +msgid "Include sub-categories" +msgstr "تضمين الفئات الفرعية" + +#: core/filters.py:245 +msgid "Search (ID, product name or part number)" +msgstr "البحث (المعرف أو اسم المنتج أو رقم الجزء)" + +#: core/filters.py:248 +msgid "Bought after (inclusive)" +msgstr "تم الشراء بعد (شامل)" + +#: core/filters.py:249 +msgid "Bought before (inclusive)" +msgstr "تم الشراء من قبل (شامل)" + +#: core/filters.py:252 core/filters.py:295 +msgid "User email" +msgstr "البريد الإلكتروني للمستخدم" + +#: core/filters.py:253 core/filters.py:296 core/filters.py:359 +msgid "User UUID" +msgstr "معرّف المستخدم UUID" + +#: core/filters.py:254 +msgid "Status" +msgstr "الحالة" + +#: core/filters.py:255 +msgid "Human Readable ID" +msgstr "معرّف قابل للقراءة من قبل الإنسان" + +#: core/filters.py:310 +msgid "Parent" +msgstr "الوالدين" + +#: core/filters.py:358 +msgid "Product UUID" +msgstr "UUID المنتج" + #: core/graphene/mutations.py:38 msgid "key to look for in or set into the cache" msgstr "" @@ -782,7 +874,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "يرجى تقديم إما Order_uuid أو order_uid_hr_hr_id - متنافيان!" #: core/graphene/mutations.py:225 core/graphene/mutations.py:441 -#: core/graphene/mutations.py:475 core/viewsets.py:348 +#: core/graphene/mutations.py:475 core/viewsets.py:345 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "جاء نوع خاطئ من طريقة order.buy(): {type(instance)!s}" @@ -834,7 +926,7 @@ msgstr "الرجاء إرسال السمات كسلسلة منسقة مثل attr msgid "original address string provided by the user" msgstr "سلسلة العنوان الأصلي المقدمة من المستخدم" -#: core/graphene/mutations.py:572 core/viewsets.py:238 core/viewsets.py:351 +#: core/graphene/mutations.py:572 core/viewsets.py:240 core/viewsets.py:348 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} غير موجود: {uuid}" @@ -848,7 +940,7 @@ msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - يعمل مثل السحر" #: core/graphene/object_types.py:43 core/graphene/object_types.py:245 -#: core/graphene/object_types.py:286 core/models.py:126 core/models.py:489 +#: core/graphene/object_types.py:286 core/models.py:126 core/models.py:495 msgid "attributes" msgstr "السمات" @@ -861,11 +953,11 @@ msgid "groups of attributes" msgstr "مجموعات السمات" #: core/graphene/object_types.py:76 core/graphene/object_types.py:104 -#: core/graphene/object_types.py:132 core/models.py:90 core/models.py:220 +#: core/graphene/object_types.py:132 core/models.py:90 core/models.py:226 msgid "categories" msgstr "الفئات" -#: core/graphene/object_types.py:83 core/models.py:267 +#: core/graphene/object_types.py:83 core/models.py:273 msgid "brands" msgstr "العلامات التجارية" @@ -888,7 +980,7 @@ msgid "" msgstr "" "الحد الأدنى والحد الأقصى لأسعار المنتجات في هذه الفئة، إذا كانت متوفرة." -#: core/graphene/object_types.py:202 core/models.py:404 +#: core/graphene/object_types.py:202 core/models.py:410 msgid "vendors" msgstr "البائعون" @@ -913,7 +1005,7 @@ msgid "represents feedback from a user." msgstr "يمثل ملاحظات من المستخدم." #: core/graphene/object_types.py:246 core/graphene/object_types.py:287 -#: core/models.py:483 +#: core/models.py:489 msgid "notifications" msgstr "الإشعارات" @@ -925,7 +1017,7 @@ msgstr "تحميل الرابط الخاص بمنتج الطلب هذا إن أ msgid "a list of order products in this order" msgstr "قائمة بطلب المنتجات بهذا الترتيب" -#: core/graphene/object_types.py:278 core/models.py:453 +#: core/graphene/object_types.py:278 core/models.py:459 msgid "billing address" msgstr "عنوان إرسال الفواتير" @@ -949,7 +1041,7 @@ msgstr "إجمالي كمية المنتجات بالترتيب" msgid "are all products in the order digital" msgstr "هل جميع المنتجات في الطلب رقمي" -#: core/graphene/object_types.py:305 core/models.py:517 +#: core/graphene/object_types.py:305 core/models.py:523 msgid "orders" msgstr "الطلبات" @@ -961,15 +1053,15 @@ msgstr "رابط الصورة" msgid "product's images" msgstr "صور المنتج" -#: core/graphene/object_types.py:335 core/models.py:219 core/models.py:277 +#: core/graphene/object_types.py:335 core/models.py:225 core/models.py:283 msgid "category" msgstr "الفئة" -#: core/graphene/object_types.py:337 core/models.py:440 +#: core/graphene/object_types.py:337 core/models.py:446 msgid "feedbacks" msgstr "الملاحظات" -#: core/graphene/object_types.py:338 core/models.py:266 core/models.py:285 +#: core/graphene/object_types.py:338 core/models.py:272 core/models.py:291 msgid "brand" msgstr "العلامة التجارية" @@ -989,7 +1081,7 @@ msgstr "الكمية" msgid "number of feedbacks" msgstr "عدد الملاحظات" -#: core/graphene/object_types.py:360 core/models.py:329 +#: core/graphene/object_types.py:360 core/models.py:335 msgid "products" msgstr "المنتجات" @@ -1001,15 +1093,15 @@ msgstr "الرموز الترويجية" msgid "products on sale" msgstr "المنتجات المعروضة للبيع" -#: core/graphene/object_types.py:425 core/models.py:1121 +#: core/graphene/object_types.py:425 core/models.py:1153 msgid "promotions" msgstr "العروض الترويجية" -#: core/graphene/object_types.py:429 core/models.py:403 +#: core/graphene/object_types.py:429 core/models.py:409 msgid "vendor" msgstr "البائع" -#: core/graphene/object_types.py:430 core/models.py:328 +#: core/graphene/object_types.py:430 core/models.py:334 #: core/templates/digital_order_created_email.html:107 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:93 @@ -1017,11 +1109,11 @@ msgstr "البائع" msgid "product" msgstr "المنتج" -#: core/graphene/object_types.py:441 core/models.py:1191 +#: core/graphene/object_types.py:441 core/models.py:1223 msgid "wishlisted products" msgstr "المنتجات المفضلة" -#: core/graphene/object_types.py:447 core/models.py:1208 +#: core/graphene/object_types.py:447 core/models.py:1240 msgid "wishlists" msgstr "قوائم التمنيات" @@ -1029,7 +1121,7 @@ msgstr "قوائم التمنيات" msgid "tagged products" msgstr "المنتجات الموسومة" -#: core/graphene/object_types.py:458 core/models.py:291 core/models.py:952 +#: core/graphene/object_types.py:458 core/models.py:297 core/models.py:959 msgid "product tags" msgstr "علامات المنتج" @@ -1177,8 +1269,8 @@ msgstr "سمة هذه القيمة" msgid "the specific product associated with this attribute's value" msgstr "المنتج المحدد المرتبط بقيمة هذه السمة" -#: core/models.py:145 core/models.py:851 core/models.py:978 -#: core/models.py:1147 +#: core/models.py:145 core/models.py:858 core/models.py:1010 +#: core/models.py:1179 msgid "associated product" msgstr "المنتج المرتبط" @@ -1222,271 +1314,279 @@ msgstr "إضافة وصف تفصيلي لهذه الفئة" msgid "category description" msgstr "وصف الفئة" -#: core/models.py:229 +#: core/models.py:212 +msgid "tags that help describe or group this category" +msgstr "العلامات التي تساعد في وصف هذه الفئة أو تجميعها" + +#: core/models.py:213 core/models.py:984 +msgid "category tags" +msgstr "علامات الفئة" + +#: core/models.py:235 msgid "name of this brand" msgstr "اسم هذه العلامة التجارية" -#: core/models.py:230 +#: core/models.py:236 msgid "brand name" msgstr "اسم العلامة التجارية" -#: core/models.py:237 +#: core/models.py:243 msgid "upload a logo representing this brand" msgstr "تحميل شعار يمثل هذه العلامة التجارية" -#: core/models.py:239 +#: core/models.py:245 msgid "brand small image" msgstr "صورة العلامة التجارية الصغيرة" -#: core/models.py:245 +#: core/models.py:251 msgid "upload a big logo representing this brand" msgstr "رفع شعار كبير يمثل هذه العلامة التجارية" -#: core/models.py:247 +#: core/models.py:253 msgid "brand big image" msgstr "صورة كبيرة للعلامة التجارية" -#: core/models.py:252 +#: core/models.py:258 msgid "add a detailed description of the brand" msgstr "إضافة وصف تفصيلي للعلامة التجارية" -#: core/models.py:253 +#: core/models.py:259 msgid "brand description" msgstr "وصف العلامة التجارية" -#: core/models.py:258 +#: core/models.py:264 msgid "optional categories that this brand is associated with" msgstr "الفئات الاختيارية التي ترتبط بها هذه العلامة التجارية" -#: core/models.py:259 +#: core/models.py:265 msgid "associated categories" msgstr "الفئات" -#: core/models.py:276 +#: core/models.py:282 msgid "category this product belongs to" msgstr "الفئة التي ينتمي إليها هذا المنتج" -#: core/models.py:284 +#: core/models.py:290 msgid "optionally associate this product with a brand" msgstr "ربط هذا المنتج اختياريًا بعلامة تجارية" -#: core/models.py:290 +#: core/models.py:296 msgid "tags that help describe or group this product" msgstr "العلامات التي تساعد في وصف أو تجميع هذا المنتج" -#: core/models.py:295 +#: core/models.py:301 msgid "indicates whether this product is digitally delivered" msgstr "يشير إلى ما إذا كان هذا المنتج يتم تسليمه رقميًا أم لا" -#: core/models.py:296 +#: core/models.py:302 msgid "is product digital" msgstr "هل المنتج رقمي" -#: core/models.py:302 +#: core/models.py:308 msgid "provide a clear identifying name for the product" msgstr "توفير اسم تعريفي واضح للمنتج" -#: core/models.py:303 +#: core/models.py:309 msgid "product name" msgstr "اسم المنتج" -#: core/models.py:308 core/models.py:1109 +#: core/models.py:314 core/models.py:1141 msgid "add a detailed description of the product" msgstr "إضافة وصف تفصيلي للمنتج" -#: core/models.py:309 +#: core/models.py:315 msgid "product description" msgstr "وصف المنتج" -#: core/models.py:316 +#: core/models.py:322 msgid "part number for this product" msgstr "رقم الجزء لهذا المنتج" -#: core/models.py:317 +#: core/models.py:323 msgid "part number" msgstr "رقم الجزء" -#: core/models.py:381 +#: core/models.py:387 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "تخزين بيانات الاعتماد ونقاط النهاية المطلوبة لاتصالات واجهة برمجة التطبيقات " "الخاصة بالمورّد" -#: core/models.py:382 +#: core/models.py:388 msgid "authentication info" msgstr "معلومات المصادقة" -#: core/models.py:387 +#: core/models.py:393 msgid "define the markup for products retrieved from this vendor" msgstr "تحديد الترميز للمنتجات المسترجعة من هذا البائع" -#: core/models.py:388 +#: core/models.py:394 msgid "vendor markup percentage" msgstr "نسبة هامش الربح للبائع" -#: core/models.py:392 +#: core/models.py:398 msgid "name of this vendor" msgstr "اسم هذا البائع" -#: core/models.py:393 +#: core/models.py:399 msgid "vendor name" msgstr "اسم البائع" -#: core/models.py:416 +#: core/models.py:422 msgid "user-provided comments about their experience with the product" msgstr "التعليقات المقدمة من المستخدمين حول تجربتهم مع المنتج" -#: core/models.py:417 +#: core/models.py:423 msgid "feedback comments" msgstr "تعليقات على الملاحظات" -#: core/models.py:424 +#: core/models.py:430 msgid "" "references the specific product in an order that this feedback is about" msgstr "الإشارة إلى المنتج المحدد في الطلب الذي تدور حوله هذه الملاحظات" -#: core/models.py:425 +#: core/models.py:431 msgid "related order product" msgstr "منتجات الطلبات ذات الصلة" -#: core/models.py:430 +#: core/models.py:436 msgid "user-assigned rating for the product" msgstr "التصنيف المعين من قبل المستخدم للمنتج" -#: core/models.py:431 +#: core/models.py:437 msgid "product rating" msgstr "تصنيف المنتج" -#: core/models.py:439 +#: core/models.py:445 msgid "feedback" msgstr "الملاحظات" -#: core/models.py:452 +#: core/models.py:458 msgid "the billing address used for this order" msgstr "عنوان إرسال الفواتير المستخدم لهذا الطلب" -#: core/models.py:460 +#: core/models.py:466 msgid "optional promo code applied to this order" msgstr "الرمز الترويجي الاختياري المطبق على هذا الطلب" -#: core/models.py:461 +#: core/models.py:467 msgid "applied promo code" msgstr "الرمز الترويجي المطبق" -#: core/models.py:469 +#: core/models.py:475 msgid "the shipping address used for this order" msgstr "عنوان الشحن المستخدم لهذا الطلب" -#: core/models.py:470 +#: core/models.py:476 msgid "shipping address" msgstr "عنوان الشحن" -#: core/models.py:476 +#: core/models.py:482 msgid "current status of the order in its lifecycle" msgstr "الحالة الحالية للطلب في دورة حياته" -#: core/models.py:477 +#: core/models.py:483 msgid "order status" msgstr "حالة الطلب" -#: core/models.py:482 core/models.py:828 +#: core/models.py:488 core/models.py:835 msgid "json structure of notifications to display to users" msgstr "" "بنية JSON للإشعارات التي سيتم عرضها للمستخدمين، في واجهة مستخدم المشرف، يتم " "استخدام عرض الجدول" -#: core/models.py:488 +#: core/models.py:494 msgid "json representation of order attributes for this order" msgstr "تمثيل JSON لسمات الطلب لهذا الطلب" -#: core/models.py:494 +#: core/models.py:500 msgid "the user who placed the order" msgstr "المستخدم الذي قدم الطلب" -#: core/models.py:495 +#: core/models.py:501 msgid "user" msgstr "المستخدم" -#: core/models.py:501 +#: core/models.py:507 msgid "the timestamp when the order was finalized" msgstr "الطابع الزمني عند الانتهاء من الطلب" -#: core/models.py:502 +#: core/models.py:508 msgid "buy time" msgstr "وقت الشراء" -#: core/models.py:509 +#: core/models.py:515 msgid "a human-readable identifier for the order" msgstr "معرّف يمكن قراءته بواسطة البشر للطلب" -#: core/models.py:510 +#: core/models.py:516 msgid "human readable id" msgstr "معرّف يمكن قراءته من قبل البشر" -#: core/models.py:516 +#: core/models.py:522 msgid "order" msgstr "الطلب" -#: core/models.py:531 +#: core/models.py:537 msgid "a user must have only one pending order at a time" msgstr "يجب أن يكون لدى المستخدم طلب واحد فقط معلق في كل مرة!" -#: core/models.py:559 +#: core/models.py:566 msgid "you cannot add products to an order that is not a pending one" msgstr "لا يمكنك إضافة منتجات إلى طلب غير معلق إلى طلب غير معلق" -#: core/models.py:564 +#: core/models.py:571 msgid "you cannot add inactive products to order" msgstr "لا يمكنك إضافة منتجات غير نشطة للطلب" -#: core/models.py:581 +#: core/models.py:588 msgid "you cannot add more products than available in stock" msgstr "لا يمكنك إضافة منتجات أكثر من المتوفرة في المخزون" -#: core/models.py:590 core/models.py:610 core/models.py:634 -#: core/models.py:1218 core/models.py:1230 +#: core/models.py:597 core/models.py:617 core/models.py:641 +#: core/models.py:1250 core/models.py:1262 #, python-brace-format msgid "{name} does not exist: {product_uuid}" msgstr "{name} غير موجود: {product_uuid}" -#: core/models.py:594 core/models.py:618 core/models.py:626 +#: core/models.py:601 core/models.py:625 core/models.py:633 msgid "you cannot remove products from an order that is not a pending one" msgstr "لا يمكنك إزالة المنتجات من طلب غير معلق من طلب غير معلق" -#: core/models.py:614 +#: core/models.py:621 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} غير موجود مع الاستعلام <{query}>" -#: core/models.py:645 +#: core/models.py:652 msgid "promocode does not exist" msgstr "الرمز الترويجي غير موجود" -#: core/models.py:654 +#: core/models.py:661 msgid "you can only buy physical products with shipping address specified" msgstr "يمكنك فقط شراء المنتجات المادية مع تحديد عنوان الشحن فقط!" -#: core/models.py:673 +#: core/models.py:680 msgid "address does not exist" msgstr "العنوان غير موجود" -#: core/models.py:684 core/models.py:727 +#: core/models.py:691 core/models.py:734 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "لا يمكنك الشراء في هذه اللحظة، يرجى المحاولة مرة أخرى بعد بضع دقائق." -#: core/models.py:687 +#: core/models.py:694 msgid "invalid force value" msgstr "قيمة القوة غير صالحة" -#: core/models.py:692 core/models.py:730 +#: core/models.py:699 core/models.py:737 msgid "you cannot purchase an empty order!" msgstr "لا يمكنك شراء طلبية فارغة!" -#: core/models.py:707 +#: core/models.py:714 msgid "insufficient funds to complete the order" msgstr "عدم كفاية الأموال لإكمال الطلب" -#: core/models.py:739 +#: core/models.py:746 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -1494,196 +1594,200 @@ msgstr "" "لا يمكنك الشراء بدون تسجيل، يرجى تقديم المعلومات التالية: اسم العميل، البريد" " الإلكتروني للعميل، رقم هاتف العميل" -#: core/models.py:748 +#: core/models.py:755 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "طريقة الدفع غير صالحة: {payment_method} من {available_payment_methods}!" -#: core/models.py:816 +#: core/models.py:823 msgid "the price paid by the customer for this product at purchase time" msgstr "السعر الذي دفعه العميل لهذا المنتج وقت الشراء" -#: core/models.py:817 +#: core/models.py:824 msgid "purchase price at order time" msgstr "سعر الشراء وقت الطلب" -#: core/models.py:822 +#: core/models.py:829 msgid "internal comments for admins about this ordered product" msgstr "تعليقات داخلية للمسؤولين حول هذا المنتج المطلوب" -#: core/models.py:823 +#: core/models.py:830 msgid "internal comments" msgstr "التعليقات الداخلية" -#: core/models.py:829 +#: core/models.py:836 msgid "user notifications" msgstr "إشعارات المستخدم" -#: core/models.py:834 +#: core/models.py:841 msgid "json representation of this item's attributes" msgstr "تمثيل JSON لسمات هذا العنصر" -#: core/models.py:835 +#: core/models.py:842 msgid "ordered product attributes" msgstr "سمات المنتج المطلوبة" -#: core/models.py:840 +#: core/models.py:847 msgid "reference to the parent order that contains this product" msgstr "الإشارة إلى الطلب الأصلي الذي يحتوي على هذا المنتج" -#: core/models.py:841 +#: core/models.py:848 msgid "parent order" msgstr "ترتيب الوالدين" -#: core/models.py:850 +#: core/models.py:857 msgid "the specific product associated with this order line" msgstr "المنتج المحدد المرتبط بخط الطلب هذا" -#: core/models.py:857 +#: core/models.py:864 msgid "quantity of this specific product in the order" msgstr "كمية هذا المنتج المحدد في الطلب" -#: core/models.py:858 +#: core/models.py:865 msgid "product quantity" msgstr "كمية المنتج" -#: core/models.py:865 +#: core/models.py:872 msgid "current status of this product in the order" msgstr "الحالة الحالية لهذا المنتج بالترتيب" -#: core/models.py:866 +#: core/models.py:873 msgid "product line status" msgstr "حالة خط الإنتاج" -#: core/models.py:918 +#: core/models.py:925 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "إجراء خاطئ محدد للتغذية الراجعة: {action}" -#: core/models.py:926 +#: core/models.py:933 msgid "you cannot feedback an order which is not received" msgstr "لا يمكنك التعليق على طلب لم يتم استلامه" -#: core/models.py:937 +#: core/models.py:944 core/models.py:969 msgid "internal tag identifier for the product tag" msgstr "معرّف العلامة الداخلي لعلامة المنتج" -#: core/models.py:938 +#: core/models.py:945 core/models.py:970 msgid "tag name" msgstr "اسم العلامة" -#: core/models.py:942 +#: core/models.py:949 core/models.py:974 msgid "user-friendly name for the product tag" msgstr "اسم سهل الاستخدام لعلامة المنتج" -#: core/models.py:943 +#: core/models.py:950 core/models.py:975 msgid "tag display name" msgstr "اسم عرض العلامة" -#: core/models.py:951 +#: core/models.py:958 msgid "product tag" msgstr "علامة المنتج" -#: core/models.py:960 +#: core/models.py:983 +msgid "category tag" +msgstr "علامة الفئة" + +#: core/models.py:992 msgid "provide alternative text for the image for accessibility" msgstr "توفير نص بديل للصورة لإمكانية الوصول" -#: core/models.py:961 +#: core/models.py:993 msgid "image alt text" msgstr "النص البديل للصورة" -#: core/models.py:964 +#: core/models.py:996 msgid "upload the image file for this product" msgstr "تحميل ملف الصورة لهذا المنتج" -#: core/models.py:965 core/models.py:990 +#: core/models.py:997 core/models.py:1022 msgid "product image" msgstr "صورة المنتج" -#: core/models.py:971 +#: core/models.py:1003 msgid "determines the order in which images are displayed" msgstr "يحدد الترتيب الذي يتم عرض الصور به" -#: core/models.py:972 +#: core/models.py:1004 msgid "display priority" msgstr "أولوية العرض" -#: core/models.py:977 +#: core/models.py:1009 msgid "the product that this image represents" msgstr "المنتج الذي تمثله هذه الصورة" -#: core/models.py:991 +#: core/models.py:1023 msgid "product images" msgstr "صور المنتج" -#: core/models.py:1001 +#: core/models.py:1033 msgid "unique code used by a user to redeem a discount" msgstr "الرمز الفريد الذي يستخدمه المستخدم لاسترداد قيمة الخصم" -#: core/models.py:1002 +#: core/models.py:1034 msgid "promo code identifier" msgstr "معرّف الرمز الترويجي" -#: core/models.py:1009 +#: core/models.py:1041 msgid "fixed discount amount applied if percent is not used" msgstr "مبلغ الخصم الثابت المطبق في حالة عدم استخدام النسبة المئوية" -#: core/models.py:1010 +#: core/models.py:1042 msgid "fixed discount amount" msgstr "مبلغ الخصم الثابت" -#: core/models.py:1016 +#: core/models.py:1048 msgid "percentage discount applied if fixed amount is not used" msgstr "النسبة المئوية للخصم المطبق في حالة عدم استخدام مبلغ ثابت" -#: core/models.py:1017 +#: core/models.py:1049 msgid "percentage discount" msgstr "النسبة المئوية للخصم" -#: core/models.py:1022 +#: core/models.py:1054 msgid "timestamp when the promocode expires" msgstr "الطابع الزمني عند انتهاء صلاحية الرمز الترويجي" -#: core/models.py:1023 +#: core/models.py:1055 msgid "end validity time" msgstr "وقت انتهاء الصلاحية" -#: core/models.py:1028 +#: core/models.py:1060 msgid "timestamp from which this promocode is valid" msgstr "الطابع الزمني الذي يكون هذا الرمز الترويجي صالحاً منه" -#: core/models.py:1029 +#: core/models.py:1061 msgid "start validity time" msgstr "وقت بدء الصلاحية" -#: core/models.py:1034 +#: core/models.py:1066 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "الطابع الزمني عند استخدام الرمز الترويجي، فارغ إذا لم يتم استخدامه بعد" -#: core/models.py:1035 +#: core/models.py:1067 msgid "usage timestamp" msgstr "الطابع الزمني للاستخدام" -#: core/models.py:1040 +#: core/models.py:1072 msgid "user assigned to this promocode if applicable" msgstr "المستخدم المعين لهذا الرمز الترويجي إن أمكن" -#: core/models.py:1041 +#: core/models.py:1073 msgid "assigned user" msgstr "المستخدم المعين" -#: core/models.py:1048 +#: core/models.py:1080 msgid "promo code" msgstr "الرمز الترويجي" -#: core/models.py:1049 +#: core/models.py:1081 msgid "promo codes" msgstr "الرموز الترويجية" -#: core/models.py:1056 +#: core/models.py:1088 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -1691,196 +1795,196 @@ msgstr "" "يجب تحديد نوع واحد فقط من الخصم (المبلغ أو النسبة المئوية)، وليس كلا النوعين" " أو لا هذا ولا ذاك." -#: core/models.py:1071 +#: core/models.py:1103 msgid "promocode already used" msgstr "تم استخدام الرمز الترويجي بالفعل" -#: core/models.py:1085 +#: core/models.py:1117 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "نوع الخصم غير صالح للرمز الترويجي {self.uuid}" -#: core/models.py:1097 +#: core/models.py:1129 msgid "percentage discount for the selected products" msgstr "النسبة المئوية للخصم على المنتجات المختارة" -#: core/models.py:1098 +#: core/models.py:1130 msgid "discount percentage" msgstr "نسبة الخصم" -#: core/models.py:1103 +#: core/models.py:1135 msgid "provide a unique name for this promotion" msgstr "تقديم اسم فريد لهذا العرض الترويجي" -#: core/models.py:1104 +#: core/models.py:1136 msgid "promotion name" msgstr "اسم الترقية" -#: core/models.py:1110 +#: core/models.py:1142 msgid "promotion description" msgstr "وصف الترقية" -#: core/models.py:1115 +#: core/models.py:1147 msgid "select which products are included in this promotion" msgstr "حدد المنتجات المشمولة في هذا العرض الترويجي" -#: core/models.py:1116 +#: core/models.py:1148 msgid "included products" msgstr "المنتجات المشمولة" -#: core/models.py:1120 +#: core/models.py:1152 msgid "promotion" msgstr "الترقية" -#: core/models.py:1135 +#: core/models.py:1167 msgid "the vendor supplying this product stock" msgstr "البائع الذي يورد هذا المنتج المخزون" -#: core/models.py:1136 +#: core/models.py:1168 msgid "associated vendor" msgstr "البائع المرتبط" -#: core/models.py:1140 +#: core/models.py:1172 msgid "final price to the customer after markups" msgstr "السعر النهائي للعميل بعد هوامش الربح" -#: core/models.py:1141 +#: core/models.py:1173 msgid "selling price" msgstr "سعر البيع" -#: core/models.py:1146 +#: core/models.py:1178 msgid "the product associated with this stock entry" msgstr "المنتج المرتبط بإدخال المخزون هذا" -#: core/models.py:1154 +#: core/models.py:1186 msgid "the price paid to the vendor for this product" msgstr "السعر المدفوع للبائع مقابل هذا المنتج" -#: core/models.py:1155 +#: core/models.py:1187 msgid "vendor purchase price" msgstr "سعر الشراء من البائع" -#: core/models.py:1159 +#: core/models.py:1191 msgid "available quantity of the product in stock" msgstr "الكمية المتوفرة من المنتج في المخزون" -#: core/models.py:1160 +#: core/models.py:1192 msgid "quantity in stock" msgstr "الكمية في المخزون" -#: core/models.py:1164 +#: core/models.py:1196 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU المعين من قبل البائع لتحديد المنتج" -#: core/models.py:1165 +#: core/models.py:1197 msgid "vendor sku" msgstr "وحدة تخزين البائع" -#: core/models.py:1171 +#: core/models.py:1203 msgid "digital file associated with this stock if applicable" msgstr "الملف الرقمي المرتبط بهذا المخزون إن أمكن" -#: core/models.py:1172 +#: core/models.py:1204 msgid "digital file" msgstr "ملف رقمي" -#: core/models.py:1181 +#: core/models.py:1213 msgid "stock entries" msgstr "إدخالات المخزون" -#: core/models.py:1190 +#: core/models.py:1222 msgid "products that the user has marked as wanted" msgstr "المنتجات التي حددها المستخدم على أنها مطلوبة" -#: core/models.py:1198 +#: core/models.py:1230 msgid "user who owns this wishlist" msgstr "المستخدم الذي يمتلك قائمة الرغبات هذه" -#: core/models.py:1199 +#: core/models.py:1231 msgid "wishlist owner" msgstr "مالك قائمة الرغبات" -#: core/models.py:1207 +#: core/models.py:1239 msgid "wishlist" msgstr "قائمة الرغبات" -#: core/models.py:1252 +#: core/models.py:1284 msgid "download" msgstr "تنزيل" -#: core/models.py:1253 +#: core/models.py:1285 msgid "downloads" msgstr "التنزيلات" -#: core/models.py:1261 +#: core/models.py:1293 msgid "you can not download a digital asset for a non-finished order" msgstr "لا يمكنك تنزيل أصل رقمي لطلب غير مكتمل" -#: core/models.py:1273 +#: core/models.py:1305 msgid "documentary" msgstr "فيلم وثائقي" -#: core/models.py:1274 +#: core/models.py:1306 msgid "documentaries" msgstr "الأفلام الوثائقية" -#: core/models.py:1284 +#: core/models.py:1316 msgid "unresolved" msgstr "لم يتم حلها" -#: core/models.py:1293 +#: core/models.py:1325 msgid "address line for the customer" msgstr "سطر العنوان للعميل" -#: core/models.py:1294 +#: core/models.py:1326 msgid "address line" msgstr "سطر العنوان" -#: core/models.py:1296 +#: core/models.py:1328 msgid "street" msgstr "الشارع" -#: core/models.py:1297 +#: core/models.py:1329 msgid "district" msgstr "المنطقة" -#: core/models.py:1298 +#: core/models.py:1330 msgid "city" msgstr "المدينة" -#: core/models.py:1299 +#: core/models.py:1331 msgid "region" msgstr "المنطقة" -#: core/models.py:1300 +#: core/models.py:1332 msgid "postal code" msgstr "الرمز البريدي" -#: core/models.py:1301 +#: core/models.py:1333 msgid "country" msgstr "البلد" -#: core/models.py:1304 +#: core/models.py:1336 msgid "geolocation point: (longitude, latitude)" msgstr "نقطة تحديد الموقع الجغرافي(خط الطول، خط العرض)" -#: core/models.py:1307 +#: core/models.py:1339 msgid "full JSON response from geocoder for this address" msgstr "استجابة JSON كاملة من أداة التشفير الجغرافي لهذا العنوان" -#: core/models.py:1309 +#: core/models.py:1341 msgid "stored JSON response from the geocoding service" msgstr "استجابة JSON مخزّنة من خدمة الترميز الجغرافي" -#: core/models.py:1316 +#: core/models.py:1348 msgid "address" msgstr "العنوان" -#: core/models.py:1317 +#: core/models.py:1349 msgid "addresses" msgstr "العناوين" -#: core/serializers/utility.py:76 +#: core/serializers/utility.py:77 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "يجب عليك تقديم تعليق، وتقييم، وطلب المنتج uuid لإضافة ملاحظاتك." @@ -2111,7 +2215,7 @@ msgstr "يمكنك تنزيل الأصل الرقمي مرة واحدة فقط" msgid "favicon not found" msgstr "الرمز المفضل غير موجود" -#: core/viewsets.py:680 +#: core/viewsets.py:677 #, python-brace-format msgid "Geocoding error: {e}" msgstr "خطأ في الترميز الجغرافي: {e}" diff --git a/core/locale/cs_CZ/LC_MESSAGES/django.mo b/core/locale/cs_CZ/LC_MESSAGES/django.mo index 4d53397a..f0b09f59 100644 Binary files a/core/locale/cs_CZ/LC_MESSAGES/django.mo and b/core/locale/cs_CZ/LC_MESSAGES/django.mo differ diff --git a/core/locale/cs_CZ/LC_MESSAGES/django.po b/core/locale/cs_CZ/LC_MESSAGES/django.po index 5246e0d1..a445cb0b 100644 --- a/core/locale/cs_CZ/LC_MESSAGES/django.po +++ b/core/locale/cs_CZ/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-08 19:42+0100\n" +"POT-Creation-Date: 2025-06-10 03:32+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -82,7 +82,7 @@ msgstr "Obrázek" msgid "images" msgstr "Obrázky" -#: core/admin.py:162 core/models.py:1180 +#: core/admin.py:162 core/models.py:1212 msgid "stock" msgstr "Stock" @@ -110,11 +110,11 @@ msgstr "Základní informace" msgid "important dates" msgstr "Důležitá data" -#: core/admin.py:253 core/models.py:874 +#: core/admin.py:253 core/models.py:881 msgid "order product" msgstr "Objednat produkt" -#: core/admin.py:254 core/graphene/object_types.py:262 core/models.py:875 +#: core/admin.py:254 core/graphene/object_types.py:262 core/models.py:882 msgid "order products" msgstr "Objednat produkty" @@ -755,6 +755,98 @@ msgstr "přidat nebo odebrat zpětnou vazbu na vztah objednávka-produkt." msgid "no search term provided." msgstr "Nebyl zadán žádný vyhledávací termín." +#: core/filters.py:37 core/filters.py:357 +msgid "UUID" +msgstr "UUID" + +#: core/filters.py:38 core/filters.py:309 core/filters.py:340 +msgid "Name" +msgstr "Název" + +#: core/filters.py:39 core/filters.py:341 +msgid "Categories" +msgstr "Kategorie" + +#: core/filters.py:44 +msgid "Categories Slugs" +msgstr "Kategorie Slimáci" + +#: core/filters.py:45 core/filters.py:312 +msgid "Tags" +msgstr "Štítky" + +#: core/filters.py:46 +msgid "Min Price" +msgstr "Minimální cena" + +#: core/filters.py:47 +msgid "Max Price" +msgstr "Max Price" + +#: core/filters.py:48 +msgid "Is Active" +msgstr "Je aktivní" + +#: core/filters.py:49 +msgid "Brand" +msgstr "Značka" + +#: core/filters.py:50 +msgid "Attributes" +msgstr "Atributy" + +#: core/filters.py:51 +msgid "Quantity" +msgstr "Množství" + +#: core/filters.py:52 core/filters.py:311 +msgid "Slug" +msgstr "Slug" + +#: core/filters.py:53 +msgid "Is Digital" +msgstr "Je digitální" + +#: core/filters.py:56 +msgid "Include sub-categories" +msgstr "Zahrnout podkategorie" + +#: core/filters.py:245 +msgid "Search (ID, product name or part number)" +msgstr "Vyhledávání (ID, název produktu nebo číslo dílu)" + +#: core/filters.py:248 +msgid "Bought after (inclusive)" +msgstr "Koupeno po (včetně)" + +#: core/filters.py:249 +msgid "Bought before (inclusive)" +msgstr "Koupeno před (včetně)" + +#: core/filters.py:252 core/filters.py:295 +msgid "User email" +msgstr "E-mail uživatele" + +#: core/filters.py:253 core/filters.py:296 core/filters.py:359 +msgid "User UUID" +msgstr "UUID uživatele" + +#: core/filters.py:254 +msgid "Status" +msgstr "Stav" + +#: core/filters.py:255 +msgid "Human Readable ID" +msgstr "Lidsky čitelné ID" + +#: core/filters.py:310 +msgid "Parent" +msgstr "Rodič" + +#: core/filters.py:358 +msgid "Product UUID" +msgstr "UUID produktu" + #: core/graphene/mutations.py:38 msgid "key to look for in or set into the cache" msgstr "Klíč k vyhledání v keši nebo nastavení do keše" @@ -806,7 +898,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "Zadejte prosím order_uuid nebo order_hr_id - vzájemně se vylučují!" #: core/graphene/mutations.py:225 core/graphene/mutations.py:441 -#: core/graphene/mutations.py:475 core/viewsets.py:348 +#: core/graphene/mutations.py:475 core/viewsets.py:345 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Z metody order.buy() pochází nesprávný typ: {type(instance)!s}" @@ -860,7 +952,7 @@ msgstr "" msgid "original address string provided by the user" msgstr "Původní řetězec adresy zadaný uživatelem" -#: core/graphene/mutations.py:572 core/viewsets.py:238 core/viewsets.py:351 +#: core/graphene/mutations.py:572 core/viewsets.py:240 core/viewsets.py:348 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} neexistuje: {uuid}" @@ -874,7 +966,7 @@ msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - funguje jako kouzlo" #: core/graphene/object_types.py:43 core/graphene/object_types.py:245 -#: core/graphene/object_types.py:286 core/models.py:126 core/models.py:489 +#: core/graphene/object_types.py:286 core/models.py:126 core/models.py:495 msgid "attributes" msgstr "Atributy" @@ -887,11 +979,11 @@ msgid "groups of attributes" msgstr "Skupiny atributů" #: core/graphene/object_types.py:76 core/graphene/object_types.py:104 -#: core/graphene/object_types.py:132 core/models.py:90 core/models.py:220 +#: core/graphene/object_types.py:132 core/models.py:90 core/models.py:226 msgid "categories" msgstr "Kategorie" -#: core/graphene/object_types.py:83 core/models.py:267 +#: core/graphene/object_types.py:83 core/models.py:273 msgid "brands" msgstr "Značky" @@ -915,7 +1007,7 @@ msgstr "" "Minimální a maximální ceny produktů v této kategorii, pokud jsou k " "dispozici." -#: core/graphene/object_types.py:202 core/models.py:404 +#: core/graphene/object_types.py:202 core/models.py:410 msgid "vendors" msgstr "Prodejci" @@ -940,7 +1032,7 @@ msgid "represents feedback from a user." msgstr "Představuje zpětnou vazbu od uživatele." #: core/graphene/object_types.py:246 core/graphene/object_types.py:287 -#: core/models.py:483 +#: core/models.py:489 msgid "notifications" msgstr "Oznámení" @@ -952,7 +1044,7 @@ msgstr "Stáhněte si url adresu pro tento objednaný produkt, pokud je to možn msgid "a list of order products in this order" msgstr "Seznam objednaných produktů v tomto pořadí" -#: core/graphene/object_types.py:278 core/models.py:453 +#: core/graphene/object_types.py:278 core/models.py:459 msgid "billing address" msgstr "Fakturační adresa" @@ -976,7 +1068,7 @@ msgstr "Celkové množství objednaných produktů" msgid "are all products in the order digital" msgstr "Jsou všechny produkty v objednávce digitální" -#: core/graphene/object_types.py:305 core/models.py:517 +#: core/graphene/object_types.py:305 core/models.py:523 msgid "orders" msgstr "Objednávky" @@ -988,15 +1080,15 @@ msgstr "Adresa URL obrázku" msgid "product's images" msgstr "Obrázky produktu" -#: core/graphene/object_types.py:335 core/models.py:219 core/models.py:277 +#: core/graphene/object_types.py:335 core/models.py:225 core/models.py:283 msgid "category" msgstr "Kategorie" -#: core/graphene/object_types.py:337 core/models.py:440 +#: core/graphene/object_types.py:337 core/models.py:446 msgid "feedbacks" msgstr "Zpětná vazba" -#: core/graphene/object_types.py:338 core/models.py:266 core/models.py:285 +#: core/graphene/object_types.py:338 core/models.py:272 core/models.py:291 msgid "brand" msgstr "Značka" @@ -1016,7 +1108,7 @@ msgstr "Množství" msgid "number of feedbacks" msgstr "Počet zpětných vazeb" -#: core/graphene/object_types.py:360 core/models.py:329 +#: core/graphene/object_types.py:360 core/models.py:335 msgid "products" msgstr "Produkty" @@ -1028,15 +1120,15 @@ msgstr "Propagační kódy" msgid "products on sale" msgstr "Produkty v prodeji" -#: core/graphene/object_types.py:425 core/models.py:1121 +#: core/graphene/object_types.py:425 core/models.py:1153 msgid "promotions" msgstr "Propagační akce" -#: core/graphene/object_types.py:429 core/models.py:403 +#: core/graphene/object_types.py:429 core/models.py:409 msgid "vendor" msgstr "Prodejce" -#: core/graphene/object_types.py:430 core/models.py:328 +#: core/graphene/object_types.py:430 core/models.py:334 #: core/templates/digital_order_created_email.html:107 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:93 @@ -1044,11 +1136,11 @@ msgstr "Prodejce" msgid "product" msgstr "Produkt" -#: core/graphene/object_types.py:441 core/models.py:1191 +#: core/graphene/object_types.py:441 core/models.py:1223 msgid "wishlisted products" msgstr "Produkty uvedené na seznamu přání" -#: core/graphene/object_types.py:447 core/models.py:1208 +#: core/graphene/object_types.py:447 core/models.py:1240 msgid "wishlists" msgstr "Seznamy přání" @@ -1056,7 +1148,7 @@ msgstr "Seznamy přání" msgid "tagged products" msgstr "Produkty s příznakem" -#: core/graphene/object_types.py:458 core/models.py:291 core/models.py:952 +#: core/graphene/object_types.py:458 core/models.py:297 core/models.py:959 msgid "product tags" msgstr "Štítky produktu" @@ -1203,8 +1295,8 @@ msgstr "Atribut této hodnoty" msgid "the specific product associated with this attribute's value" msgstr "Konkrétní produkt spojený s hodnotou tohoto atributu" -#: core/models.py:145 core/models.py:851 core/models.py:978 -#: core/models.py:1147 +#: core/models.py:145 core/models.py:858 core/models.py:1010 +#: core/models.py:1179 msgid "associated product" msgstr "Související produkt" @@ -1248,275 +1340,283 @@ msgstr "Přidejte podrobný popis této kategorie" msgid "category description" msgstr "Popis kategorie" -#: core/models.py:229 +#: core/models.py:212 +msgid "tags that help describe or group this category" +msgstr "značky, které pomáhají popsat nebo seskupit tuto kategorii" + +#: core/models.py:213 core/models.py:984 +msgid "category tags" +msgstr "štítky kategorií" + +#: core/models.py:235 msgid "name of this brand" msgstr "Název této značky" -#: core/models.py:230 +#: core/models.py:236 msgid "brand name" msgstr "Název značky" -#: core/models.py:237 +#: core/models.py:243 msgid "upload a logo representing this brand" msgstr "Nahrát logo reprezentující tuto značku" -#: core/models.py:239 +#: core/models.py:245 msgid "brand small image" msgstr "Malý obrázek značky" -#: core/models.py:245 +#: core/models.py:251 msgid "upload a big logo representing this brand" msgstr "Nahrát velké logo reprezentující tuto značku" -#: core/models.py:247 +#: core/models.py:253 msgid "brand big image" msgstr "Velká image značky" -#: core/models.py:252 +#: core/models.py:258 msgid "add a detailed description of the brand" msgstr "Přidejte podrobný popis značky" -#: core/models.py:253 +#: core/models.py:259 msgid "brand description" msgstr "Popis značky" -#: core/models.py:258 +#: core/models.py:264 msgid "optional categories that this brand is associated with" msgstr "Volitelné kategorie, se kterými je tato značka spojena" -#: core/models.py:259 +#: core/models.py:265 msgid "associated categories" msgstr "Kategorie" -#: core/models.py:276 +#: core/models.py:282 msgid "category this product belongs to" msgstr "Kategorie, do které tento produkt patří" -#: core/models.py:284 +#: core/models.py:290 msgid "optionally associate this product with a brand" msgstr "Volitelně přiřadit tento produkt ke značce" -#: core/models.py:290 +#: core/models.py:296 msgid "tags that help describe or group this product" msgstr "Značky, které pomáhají popsat nebo seskupit tento produkt" -#: core/models.py:295 +#: core/models.py:301 msgid "indicates whether this product is digitally delivered" msgstr "Označuje, zda je tento produkt dodáván digitálně" -#: core/models.py:296 +#: core/models.py:302 msgid "is product digital" msgstr "Je produkt digitální" -#: core/models.py:302 +#: core/models.py:308 msgid "provide a clear identifying name for the product" msgstr "Uveďte jasný identifikační název výrobku" -#: core/models.py:303 +#: core/models.py:309 msgid "product name" msgstr "Název produktu" -#: core/models.py:308 core/models.py:1109 +#: core/models.py:314 core/models.py:1141 msgid "add a detailed description of the product" msgstr "Přidejte podrobný popis produktu" -#: core/models.py:309 +#: core/models.py:315 msgid "product description" msgstr "Popis produktu" -#: core/models.py:316 +#: core/models.py:322 msgid "part number for this product" msgstr "Číslo dílu pro tento produkt" -#: core/models.py:317 +#: core/models.py:323 msgid "part number" msgstr "Číslo dílu" -#: core/models.py:381 +#: core/models.py:387 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Ukládá pověření a koncové body potřebné pro komunikaci s rozhraním API " "dodavatele." -#: core/models.py:382 +#: core/models.py:388 msgid "authentication info" msgstr "Informace o ověřování" -#: core/models.py:387 +#: core/models.py:393 msgid "define the markup for products retrieved from this vendor" msgstr "Definice přirážky pro produkty získané od tohoto dodavatele" -#: core/models.py:388 +#: core/models.py:394 msgid "vendor markup percentage" msgstr "Procento přirážky prodejce" -#: core/models.py:392 +#: core/models.py:398 msgid "name of this vendor" msgstr "Název tohoto prodejce" -#: core/models.py:393 +#: core/models.py:399 msgid "vendor name" msgstr "Název prodejce" -#: core/models.py:416 +#: core/models.py:422 msgid "user-provided comments about their experience with the product" msgstr "Komentáře uživatelů o jejich zkušenostech s produktem" -#: core/models.py:417 +#: core/models.py:423 msgid "feedback comments" msgstr "Zpětná vazba" -#: core/models.py:424 +#: core/models.py:430 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "Odkazuje na konkrétní produkt v objednávce, kterého se tato zpětná vazba " "týká." -#: core/models.py:425 +#: core/models.py:431 msgid "related order product" msgstr "Související objednávka produktu" -#: core/models.py:430 +#: core/models.py:436 msgid "user-assigned rating for the product" msgstr "Hodnocení produktu přidělené uživatelem" -#: core/models.py:431 +#: core/models.py:437 msgid "product rating" msgstr "Hodnocení produktu" -#: core/models.py:439 +#: core/models.py:445 msgid "feedback" msgstr "Zpětná vazba" -#: core/models.py:452 +#: core/models.py:458 msgid "the billing address used for this order" msgstr "Fakturační adresa použitá pro tuto objednávku" -#: core/models.py:460 +#: core/models.py:466 msgid "optional promo code applied to this order" msgstr "Volitelný promo kód použitý na tuto objednávku" -#: core/models.py:461 +#: core/models.py:467 msgid "applied promo code" msgstr "Použitý promo kód" -#: core/models.py:469 +#: core/models.py:475 msgid "the shipping address used for this order" msgstr "Dodací adresa použitá pro tuto objednávku" -#: core/models.py:470 +#: core/models.py:476 msgid "shipping address" msgstr "Dodací adresa" -#: core/models.py:476 +#: core/models.py:482 msgid "current status of the order in its lifecycle" msgstr "Aktuální stav zakázky v jejím životním cyklu" -#: core/models.py:477 +#: core/models.py:483 msgid "order status" msgstr "Stav objednávky" -#: core/models.py:482 core/models.py:828 +#: core/models.py:488 core/models.py:835 msgid "json structure of notifications to display to users" msgstr "" "JSON struktura oznámení pro zobrazení uživatelům, v uživatelském rozhraní " "administrátora se používá tabulkové zobrazení." -#: core/models.py:488 +#: core/models.py:494 msgid "json representation of order attributes for this order" msgstr "JSON reprezentace atributů objednávky pro tuto objednávku" -#: core/models.py:494 +#: core/models.py:500 msgid "the user who placed the order" msgstr "Uživatel, který zadal objednávku" -#: core/models.py:495 +#: core/models.py:501 msgid "user" msgstr "Uživatel" -#: core/models.py:501 +#: core/models.py:507 msgid "the timestamp when the order was finalized" msgstr "Časové razítko, kdy byla objednávka dokončena." -#: core/models.py:502 +#: core/models.py:508 msgid "buy time" msgstr "Kupte si čas" -#: core/models.py:509 +#: core/models.py:515 msgid "a human-readable identifier for the order" msgstr "Lidsky čitelný identifikátor objednávky" -#: core/models.py:510 +#: core/models.py:516 msgid "human readable id" msgstr "lidsky čitelné ID" -#: core/models.py:516 +#: core/models.py:522 msgid "order" msgstr "Objednávka" -#: core/models.py:531 +#: core/models.py:537 msgid "a user must have only one pending order at a time" msgstr "Uživatel smí mít vždy pouze jednu čekající objednávku!" -#: core/models.py:559 +#: core/models.py:566 msgid "you cannot add products to an order that is not a pending one" msgstr "" "Do objednávky, která není v procesu vyřizování, nelze přidat produkty." -#: core/models.py:564 +#: core/models.py:571 msgid "you cannot add inactive products to order" msgstr "Do objednávky nelze přidat neaktivní produkty" -#: core/models.py:581 +#: core/models.py:588 msgid "you cannot add more products than available in stock" msgstr "Nelze přidat více produktů, než je dostupné na skladě" -#: core/models.py:590 core/models.py:610 core/models.py:634 -#: core/models.py:1218 core/models.py:1230 +#: core/models.py:597 core/models.py:617 core/models.py:641 +#: core/models.py:1250 core/models.py:1262 #, python-brace-format msgid "{name} does not exist: {product_uuid}" msgstr "{name} neexistuje: {product_uuid}" -#: core/models.py:594 core/models.py:618 core/models.py:626 +#: core/models.py:601 core/models.py:625 core/models.py:633 msgid "you cannot remove products from an order that is not a pending one" msgstr "Nelze odebrat produkty z objednávky, která není nevyřízená." -#: core/models.py:614 +#: core/models.py:621 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} neexistuje s dotazem <{query}>" -#: core/models.py:645 +#: core/models.py:652 msgid "promocode does not exist" msgstr "Promo kód neexistuje" -#: core/models.py:654 +#: core/models.py:661 msgid "you can only buy physical products with shipping address specified" msgstr "Fyzické produkty můžete zakoupit pouze se zadanou dodací adresou!" -#: core/models.py:673 +#: core/models.py:680 msgid "address does not exist" msgstr "Adresa neexistuje" -#: core/models.py:684 core/models.py:727 +#: core/models.py:691 core/models.py:734 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "V tuto chvíli nemůžete nakupovat, zkuste to prosím znovu za několik minut." -#: core/models.py:687 +#: core/models.py:694 msgid "invalid force value" msgstr "Neplatná hodnota síly" -#: core/models.py:692 core/models.py:730 +#: core/models.py:699 core/models.py:737 msgid "you cannot purchase an empty order!" msgstr "Nelze zakoupit prázdnou objednávku!" -#: core/models.py:707 +#: core/models.py:714 msgid "insufficient funds to complete the order" msgstr "Nedostatek finančních prostředků na dokončení objednávky" -#: core/models.py:739 +#: core/models.py:746 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -1524,195 +1624,199 @@ msgstr "" "bez registrace nelze nakupovat, uveďte prosím následující údaje: jméno " "zákazníka, e-mail zákazníka, telefonní číslo zákazníka." -#: core/models.py:748 +#: core/models.py:755 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "Neplatný způsob platby: {payment_method} z {available_payment_methods}!" -#: core/models.py:816 +#: core/models.py:823 msgid "the price paid by the customer for this product at purchase time" msgstr "Cena, kterou zákazník zaplatil za tento produkt v době nákupu." -#: core/models.py:817 +#: core/models.py:824 msgid "purchase price at order time" msgstr "Nákupní cena v době objednávky" -#: core/models.py:822 +#: core/models.py:829 msgid "internal comments for admins about this ordered product" msgstr "Interní komentáře pro administrátory k tomuto objednanému produktu" -#: core/models.py:823 +#: core/models.py:830 msgid "internal comments" msgstr "Interní připomínky" -#: core/models.py:829 +#: core/models.py:836 msgid "user notifications" msgstr "Oznámení uživatele" -#: core/models.py:834 +#: core/models.py:841 msgid "json representation of this item's attributes" msgstr "JSON reprezentace atributů této položky" -#: core/models.py:835 +#: core/models.py:842 msgid "ordered product attributes" msgstr "Objednané atributy produktu" -#: core/models.py:840 +#: core/models.py:847 msgid "reference to the parent order that contains this product" msgstr "Odkaz na nadřazenou objednávku, která obsahuje tento produkt" -#: core/models.py:841 +#: core/models.py:848 msgid "parent order" msgstr "Objednávka rodičů" -#: core/models.py:850 +#: core/models.py:857 msgid "the specific product associated with this order line" msgstr "Konkrétní produkt spojený s touto objednávkou" -#: core/models.py:857 +#: core/models.py:864 msgid "quantity of this specific product in the order" msgstr "Množství tohoto konkrétního produktu v objednávce" -#: core/models.py:858 +#: core/models.py:865 msgid "product quantity" msgstr "Množství produktu" -#: core/models.py:865 +#: core/models.py:872 msgid "current status of this product in the order" msgstr "Aktuální stav tohoto produktu v objednávce" -#: core/models.py:866 +#: core/models.py:873 msgid "product line status" msgstr "Stav produktové řady" -#: core/models.py:918 +#: core/models.py:925 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "špatně zadaná akce pro zpětnou vazbu: {action}" -#: core/models.py:926 +#: core/models.py:933 msgid "you cannot feedback an order which is not received" msgstr "nelze poskytnout zpětnou vazbu na objednávku, která nebyla přijata" -#: core/models.py:937 +#: core/models.py:944 core/models.py:969 msgid "internal tag identifier for the product tag" msgstr "Interní identifikátor značky produktu" -#: core/models.py:938 +#: core/models.py:945 core/models.py:970 msgid "tag name" msgstr "Název štítku" -#: core/models.py:942 +#: core/models.py:949 core/models.py:974 msgid "user-friendly name for the product tag" msgstr "Uživatelsky přívětivý název pro značku produktu" -#: core/models.py:943 +#: core/models.py:950 core/models.py:975 msgid "tag display name" msgstr "Zobrazení názvu štítku" -#: core/models.py:951 +#: core/models.py:958 msgid "product tag" msgstr "Štítek produktu" -#: core/models.py:960 +#: core/models.py:983 +msgid "category tag" +msgstr "značka kategorie" + +#: core/models.py:992 msgid "provide alternative text for the image for accessibility" msgstr "Poskytněte alternativní text k obrázku kvůli přístupnosti." -#: core/models.py:961 +#: core/models.py:993 msgid "image alt text" msgstr "Text alt obrázku" -#: core/models.py:964 +#: core/models.py:996 msgid "upload the image file for this product" msgstr "Nahrát soubor s obrázkem tohoto produktu" -#: core/models.py:965 core/models.py:990 +#: core/models.py:997 core/models.py:1022 msgid "product image" msgstr "Obrázek produktu" -#: core/models.py:971 +#: core/models.py:1003 msgid "determines the order in which images are displayed" msgstr "Určuje pořadí, v jakém se obrázky zobrazují." -#: core/models.py:972 +#: core/models.py:1004 msgid "display priority" msgstr "Priorita zobrazení" -#: core/models.py:977 +#: core/models.py:1009 msgid "the product that this image represents" msgstr "Výrobek, který tento obrázek představuje" -#: core/models.py:991 +#: core/models.py:1023 msgid "product images" msgstr "Obrázky produktů" -#: core/models.py:1001 +#: core/models.py:1033 msgid "unique code used by a user to redeem a discount" msgstr "Jedinečný kód, který uživatel použije k uplatnění slevy." -#: core/models.py:1002 +#: core/models.py:1034 msgid "promo code identifier" msgstr "Identifikátor propagačního kódu" -#: core/models.py:1009 +#: core/models.py:1041 msgid "fixed discount amount applied if percent is not used" msgstr "Pevná výše slevy, pokud není použito procento" -#: core/models.py:1010 +#: core/models.py:1042 msgid "fixed discount amount" msgstr "Pevná výše slevy" -#: core/models.py:1016 +#: core/models.py:1048 msgid "percentage discount applied if fixed amount is not used" msgstr "Procentuální sleva uplatněná v případě nevyužití pevné částky" -#: core/models.py:1017 +#: core/models.py:1049 msgid "percentage discount" msgstr "Procentuální sleva" -#: core/models.py:1022 +#: core/models.py:1054 msgid "timestamp when the promocode expires" msgstr "Časové razítko ukončení platnosti promokódu" -#: core/models.py:1023 +#: core/models.py:1055 msgid "end validity time" msgstr "Doba ukončení platnosti" -#: core/models.py:1028 +#: core/models.py:1060 msgid "timestamp from which this promocode is valid" msgstr "Časové razítko, od kterého je tento promokód platný" -#: core/models.py:1029 +#: core/models.py:1061 msgid "start validity time" msgstr "Čas zahájení platnosti" -#: core/models.py:1034 +#: core/models.py:1066 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "Časové razítko použití promokódu, prázdné, pokud ještě nebyl použit." -#: core/models.py:1035 +#: core/models.py:1067 msgid "usage timestamp" msgstr "Časové razítko použití" -#: core/models.py:1040 +#: core/models.py:1072 msgid "user assigned to this promocode if applicable" msgstr "Uživatel přiřazený k tomuto promokódu, je-li to relevantní" -#: core/models.py:1041 +#: core/models.py:1073 msgid "assigned user" msgstr "Přiřazený uživatel" -#: core/models.py:1048 +#: core/models.py:1080 msgid "promo code" msgstr "Propagační kód" -#: core/models.py:1049 +#: core/models.py:1081 msgid "promo codes" msgstr "Propagační kódy" -#: core/models.py:1056 +#: core/models.py:1088 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -1720,196 +1824,196 @@ msgstr "" "Měl by být definován pouze jeden typ slevy (částka nebo procento), nikoli " "však oba typy slev nebo žádný z nich." -#: core/models.py:1071 +#: core/models.py:1103 msgid "promocode already used" msgstr "Promo kód byl již použit" -#: core/models.py:1085 +#: core/models.py:1117 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Neplatný typ slevy pro promocode {self.uuid}" -#: core/models.py:1097 +#: core/models.py:1129 msgid "percentage discount for the selected products" msgstr "Procentuální sleva na vybrané produkty" -#: core/models.py:1098 +#: core/models.py:1130 msgid "discount percentage" msgstr "Procento slevy" -#: core/models.py:1103 +#: core/models.py:1135 msgid "provide a unique name for this promotion" msgstr "Uveďte jedinečný název této propagační akce" -#: core/models.py:1104 +#: core/models.py:1136 msgid "promotion name" msgstr "Název akce" -#: core/models.py:1110 +#: core/models.py:1142 msgid "promotion description" msgstr "Popis propagace" -#: core/models.py:1115 +#: core/models.py:1147 msgid "select which products are included in this promotion" msgstr "Vyberte, které produkty jsou zahrnuty do této akce" -#: core/models.py:1116 +#: core/models.py:1148 msgid "included products" msgstr "Zahrnuté produkty" -#: core/models.py:1120 +#: core/models.py:1152 msgid "promotion" msgstr "Propagace" -#: core/models.py:1135 +#: core/models.py:1167 msgid "the vendor supplying this product stock" msgstr "Prodejce dodávající tento výrobek na sklad" -#: core/models.py:1136 +#: core/models.py:1168 msgid "associated vendor" msgstr "Přidružený prodejce" -#: core/models.py:1140 +#: core/models.py:1172 msgid "final price to the customer after markups" msgstr "Konečná cena pro zákazníka po přirážkách" -#: core/models.py:1141 +#: core/models.py:1173 msgid "selling price" msgstr "Prodejní cena" -#: core/models.py:1146 +#: core/models.py:1178 msgid "the product associated with this stock entry" msgstr "Produkt spojený s touto skladovou položkou" -#: core/models.py:1154 +#: core/models.py:1186 msgid "the price paid to the vendor for this product" msgstr "Cena zaplacená prodejci za tento výrobek" -#: core/models.py:1155 +#: core/models.py:1187 msgid "vendor purchase price" msgstr "Kupní cena prodejce" -#: core/models.py:1159 +#: core/models.py:1191 msgid "available quantity of the product in stock" msgstr "Dostupné množství produktu na skladě" -#: core/models.py:1160 +#: core/models.py:1192 msgid "quantity in stock" msgstr "Množství na skladě" -#: core/models.py:1164 +#: core/models.py:1196 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU přidělený prodejcem pro identifikaci výrobku" -#: core/models.py:1165 +#: core/models.py:1197 msgid "vendor sku" msgstr "SKU prodejce" -#: core/models.py:1171 +#: core/models.py:1203 msgid "digital file associated with this stock if applicable" msgstr "Digitální soubor spojený s touto zásobou, je-li to vhodné" -#: core/models.py:1172 +#: core/models.py:1204 msgid "digital file" msgstr "Digitální soubor" -#: core/models.py:1181 +#: core/models.py:1213 msgid "stock entries" msgstr "Zápisy do zásob" -#: core/models.py:1190 +#: core/models.py:1222 msgid "products that the user has marked as wanted" msgstr "Výrobky, které uživatel označil jako požadované" -#: core/models.py:1198 +#: core/models.py:1230 msgid "user who owns this wishlist" msgstr "Uživatel, který vlastní tento seznam přání" -#: core/models.py:1199 +#: core/models.py:1231 msgid "wishlist owner" msgstr "Majitel seznamu přání" -#: core/models.py:1207 +#: core/models.py:1239 msgid "wishlist" msgstr "Seznam přání" -#: core/models.py:1252 +#: core/models.py:1284 msgid "download" msgstr "Stáhnout" -#: core/models.py:1253 +#: core/models.py:1285 msgid "downloads" msgstr "Ke stažení na" -#: core/models.py:1261 +#: core/models.py:1293 msgid "you can not download a digital asset for a non-finished order" msgstr "Digitální aktivum pro nedokončenou objednávku nelze stáhnout." -#: core/models.py:1273 +#: core/models.py:1305 msgid "documentary" msgstr "Dokumentární film" -#: core/models.py:1274 +#: core/models.py:1306 msgid "documentaries" msgstr "Dokumentární filmy" -#: core/models.py:1284 +#: core/models.py:1316 msgid "unresolved" msgstr "Nevyřešené" -#: core/models.py:1293 +#: core/models.py:1325 msgid "address line for the customer" msgstr "Adresní řádek pro zákazníka" -#: core/models.py:1294 +#: core/models.py:1326 msgid "address line" msgstr "Adresní řádek" -#: core/models.py:1296 +#: core/models.py:1328 msgid "street" msgstr "Ulice" -#: core/models.py:1297 +#: core/models.py:1329 msgid "district" msgstr "Okres" -#: core/models.py:1298 +#: core/models.py:1330 msgid "city" msgstr "Město" -#: core/models.py:1299 +#: core/models.py:1331 msgid "region" msgstr "Region" -#: core/models.py:1300 +#: core/models.py:1332 msgid "postal code" msgstr "Poštovní směrovací číslo" -#: core/models.py:1301 +#: core/models.py:1333 msgid "country" msgstr "Země" -#: core/models.py:1304 +#: core/models.py:1336 msgid "geolocation point: (longitude, latitude)" msgstr "Geolokace Bod(Zeměpisná délka, Zeměpisná šířka)" -#: core/models.py:1307 +#: core/models.py:1339 msgid "full JSON response from geocoder for this address" msgstr "Úplná odpověď JSON z geokodéru pro tuto adresu" -#: core/models.py:1309 +#: core/models.py:1341 msgid "stored JSON response from the geocoding service" msgstr "Uložená odpověď JSON ze služby geokódování" -#: core/models.py:1316 +#: core/models.py:1348 msgid "address" msgstr "Adresa" -#: core/models.py:1317 +#: core/models.py:1349 msgid "addresses" msgstr "Adresy" -#: core/serializers/utility.py:76 +#: core/serializers/utility.py:77 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" @@ -2148,7 +2252,7 @@ msgstr "Digitální aktivum můžete stáhnout pouze jednou" msgid "favicon not found" msgstr "favicon nebyl nalezen" -#: core/viewsets.py:680 +#: core/viewsets.py:677 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Chyba v zeměpisném kódování: {e}" diff --git a/core/locale/da_DK/LC_MESSAGES/django.mo b/core/locale/da_DK/LC_MESSAGES/django.mo index 2a1fa314..5ec2d106 100644 Binary files a/core/locale/da_DK/LC_MESSAGES/django.mo and b/core/locale/da_DK/LC_MESSAGES/django.mo differ diff --git a/core/locale/da_DK/LC_MESSAGES/django.po b/core/locale/da_DK/LC_MESSAGES/django.po index d0e0ff16..91982838 100644 --- a/core/locale/da_DK/LC_MESSAGES/django.po +++ b/core/locale/da_DK/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-08 19:42+0100\n" +"POT-Creation-Date: 2025-06-10 03:32+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -81,7 +81,7 @@ msgstr "Billede" msgid "images" msgstr "Billeder" -#: core/admin.py:162 core/models.py:1180 +#: core/admin.py:162 core/models.py:1212 msgid "stock" msgstr "Lager" @@ -109,11 +109,11 @@ msgstr "Grundlæggende information" msgid "important dates" msgstr "Vigtige datoer" -#: core/admin.py:253 core/models.py:874 +#: core/admin.py:253 core/models.py:881 msgid "order product" msgstr "Bestil produkt" -#: core/admin.py:254 core/graphene/object_types.py:262 core/models.py:875 +#: core/admin.py:254 core/graphene/object_types.py:262 core/models.py:882 msgid "order products" msgstr "Bestil produkter" @@ -757,6 +757,98 @@ msgstr "tilføje eller fjerne feedback på en ordre-produkt-relation" msgid "no search term provided." msgstr "Der er ikke angivet noget søgeord." +#: core/filters.py:37 core/filters.py:357 +msgid "UUID" +msgstr "UUID" + +#: core/filters.py:38 core/filters.py:309 core/filters.py:340 +msgid "Name" +msgstr "Navn" + +#: core/filters.py:39 core/filters.py:341 +msgid "Categories" +msgstr "Kategorier" + +#: core/filters.py:44 +msgid "Categories Slugs" +msgstr "Kategorier Snegle" + +#: core/filters.py:45 core/filters.py:312 +msgid "Tags" +msgstr "Tags" + +#: core/filters.py:46 +msgid "Min Price" +msgstr "Min. pris" + +#: core/filters.py:47 +msgid "Max Price" +msgstr "Maks. pris" + +#: core/filters.py:48 +msgid "Is Active" +msgstr "Er aktiv" + +#: core/filters.py:49 +msgid "Brand" +msgstr "Brand" + +#: core/filters.py:50 +msgid "Attributes" +msgstr "Egenskaber" + +#: core/filters.py:51 +msgid "Quantity" +msgstr "Mængde" + +#: core/filters.py:52 core/filters.py:311 +msgid "Slug" +msgstr "Snegl" + +#: core/filters.py:53 +msgid "Is Digital" +msgstr "Er digital" + +#: core/filters.py:56 +msgid "Include sub-categories" +msgstr "Inkluder underkategorier" + +#: core/filters.py:245 +msgid "Search (ID, product name or part number)" +msgstr "Søg (ID, produktnavn eller reservedelsnummer)" + +#: core/filters.py:248 +msgid "Bought after (inclusive)" +msgstr "Købt efter (inklusive)" + +#: core/filters.py:249 +msgid "Bought before (inclusive)" +msgstr "Købt før (inklusive)" + +#: core/filters.py:252 core/filters.py:295 +msgid "User email" +msgstr "Brugerens e-mail" + +#: core/filters.py:253 core/filters.py:296 core/filters.py:359 +msgid "User UUID" +msgstr "Bruger UUID" + +#: core/filters.py:254 +msgid "Status" +msgstr "Status" + +#: core/filters.py:255 +msgid "Human Readable ID" +msgstr "Menneskeligt læsbart ID" + +#: core/filters.py:310 +msgid "Parent" +msgstr "Forælder" + +#: core/filters.py:358 +msgid "Product UUID" +msgstr "Produkt UUID" + #: core/graphene/mutations.py:38 msgid "key to look for in or set into the cache" msgstr "Nøgle til at lede efter i eller lægge i cachen" @@ -808,7 +900,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "Angiv enten order_uuid eller order_hr_id - det udelukker hinanden!" #: core/graphene/mutations.py:225 core/graphene/mutations.py:441 -#: core/graphene/mutations.py:475 core/viewsets.py:348 +#: core/graphene/mutations.py:475 core/viewsets.py:345 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Forkert type kom fra metoden order.buy(): {type(instance)!s}" @@ -862,7 +954,7 @@ msgstr "" msgid "original address string provided by the user" msgstr "Original adressestreng leveret af brugeren" -#: core/graphene/mutations.py:572 core/viewsets.py:238 core/viewsets.py:351 +#: core/graphene/mutations.py:572 core/viewsets.py:240 core/viewsets.py:348 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} findes ikke: {uuid}" @@ -876,7 +968,7 @@ msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - fungerer som en charme" #: core/graphene/object_types.py:43 core/graphene/object_types.py:245 -#: core/graphene/object_types.py:286 core/models.py:126 core/models.py:489 +#: core/graphene/object_types.py:286 core/models.py:126 core/models.py:495 msgid "attributes" msgstr "Egenskaber" @@ -889,11 +981,11 @@ msgid "groups of attributes" msgstr "Grupper af attributter" #: core/graphene/object_types.py:76 core/graphene/object_types.py:104 -#: core/graphene/object_types.py:132 core/models.py:90 core/models.py:220 +#: core/graphene/object_types.py:132 core/models.py:90 core/models.py:226 msgid "categories" msgstr "Kategorier" -#: core/graphene/object_types.py:83 core/models.py:267 +#: core/graphene/object_types.py:83 core/models.py:273 msgid "brands" msgstr "Mærker" @@ -919,7 +1011,7 @@ msgstr "" "Minimums- og maksimumspriser for produkter i denne kategori, hvis de er " "tilgængelige." -#: core/graphene/object_types.py:202 core/models.py:404 +#: core/graphene/object_types.py:202 core/models.py:410 msgid "vendors" msgstr "Leverandører" @@ -946,7 +1038,7 @@ msgid "represents feedback from a user." msgstr "Repræsenterer feedback fra en bruger." #: core/graphene/object_types.py:246 core/graphene/object_types.py:287 -#: core/models.py:483 +#: core/models.py:489 msgid "notifications" msgstr "Meddelelser" @@ -958,7 +1050,7 @@ msgstr "Download url for dette ordreprodukt, hvis det er relevant" msgid "a list of order products in this order" msgstr "En liste over bestillingsprodukter i denne ordre" -#: core/graphene/object_types.py:278 core/models.py:453 +#: core/graphene/object_types.py:278 core/models.py:459 msgid "billing address" msgstr "Faktureringsadresse" @@ -982,7 +1074,7 @@ msgstr "Samlet antal produkter i ordren" msgid "are all products in the order digital" msgstr "Er alle produkterne i ordren digitale?" -#: core/graphene/object_types.py:305 core/models.py:517 +#: core/graphene/object_types.py:305 core/models.py:523 msgid "orders" msgstr "Bestillinger" @@ -994,15 +1086,15 @@ msgstr "Billed-URL" msgid "product's images" msgstr "Produktets billeder" -#: core/graphene/object_types.py:335 core/models.py:219 core/models.py:277 +#: core/graphene/object_types.py:335 core/models.py:225 core/models.py:283 msgid "category" msgstr "Kategori" -#: core/graphene/object_types.py:337 core/models.py:440 +#: core/graphene/object_types.py:337 core/models.py:446 msgid "feedbacks" msgstr "Tilbagemeldinger" -#: core/graphene/object_types.py:338 core/models.py:266 core/models.py:285 +#: core/graphene/object_types.py:338 core/models.py:272 core/models.py:291 msgid "brand" msgstr "Brand" @@ -1022,7 +1114,7 @@ msgstr "Mængde" msgid "number of feedbacks" msgstr "Antal tilbagemeldinger" -#: core/graphene/object_types.py:360 core/models.py:329 +#: core/graphene/object_types.py:360 core/models.py:335 msgid "products" msgstr "Produkter" @@ -1034,15 +1126,15 @@ msgstr "Promokoder" msgid "products on sale" msgstr "Produkter til salg" -#: core/graphene/object_types.py:425 core/models.py:1121 +#: core/graphene/object_types.py:425 core/models.py:1153 msgid "promotions" msgstr "Kampagner" -#: core/graphene/object_types.py:429 core/models.py:403 +#: core/graphene/object_types.py:429 core/models.py:409 msgid "vendor" msgstr "Leverandør" -#: core/graphene/object_types.py:430 core/models.py:328 +#: core/graphene/object_types.py:430 core/models.py:334 #: core/templates/digital_order_created_email.html:107 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:93 @@ -1050,11 +1142,11 @@ msgstr "Leverandør" msgid "product" msgstr "Produkt" -#: core/graphene/object_types.py:441 core/models.py:1191 +#: core/graphene/object_types.py:441 core/models.py:1223 msgid "wishlisted products" msgstr "Produkter på ønskelisten" -#: core/graphene/object_types.py:447 core/models.py:1208 +#: core/graphene/object_types.py:447 core/models.py:1240 msgid "wishlists" msgstr "Ønskelister" @@ -1062,7 +1154,7 @@ msgstr "Ønskelister" msgid "tagged products" msgstr "Mærkede produkter" -#: core/graphene/object_types.py:458 core/models.py:291 core/models.py:952 +#: core/graphene/object_types.py:458 core/models.py:297 core/models.py:959 msgid "product tags" msgstr "Produktmærker" @@ -1209,8 +1301,8 @@ msgstr "Attribut for denne værdi" msgid "the specific product associated with this attribute's value" msgstr "Det specifikke produkt, der er knyttet til denne attributs værdi" -#: core/models.py:145 core/models.py:851 core/models.py:978 -#: core/models.py:1147 +#: core/models.py:145 core/models.py:858 core/models.py:1010 +#: core/models.py:1179 msgid "associated product" msgstr "Tilknyttet produkt" @@ -1254,275 +1346,283 @@ msgstr "Tilføj en detaljeret beskrivelse af denne kategori" msgid "category description" msgstr "Beskrivelse af kategori" -#: core/models.py:229 +#: core/models.py:212 +msgid "tags that help describe or group this category" +msgstr "tags, der hjælper med at beskrive eller gruppere denne kategori" + +#: core/models.py:213 core/models.py:984 +msgid "category tags" +msgstr "Kategori-tags" + +#: core/models.py:235 msgid "name of this brand" msgstr "Navnet på dette mærke" -#: core/models.py:230 +#: core/models.py:236 msgid "brand name" msgstr "Varemærke" -#: core/models.py:237 +#: core/models.py:243 msgid "upload a logo representing this brand" msgstr "Upload et logo, der repræsenterer dette brand" -#: core/models.py:239 +#: core/models.py:245 msgid "brand small image" msgstr "Brandets lille image" -#: core/models.py:245 +#: core/models.py:251 msgid "upload a big logo representing this brand" msgstr "Upload et stort logo, der repræsenterer dette brand" -#: core/models.py:247 +#: core/models.py:253 msgid "brand big image" msgstr "Brandets store image" -#: core/models.py:252 +#: core/models.py:258 msgid "add a detailed description of the brand" msgstr "Tilføj en detaljeret beskrivelse af brandet" -#: core/models.py:253 +#: core/models.py:259 msgid "brand description" msgstr "Varemærkebeskrivelse" -#: core/models.py:258 +#: core/models.py:264 msgid "optional categories that this brand is associated with" msgstr "Valgfrie kategorier, som dette brand er forbundet med" -#: core/models.py:259 +#: core/models.py:265 msgid "associated categories" msgstr "Kategorier" -#: core/models.py:276 +#: core/models.py:282 msgid "category this product belongs to" msgstr "Kategori, som dette produkt tilhører" -#: core/models.py:284 +#: core/models.py:290 msgid "optionally associate this product with a brand" msgstr "Tilknyt eventuelt dette produkt til et brand" -#: core/models.py:290 +#: core/models.py:296 msgid "tags that help describe or group this product" msgstr "Tags, der hjælper med at beskrive eller gruppere dette produkt" -#: core/models.py:295 +#: core/models.py:301 msgid "indicates whether this product is digitally delivered" msgstr "Angiver, om dette produkt leveres digitalt" -#: core/models.py:296 +#: core/models.py:302 msgid "is product digital" msgstr "Er produktet digitalt?" -#: core/models.py:302 +#: core/models.py:308 msgid "provide a clear identifying name for the product" msgstr "Giv produktet et klart identificerende navn" -#: core/models.py:303 +#: core/models.py:309 msgid "product name" msgstr "Produktets navn" -#: core/models.py:308 core/models.py:1109 +#: core/models.py:314 core/models.py:1141 msgid "add a detailed description of the product" msgstr "Tilføj en detaljeret beskrivelse af produktet" -#: core/models.py:309 +#: core/models.py:315 msgid "product description" msgstr "Produktbeskrivelse" -#: core/models.py:316 +#: core/models.py:322 msgid "part number for this product" msgstr "Reservedelsnummer for dette produkt" -#: core/models.py:317 +#: core/models.py:323 msgid "part number" msgstr "Varenummer" -#: core/models.py:381 +#: core/models.py:387 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Gemmer legitimationsoplysninger og slutpunkter, der er nødvendige for " "leverandørens API-kommunikation" -#: core/models.py:382 +#: core/models.py:388 msgid "authentication info" msgstr "Oplysninger om godkendelse" -#: core/models.py:387 +#: core/models.py:393 msgid "define the markup for products retrieved from this vendor" msgstr "Definer markeringen for produkter, der hentes fra denne leverandør" -#: core/models.py:388 +#: core/models.py:394 msgid "vendor markup percentage" msgstr "Sælgerens markup-procentdel" -#: core/models.py:392 +#: core/models.py:398 msgid "name of this vendor" msgstr "Navn på denne leverandør" -#: core/models.py:393 +#: core/models.py:399 msgid "vendor name" msgstr "Leverandørens navn" -#: core/models.py:416 +#: core/models.py:422 msgid "user-provided comments about their experience with the product" msgstr "Brugernes kommentarer om deres oplevelse med produktet" -#: core/models.py:417 +#: core/models.py:423 msgid "feedback comments" msgstr "Kommentarer til feedback" -#: core/models.py:424 +#: core/models.py:430 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "Henviser til det specifikke produkt i en ordre, som denne feedback handler " "om" -#: core/models.py:425 +#: core/models.py:431 msgid "related order product" msgstr "Relateret ordreprodukt" -#: core/models.py:430 +#: core/models.py:436 msgid "user-assigned rating for the product" msgstr "Brugertildelt vurdering af produktet" -#: core/models.py:431 +#: core/models.py:437 msgid "product rating" msgstr "Produktvurdering" -#: core/models.py:439 +#: core/models.py:445 msgid "feedback" msgstr "Feedback" -#: core/models.py:452 +#: core/models.py:458 msgid "the billing address used for this order" msgstr "Den faktureringsadresse, der bruges til denne ordre" -#: core/models.py:460 +#: core/models.py:466 msgid "optional promo code applied to this order" msgstr "Valgfri kampagnekode anvendt på denne ordre" -#: core/models.py:461 +#: core/models.py:467 msgid "applied promo code" msgstr "Anvendt kampagnekode" -#: core/models.py:469 +#: core/models.py:475 msgid "the shipping address used for this order" msgstr "Den leveringsadresse, der er brugt til denne ordre" -#: core/models.py:470 +#: core/models.py:476 msgid "shipping address" msgstr "Leveringsadresse" -#: core/models.py:476 +#: core/models.py:482 msgid "current status of the order in its lifecycle" msgstr "Ordrens aktuelle status i dens livscyklus" -#: core/models.py:477 +#: core/models.py:483 msgid "order status" msgstr "Bestillingsstatus" -#: core/models.py:482 core/models.py:828 +#: core/models.py:488 core/models.py:835 msgid "json structure of notifications to display to users" msgstr "" "JSON-struktur af meddelelser, der skal vises til brugerne, i admin UI bruges" " tabelvisningen" -#: core/models.py:488 +#: core/models.py:494 msgid "json representation of order attributes for this order" msgstr "JSON-repræsentation af ordreattributter for denne ordre" -#: core/models.py:494 +#: core/models.py:500 msgid "the user who placed the order" msgstr "Den bruger, der har afgivet ordren" -#: core/models.py:495 +#: core/models.py:501 msgid "user" msgstr "Bruger" -#: core/models.py:501 +#: core/models.py:507 msgid "the timestamp when the order was finalized" msgstr "Tidsstemplet for, hvornår ordren blev afsluttet" -#: core/models.py:502 +#: core/models.py:508 msgid "buy time" msgstr "Køb tid" -#: core/models.py:509 +#: core/models.py:515 msgid "a human-readable identifier for the order" msgstr "En menneskeligt læsbar identifikator for ordren" -#: core/models.py:510 +#: core/models.py:516 msgid "human readable id" msgstr "menneskeligt læsbart ID" -#: core/models.py:516 +#: core/models.py:522 msgid "order" msgstr "Bestil" -#: core/models.py:531 +#: core/models.py:537 msgid "a user must have only one pending order at a time" msgstr "En bruger må kun have én afventende ordre ad gangen!" -#: core/models.py:559 +#: core/models.py:566 msgid "you cannot add products to an order that is not a pending one" msgstr "Du kan ikke tilføje produkter til en ordre, der ikke er i gang." -#: core/models.py:564 +#: core/models.py:571 msgid "you cannot add inactive products to order" msgstr "Du kan ikke tilføje inaktive produkter til en ordre" -#: core/models.py:581 +#: core/models.py:588 msgid "you cannot add more products than available in stock" msgstr "Du kan ikke tilføje flere produkter, end der er på lager" -#: core/models.py:590 core/models.py:610 core/models.py:634 -#: core/models.py:1218 core/models.py:1230 +#: core/models.py:597 core/models.py:617 core/models.py:641 +#: core/models.py:1250 core/models.py:1262 #, python-brace-format msgid "{name} does not exist: {product_uuid}" msgstr "{name} findes ikke: {product_uuid}." -#: core/models.py:594 core/models.py:618 core/models.py:626 +#: core/models.py:601 core/models.py:625 core/models.py:633 msgid "you cannot remove products from an order that is not a pending one" msgstr "" "Du kan ikke fjerne produkter fra en ordre, der ikke er en igangværende " "ordre." -#: core/models.py:614 +#: core/models.py:621 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} findes ikke med forespørgsel <{query}>." -#: core/models.py:645 +#: core/models.py:652 msgid "promocode does not exist" msgstr "Promokode findes ikke" -#: core/models.py:654 +#: core/models.py:661 msgid "you can only buy physical products with shipping address specified" msgstr "Du kan kun købe fysiske produkter med angivet leveringsadresse!" -#: core/models.py:673 +#: core/models.py:680 msgid "address does not exist" msgstr "Adressen findes ikke" -#: core/models.py:684 core/models.py:727 +#: core/models.py:691 core/models.py:734 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "Du kan ikke købe i øjeblikket, prøv venligst igen om et par minutter." -#: core/models.py:687 +#: core/models.py:694 msgid "invalid force value" msgstr "Ugyldig kraftværdi" -#: core/models.py:692 core/models.py:730 +#: core/models.py:699 core/models.py:737 msgid "you cannot purchase an empty order!" msgstr "Du kan ikke købe en tom ordre!" -#: core/models.py:707 +#: core/models.py:714 msgid "insufficient funds to complete the order" msgstr "Utilstrækkelige midler til at gennemføre ordren" -#: core/models.py:739 +#: core/models.py:746 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -1530,198 +1630,202 @@ msgstr "" "du kan ikke købe uden registrering, angiv venligst følgende oplysninger: " "kundens navn, kundens e-mail, kundens telefonnummer" -#: core/models.py:748 +#: core/models.py:755 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "Ugyldig betalingsmetode: {payment_method} fra {available_payment_methods}!" -#: core/models.py:816 +#: core/models.py:823 msgid "the price paid by the customer for this product at purchase time" msgstr "Den pris, som kunden har betalt for dette produkt på købstidspunktet" -#: core/models.py:817 +#: core/models.py:824 msgid "purchase price at order time" msgstr "Købspris på bestillingstidspunktet" -#: core/models.py:822 +#: core/models.py:829 msgid "internal comments for admins about this ordered product" msgstr "Interne kommentarer til administratorer om dette bestilte produkt" -#: core/models.py:823 +#: core/models.py:830 msgid "internal comments" msgstr "Interne kommentarer" -#: core/models.py:829 +#: core/models.py:836 msgid "user notifications" msgstr "Notifikationer til brugere" -#: core/models.py:834 +#: core/models.py:841 msgid "json representation of this item's attributes" msgstr "JSON-repræsentation af dette elements attributter" -#: core/models.py:835 +#: core/models.py:842 msgid "ordered product attributes" msgstr "Bestilte produktattributter" -#: core/models.py:840 +#: core/models.py:847 msgid "reference to the parent order that contains this product" msgstr "Henvisning til den overordnede ordre, der indeholder dette produkt" -#: core/models.py:841 +#: core/models.py:848 msgid "parent order" msgstr "Forældreordre" -#: core/models.py:850 +#: core/models.py:857 msgid "the specific product associated with this order line" msgstr "Det specifikke produkt, der er knyttet til denne ordrelinje" -#: core/models.py:857 +#: core/models.py:864 msgid "quantity of this specific product in the order" msgstr "Mængde af dette specifikke produkt i ordren" -#: core/models.py:858 +#: core/models.py:865 msgid "product quantity" msgstr "Produktmængde" -#: core/models.py:865 +#: core/models.py:872 msgid "current status of this product in the order" msgstr "Aktuel status for dette produkt i bestillingen" -#: core/models.py:866 +#: core/models.py:873 msgid "product line status" msgstr "Status for produktlinje" -#: core/models.py:918 +#: core/models.py:925 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "forkert handling angivet for feedback: {action}." -#: core/models.py:926 +#: core/models.py:933 msgid "you cannot feedback an order which is not received" msgstr "" "Du kan ikke fjerne produkter fra en ordre, der ikke er en igangværende " "ordre." -#: core/models.py:937 +#: core/models.py:944 core/models.py:969 msgid "internal tag identifier for the product tag" msgstr "Intern tag-identifikator for produkttagget" -#: core/models.py:938 +#: core/models.py:945 core/models.py:970 msgid "tag name" msgstr "Tag-navn" -#: core/models.py:942 +#: core/models.py:949 core/models.py:974 msgid "user-friendly name for the product tag" msgstr "Brugervenligt navn til produktmærket" -#: core/models.py:943 +#: core/models.py:950 core/models.py:975 msgid "tag display name" msgstr "Navn på tag-visning" -#: core/models.py:951 +#: core/models.py:958 msgid "product tag" msgstr "Produktmærke" -#: core/models.py:960 +#: core/models.py:983 +msgid "category tag" +msgstr "Kategori-tag" + +#: core/models.py:992 msgid "provide alternative text for the image for accessibility" msgstr "Giv alternativ tekst til billedet af hensyn til tilgængeligheden" -#: core/models.py:961 +#: core/models.py:993 msgid "image alt text" msgstr "Billedets alt-tekst" -#: core/models.py:964 +#: core/models.py:996 msgid "upload the image file for this product" msgstr "Upload billedfilen til dette produkt" -#: core/models.py:965 core/models.py:990 +#: core/models.py:997 core/models.py:1022 msgid "product image" msgstr "Produktbillede" -#: core/models.py:971 +#: core/models.py:1003 msgid "determines the order in which images are displayed" msgstr "Bestemmer den rækkefølge, billederne vises i" -#: core/models.py:972 +#: core/models.py:1004 msgid "display priority" msgstr "Skærm-prioritet" -#: core/models.py:977 +#: core/models.py:1009 msgid "the product that this image represents" msgstr "Det produkt, som dette billede repræsenterer" -#: core/models.py:991 +#: core/models.py:1023 msgid "product images" msgstr "Produktbilleder" -#: core/models.py:1001 +#: core/models.py:1033 msgid "unique code used by a user to redeem a discount" msgstr "Unik kode, der bruges af en bruger til at indløse en rabat" -#: core/models.py:1002 +#: core/models.py:1034 msgid "promo code identifier" msgstr "Identifikator for kampagnekode" -#: core/models.py:1009 +#: core/models.py:1041 msgid "fixed discount amount applied if percent is not used" msgstr "Fast rabatbeløb anvendes, hvis procent ikke bruges" -#: core/models.py:1010 +#: core/models.py:1042 msgid "fixed discount amount" msgstr "Fast rabatbeløb" -#: core/models.py:1016 +#: core/models.py:1048 msgid "percentage discount applied if fixed amount is not used" msgstr "Procentvis rabat, hvis det faste beløb ikke bruges" -#: core/models.py:1017 +#: core/models.py:1049 msgid "percentage discount" msgstr "Procentvis rabat" -#: core/models.py:1022 +#: core/models.py:1054 msgid "timestamp when the promocode expires" msgstr "Tidsstempel, når promokoden udløber" -#: core/models.py:1023 +#: core/models.py:1055 msgid "end validity time" msgstr "Slut gyldighedstid" -#: core/models.py:1028 +#: core/models.py:1060 msgid "timestamp from which this promocode is valid" msgstr "Tidsstempel, hvorfra denne promokode er gyldig" -#: core/models.py:1029 +#: core/models.py:1061 msgid "start validity time" msgstr "Start gyldighedstid" -#: core/models.py:1034 +#: core/models.py:1066 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "Tidsstempel, hvor promokoden blev brugt, blank, hvis den ikke er brugt endnu" -#: core/models.py:1035 +#: core/models.py:1067 msgid "usage timestamp" msgstr "Tidsstempel for brug" -#: core/models.py:1040 +#: core/models.py:1072 msgid "user assigned to this promocode if applicable" msgstr "Bruger tildelt denne promokode, hvis relevant" -#: core/models.py:1041 +#: core/models.py:1073 msgid "assigned user" msgstr "Tildelt bruger" -#: core/models.py:1048 +#: core/models.py:1080 msgid "promo code" msgstr "Kampagnekode" -#: core/models.py:1049 +#: core/models.py:1081 msgid "promo codes" msgstr "Kampagnekoder" -#: core/models.py:1056 +#: core/models.py:1088 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -1729,196 +1833,196 @@ msgstr "" "Der skal kun defineres én type rabat (beløb eller procent), men ikke begge " "eller ingen af dem." -#: core/models.py:1071 +#: core/models.py:1103 msgid "promocode already used" msgstr "Promokoden er allerede blevet brugt" -#: core/models.py:1085 +#: core/models.py:1117 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Ugyldig rabattype for promokode {self.uuid}." -#: core/models.py:1097 +#: core/models.py:1129 msgid "percentage discount for the selected products" msgstr "Procentvis rabat for de valgte produkter" -#: core/models.py:1098 +#: core/models.py:1130 msgid "discount percentage" msgstr "Rabatprocent" -#: core/models.py:1103 +#: core/models.py:1135 msgid "provide a unique name for this promotion" msgstr "Giv et unikt navn til denne kampagne" -#: core/models.py:1104 +#: core/models.py:1136 msgid "promotion name" msgstr "Navn på kampagne" -#: core/models.py:1110 +#: core/models.py:1142 msgid "promotion description" msgstr "Beskrivelse af kampagnen" -#: core/models.py:1115 +#: core/models.py:1147 msgid "select which products are included in this promotion" msgstr "Vælg, hvilke produkter der er inkluderet i denne kampagne" -#: core/models.py:1116 +#: core/models.py:1148 msgid "included products" msgstr "Inkluderede produkter" -#: core/models.py:1120 +#: core/models.py:1152 msgid "promotion" msgstr "Forfremmelse" -#: core/models.py:1135 +#: core/models.py:1167 msgid "the vendor supplying this product stock" msgstr "Den leverandør, der leverer dette produkt, lagerfører" -#: core/models.py:1136 +#: core/models.py:1168 msgid "associated vendor" msgstr "Tilknyttet leverandør" -#: core/models.py:1140 +#: core/models.py:1172 msgid "final price to the customer after markups" msgstr "Endelig pris til kunden efter tillæg" -#: core/models.py:1141 +#: core/models.py:1173 msgid "selling price" msgstr "Salgspris" -#: core/models.py:1146 +#: core/models.py:1178 msgid "the product associated with this stock entry" msgstr "Det produkt, der er knyttet til denne lagerpost" -#: core/models.py:1154 +#: core/models.py:1186 msgid "the price paid to the vendor for this product" msgstr "Den pris, der er betalt til sælgeren for dette produkt" -#: core/models.py:1155 +#: core/models.py:1187 msgid "vendor purchase price" msgstr "Leverandørens købspris" -#: core/models.py:1159 +#: core/models.py:1191 msgid "available quantity of the product in stock" msgstr "Tilgængelig mængde af produktet på lager" -#: core/models.py:1160 +#: core/models.py:1192 msgid "quantity in stock" msgstr "Antal på lager" -#: core/models.py:1164 +#: core/models.py:1196 msgid "vendor-assigned SKU for identifying the product" msgstr "Leverandørtildelt SKU til identifikation af produktet" -#: core/models.py:1165 +#: core/models.py:1197 msgid "vendor sku" msgstr "Leverandørens SKU" -#: core/models.py:1171 +#: core/models.py:1203 msgid "digital file associated with this stock if applicable" msgstr "Digital fil knyttet til dette lager, hvis relevant" -#: core/models.py:1172 +#: core/models.py:1204 msgid "digital file" msgstr "Digital fil" -#: core/models.py:1181 +#: core/models.py:1213 msgid "stock entries" msgstr "Lagerposteringer" -#: core/models.py:1190 +#: core/models.py:1222 msgid "products that the user has marked as wanted" msgstr "Produkter, som brugeren har markeret som ønskede" -#: core/models.py:1198 +#: core/models.py:1230 msgid "user who owns this wishlist" msgstr "Bruger, der ejer denne ønskeliste" -#: core/models.py:1199 +#: core/models.py:1231 msgid "wishlist owner" msgstr "Ønskelistens ejer" -#: core/models.py:1207 +#: core/models.py:1239 msgid "wishlist" msgstr "Ønskeliste" -#: core/models.py:1252 +#: core/models.py:1284 msgid "download" msgstr "Download" -#: core/models.py:1253 +#: core/models.py:1285 msgid "downloads" msgstr "Downloads" -#: core/models.py:1261 +#: core/models.py:1293 msgid "you can not download a digital asset for a non-finished order" msgstr "Du kan ikke downloade et digitalt aktiv for en ikke-færdiggjort ordre" -#: core/models.py:1273 +#: core/models.py:1305 msgid "documentary" msgstr "Dokumentarfilm" -#: core/models.py:1274 +#: core/models.py:1306 msgid "documentaries" msgstr "Dokumentarfilm" -#: core/models.py:1284 +#: core/models.py:1316 msgid "unresolved" msgstr "Uafklaret" -#: core/models.py:1293 +#: core/models.py:1325 msgid "address line for the customer" msgstr "Adresselinje til kunden" -#: core/models.py:1294 +#: core/models.py:1326 msgid "address line" msgstr "Adresselinje" -#: core/models.py:1296 +#: core/models.py:1328 msgid "street" msgstr "Gade" -#: core/models.py:1297 +#: core/models.py:1329 msgid "district" msgstr "Distrikt" -#: core/models.py:1298 +#: core/models.py:1330 msgid "city" msgstr "By" -#: core/models.py:1299 +#: core/models.py:1331 msgid "region" msgstr "Region" -#: core/models.py:1300 +#: core/models.py:1332 msgid "postal code" msgstr "Postnummer" -#: core/models.py:1301 +#: core/models.py:1333 msgid "country" msgstr "Land" -#: core/models.py:1304 +#: core/models.py:1336 msgid "geolocation point: (longitude, latitude)" msgstr "Geolokaliseringspunkt (længdegrad, breddegrad)" -#: core/models.py:1307 +#: core/models.py:1339 msgid "full JSON response from geocoder for this address" msgstr "Fuldt JSON-svar fra geokoderen for denne adresse" -#: core/models.py:1309 +#: core/models.py:1341 msgid "stored JSON response from the geocoding service" msgstr "Gemt JSON-svar fra geokodningstjenesten" -#: core/models.py:1316 +#: core/models.py:1348 msgid "address" msgstr "Adresse" -#: core/models.py:1317 +#: core/models.py:1349 msgid "addresses" msgstr "Adresser" -#: core/serializers/utility.py:76 +#: core/serializers/utility.py:77 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" @@ -2158,7 +2262,7 @@ msgstr "Du kan kun downloade det digitale aktiv én gang" msgid "favicon not found" msgstr "Favicon ikke fundet" -#: core/viewsets.py:680 +#: core/viewsets.py:677 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Fejl i geokodning: {e}" diff --git a/core/locale/de_DE/LC_MESSAGES/django.mo b/core/locale/de_DE/LC_MESSAGES/django.mo index c5ace726..eee0c512 100644 Binary files a/core/locale/de_DE/LC_MESSAGES/django.mo and b/core/locale/de_DE/LC_MESSAGES/django.mo differ diff --git a/core/locale/de_DE/LC_MESSAGES/django.po b/core/locale/de_DE/LC_MESSAGES/django.po index bcfe25cb..88d017dc 100644 --- a/core/locale/de_DE/LC_MESSAGES/django.po +++ b/core/locale/de_DE/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-08 19:42+0100\n" +"POT-Creation-Date: 2025-06-10 03:32+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -83,7 +83,7 @@ msgstr "Bild" msgid "images" msgstr "Bilder" -#: core/admin.py:162 core/models.py:1180 +#: core/admin.py:162 core/models.py:1212 msgid "stock" msgstr "Lagerbestand" @@ -111,11 +111,11 @@ msgstr "Grundlegende Informationen" msgid "important dates" msgstr "Wichtige Termine" -#: core/admin.py:253 core/models.py:874 +#: core/admin.py:253 core/models.py:881 msgid "order product" msgstr "Produkt bestellen" -#: core/admin.py:254 core/graphene/object_types.py:262 core/models.py:875 +#: core/admin.py:254 core/graphene/object_types.py:262 core/models.py:882 msgid "order products" msgstr "Produkte bestellen" @@ -785,6 +785,98 @@ msgstr "" msgid "no search term provided." msgstr "Kein Suchbegriff angegeben." +#: core/filters.py:37 core/filters.py:357 +msgid "UUID" +msgstr "UUID" + +#: core/filters.py:38 core/filters.py:309 core/filters.py:340 +msgid "Name" +msgstr "Name" + +#: core/filters.py:39 core/filters.py:341 +msgid "Categories" +msgstr "Kategorien" + +#: core/filters.py:44 +msgid "Categories Slugs" +msgstr "Kategorien Schnecken" + +#: core/filters.py:45 core/filters.py:312 +msgid "Tags" +msgstr "Tags" + +#: core/filters.py:46 +msgid "Min Price" +msgstr "Mindestpreis" + +#: core/filters.py:47 +msgid "Max Price" +msgstr "Maximaler Preis" + +#: core/filters.py:48 +msgid "Is Active" +msgstr "Ist aktiv" + +#: core/filters.py:49 +msgid "Brand" +msgstr "Marke" + +#: core/filters.py:50 +msgid "Attributes" +msgstr "Attribute" + +#: core/filters.py:51 +msgid "Quantity" +msgstr "Menge" + +#: core/filters.py:52 core/filters.py:311 +msgid "Slug" +msgstr "Schnecke" + +#: core/filters.py:53 +msgid "Is Digital" +msgstr "Is Digital" + +#: core/filters.py:56 +msgid "Include sub-categories" +msgstr "Unterkategorien einbeziehen" + +#: core/filters.py:245 +msgid "Search (ID, product name or part number)" +msgstr "Suche (ID, Produktname oder Teilenummer)" + +#: core/filters.py:248 +msgid "Bought after (inclusive)" +msgstr "Gekauft nach (einschließlich)" + +#: core/filters.py:249 +msgid "Bought before (inclusive)" +msgstr "Gekauft vor (einschließlich)" + +#: core/filters.py:252 core/filters.py:295 +msgid "User email" +msgstr "Benutzer-E-Mail" + +#: core/filters.py:253 core/filters.py:296 core/filters.py:359 +msgid "User UUID" +msgstr "User UUID" + +#: core/filters.py:254 +msgid "Status" +msgstr "Status" + +#: core/filters.py:255 +msgid "Human Readable ID" +msgstr "Human Readable ID" + +#: core/filters.py:310 +msgid "Parent" +msgstr "Elternteil" + +#: core/filters.py:358 +msgid "Product UUID" +msgstr "Produkt UUID" + #: core/graphene/mutations.py:38 msgid "key to look for in or set into the cache" msgstr "Schlüssel, der im Cache zu suchen oder in den Cache zu legen ist" @@ -838,7 +930,7 @@ msgstr "" "sich gegenseitig aus!" #: core/graphene/mutations.py:225 core/graphene/mutations.py:441 -#: core/graphene/mutations.py:475 core/viewsets.py:348 +#: core/graphene/mutations.py:475 core/viewsets.py:345 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Von der Methode order.buy() kam der falsche Typ: {type(instance)!s}" @@ -891,7 +983,7 @@ msgstr "" msgid "original address string provided by the user" msgstr "Vom Benutzer angegebene Originaladresse" -#: core/graphene/mutations.py:572 core/viewsets.py:238 core/viewsets.py:351 +#: core/graphene/mutations.py:572 core/viewsets.py:240 core/viewsets.py:348 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} existiert nicht: {uuid}" @@ -905,7 +997,7 @@ msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - funktioniert wie ein Zauber" #: core/graphene/object_types.py:43 core/graphene/object_types.py:245 -#: core/graphene/object_types.py:286 core/models.py:126 core/models.py:489 +#: core/graphene/object_types.py:286 core/models.py:126 core/models.py:495 msgid "attributes" msgstr "Attribute" @@ -918,11 +1010,11 @@ msgid "groups of attributes" msgstr "Gruppen von Attributen" #: core/graphene/object_types.py:76 core/graphene/object_types.py:104 -#: core/graphene/object_types.py:132 core/models.py:90 core/models.py:220 +#: core/graphene/object_types.py:132 core/models.py:90 core/models.py:226 msgid "categories" msgstr "Kategorien" -#: core/graphene/object_types.py:83 core/models.py:267 +#: core/graphene/object_types.py:83 core/models.py:273 msgid "brands" msgstr "Marken" @@ -948,7 +1040,7 @@ msgstr "" "Mindest- und Höchstpreise für Produkte in dieser Kategorie, sofern " "verfügbar." -#: core/graphene/object_types.py:202 core/models.py:404 +#: core/graphene/object_types.py:202 core/models.py:410 msgid "vendors" msgstr "Anbieter" @@ -974,7 +1066,7 @@ msgid "represents feedback from a user." msgstr "Stellt das Feedback eines Benutzers dar." #: core/graphene/object_types.py:246 core/graphene/object_types.py:287 -#: core/models.py:483 +#: core/models.py:489 msgid "notifications" msgstr "Benachrichtigungen" @@ -986,7 +1078,7 @@ msgstr "Download-Url für dieses Bestellprodukt, falls zutreffend" msgid "a list of order products in this order" msgstr "Eine Liste der bestellten Produkte in dieser Reihenfolge" -#: core/graphene/object_types.py:278 core/models.py:453 +#: core/graphene/object_types.py:278 core/models.py:459 msgid "billing address" msgstr "Rechnungsadresse" @@ -1010,7 +1102,7 @@ msgstr "Gesamtmenge der bestellten Produkte" msgid "are all products in the order digital" msgstr "Sind alle Produkte in der Bestellung digital" -#: core/graphene/object_types.py:305 core/models.py:517 +#: core/graphene/object_types.py:305 core/models.py:523 msgid "orders" msgstr "Bestellungen" @@ -1022,15 +1114,15 @@ msgstr "Bild URL" msgid "product's images" msgstr "Bilder des Produkts" -#: core/graphene/object_types.py:335 core/models.py:219 core/models.py:277 +#: core/graphene/object_types.py:335 core/models.py:225 core/models.py:283 msgid "category" msgstr "Kategorie" -#: core/graphene/object_types.py:337 core/models.py:440 +#: core/graphene/object_types.py:337 core/models.py:446 msgid "feedbacks" msgstr "Rückmeldungen" -#: core/graphene/object_types.py:338 core/models.py:266 core/models.py:285 +#: core/graphene/object_types.py:338 core/models.py:272 core/models.py:291 msgid "brand" msgstr "Marke" @@ -1050,7 +1142,7 @@ msgstr "Menge" msgid "number of feedbacks" msgstr "Anzahl der Rückmeldungen" -#: core/graphene/object_types.py:360 core/models.py:329 +#: core/graphene/object_types.py:360 core/models.py:335 msgid "products" msgstr "Produkte" @@ -1062,15 +1154,15 @@ msgstr "Promocodes" msgid "products on sale" msgstr "Zum Verkauf stehende Produkte" -#: core/graphene/object_types.py:425 core/models.py:1121 +#: core/graphene/object_types.py:425 core/models.py:1153 msgid "promotions" msgstr "Werbeaktionen" -#: core/graphene/object_types.py:429 core/models.py:403 +#: core/graphene/object_types.py:429 core/models.py:409 msgid "vendor" msgstr "Anbieter" -#: core/graphene/object_types.py:430 core/models.py:328 +#: core/graphene/object_types.py:430 core/models.py:334 #: core/templates/digital_order_created_email.html:107 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:93 @@ -1078,11 +1170,11 @@ msgstr "Anbieter" msgid "product" msgstr "Produkt" -#: core/graphene/object_types.py:441 core/models.py:1191 +#: core/graphene/object_types.py:441 core/models.py:1223 msgid "wishlisted products" msgstr "Auf dem Wunschzettel stehende Produkte" -#: core/graphene/object_types.py:447 core/models.py:1208 +#: core/graphene/object_types.py:447 core/models.py:1240 msgid "wishlists" msgstr "Wunschzettel" @@ -1090,7 +1182,7 @@ msgstr "Wunschzettel" msgid "tagged products" msgstr "Markierte Produkte" -#: core/graphene/object_types.py:458 core/models.py:291 core/models.py:952 +#: core/graphene/object_types.py:458 core/models.py:297 core/models.py:959 msgid "product tags" msgstr "Produkt-Tags" @@ -1238,8 +1330,8 @@ msgid "the specific product associated with this attribute's value" msgstr "" "Das spezifische Produkt, das mit dem Wert dieses Attributs verbunden ist" -#: core/models.py:145 core/models.py:851 core/models.py:978 -#: core/models.py:1147 +#: core/models.py:145 core/models.py:858 core/models.py:1010 +#: core/models.py:1179 msgid "associated product" msgstr "Zugehöriges Produkt" @@ -1285,284 +1377,292 @@ msgstr "Fügen Sie eine detaillierte Beschreibung für diese Kategorie hinzu" msgid "category description" msgstr "Beschreibung der Kategorie" -#: core/models.py:229 +#: core/models.py:212 +msgid "tags that help describe or group this category" +msgstr "Tags, die helfen, diese Kategorie zu beschreiben oder zu gruppieren" + +#: core/models.py:213 core/models.py:984 +msgid "category tags" +msgstr "Kategorie-Tags" + +#: core/models.py:235 msgid "name of this brand" msgstr "Name dieser Marke" -#: core/models.py:230 +#: core/models.py:236 msgid "brand name" msgstr "Markenname" -#: core/models.py:237 +#: core/models.py:243 msgid "upload a logo representing this brand" msgstr "Laden Sie ein Logo hoch, das diese Marke repräsentiert" -#: core/models.py:239 +#: core/models.py:245 msgid "brand small image" msgstr "Marke kleines Bild" -#: core/models.py:245 +#: core/models.py:251 msgid "upload a big logo representing this brand" msgstr "Laden Sie ein großes Logo hoch, das diese Marke repräsentiert" -#: core/models.py:247 +#: core/models.py:253 msgid "brand big image" msgstr "Großes Image der Marke" -#: core/models.py:252 +#: core/models.py:258 msgid "add a detailed description of the brand" msgstr "Fügen Sie eine detaillierte Beschreibung der Marke hinzu" -#: core/models.py:253 +#: core/models.py:259 msgid "brand description" msgstr "Beschreibung der Marke" -#: core/models.py:258 +#: core/models.py:264 msgid "optional categories that this brand is associated with" msgstr "" "Optionale Kategorien, mit denen diese Marke in Verbindung gebracht wird" -#: core/models.py:259 +#: core/models.py:265 msgid "associated categories" msgstr "Kategorien" -#: core/models.py:276 +#: core/models.py:282 msgid "category this product belongs to" msgstr "Kategorie, zu der dieses Produkt gehört" -#: core/models.py:284 +#: core/models.py:290 msgid "optionally associate this product with a brand" msgstr "Optional können Sie dieses Produkt mit einer Marke verknüpfen" -#: core/models.py:290 +#: core/models.py:296 msgid "tags that help describe or group this product" msgstr "Tags, die helfen, dieses Produkt zu beschreiben oder zu gruppieren" -#: core/models.py:295 +#: core/models.py:301 msgid "indicates whether this product is digitally delivered" msgstr "Gibt an, ob dieses Produkt digital geliefert wird" -#: core/models.py:296 +#: core/models.py:302 msgid "is product digital" msgstr "Ist das Produkt digital" -#: core/models.py:302 +#: core/models.py:308 msgid "provide a clear identifying name for the product" msgstr "" "Geben Sie einen eindeutigen Namen zur Identifizierung des Produkts an." -#: core/models.py:303 +#: core/models.py:309 msgid "product name" msgstr "Name des Produkts" -#: core/models.py:308 core/models.py:1109 +#: core/models.py:314 core/models.py:1141 msgid "add a detailed description of the product" msgstr "Fügen Sie eine detaillierte Beschreibung des Produkts hinzu" -#: core/models.py:309 +#: core/models.py:315 msgid "product description" msgstr "Beschreibung des Produkts" -#: core/models.py:316 +#: core/models.py:322 msgid "part number for this product" msgstr "Teilenummer für dieses Produkt" -#: core/models.py:317 +#: core/models.py:323 msgid "part number" msgstr "Teilnummer" -#: core/models.py:381 +#: core/models.py:387 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Speichert Anmeldeinformationen und Endpunkte, die für die API-Kommunikation " "des Anbieters erforderlich sind" -#: core/models.py:382 +#: core/models.py:388 msgid "authentication info" msgstr "Informationen zur Authentifizierung" -#: core/models.py:387 +#: core/models.py:393 msgid "define the markup for products retrieved from this vendor" msgstr "" "Definieren Sie den Aufschlag für Produkte, die von diesem Lieferanten " "bezogen werden" -#: core/models.py:388 +#: core/models.py:394 msgid "vendor markup percentage" msgstr "Prozentualer Aufschlag des Lieferanten" -#: core/models.py:392 +#: core/models.py:398 msgid "name of this vendor" msgstr "Name dieses Anbieters" -#: core/models.py:393 +#: core/models.py:399 msgid "vendor name" msgstr "Name des Anbieters" -#: core/models.py:416 +#: core/models.py:422 msgid "user-provided comments about their experience with the product" msgstr "Kommentare der Nutzer über ihre Erfahrungen mit dem Produkt" -#: core/models.py:417 +#: core/models.py:423 msgid "feedback comments" msgstr "Kommentare zum Feedback" -#: core/models.py:424 +#: core/models.py:430 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "Verweist auf das spezifische Produkt in einer Bestellung, auf das sich diese" " Rückmeldung bezieht" -#: core/models.py:425 +#: core/models.py:431 msgid "related order product" msgstr "Produkt zur Bestellung" -#: core/models.py:430 +#: core/models.py:436 msgid "user-assigned rating for the product" msgstr "Vom Benutzer zugewiesene Bewertung für das Produkt" -#: core/models.py:431 +#: core/models.py:437 msgid "product rating" msgstr "Produktbewertung" -#: core/models.py:439 +#: core/models.py:445 msgid "feedback" msgstr "Rückmeldung" -#: core/models.py:452 +#: core/models.py:458 msgid "the billing address used for this order" msgstr "Die für diese Bestellung verwendete Rechnungsadresse" -#: core/models.py:460 +#: core/models.py:466 msgid "optional promo code applied to this order" msgstr "Optionaler Promo-Code für diese Bestellung" -#: core/models.py:461 +#: core/models.py:467 msgid "applied promo code" msgstr "Angewandter Promo-Code" -#: core/models.py:469 +#: core/models.py:475 msgid "the shipping address used for this order" msgstr "Die für diese Bestellung verwendete Lieferadresse" -#: core/models.py:470 +#: core/models.py:476 msgid "shipping address" msgstr "Lieferadresse" -#: core/models.py:476 +#: core/models.py:482 msgid "current status of the order in its lifecycle" msgstr "Aktueller Status des Auftrags in seinem Lebenszyklus" -#: core/models.py:477 +#: core/models.py:483 msgid "order status" msgstr "Status der Bestellung" -#: core/models.py:482 core/models.py:828 +#: core/models.py:488 core/models.py:835 msgid "json structure of notifications to display to users" msgstr "" "JSON-Struktur der Benachrichtigungen, die den Benutzern angezeigt werden " "sollen; in der Admin-UI wird die Tabellenansicht verwendet" -#: core/models.py:488 +#: core/models.py:494 msgid "json representation of order attributes for this order" msgstr "JSON-Darstellung der Auftragsattribute für diesen Auftrag" -#: core/models.py:494 +#: core/models.py:500 msgid "the user who placed the order" msgstr "Der Benutzer, der die Bestellung aufgegeben hat" -#: core/models.py:495 +#: core/models.py:501 msgid "user" msgstr "Benutzer" -#: core/models.py:501 +#: core/models.py:507 msgid "the timestamp when the order was finalized" msgstr "Der Zeitstempel, zu dem der Auftrag abgeschlossen wurde" -#: core/models.py:502 +#: core/models.py:508 msgid "buy time" msgstr "Zeit kaufen" -#: core/models.py:509 +#: core/models.py:515 msgid "a human-readable identifier for the order" msgstr "Ein von Menschen lesbarer Identifikator für den Auftrag" -#: core/models.py:510 +#: core/models.py:516 msgid "human readable id" msgstr "menschenlesbare ID" -#: core/models.py:516 +#: core/models.py:522 msgid "order" msgstr "Bestellung" -#: core/models.py:531 +#: core/models.py:537 msgid "a user must have only one pending order at a time" msgstr "Ein Benutzer darf immer nur einen schwebenden Auftrag haben!" -#: core/models.py:559 +#: core/models.py:566 msgid "you cannot add products to an order that is not a pending one" msgstr "" "Sie können keine Produkte zu einem Auftrag hinzufügen, der nicht in " "Bearbeitung ist." -#: core/models.py:564 +#: core/models.py:571 msgid "you cannot add inactive products to order" msgstr "Sie können keine inaktiven Produkte zur Bestellung hinzufügen" -#: core/models.py:581 +#: core/models.py:588 msgid "you cannot add more products than available in stock" msgstr "Sie können nicht mehr Produkte hinzufügen, als auf Lager sind" -#: core/models.py:590 core/models.py:610 core/models.py:634 -#: core/models.py:1218 core/models.py:1230 +#: core/models.py:597 core/models.py:617 core/models.py:641 +#: core/models.py:1250 core/models.py:1262 #, python-brace-format msgid "{name} does not exist: {product_uuid}" msgstr "{name} existiert nicht: {product_uuid}" -#: core/models.py:594 core/models.py:618 core/models.py:626 +#: core/models.py:601 core/models.py:625 core/models.py:633 msgid "you cannot remove products from an order that is not a pending one" msgstr "" "Sie können keine Produkte aus einer Bestellung entfernen, die nicht in " "Bearbeitung ist." -#: core/models.py:614 +#: core/models.py:621 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} existiert nicht mit Abfrage <{query}>" -#: core/models.py:645 +#: core/models.py:652 msgid "promocode does not exist" msgstr "Promocode existiert nicht" -#: core/models.py:654 +#: core/models.py:661 msgid "you can only buy physical products with shipping address specified" msgstr "" "Sie können nur physische Produkte mit angegebener Lieferadresse kaufen!" -#: core/models.py:673 +#: core/models.py:680 msgid "address does not exist" msgstr "Adresse ist nicht vorhanden" -#: core/models.py:684 core/models.py:727 +#: core/models.py:691 core/models.py:734 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "Sie können im Moment nicht kaufen, bitte versuchen Sie es in ein paar " "Minuten erneut." -#: core/models.py:687 +#: core/models.py:694 msgid "invalid force value" msgstr "Ungültiger Force-Wert" -#: core/models.py:692 core/models.py:730 +#: core/models.py:699 core/models.py:737 msgid "you cannot purchase an empty order!" msgstr "Sie können keine leere Bestellung kaufen!" -#: core/models.py:707 +#: core/models.py:714 msgid "insufficient funds to complete the order" msgstr "Unzureichende Mittel für die Ausführung des Auftrags" -#: core/models.py:739 +#: core/models.py:746 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -1570,206 +1670,210 @@ msgstr "" "Sie können nicht ohne Registrierung kaufen, bitte geben Sie die folgenden " "Informationen an: Kundenname, Kunden-E-Mail, Kunden-Telefonnummer" -#: core/models.py:748 +#: core/models.py:755 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "Ungültige Zahlungsmethode: {payment_method} von {available_payment_methods}!" -#: core/models.py:816 +#: core/models.py:823 msgid "the price paid by the customer for this product at purchase time" msgstr "" "Der Preis, den der Kunde zum Zeitpunkt des Kaufs für dieses Produkt bezahlt " "hat" -#: core/models.py:817 +#: core/models.py:824 msgid "purchase price at order time" msgstr "Einkaufspreis zum Zeitpunkt der Bestellung" -#: core/models.py:822 +#: core/models.py:829 msgid "internal comments for admins about this ordered product" msgstr "Interne Kommentare für Administratoren zu diesem bestellten Produkt" -#: core/models.py:823 +#: core/models.py:830 msgid "internal comments" msgstr "Interne Kommentare" -#: core/models.py:829 +#: core/models.py:836 msgid "user notifications" msgstr "Benutzerbenachrichtigungen" -#: core/models.py:834 +#: core/models.py:841 msgid "json representation of this item's attributes" msgstr "JSON-Darstellung der Attribute dieses Artikels" -#: core/models.py:835 +#: core/models.py:842 msgid "ordered product attributes" msgstr "Bestellte Produktattribute" -#: core/models.py:840 +#: core/models.py:847 msgid "reference to the parent order that contains this product" msgstr "Verweis auf den übergeordneten Auftrag, der dieses Produkt enthält" -#: core/models.py:841 +#: core/models.py:848 msgid "parent order" msgstr "Übergeordneter Auftrag" -#: core/models.py:850 +#: core/models.py:857 msgid "the specific product associated with this order line" msgstr "Das spezifische Produkt, das mit dieser Auftragszeile verbunden ist" -#: core/models.py:857 +#: core/models.py:864 msgid "quantity of this specific product in the order" msgstr "Menge dieses spezifischen Produkts in der Bestellung" -#: core/models.py:858 +#: core/models.py:865 msgid "product quantity" msgstr "Produktmenge" -#: core/models.py:865 +#: core/models.py:872 msgid "current status of this product in the order" msgstr "Aktueller Status dieses Produkts im Auftrag" -#: core/models.py:866 +#: core/models.py:873 msgid "product line status" msgstr "Status der Produktlinie" -#: core/models.py:918 +#: core/models.py:925 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "falsche Aktion für die Rückmeldung angegeben: {action}" -#: core/models.py:926 +#: core/models.py:933 msgid "you cannot feedback an order which is not received" msgstr "" "Sie können keine Produkte aus einer Bestellung entfernen, die nicht in " "Bearbeitung ist." -#: core/models.py:937 +#: core/models.py:944 core/models.py:969 msgid "internal tag identifier for the product tag" msgstr "Interner Tag-Identifikator für das Produkt-Tag" -#: core/models.py:938 +#: core/models.py:945 core/models.py:970 msgid "tag name" msgstr "Tag name" -#: core/models.py:942 +#: core/models.py:949 core/models.py:974 msgid "user-friendly name for the product tag" msgstr "Benutzerfreundlicher Name für den Produktanhänger" -#: core/models.py:943 +#: core/models.py:950 core/models.py:975 msgid "tag display name" msgstr "Tag-Anzeigename" -#: core/models.py:951 +#: core/models.py:958 msgid "product tag" msgstr "Produkt-Tag" -#: core/models.py:960 +#: core/models.py:983 +msgid "category tag" +msgstr "Kategorie-Tag" + +#: core/models.py:992 msgid "provide alternative text for the image for accessibility" msgstr "" "Geben Sie einen alternativen Text für das Bild an, um die Barrierefreiheit " "zu gewährleisten." -#: core/models.py:961 +#: core/models.py:993 msgid "image alt text" msgstr "Bild-Alt-Text" -#: core/models.py:964 +#: core/models.py:996 msgid "upload the image file for this product" msgstr "Laden Sie die Bilddatei für dieses Produkt hoch" -#: core/models.py:965 core/models.py:990 +#: core/models.py:997 core/models.py:1022 msgid "product image" msgstr "Produktbild" -#: core/models.py:971 +#: core/models.py:1003 msgid "determines the order in which images are displayed" msgstr "Legt die Reihenfolge fest, in der die Bilder angezeigt werden" -#: core/models.py:972 +#: core/models.py:1004 msgid "display priority" msgstr "Priorität anzeigen" -#: core/models.py:977 +#: core/models.py:1009 msgid "the product that this image represents" msgstr "Das Produkt, das dieses Bild darstellt" -#: core/models.py:991 +#: core/models.py:1023 msgid "product images" msgstr "Produktbilder" -#: core/models.py:1001 +#: core/models.py:1033 msgid "unique code used by a user to redeem a discount" msgstr "" "Einzigartiger Code, den ein Nutzer zum Einlösen eines Rabatts verwendet" -#: core/models.py:1002 +#: core/models.py:1034 msgid "promo code identifier" msgstr "Kennung des Promo-Codes" -#: core/models.py:1009 +#: core/models.py:1041 msgid "fixed discount amount applied if percent is not used" msgstr "" "Fester Rabattbetrag, der angewandt wird, wenn kein Prozentsatz verwendet " "wird" -#: core/models.py:1010 +#: core/models.py:1042 msgid "fixed discount amount" msgstr "Fester Rabattbetrag" -#: core/models.py:1016 +#: core/models.py:1048 msgid "percentage discount applied if fixed amount is not used" msgstr "Prozentualer Rabatt, wenn der Festbetrag nicht verwendet wird" -#: core/models.py:1017 +#: core/models.py:1049 msgid "percentage discount" msgstr "Prozentualer Rabatt" -#: core/models.py:1022 +#: core/models.py:1054 msgid "timestamp when the promocode expires" msgstr "Zeitstempel, wann der Promocode abläuft" -#: core/models.py:1023 +#: core/models.py:1055 msgid "end validity time" msgstr "Ende der Gültigkeitsdauer" -#: core/models.py:1028 +#: core/models.py:1060 msgid "timestamp from which this promocode is valid" msgstr "Zeitstempel, ab dem dieser Promocode gültig ist" -#: core/models.py:1029 +#: core/models.py:1061 msgid "start validity time" msgstr "Beginn der Gültigkeitsdauer" -#: core/models.py:1034 +#: core/models.py:1066 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "Zeitstempel, wann der Promocode verwendet wurde, leer, wenn noch nicht " "verwendet" -#: core/models.py:1035 +#: core/models.py:1067 msgid "usage timestamp" msgstr "Zeitstempel der Verwendung" -#: core/models.py:1040 +#: core/models.py:1072 msgid "user assigned to this promocode if applicable" msgstr "Diesem Promocode zugewiesener Benutzer, falls zutreffend" -#: core/models.py:1041 +#: core/models.py:1073 msgid "assigned user" msgstr "Zugewiesener Benutzer" -#: core/models.py:1048 +#: core/models.py:1080 msgid "promo code" msgstr "Promo-Code" -#: core/models.py:1049 +#: core/models.py:1081 msgid "promo codes" msgstr "Promo-Codes" -#: core/models.py:1056 +#: core/models.py:1088 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -1777,199 +1881,199 @@ msgstr "" "Es sollte nur eine Art von Rabatt definiert werden (Betrag oder " "Prozentsatz), aber nicht beides oder keines von beiden." -#: core/models.py:1071 +#: core/models.py:1103 msgid "promocode already used" msgstr "Promocode wurde bereits verwendet" -#: core/models.py:1085 +#: core/models.py:1117 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Ungültiger Rabatttyp für Promocode {self.uuid}" -#: core/models.py:1097 +#: core/models.py:1129 msgid "percentage discount for the selected products" msgstr "Prozentualer Rabatt für die ausgewählten Produkte" -#: core/models.py:1098 +#: core/models.py:1130 msgid "discount percentage" msgstr "Prozentsatz der Ermäßigung" -#: core/models.py:1103 +#: core/models.py:1135 msgid "provide a unique name for this promotion" msgstr "Geben Sie einen eindeutigen Namen für diese Aktion an" -#: core/models.py:1104 +#: core/models.py:1136 msgid "promotion name" msgstr "Name der Aktion" -#: core/models.py:1110 +#: core/models.py:1142 msgid "promotion description" msgstr "Promotion description" -#: core/models.py:1115 +#: core/models.py:1147 msgid "select which products are included in this promotion" msgstr "Wählen Sie aus, welche Produkte in dieser Aktion enthalten sind" -#: core/models.py:1116 +#: core/models.py:1148 msgid "included products" msgstr "Enthaltene Produkte" -#: core/models.py:1120 +#: core/models.py:1152 msgid "promotion" msgstr "Förderung" -#: core/models.py:1135 +#: core/models.py:1167 msgid "the vendor supplying this product stock" msgstr "Der Verkäufer, der dieses Produkt liefert, hat folgende Bestände" -#: core/models.py:1136 +#: core/models.py:1168 msgid "associated vendor" msgstr "Zugehöriger Anbieter" -#: core/models.py:1140 +#: core/models.py:1172 msgid "final price to the customer after markups" msgstr "Endpreis für den Kunden nach Aufschlägen" -#: core/models.py:1141 +#: core/models.py:1173 msgid "selling price" msgstr "Verkaufspreis" -#: core/models.py:1146 +#: core/models.py:1178 msgid "the product associated with this stock entry" msgstr "Das mit diesem Bestandseintrag verbundene Produkt" -#: core/models.py:1154 +#: core/models.py:1186 msgid "the price paid to the vendor for this product" msgstr "Der an den Verkäufer gezahlte Preis für dieses Produkt" -#: core/models.py:1155 +#: core/models.py:1187 msgid "vendor purchase price" msgstr "Einkaufspreis des Verkäufers" -#: core/models.py:1159 +#: core/models.py:1191 msgid "available quantity of the product in stock" msgstr "Verfügbare Menge des Produkts auf Lager" -#: core/models.py:1160 +#: core/models.py:1192 msgid "quantity in stock" msgstr "Vorrätige Menge" -#: core/models.py:1164 +#: core/models.py:1196 msgid "vendor-assigned SKU for identifying the product" msgstr "Vom Hersteller zugewiesene SKU zur Identifizierung des Produkts" -#: core/models.py:1165 +#: core/models.py:1197 msgid "vendor sku" msgstr "SKU des Verkäufers" -#: core/models.py:1171 +#: core/models.py:1203 msgid "digital file associated with this stock if applicable" msgstr "" "Digitale Datei, die mit diesem Bestand verbunden ist, falls zutreffend" -#: core/models.py:1172 +#: core/models.py:1204 msgid "digital file" msgstr "Digitale Datei" -#: core/models.py:1181 +#: core/models.py:1213 msgid "stock entries" msgstr "Bestandseinträge" -#: core/models.py:1190 +#: core/models.py:1222 msgid "products that the user has marked as wanted" msgstr "Produkte, die der Benutzer als gewünscht markiert hat" -#: core/models.py:1198 +#: core/models.py:1230 msgid "user who owns this wishlist" msgstr "Benutzer, dem diese Wunschliste gehört" -#: core/models.py:1199 +#: core/models.py:1231 msgid "wishlist owner" msgstr "Besitzer der Wishlist" -#: core/models.py:1207 +#: core/models.py:1239 msgid "wishlist" msgstr "Wunschzettel" -#: core/models.py:1252 +#: core/models.py:1284 msgid "download" msgstr "Herunterladen" -#: core/models.py:1253 +#: core/models.py:1285 msgid "downloads" msgstr "Herunterladen" -#: core/models.py:1261 +#: core/models.py:1293 msgid "you can not download a digital asset for a non-finished order" msgstr "" "Sie können kein digitales Asset für eine nicht abgeschlossene Bestellung " "herunterladen" -#: core/models.py:1273 +#: core/models.py:1305 msgid "documentary" msgstr "Dokumentarfilm" -#: core/models.py:1274 +#: core/models.py:1306 msgid "documentaries" msgstr "Dokumentarfilme" -#: core/models.py:1284 +#: core/models.py:1316 msgid "unresolved" msgstr "Ungelöst" -#: core/models.py:1293 +#: core/models.py:1325 msgid "address line for the customer" msgstr "Adresszeile für den Kunden" -#: core/models.py:1294 +#: core/models.py:1326 msgid "address line" msgstr "Adresszeile" -#: core/models.py:1296 +#: core/models.py:1328 msgid "street" msgstr "Straße" -#: core/models.py:1297 +#: core/models.py:1329 msgid "district" msgstr "Bezirk" -#: core/models.py:1298 +#: core/models.py:1330 msgid "city" msgstr "Stadt" -#: core/models.py:1299 +#: core/models.py:1331 msgid "region" msgstr "Region" -#: core/models.py:1300 +#: core/models.py:1332 msgid "postal code" msgstr "Postleitzahl" -#: core/models.py:1301 +#: core/models.py:1333 msgid "country" msgstr "Land" -#: core/models.py:1304 +#: core/models.py:1336 msgid "geolocation point: (longitude, latitude)" msgstr "Geolocation Point(Längengrad, Breitengrad)" -#: core/models.py:1307 +#: core/models.py:1339 msgid "full JSON response from geocoder for this address" msgstr "Vollständige JSON-Antwort vom Geocoder für diese Adresse" -#: core/models.py:1309 +#: core/models.py:1341 msgid "stored JSON response from the geocoding service" msgstr "Gespeicherte JSON-Antwort vom Geokodierungsdienst" -#: core/models.py:1316 +#: core/models.py:1348 msgid "address" msgstr "Adresse" -#: core/models.py:1317 +#: core/models.py:1349 msgid "addresses" msgstr "Adressen" -#: core/serializers/utility.py:76 +#: core/serializers/utility.py:77 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" @@ -2211,7 +2315,7 @@ msgstr "Sie können das digitale Asset nur einmal herunterladen" msgid "favicon not found" msgstr "Favicon nicht gefunden" -#: core/viewsets.py:680 +#: core/viewsets.py:677 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Geokodierungsfehler: {e}" diff --git a/core/locale/en_GB/LC_MESSAGES/django.mo b/core/locale/en_GB/LC_MESSAGES/django.mo index c05dd836..60c65406 100644 Binary files a/core/locale/en_GB/LC_MESSAGES/django.mo and b/core/locale/en_GB/LC_MESSAGES/django.mo differ diff --git a/core/locale/en_GB/LC_MESSAGES/django.po b/core/locale/en_GB/LC_MESSAGES/django.po index a6a4c4f6..c2accbb9 100644 --- a/core/locale/en_GB/LC_MESSAGES/django.po +++ b/core/locale/en_GB/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-08 19:42+0100\n" +"POT-Creation-Date: 2025-06-10 03:32+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -85,7 +85,7 @@ msgstr "Image" msgid "images" msgstr "Images" -#: core/admin.py:162 core/models.py:1180 +#: core/admin.py:162 core/models.py:1212 msgid "stock" msgstr "Stock" @@ -113,11 +113,11 @@ msgstr "Basic Info" msgid "important dates" msgstr "Important Dates" -#: core/admin.py:253 core/models.py:874 +#: core/admin.py:253 core/models.py:881 msgid "order product" msgstr "Order Product" -#: core/admin.py:254 core/graphene/object_types.py:262 core/models.py:875 +#: core/admin.py:254 core/graphene/object_types.py:262 core/models.py:882 msgid "order products" msgstr "Order Products" @@ -735,6 +735,98 @@ msgstr "add or remove feedback on an order–product relation" msgid "no search term provided." msgstr "No search term provided." +#: core/filters.py:37 core/filters.py:357 +msgid "UUID" +msgstr "UUID" + +#: core/filters.py:38 core/filters.py:309 core/filters.py:340 +msgid "Name" +msgstr "Name" + +#: core/filters.py:39 core/filters.py:341 +msgid "Categories" +msgstr "Categories" + +#: core/filters.py:44 +msgid "Categories Slugs" +msgstr "Categories Slugs" + +#: core/filters.py:45 core/filters.py:312 +msgid "Tags" +msgstr "Tags" + +#: core/filters.py:46 +msgid "Min Price" +msgstr "Min Price" + +#: core/filters.py:47 +msgid "Max Price" +msgstr "Max Price" + +#: core/filters.py:48 +msgid "Is Active" +msgstr "Is Active" + +#: core/filters.py:49 +msgid "Brand" +msgstr "Brand" + +#: core/filters.py:50 +msgid "Attributes" +msgstr "Attributes" + +#: core/filters.py:51 +msgid "Quantity" +msgstr "Quantity" + +#: core/filters.py:52 core/filters.py:311 +msgid "Slug" +msgstr "Slug" + +#: core/filters.py:53 +msgid "Is Digital" +msgstr "Is Digital" + +#: core/filters.py:56 +msgid "Include sub-categories" +msgstr "Include sub-categories" + +#: core/filters.py:245 +msgid "Search (ID, product name or part number)" +msgstr "Search (ID, product name or part number)" + +#: core/filters.py:248 +msgid "Bought after (inclusive)" +msgstr "Bought after (inclusive)" + +#: core/filters.py:249 +msgid "Bought before (inclusive)" +msgstr "Bought before (inclusive)" + +#: core/filters.py:252 core/filters.py:295 +msgid "User email" +msgstr "User email" + +#: core/filters.py:253 core/filters.py:296 core/filters.py:359 +msgid "User UUID" +msgstr "User UUID" + +#: core/filters.py:254 +msgid "Status" +msgstr "Status" + +#: core/filters.py:255 +msgid "Human Readable ID" +msgstr "Human Readable ID" + +#: core/filters.py:310 +msgid "Parent" +msgstr "Parent" + +#: core/filters.py:358 +msgid "Product UUID" +msgstr "Product UUID" + #: core/graphene/mutations.py:38 msgid "key to look for in or set into the cache" msgstr "Key to look for in or set into the cache" @@ -786,7 +878,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "Please provide either order_uuid or order_hr_id - mutually exclusive!" #: core/graphene/mutations.py:225 core/graphene/mutations.py:441 -#: core/graphene/mutations.py:475 core/viewsets.py:348 +#: core/graphene/mutations.py:475 core/viewsets.py:345 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Wrong type came from order.buy() method: {type(instance)!s}" @@ -840,7 +932,7 @@ msgstr "" msgid "original address string provided by the user" msgstr "Original address string provided by the user" -#: core/graphene/mutations.py:572 core/viewsets.py:238 core/viewsets.py:351 +#: core/graphene/mutations.py:572 core/viewsets.py:240 core/viewsets.py:348 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} does not exist: {uuid}" @@ -854,7 +946,7 @@ msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - works like a charm" #: core/graphene/object_types.py:43 core/graphene/object_types.py:245 -#: core/graphene/object_types.py:286 core/models.py:126 core/models.py:489 +#: core/graphene/object_types.py:286 core/models.py:126 core/models.py:495 msgid "attributes" msgstr "Attributes" @@ -867,11 +959,11 @@ msgid "groups of attributes" msgstr "Groups of attributes" #: core/graphene/object_types.py:76 core/graphene/object_types.py:104 -#: core/graphene/object_types.py:132 core/models.py:90 core/models.py:220 +#: core/graphene/object_types.py:132 core/models.py:90 core/models.py:226 msgid "categories" msgstr "Categories" -#: core/graphene/object_types.py:83 core/models.py:267 +#: core/graphene/object_types.py:83 core/models.py:273 msgid "brands" msgstr "Brands" @@ -894,7 +986,7 @@ msgid "" msgstr "" "Minimum and maximum prices for products in this category, if available." -#: core/graphene/object_types.py:202 core/models.py:404 +#: core/graphene/object_types.py:202 core/models.py:410 msgid "vendors" msgstr "Vendors" @@ -919,7 +1011,7 @@ msgid "represents feedback from a user." msgstr "Represents feedback from a user." #: core/graphene/object_types.py:246 core/graphene/object_types.py:287 -#: core/models.py:483 +#: core/models.py:489 msgid "notifications" msgstr "Notifications" @@ -931,7 +1023,7 @@ msgstr "Download url for this order product if applicable" msgid "a list of order products in this order" msgstr "A list of order products in this order" -#: core/graphene/object_types.py:278 core/models.py:453 +#: core/graphene/object_types.py:278 core/models.py:459 msgid "billing address" msgstr "Billing address" @@ -955,7 +1047,7 @@ msgstr "Total quantity of products in order" msgid "are all products in the order digital" msgstr "Are all of the products in the order digital" -#: core/graphene/object_types.py:305 core/models.py:517 +#: core/graphene/object_types.py:305 core/models.py:523 msgid "orders" msgstr "Orders" @@ -967,15 +1059,15 @@ msgstr "Image URL" msgid "product's images" msgstr "Product's images" -#: core/graphene/object_types.py:335 core/models.py:219 core/models.py:277 +#: core/graphene/object_types.py:335 core/models.py:225 core/models.py:283 msgid "category" msgstr "Category" -#: core/graphene/object_types.py:337 core/models.py:440 +#: core/graphene/object_types.py:337 core/models.py:446 msgid "feedbacks" msgstr "Feedbacks" -#: core/graphene/object_types.py:338 core/models.py:266 core/models.py:285 +#: core/graphene/object_types.py:338 core/models.py:272 core/models.py:291 msgid "brand" msgstr "Brand" @@ -995,7 +1087,7 @@ msgstr "Quantity" msgid "number of feedbacks" msgstr "Number of feedbacks" -#: core/graphene/object_types.py:360 core/models.py:329 +#: core/graphene/object_types.py:360 core/models.py:335 msgid "products" msgstr "Products" @@ -1007,15 +1099,15 @@ msgstr "Promocodes" msgid "products on sale" msgstr "Products on sale" -#: core/graphene/object_types.py:425 core/models.py:1121 +#: core/graphene/object_types.py:425 core/models.py:1153 msgid "promotions" msgstr "Promotions" -#: core/graphene/object_types.py:429 core/models.py:403 +#: core/graphene/object_types.py:429 core/models.py:409 msgid "vendor" msgstr "Vendor" -#: core/graphene/object_types.py:430 core/models.py:328 +#: core/graphene/object_types.py:430 core/models.py:334 #: core/templates/digital_order_created_email.html:107 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:93 @@ -1023,11 +1115,11 @@ msgstr "Vendor" msgid "product" msgstr "Product" -#: core/graphene/object_types.py:441 core/models.py:1191 +#: core/graphene/object_types.py:441 core/models.py:1223 msgid "wishlisted products" msgstr "Wishlisted products" -#: core/graphene/object_types.py:447 core/models.py:1208 +#: core/graphene/object_types.py:447 core/models.py:1240 msgid "wishlists" msgstr "Wishlists" @@ -1035,7 +1127,7 @@ msgstr "Wishlists" msgid "tagged products" msgstr "Tagged products" -#: core/graphene/object_types.py:458 core/models.py:291 core/models.py:952 +#: core/graphene/object_types.py:458 core/models.py:297 core/models.py:959 msgid "product tags" msgstr "Product tags" @@ -1181,8 +1273,8 @@ msgstr "Attribute of this value" msgid "the specific product associated with this attribute's value" msgstr "The specific product associated with this attribute's value" -#: core/models.py:145 core/models.py:851 core/models.py:978 -#: core/models.py:1147 +#: core/models.py:145 core/models.py:858 core/models.py:1010 +#: core/models.py:1179 msgid "associated product" msgstr "Associated product" @@ -1226,272 +1318,280 @@ msgstr "Add a detailed description for this category" msgid "category description" msgstr "Category description" -#: core/models.py:229 +#: core/models.py:212 +msgid "tags that help describe or group this category" +msgstr "tags that help describe or group this category" + +#: core/models.py:213 core/models.py:984 +msgid "category tags" +msgstr "category tags" + +#: core/models.py:235 msgid "name of this brand" msgstr "Name of this brand" -#: core/models.py:230 +#: core/models.py:236 msgid "brand name" msgstr "Brand name" -#: core/models.py:237 +#: core/models.py:243 msgid "upload a logo representing this brand" msgstr "Upload a logo representing this brand" -#: core/models.py:239 +#: core/models.py:245 msgid "brand small image" msgstr "Brand small image" -#: core/models.py:245 +#: core/models.py:251 msgid "upload a big logo representing this brand" msgstr "Upload a big logo representing this brand" -#: core/models.py:247 +#: core/models.py:253 msgid "brand big image" msgstr "Brand big image" -#: core/models.py:252 +#: core/models.py:258 msgid "add a detailed description of the brand" msgstr "Add a detailed description of the brand" -#: core/models.py:253 +#: core/models.py:259 msgid "brand description" msgstr "Brand description" -#: core/models.py:258 +#: core/models.py:264 msgid "optional categories that this brand is associated with" msgstr "Optional categories that this brand is associated with" -#: core/models.py:259 +#: core/models.py:265 msgid "associated categories" msgstr "Categories" -#: core/models.py:276 +#: core/models.py:282 msgid "category this product belongs to" msgstr "Category this product belongs to" -#: core/models.py:284 +#: core/models.py:290 msgid "optionally associate this product with a brand" msgstr "Optionally associate this product with a brand" -#: core/models.py:290 +#: core/models.py:296 msgid "tags that help describe or group this product" msgstr "Tags that help describe or group this product" -#: core/models.py:295 +#: core/models.py:301 msgid "indicates whether this product is digitally delivered" msgstr "Indicates whether this product is digitally delivered" -#: core/models.py:296 +#: core/models.py:302 msgid "is product digital" msgstr "Is product digital" -#: core/models.py:302 +#: core/models.py:308 msgid "provide a clear identifying name for the product" msgstr "Provide a clear identifying name for the product" -#: core/models.py:303 +#: core/models.py:309 msgid "product name" msgstr "Product name" -#: core/models.py:308 core/models.py:1109 +#: core/models.py:314 core/models.py:1141 msgid "add a detailed description of the product" msgstr "Add a detailed description of the product" -#: core/models.py:309 +#: core/models.py:315 msgid "product description" msgstr "Product description" -#: core/models.py:316 +#: core/models.py:322 msgid "part number for this product" msgstr "Part number for this product" -#: core/models.py:317 +#: core/models.py:323 msgid "part number" msgstr "Part number" -#: core/models.py:381 +#: core/models.py:387 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Stores credentials and endpoints required for vendor's API communication" -#: core/models.py:382 +#: core/models.py:388 msgid "authentication info" msgstr "Authentication info" -#: core/models.py:387 +#: core/models.py:393 msgid "define the markup for products retrieved from this vendor" msgstr "Define the markup for products retrieved from this vendor" -#: core/models.py:388 +#: core/models.py:394 msgid "vendor markup percentage" msgstr "Vendor markup percentage" -#: core/models.py:392 +#: core/models.py:398 msgid "name of this vendor" msgstr "Name of this vendor" -#: core/models.py:393 +#: core/models.py:399 msgid "vendor name" msgstr "Vendor name" -#: core/models.py:416 +#: core/models.py:422 msgid "user-provided comments about their experience with the product" msgstr "User-provided comments about their experience with the product" -#: core/models.py:417 +#: core/models.py:423 msgid "feedback comments" msgstr "Feedback comments" -#: core/models.py:424 +#: core/models.py:430 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "References the specific product in an order that this feedback is about" -#: core/models.py:425 +#: core/models.py:431 msgid "related order product" msgstr "Related order product" -#: core/models.py:430 +#: core/models.py:436 msgid "user-assigned rating for the product" msgstr "User-assigned rating for the product" -#: core/models.py:431 +#: core/models.py:437 msgid "product rating" msgstr "Product rating" -#: core/models.py:439 +#: core/models.py:445 msgid "feedback" msgstr "Feedback" -#: core/models.py:452 +#: core/models.py:458 msgid "the billing address used for this order" msgstr "The billing address used for this order" -#: core/models.py:460 +#: core/models.py:466 msgid "optional promo code applied to this order" msgstr "Optional promo code applied to this order" -#: core/models.py:461 +#: core/models.py:467 msgid "applied promo code" msgstr "Applied promo code" -#: core/models.py:469 +#: core/models.py:475 msgid "the shipping address used for this order" msgstr "The shipping address used for this order" -#: core/models.py:470 +#: core/models.py:476 msgid "shipping address" msgstr "Shipping address" -#: core/models.py:476 +#: core/models.py:482 msgid "current status of the order in its lifecycle" msgstr "Current status of the order in its lifecycle" -#: core/models.py:477 +#: core/models.py:483 msgid "order status" msgstr "Order status" -#: core/models.py:482 core/models.py:828 +#: core/models.py:488 core/models.py:835 msgid "json structure of notifications to display to users" msgstr "" "JSON structure of notifications to display to users, in admin UI the table-" "view is used" -#: core/models.py:488 +#: core/models.py:494 msgid "json representation of order attributes for this order" msgstr "JSON representation of order attributes for this order" -#: core/models.py:494 +#: core/models.py:500 msgid "the user who placed the order" msgstr "The user who placed the order" -#: core/models.py:495 +#: core/models.py:501 msgid "user" msgstr "User" -#: core/models.py:501 +#: core/models.py:507 msgid "the timestamp when the order was finalized" msgstr "The timestamp when the order was finalized" -#: core/models.py:502 +#: core/models.py:508 msgid "buy time" msgstr "Buy time" -#: core/models.py:509 +#: core/models.py:515 msgid "a human-readable identifier for the order" msgstr "A human-readable identifier for the order" -#: core/models.py:510 +#: core/models.py:516 msgid "human readable id" msgstr "human-readable ID" -#: core/models.py:516 +#: core/models.py:522 msgid "order" msgstr "Order" -#: core/models.py:531 +#: core/models.py:537 msgid "a user must have only one pending order at a time" msgstr "A user must have only one pending order at a time!" -#: core/models.py:559 +#: core/models.py:566 msgid "you cannot add products to an order that is not a pending one" msgstr "You cannot add products to an order that is not a pending one" -#: core/models.py:564 +#: core/models.py:571 msgid "you cannot add inactive products to order" msgstr "You cannot add inactive products to order" -#: core/models.py:581 +#: core/models.py:588 msgid "you cannot add more products than available in stock" msgstr "You cannot add more products than available in stock" -#: core/models.py:590 core/models.py:610 core/models.py:634 -#: core/models.py:1218 core/models.py:1230 +#: core/models.py:597 core/models.py:617 core/models.py:641 +#: core/models.py:1250 core/models.py:1262 #, python-brace-format msgid "{name} does not exist: {product_uuid}" msgstr "{name} does not exist: {product_uuid}" -#: core/models.py:594 core/models.py:618 core/models.py:626 +#: core/models.py:601 core/models.py:625 core/models.py:633 msgid "you cannot remove products from an order that is not a pending one" msgstr "You cannot remove products from an order that is not a pending one" -#: core/models.py:614 +#: core/models.py:621 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} does not exist with query <{query}>" -#: core/models.py:645 +#: core/models.py:652 msgid "promocode does not exist" msgstr "Promocode does not exist" -#: core/models.py:654 +#: core/models.py:661 msgid "you can only buy physical products with shipping address specified" msgstr "You can only buy physical products with shipping address specified!" -#: core/models.py:673 +#: core/models.py:680 msgid "address does not exist" msgstr "Address does not exist" -#: core/models.py:684 core/models.py:727 +#: core/models.py:691 core/models.py:734 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "You can not purchase at this moment, please try again in a few minutes." -#: core/models.py:687 +#: core/models.py:694 msgid "invalid force value" msgstr "Invalid force value" -#: core/models.py:692 core/models.py:730 +#: core/models.py:699 core/models.py:737 msgid "you cannot purchase an empty order!" msgstr "You cannot purchase an empty order!" -#: core/models.py:707 +#: core/models.py:714 msgid "insufficient funds to complete the order" msgstr "Insufficient funds to complete the order" -#: core/models.py:739 +#: core/models.py:746 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -1499,195 +1599,199 @@ msgstr "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" -#: core/models.py:748 +#: core/models.py:755 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "Invalid payment method: {payment_method} from {available_payment_methods}!" -#: core/models.py:816 +#: core/models.py:823 msgid "the price paid by the customer for this product at purchase time" msgstr "The price paid by the customer for this product at purchase time" -#: core/models.py:817 +#: core/models.py:824 msgid "purchase price at order time" msgstr "Purchase price at order time" -#: core/models.py:822 +#: core/models.py:829 msgid "internal comments for admins about this ordered product" msgstr "Internal comments for admins about this ordered product" -#: core/models.py:823 +#: core/models.py:830 msgid "internal comments" msgstr "Internal comments" -#: core/models.py:829 +#: core/models.py:836 msgid "user notifications" msgstr "User notifications" -#: core/models.py:834 +#: core/models.py:841 msgid "json representation of this item's attributes" msgstr "JSON representation of this item's attributes" -#: core/models.py:835 +#: core/models.py:842 msgid "ordered product attributes" msgstr "Ordered product attributes" -#: core/models.py:840 +#: core/models.py:847 msgid "reference to the parent order that contains this product" msgstr "Reference to the parent order that contains this product" -#: core/models.py:841 +#: core/models.py:848 msgid "parent order" msgstr "Parent order" -#: core/models.py:850 +#: core/models.py:857 msgid "the specific product associated with this order line" msgstr "The specific product associated with this order line" -#: core/models.py:857 +#: core/models.py:864 msgid "quantity of this specific product in the order" msgstr "Quantity of this specific product in the order" -#: core/models.py:858 +#: core/models.py:865 msgid "product quantity" msgstr "Product quantity" -#: core/models.py:865 +#: core/models.py:872 msgid "current status of this product in the order" msgstr "Current status of this product in the order" -#: core/models.py:866 +#: core/models.py:873 msgid "product line status" msgstr "Product line status" -#: core/models.py:918 +#: core/models.py:925 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "wrong action specified for feedback: {action}" -#: core/models.py:926 +#: core/models.py:933 msgid "you cannot feedback an order which is not received" msgstr "you cannot feedback an order which is not received" -#: core/models.py:937 +#: core/models.py:944 core/models.py:969 msgid "internal tag identifier for the product tag" msgstr "Internal tag identifier for the product tag" -#: core/models.py:938 +#: core/models.py:945 core/models.py:970 msgid "tag name" msgstr "Tag name" -#: core/models.py:942 +#: core/models.py:949 core/models.py:974 msgid "user-friendly name for the product tag" msgstr "User-friendly name for the product tag" -#: core/models.py:943 +#: core/models.py:950 core/models.py:975 msgid "tag display name" msgstr "Tag display name" -#: core/models.py:951 +#: core/models.py:958 msgid "product tag" msgstr "Product tag" -#: core/models.py:960 +#: core/models.py:983 +msgid "category tag" +msgstr "category tag" + +#: core/models.py:992 msgid "provide alternative text for the image for accessibility" msgstr "Provide alternative text for the image for accessibility" -#: core/models.py:961 +#: core/models.py:993 msgid "image alt text" msgstr "Image alt text" -#: core/models.py:964 +#: core/models.py:996 msgid "upload the image file for this product" msgstr "Upload the image file for this product" -#: core/models.py:965 core/models.py:990 +#: core/models.py:997 core/models.py:1022 msgid "product image" msgstr "Product image" -#: core/models.py:971 +#: core/models.py:1003 msgid "determines the order in which images are displayed" msgstr "Determines the order in which images are displayed" -#: core/models.py:972 +#: core/models.py:1004 msgid "display priority" msgstr "Display priority" -#: core/models.py:977 +#: core/models.py:1009 msgid "the product that this image represents" msgstr "The product that this image represents" -#: core/models.py:991 +#: core/models.py:1023 msgid "product images" msgstr "Product images" -#: core/models.py:1001 +#: core/models.py:1033 msgid "unique code used by a user to redeem a discount" msgstr "Unique code used by a user to redeem a discount" -#: core/models.py:1002 +#: core/models.py:1034 msgid "promo code identifier" msgstr "Promo code identifier" -#: core/models.py:1009 +#: core/models.py:1041 msgid "fixed discount amount applied if percent is not used" msgstr "Fixed discount amount applied if percent is not used" -#: core/models.py:1010 +#: core/models.py:1042 msgid "fixed discount amount" msgstr "Fixed discount amount" -#: core/models.py:1016 +#: core/models.py:1048 msgid "percentage discount applied if fixed amount is not used" msgstr "Percentage discount applied if fixed amount is not used" -#: core/models.py:1017 +#: core/models.py:1049 msgid "percentage discount" msgstr "Percentage discount" -#: core/models.py:1022 +#: core/models.py:1054 msgid "timestamp when the promocode expires" msgstr "Timestamp when the promocode expires" -#: core/models.py:1023 +#: core/models.py:1055 msgid "end validity time" msgstr "End validity time" -#: core/models.py:1028 +#: core/models.py:1060 msgid "timestamp from which this promocode is valid" msgstr "Timestamp from which this promocode is valid" -#: core/models.py:1029 +#: core/models.py:1061 msgid "start validity time" msgstr "Start validity time" -#: core/models.py:1034 +#: core/models.py:1066 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "Timestamp when the promocode was used, blank if not used yet" -#: core/models.py:1035 +#: core/models.py:1067 msgid "usage timestamp" msgstr "Usage timestamp" -#: core/models.py:1040 +#: core/models.py:1072 msgid "user assigned to this promocode if applicable" msgstr "User assigned to this promocode if applicable" -#: core/models.py:1041 +#: core/models.py:1073 msgid "assigned user" msgstr "Assigned user" -#: core/models.py:1048 +#: core/models.py:1080 msgid "promo code" msgstr "Promo code" -#: core/models.py:1049 +#: core/models.py:1081 msgid "promo codes" msgstr "Promo codes" -#: core/models.py:1056 +#: core/models.py:1088 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -1695,196 +1799,196 @@ msgstr "" "Only one type of discount should be defined (amount or percent), but not " "both or neither." -#: core/models.py:1071 +#: core/models.py:1103 msgid "promocode already used" msgstr "Promocode has been used already" -#: core/models.py:1085 +#: core/models.py:1117 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Invalid discount type for promocode {self.uuid}" -#: core/models.py:1097 +#: core/models.py:1129 msgid "percentage discount for the selected products" msgstr "Percentage discount for the selected products" -#: core/models.py:1098 +#: core/models.py:1130 msgid "discount percentage" msgstr "Discount percentage" -#: core/models.py:1103 +#: core/models.py:1135 msgid "provide a unique name for this promotion" msgstr "Provide a unique name for this promotion" -#: core/models.py:1104 +#: core/models.py:1136 msgid "promotion name" msgstr "Promotion name" -#: core/models.py:1110 +#: core/models.py:1142 msgid "promotion description" msgstr "Promotion description" -#: core/models.py:1115 +#: core/models.py:1147 msgid "select which products are included in this promotion" msgstr "Select which products are included in this promotion" -#: core/models.py:1116 +#: core/models.py:1148 msgid "included products" msgstr "Included products" -#: core/models.py:1120 +#: core/models.py:1152 msgid "promotion" msgstr "Promotion" -#: core/models.py:1135 +#: core/models.py:1167 msgid "the vendor supplying this product stock" msgstr "The vendor supplying this product stock" -#: core/models.py:1136 +#: core/models.py:1168 msgid "associated vendor" msgstr "Associated vendor" -#: core/models.py:1140 +#: core/models.py:1172 msgid "final price to the customer after markups" msgstr "Final price to the customer after markups" -#: core/models.py:1141 +#: core/models.py:1173 msgid "selling price" msgstr "Selling price" -#: core/models.py:1146 +#: core/models.py:1178 msgid "the product associated with this stock entry" msgstr "The product associated with this stock entry" -#: core/models.py:1154 +#: core/models.py:1186 msgid "the price paid to the vendor for this product" msgstr "The price paid to the vendor for this product" -#: core/models.py:1155 +#: core/models.py:1187 msgid "vendor purchase price" msgstr "Vendor purchase price" -#: core/models.py:1159 +#: core/models.py:1191 msgid "available quantity of the product in stock" msgstr "Available quantity of the product in stock" -#: core/models.py:1160 +#: core/models.py:1192 msgid "quantity in stock" msgstr "Quantity in stock" -#: core/models.py:1164 +#: core/models.py:1196 msgid "vendor-assigned SKU for identifying the product" msgstr "Vendor-assigned SKU for identifying the product" -#: core/models.py:1165 +#: core/models.py:1197 msgid "vendor sku" msgstr "Vendor's SKU" -#: core/models.py:1171 +#: core/models.py:1203 msgid "digital file associated with this stock if applicable" msgstr "Digital file associated with this stock if applicable" -#: core/models.py:1172 +#: core/models.py:1204 msgid "digital file" msgstr "Digital file" -#: core/models.py:1181 +#: core/models.py:1213 msgid "stock entries" msgstr "Stock entries" -#: core/models.py:1190 +#: core/models.py:1222 msgid "products that the user has marked as wanted" msgstr "Products that the user has marked as wanted" -#: core/models.py:1198 +#: core/models.py:1230 msgid "user who owns this wishlist" msgstr "User who owns this wishlist" -#: core/models.py:1199 +#: core/models.py:1231 msgid "wishlist owner" msgstr "Wishlist's Owner" -#: core/models.py:1207 +#: core/models.py:1239 msgid "wishlist" msgstr "Wishlist" -#: core/models.py:1252 +#: core/models.py:1284 msgid "download" msgstr "Download" -#: core/models.py:1253 +#: core/models.py:1285 msgid "downloads" msgstr "Downloads" -#: core/models.py:1261 +#: core/models.py:1293 msgid "you can not download a digital asset for a non-finished order" msgstr "You can not download a digital asset for a non-finished order" -#: core/models.py:1273 +#: core/models.py:1305 msgid "documentary" msgstr "Documentary" -#: core/models.py:1274 +#: core/models.py:1306 msgid "documentaries" msgstr "Documentaries" -#: core/models.py:1284 +#: core/models.py:1316 msgid "unresolved" msgstr "Unresolved" -#: core/models.py:1293 +#: core/models.py:1325 msgid "address line for the customer" msgstr "Address line for the customer" -#: core/models.py:1294 +#: core/models.py:1326 msgid "address line" msgstr "Address line" -#: core/models.py:1296 +#: core/models.py:1328 msgid "street" msgstr "Street" -#: core/models.py:1297 +#: core/models.py:1329 msgid "district" msgstr "District" -#: core/models.py:1298 +#: core/models.py:1330 msgid "city" msgstr "City" -#: core/models.py:1299 +#: core/models.py:1331 msgid "region" msgstr "Region" -#: core/models.py:1300 +#: core/models.py:1332 msgid "postal code" msgstr "Postal code" -#: core/models.py:1301 +#: core/models.py:1333 msgid "country" msgstr "Country" -#: core/models.py:1304 +#: core/models.py:1336 msgid "geolocation point: (longitude, latitude)" msgstr "Geolocation Point(Longitude, Latitude)" -#: core/models.py:1307 +#: core/models.py:1339 msgid "full JSON response from geocoder for this address" msgstr "Full JSON response from geocoder for this address" -#: core/models.py:1309 +#: core/models.py:1341 msgid "stored JSON response from the geocoding service" msgstr "Stored JSON response from the geocoding service" -#: core/models.py:1316 +#: core/models.py:1348 msgid "address" msgstr "Address" -#: core/models.py:1317 +#: core/models.py:1349 msgid "addresses" msgstr "Adresses" -#: core/serializers/utility.py:76 +#: core/serializers/utility.py:77 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" @@ -2122,7 +2226,7 @@ msgstr "You can only download the digital asset once" msgid "favicon not found" msgstr "favicon not found" -#: core/viewsets.py:680 +#: core/viewsets.py:677 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Geocoding error: {e}" diff --git a/core/locale/en_US/LC_MESSAGES/django.mo b/core/locale/en_US/LC_MESSAGES/django.mo index 8b31d42a..3685240b 100644 Binary files a/core/locale/en_US/LC_MESSAGES/django.mo and b/core/locale/en_US/LC_MESSAGES/django.mo differ diff --git a/core/locale/en_US/LC_MESSAGES/django.po b/core/locale/en_US/LC_MESSAGES/django.po index 6f7a2c39..010fba3a 100644 --- a/core/locale/en_US/LC_MESSAGES/django.po +++ b/core/locale/en_US/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-08 19:42+0100\n" +"POT-Creation-Date: 2025-06-10 03:32+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -81,7 +81,7 @@ msgstr "Image" msgid "images" msgstr "Images" -#: core/admin.py:162 core/models.py:1180 +#: core/admin.py:162 core/models.py:1212 msgid "stock" msgstr "Stock" @@ -109,11 +109,11 @@ msgstr "Basic Info" msgid "important dates" msgstr "Important dates" -#: core/admin.py:253 core/models.py:874 +#: core/admin.py:253 core/models.py:881 msgid "order product" msgstr "Order Product" -#: core/admin.py:254 core/graphene/object_types.py:262 core/models.py:875 +#: core/admin.py:254 core/graphene/object_types.py:262 core/models.py:882 msgid "order products" msgstr "Order Products" @@ -731,6 +731,98 @@ msgstr "add or remove feedback on an order–product relation" msgid "no search term provided." msgstr "No search term provided." +#: core/filters.py:37 core/filters.py:357 +msgid "UUID" +msgstr "UUID" + +#: core/filters.py:38 core/filters.py:309 core/filters.py:340 +msgid "Name" +msgstr "Name" + +#: core/filters.py:39 core/filters.py:341 +msgid "Categories" +msgstr "Categories" + +#: core/filters.py:44 +msgid "Categories Slugs" +msgstr "Categories Slugs" + +#: core/filters.py:45 core/filters.py:312 +msgid "Tags" +msgstr "Tags" + +#: core/filters.py:46 +msgid "Min Price" +msgstr "Min Price" + +#: core/filters.py:47 +msgid "Max Price" +msgstr "Max Price" + +#: core/filters.py:48 +msgid "Is Active" +msgstr "Is Active" + +#: core/filters.py:49 +msgid "Brand" +msgstr "Brand" + +#: core/filters.py:50 +msgid "Attributes" +msgstr "Attributes" + +#: core/filters.py:51 +msgid "Quantity" +msgstr "Quantity" + +#: core/filters.py:52 core/filters.py:311 +msgid "Slug" +msgstr "Slug" + +#: core/filters.py:53 +msgid "Is Digital" +msgstr "Is Digital" + +#: core/filters.py:56 +msgid "Include sub-categories" +msgstr "Include sub-categories" + +#: core/filters.py:245 +msgid "Search (ID, product name or part number)" +msgstr "Search (ID, product name or part number)" + +#: core/filters.py:248 +msgid "Bought after (inclusive)" +msgstr "Bought after (inclusive)" + +#: core/filters.py:249 +msgid "Bought before (inclusive)" +msgstr "Bought before (inclusive)" + +#: core/filters.py:252 core/filters.py:295 +msgid "User email" +msgstr "User email" + +#: core/filters.py:253 core/filters.py:296 core/filters.py:359 +msgid "User UUID" +msgstr "User UUID" + +#: core/filters.py:254 +msgid "Status" +msgstr "Status" + +#: core/filters.py:255 +msgid "Human Readable ID" +msgstr "Human Readable ID" + +#: core/filters.py:310 +msgid "Parent" +msgstr "Parent" + +#: core/filters.py:358 +msgid "Product UUID" +msgstr "Product UUID" + #: core/graphene/mutations.py:38 msgid "key to look for in or set into the cache" msgstr "Key to look for in or set into the cache" @@ -782,7 +874,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "Please provide either order_uuid or order_hr_id - mutually exclusive!" #: core/graphene/mutations.py:225 core/graphene/mutations.py:441 -#: core/graphene/mutations.py:475 core/viewsets.py:348 +#: core/graphene/mutations.py:475 core/viewsets.py:345 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Wrong type came from order.buy() method: {type(instance)!s}" @@ -836,7 +928,7 @@ msgstr "" msgid "original address string provided by the user" msgstr "Original address string provided by the user" -#: core/graphene/mutations.py:572 core/viewsets.py:238 core/viewsets.py:351 +#: core/graphene/mutations.py:572 core/viewsets.py:240 core/viewsets.py:348 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} does not exist: {uuid}" @@ -850,7 +942,7 @@ msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - works like a charm" #: core/graphene/object_types.py:43 core/graphene/object_types.py:245 -#: core/graphene/object_types.py:286 core/models.py:126 core/models.py:489 +#: core/graphene/object_types.py:286 core/models.py:126 core/models.py:495 msgid "attributes" msgstr "Attributes" @@ -863,11 +955,11 @@ msgid "groups of attributes" msgstr "Groups of attributes" #: core/graphene/object_types.py:76 core/graphene/object_types.py:104 -#: core/graphene/object_types.py:132 core/models.py:90 core/models.py:220 +#: core/graphene/object_types.py:132 core/models.py:90 core/models.py:226 msgid "categories" msgstr "Categories" -#: core/graphene/object_types.py:83 core/models.py:267 +#: core/graphene/object_types.py:83 core/models.py:273 msgid "brands" msgstr "Brands" @@ -890,7 +982,7 @@ msgid "" msgstr "" "Minimum and maximum prices for products in this category, if available." -#: core/graphene/object_types.py:202 core/models.py:404 +#: core/graphene/object_types.py:202 core/models.py:410 msgid "vendors" msgstr "Vendors" @@ -915,7 +1007,7 @@ msgid "represents feedback from a user." msgstr "Represents feedback from a user." #: core/graphene/object_types.py:246 core/graphene/object_types.py:287 -#: core/models.py:483 +#: core/models.py:489 msgid "notifications" msgstr "Notifications" @@ -927,7 +1019,7 @@ msgstr "Download url for this order product if applicable" msgid "a list of order products in this order" msgstr "A list of order products in this order" -#: core/graphene/object_types.py:278 core/models.py:453 +#: core/graphene/object_types.py:278 core/models.py:459 msgid "billing address" msgstr "Billing address" @@ -951,7 +1043,7 @@ msgstr "Total quantity of products in order" msgid "are all products in the order digital" msgstr "Are all of the products in the order digital" -#: core/graphene/object_types.py:305 core/models.py:517 +#: core/graphene/object_types.py:305 core/models.py:523 msgid "orders" msgstr "Orders" @@ -963,15 +1055,15 @@ msgstr "Image URL" msgid "product's images" msgstr "Product's images" -#: core/graphene/object_types.py:335 core/models.py:219 core/models.py:277 +#: core/graphene/object_types.py:335 core/models.py:225 core/models.py:283 msgid "category" msgstr "Category" -#: core/graphene/object_types.py:337 core/models.py:440 +#: core/graphene/object_types.py:337 core/models.py:446 msgid "feedbacks" msgstr "Feedbacks" -#: core/graphene/object_types.py:338 core/models.py:266 core/models.py:285 +#: core/graphene/object_types.py:338 core/models.py:272 core/models.py:291 msgid "brand" msgstr "Brand" @@ -991,7 +1083,7 @@ msgstr "Quantity" msgid "number of feedbacks" msgstr "Number of feedbacks" -#: core/graphene/object_types.py:360 core/models.py:329 +#: core/graphene/object_types.py:360 core/models.py:335 msgid "products" msgstr "Products" @@ -1003,15 +1095,15 @@ msgstr "Promocodes" msgid "products on sale" msgstr "Products on sale" -#: core/graphene/object_types.py:425 core/models.py:1121 +#: core/graphene/object_types.py:425 core/models.py:1153 msgid "promotions" msgstr "Promotions" -#: core/graphene/object_types.py:429 core/models.py:403 +#: core/graphene/object_types.py:429 core/models.py:409 msgid "vendor" msgstr "Vendor" -#: core/graphene/object_types.py:430 core/models.py:328 +#: core/graphene/object_types.py:430 core/models.py:334 #: core/templates/digital_order_created_email.html:107 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:93 @@ -1019,11 +1111,11 @@ msgstr "Vendor" msgid "product" msgstr "Product" -#: core/graphene/object_types.py:441 core/models.py:1191 +#: core/graphene/object_types.py:441 core/models.py:1223 msgid "wishlisted products" msgstr "Wishlisted products" -#: core/graphene/object_types.py:447 core/models.py:1208 +#: core/graphene/object_types.py:447 core/models.py:1240 msgid "wishlists" msgstr "Wishlists" @@ -1031,7 +1123,7 @@ msgstr "Wishlists" msgid "tagged products" msgstr "Tagged products" -#: core/graphene/object_types.py:458 core/models.py:291 core/models.py:952 +#: core/graphene/object_types.py:458 core/models.py:297 core/models.py:959 msgid "product tags" msgstr "Product tags" @@ -1177,8 +1269,8 @@ msgstr "Attribute of this value" msgid "the specific product associated with this attribute's value" msgstr "The specific product associated with this attribute's value" -#: core/models.py:145 core/models.py:851 core/models.py:978 -#: core/models.py:1147 +#: core/models.py:145 core/models.py:858 core/models.py:1010 +#: core/models.py:1179 msgid "associated product" msgstr "Associated product" @@ -1222,272 +1314,280 @@ msgstr "Add a detailed description for this category" msgid "category description" msgstr "Category description" -#: core/models.py:229 +#: core/models.py:212 +msgid "tags that help describe or group this category" +msgstr "tags that help describe or group this category" + +#: core/models.py:213 core/models.py:984 +msgid "category tags" +msgstr "category tags" + +#: core/models.py:235 msgid "name of this brand" msgstr "Name of this brand" -#: core/models.py:230 +#: core/models.py:236 msgid "brand name" msgstr "Brand name" -#: core/models.py:237 +#: core/models.py:243 msgid "upload a logo representing this brand" msgstr "Upload a logo representing this brand" -#: core/models.py:239 +#: core/models.py:245 msgid "brand small image" msgstr "Brand small image" -#: core/models.py:245 +#: core/models.py:251 msgid "upload a big logo representing this brand" msgstr "Upload a big logo representing this brand" -#: core/models.py:247 +#: core/models.py:253 msgid "brand big image" msgstr "Brand big image" -#: core/models.py:252 +#: core/models.py:258 msgid "add a detailed description of the brand" msgstr "Add a detailed description of the brand" -#: core/models.py:253 +#: core/models.py:259 msgid "brand description" msgstr "Brand description" -#: core/models.py:258 +#: core/models.py:264 msgid "optional categories that this brand is associated with" msgstr "Optional categories that this brand is associated with" -#: core/models.py:259 +#: core/models.py:265 msgid "associated categories" msgstr "Categories" -#: core/models.py:276 +#: core/models.py:282 msgid "category this product belongs to" msgstr "Category this product belongs to" -#: core/models.py:284 +#: core/models.py:290 msgid "optionally associate this product with a brand" msgstr "Optionally associate this product with a brand" -#: core/models.py:290 +#: core/models.py:296 msgid "tags that help describe or group this product" msgstr "Tags that help describe or group this product" -#: core/models.py:295 +#: core/models.py:301 msgid "indicates whether this product is digitally delivered" msgstr "Indicates whether this product is digitally delivered" -#: core/models.py:296 +#: core/models.py:302 msgid "is product digital" msgstr "Is product digital" -#: core/models.py:302 +#: core/models.py:308 msgid "provide a clear identifying name for the product" msgstr "Provide a clear identifying name for the product" -#: core/models.py:303 +#: core/models.py:309 msgid "product name" msgstr "Product name" -#: core/models.py:308 core/models.py:1109 +#: core/models.py:314 core/models.py:1141 msgid "add a detailed description of the product" msgstr "Add a detailed description of the product" -#: core/models.py:309 +#: core/models.py:315 msgid "product description" msgstr "Product description" -#: core/models.py:316 +#: core/models.py:322 msgid "part number for this product" msgstr "Part number for this product" -#: core/models.py:317 +#: core/models.py:323 msgid "part number" msgstr "Part number" -#: core/models.py:381 +#: core/models.py:387 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Stores credentials and endpoints required for vendor's API communication" -#: core/models.py:382 +#: core/models.py:388 msgid "authentication info" msgstr "Authentication info" -#: core/models.py:387 +#: core/models.py:393 msgid "define the markup for products retrieved from this vendor" msgstr "Define the markup for products retrieved from this vendor" -#: core/models.py:388 +#: core/models.py:394 msgid "vendor markup percentage" msgstr "Vendor markup percentage" -#: core/models.py:392 +#: core/models.py:398 msgid "name of this vendor" msgstr "Name of this vendor" -#: core/models.py:393 +#: core/models.py:399 msgid "vendor name" msgstr "Vendor name" -#: core/models.py:416 +#: core/models.py:422 msgid "user-provided comments about their experience with the product" msgstr "User-provided comments about their experience with the product" -#: core/models.py:417 +#: core/models.py:423 msgid "feedback comments" msgstr "Feedback comments" -#: core/models.py:424 +#: core/models.py:430 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "References the specific product in an order that this feedback is about" -#: core/models.py:425 +#: core/models.py:431 msgid "related order product" msgstr "Related order product" -#: core/models.py:430 +#: core/models.py:436 msgid "user-assigned rating for the product" msgstr "User-assigned rating for the product" -#: core/models.py:431 +#: core/models.py:437 msgid "product rating" msgstr "Product rating" -#: core/models.py:439 +#: core/models.py:445 msgid "feedback" msgstr "Feedback" -#: core/models.py:452 +#: core/models.py:458 msgid "the billing address used for this order" msgstr "The billing address used for this order" -#: core/models.py:460 +#: core/models.py:466 msgid "optional promo code applied to this order" msgstr "Optional promo code applied to this order" -#: core/models.py:461 +#: core/models.py:467 msgid "applied promo code" msgstr "Applied promo code" -#: core/models.py:469 +#: core/models.py:475 msgid "the shipping address used for this order" msgstr "The shipping address used for this order" -#: core/models.py:470 +#: core/models.py:476 msgid "shipping address" msgstr "Shipping address" -#: core/models.py:476 +#: core/models.py:482 msgid "current status of the order in its lifecycle" msgstr "Current status of the order in its lifecycle" -#: core/models.py:477 +#: core/models.py:483 msgid "order status" msgstr "Order status" -#: core/models.py:482 core/models.py:828 +#: core/models.py:488 core/models.py:835 msgid "json structure of notifications to display to users" msgstr "" "JSON structure of notifications to display to users, in admin UI the table-" "view is used" -#: core/models.py:488 +#: core/models.py:494 msgid "json representation of order attributes for this order" msgstr "JSON representation of order attributes for this order" -#: core/models.py:494 +#: core/models.py:500 msgid "the user who placed the order" msgstr "The user who placed the order" -#: core/models.py:495 +#: core/models.py:501 msgid "user" msgstr "User" -#: core/models.py:501 +#: core/models.py:507 msgid "the timestamp when the order was finalized" msgstr "The timestamp when the order was finalized" -#: core/models.py:502 +#: core/models.py:508 msgid "buy time" msgstr "Buy time" -#: core/models.py:509 +#: core/models.py:515 msgid "a human-readable identifier for the order" msgstr "A human-readable identifier for the order" -#: core/models.py:510 +#: core/models.py:516 msgid "human readable id" msgstr "human-readable ID" -#: core/models.py:516 +#: core/models.py:522 msgid "order" msgstr "Order" -#: core/models.py:531 +#: core/models.py:537 msgid "a user must have only one pending order at a time" msgstr "A user must have only one pending order at a time!" -#: core/models.py:559 +#: core/models.py:566 msgid "you cannot add products to an order that is not a pending one" msgstr "You cannot add products to an order that is not a pending one" -#: core/models.py:564 +#: core/models.py:571 msgid "you cannot add inactive products to order" msgstr "You cannot add inactive products to order" -#: core/models.py:581 +#: core/models.py:588 msgid "you cannot add more products than available in stock" msgstr "You cannot add more products than available in stock" -#: core/models.py:590 core/models.py:610 core/models.py:634 -#: core/models.py:1218 core/models.py:1230 +#: core/models.py:597 core/models.py:617 core/models.py:641 +#: core/models.py:1250 core/models.py:1262 #, python-brace-format msgid "{name} does not exist: {product_uuid}" msgstr "{name} does not exist: {product_uuid}" -#: core/models.py:594 core/models.py:618 core/models.py:626 +#: core/models.py:601 core/models.py:625 core/models.py:633 msgid "you cannot remove products from an order that is not a pending one" msgstr "You cannot remove products from an order that is not a pending one" -#: core/models.py:614 +#: core/models.py:621 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} does not exist with query <{query}>" -#: core/models.py:645 +#: core/models.py:652 msgid "promocode does not exist" msgstr "Promocode does not exist" -#: core/models.py:654 +#: core/models.py:661 msgid "you can only buy physical products with shipping address specified" msgstr "You can only buy physical products with shipping address specified!" -#: core/models.py:673 +#: core/models.py:680 msgid "address does not exist" msgstr "Address does not exist" -#: core/models.py:684 core/models.py:727 +#: core/models.py:691 core/models.py:734 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "You can not purchase at this moment, please try again in a few minutes." -#: core/models.py:687 +#: core/models.py:694 msgid "invalid force value" msgstr "Invalid force value" -#: core/models.py:692 core/models.py:730 +#: core/models.py:699 core/models.py:737 msgid "you cannot purchase an empty order!" msgstr "You cannot purchase an empty order!" -#: core/models.py:707 +#: core/models.py:714 msgid "insufficient funds to complete the order" msgstr "Insufficient funds to complete the order" -#: core/models.py:739 +#: core/models.py:746 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -1495,195 +1595,199 @@ msgstr "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" -#: core/models.py:748 +#: core/models.py:755 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "Invalid payment method: {payment_method} from {available_payment_methods}!" -#: core/models.py:816 +#: core/models.py:823 msgid "the price paid by the customer for this product at purchase time" msgstr "The price paid by the customer for this product at purchase time" -#: core/models.py:817 +#: core/models.py:824 msgid "purchase price at order time" msgstr "Purchase price at order time" -#: core/models.py:822 +#: core/models.py:829 msgid "internal comments for admins about this ordered product" msgstr "Internal comments for admins about this ordered product" -#: core/models.py:823 +#: core/models.py:830 msgid "internal comments" msgstr "Internal comments" -#: core/models.py:829 +#: core/models.py:836 msgid "user notifications" msgstr "User notifications" -#: core/models.py:834 +#: core/models.py:841 msgid "json representation of this item's attributes" msgstr "JSON representation of this item's attributes" -#: core/models.py:835 +#: core/models.py:842 msgid "ordered product attributes" msgstr "Ordered product attributes" -#: core/models.py:840 +#: core/models.py:847 msgid "reference to the parent order that contains this product" msgstr "Reference to the parent order that contains this product" -#: core/models.py:841 +#: core/models.py:848 msgid "parent order" msgstr "Parent order" -#: core/models.py:850 +#: core/models.py:857 msgid "the specific product associated with this order line" msgstr "The specific product associated with this order line" -#: core/models.py:857 +#: core/models.py:864 msgid "quantity of this specific product in the order" msgstr "Quantity of this specific product in the order" -#: core/models.py:858 +#: core/models.py:865 msgid "product quantity" msgstr "Product quantity" -#: core/models.py:865 +#: core/models.py:872 msgid "current status of this product in the order" msgstr "Current status of this product in the order" -#: core/models.py:866 +#: core/models.py:873 msgid "product line status" msgstr "Product line status" -#: core/models.py:918 +#: core/models.py:925 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "wrong action specified for feedback: {action}" -#: core/models.py:926 +#: core/models.py:933 msgid "you cannot feedback an order which is not received" msgstr "you cannot feedback an order which is not received" -#: core/models.py:937 +#: core/models.py:944 core/models.py:969 msgid "internal tag identifier for the product tag" msgstr "Internal tag identifier for the product tag" -#: core/models.py:938 +#: core/models.py:945 core/models.py:970 msgid "tag name" msgstr "Tag name" -#: core/models.py:942 +#: core/models.py:949 core/models.py:974 msgid "user-friendly name for the product tag" msgstr "User-friendly name for the product tag" -#: core/models.py:943 +#: core/models.py:950 core/models.py:975 msgid "tag display name" msgstr "Tag display name" -#: core/models.py:951 +#: core/models.py:958 msgid "product tag" msgstr "Product tag" -#: core/models.py:960 +#: core/models.py:983 +msgid "category tag" +msgstr "category tag" + +#: core/models.py:992 msgid "provide alternative text for the image for accessibility" msgstr "Provide alternative text for the image for accessibility" -#: core/models.py:961 +#: core/models.py:993 msgid "image alt text" msgstr "Image alt text" -#: core/models.py:964 +#: core/models.py:996 msgid "upload the image file for this product" msgstr "Upload the image file for this product" -#: core/models.py:965 core/models.py:990 +#: core/models.py:997 core/models.py:1022 msgid "product image" msgstr "Product image" -#: core/models.py:971 +#: core/models.py:1003 msgid "determines the order in which images are displayed" msgstr "Determines the order in which images are displayed" -#: core/models.py:972 +#: core/models.py:1004 msgid "display priority" msgstr "Display priority" -#: core/models.py:977 +#: core/models.py:1009 msgid "the product that this image represents" msgstr "The product that this image represents" -#: core/models.py:991 +#: core/models.py:1023 msgid "product images" msgstr "Product images" -#: core/models.py:1001 +#: core/models.py:1033 msgid "unique code used by a user to redeem a discount" msgstr "Unique code used by a user to redeem a discount" -#: core/models.py:1002 +#: core/models.py:1034 msgid "promo code identifier" msgstr "Promo code identifier" -#: core/models.py:1009 +#: core/models.py:1041 msgid "fixed discount amount applied if percent is not used" msgstr "Fixed discount amount applied if percent is not used" -#: core/models.py:1010 +#: core/models.py:1042 msgid "fixed discount amount" msgstr "Fixed discount amount" -#: core/models.py:1016 +#: core/models.py:1048 msgid "percentage discount applied if fixed amount is not used" msgstr "Percentage discount applied if fixed amount is not used" -#: core/models.py:1017 +#: core/models.py:1049 msgid "percentage discount" msgstr "Percentage discount" -#: core/models.py:1022 +#: core/models.py:1054 msgid "timestamp when the promocode expires" msgstr "Timestamp when the promocode expires" -#: core/models.py:1023 +#: core/models.py:1055 msgid "end validity time" msgstr "End validity time" -#: core/models.py:1028 +#: core/models.py:1060 msgid "timestamp from which this promocode is valid" msgstr "Timestamp from which this promocode is valid" -#: core/models.py:1029 +#: core/models.py:1061 msgid "start validity time" msgstr "Start validity time" -#: core/models.py:1034 +#: core/models.py:1066 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "Timestamp when the promocode was used, blank if not used yet" -#: core/models.py:1035 +#: core/models.py:1067 msgid "usage timestamp" msgstr "Usage timestamp" -#: core/models.py:1040 +#: core/models.py:1072 msgid "user assigned to this promocode if applicable" msgstr "User assigned to this promocode if applicable" -#: core/models.py:1041 +#: core/models.py:1073 msgid "assigned user" msgstr "Assigned user" -#: core/models.py:1048 +#: core/models.py:1080 msgid "promo code" msgstr "Promo code" -#: core/models.py:1049 +#: core/models.py:1081 msgid "promo codes" msgstr "Promo codes" -#: core/models.py:1056 +#: core/models.py:1088 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -1691,196 +1795,196 @@ msgstr "" "Only one type of discount should be defined (amount or percent), but not " "both or neither." -#: core/models.py:1071 +#: core/models.py:1103 msgid "promocode already used" msgstr "Promocode has been used already" -#: core/models.py:1085 +#: core/models.py:1117 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Invalid discount type for promocode {self.uuid}" -#: core/models.py:1097 +#: core/models.py:1129 msgid "percentage discount for the selected products" msgstr "Percentage discount for the selected products" -#: core/models.py:1098 +#: core/models.py:1130 msgid "discount percentage" msgstr "Discount percentage" -#: core/models.py:1103 +#: core/models.py:1135 msgid "provide a unique name for this promotion" msgstr "Provide a unique name for this promotion" -#: core/models.py:1104 +#: core/models.py:1136 msgid "promotion name" msgstr "Promotion name" -#: core/models.py:1110 +#: core/models.py:1142 msgid "promotion description" msgstr "Promotion description" -#: core/models.py:1115 +#: core/models.py:1147 msgid "select which products are included in this promotion" msgstr "Select which products are included in this promotion" -#: core/models.py:1116 +#: core/models.py:1148 msgid "included products" msgstr "Included products" -#: core/models.py:1120 +#: core/models.py:1152 msgid "promotion" msgstr "Promotion" -#: core/models.py:1135 +#: core/models.py:1167 msgid "the vendor supplying this product stock" msgstr "The vendor supplying this product stock" -#: core/models.py:1136 +#: core/models.py:1168 msgid "associated vendor" msgstr "Associated vendor" -#: core/models.py:1140 +#: core/models.py:1172 msgid "final price to the customer after markups" msgstr "Final price to the customer after markups" -#: core/models.py:1141 +#: core/models.py:1173 msgid "selling price" msgstr "Selling price" -#: core/models.py:1146 +#: core/models.py:1178 msgid "the product associated with this stock entry" msgstr "The product associated with this stock entry" -#: core/models.py:1154 +#: core/models.py:1186 msgid "the price paid to the vendor for this product" msgstr "The price paid to the vendor for this product" -#: core/models.py:1155 +#: core/models.py:1187 msgid "vendor purchase price" msgstr "Vendor purchase price" -#: core/models.py:1159 +#: core/models.py:1191 msgid "available quantity of the product in stock" msgstr "Available quantity of the product in stock" -#: core/models.py:1160 +#: core/models.py:1192 msgid "quantity in stock" msgstr "Quantity in stock" -#: core/models.py:1164 +#: core/models.py:1196 msgid "vendor-assigned SKU for identifying the product" msgstr "Vendor-assigned SKU for identifying the product" -#: core/models.py:1165 +#: core/models.py:1197 msgid "vendor sku" msgstr "Vendor's SKU" -#: core/models.py:1171 +#: core/models.py:1203 msgid "digital file associated with this stock if applicable" msgstr "Digital file associated with this stock if applicable" -#: core/models.py:1172 +#: core/models.py:1204 msgid "digital file" msgstr "Digital file" -#: core/models.py:1181 +#: core/models.py:1213 msgid "stock entries" msgstr "Stock entries" -#: core/models.py:1190 +#: core/models.py:1222 msgid "products that the user has marked as wanted" msgstr "Products that the user has marked as wanted" -#: core/models.py:1198 +#: core/models.py:1230 msgid "user who owns this wishlist" msgstr "User who owns this wishlist" -#: core/models.py:1199 +#: core/models.py:1231 msgid "wishlist owner" msgstr "Wishlist's Owner" -#: core/models.py:1207 +#: core/models.py:1239 msgid "wishlist" msgstr "Wishlist" -#: core/models.py:1252 +#: core/models.py:1284 msgid "download" msgstr "Download" -#: core/models.py:1253 +#: core/models.py:1285 msgid "downloads" msgstr "Downloads" -#: core/models.py:1261 +#: core/models.py:1293 msgid "you can not download a digital asset for a non-finished order" msgstr "You can not download a digital asset for a non-finished order" -#: core/models.py:1273 +#: core/models.py:1305 msgid "documentary" msgstr "Documentary" -#: core/models.py:1274 +#: core/models.py:1306 msgid "documentaries" msgstr "Documentaries" -#: core/models.py:1284 +#: core/models.py:1316 msgid "unresolved" msgstr "Unresolved" -#: core/models.py:1293 +#: core/models.py:1325 msgid "address line for the customer" msgstr "Address line for the customer" -#: core/models.py:1294 +#: core/models.py:1326 msgid "address line" msgstr "Address line" -#: core/models.py:1296 +#: core/models.py:1328 msgid "street" msgstr "Street" -#: core/models.py:1297 +#: core/models.py:1329 msgid "district" msgstr "District" -#: core/models.py:1298 +#: core/models.py:1330 msgid "city" msgstr "City" -#: core/models.py:1299 +#: core/models.py:1331 msgid "region" msgstr "Region" -#: core/models.py:1300 +#: core/models.py:1332 msgid "postal code" msgstr "Postal code" -#: core/models.py:1301 +#: core/models.py:1333 msgid "country" msgstr "Country" -#: core/models.py:1304 +#: core/models.py:1336 msgid "geolocation point: (longitude, latitude)" msgstr "Geolocation Point(Longitude, Latitude)" -#: core/models.py:1307 +#: core/models.py:1339 msgid "full JSON response from geocoder for this address" msgstr "Full JSON response from geocoder for this address" -#: core/models.py:1309 +#: core/models.py:1341 msgid "stored JSON response from the geocoding service" msgstr "Stored JSON response from the geocoding service" -#: core/models.py:1316 +#: core/models.py:1348 msgid "address" msgstr "Address" -#: core/models.py:1317 +#: core/models.py:1349 msgid "addresses" msgstr "Adresses" -#: core/serializers/utility.py:76 +#: core/serializers/utility.py:77 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" @@ -2118,7 +2222,7 @@ msgstr "You can only download the digital asset once" msgid "favicon not found" msgstr "favicon not found" -#: core/viewsets.py:680 +#: core/viewsets.py:677 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Geocoding error: {e}" diff --git a/core/locale/es_ES/LC_MESSAGES/django.mo b/core/locale/es_ES/LC_MESSAGES/django.mo index f74ecf99..c3cfc0b3 100644 Binary files a/core/locale/es_ES/LC_MESSAGES/django.mo and b/core/locale/es_ES/LC_MESSAGES/django.mo differ diff --git a/core/locale/es_ES/LC_MESSAGES/django.po b/core/locale/es_ES/LC_MESSAGES/django.po index c2f88958..672b7629 100644 --- a/core/locale/es_ES/LC_MESSAGES/django.po +++ b/core/locale/es_ES/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-08 19:42+0100\n" +"POT-Creation-Date: 2025-06-10 03:32+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -83,7 +83,7 @@ msgstr "Imagen" msgid "images" msgstr "Imágenes" -#: core/admin.py:162 core/models.py:1180 +#: core/admin.py:162 core/models.py:1212 msgid "stock" msgstr "Stock" @@ -111,11 +111,11 @@ msgstr "Información básica" msgid "important dates" msgstr "Fechas importantes" -#: core/admin.py:253 core/models.py:874 +#: core/admin.py:253 core/models.py:881 msgid "order product" msgstr "Pedir un producto" -#: core/admin.py:254 core/graphene/object_types.py:262 core/models.py:875 +#: core/admin.py:254 core/graphene/object_types.py:262 core/models.py:882 msgid "order products" msgstr "Pedir productos" @@ -767,6 +767,98 @@ msgstr "añadir o eliminar comentarios en una relación pedido-producto" msgid "no search term provided." msgstr "No se proporciona ningún término de búsqueda." +#: core/filters.py:37 core/filters.py:357 +msgid "UUID" +msgstr "UUID" + +#: core/filters.py:38 core/filters.py:309 core/filters.py:340 +msgid "Name" +msgstr "Nombre" + +#: core/filters.py:39 core/filters.py:341 +msgid "Categories" +msgstr "Categorías" + +#: core/filters.py:44 +msgid "Categories Slugs" +msgstr "Categorías Babosas" + +#: core/filters.py:45 core/filters.py:312 +msgid "Tags" +msgstr "Etiquetas" + +#: core/filters.py:46 +msgid "Min Price" +msgstr "Precio mínimo" + +#: core/filters.py:47 +msgid "Max Price" +msgstr "Precio máximo" + +#: core/filters.py:48 +msgid "Is Active" +msgstr "Está activo" + +#: core/filters.py:49 +msgid "Brand" +msgstr "Marca" + +#: core/filters.py:50 +msgid "Attributes" +msgstr "Atributos" + +#: core/filters.py:51 +msgid "Quantity" +msgstr "Cantidad" + +#: core/filters.py:52 core/filters.py:311 +msgid "Slug" +msgstr "Babosa" + +#: core/filters.py:53 +msgid "Is Digital" +msgstr "Es Digital" + +#: core/filters.py:56 +msgid "Include sub-categories" +msgstr "Incluir subcategorías" + +#: core/filters.py:245 +msgid "Search (ID, product name or part number)" +msgstr "Búsqueda (ID, nombre del producto o número de pieza)" + +#: core/filters.py:248 +msgid "Bought after (inclusive)" +msgstr "Comprado después (inclusive)" + +#: core/filters.py:249 +msgid "Bought before (inclusive)" +msgstr "Comprado antes (inclusive)" + +#: core/filters.py:252 core/filters.py:295 +msgid "User email" +msgstr "Correo electrónico del usuario" + +#: core/filters.py:253 core/filters.py:296 core/filters.py:359 +msgid "User UUID" +msgstr "UUID de usuario" + +#: core/filters.py:254 +msgid "Status" +msgstr "Estado" + +#: core/filters.py:255 +msgid "Human Readable ID" +msgstr "Identificación legible" + +#: core/filters.py:310 +msgid "Parent" +msgstr "Padres" + +#: core/filters.py:358 +msgid "Product UUID" +msgstr "UUID del producto" + #: core/graphene/mutations.py:38 msgid "key to look for in or set into the cache" msgstr "Clave que hay que buscar o introducir en la caché" @@ -818,7 +910,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "Indique order_uuid o order_hr_id, ¡se excluyen mutuamente!" #: core/graphene/mutations.py:225 core/graphene/mutations.py:441 -#: core/graphene/mutations.py:475 core/viewsets.py:348 +#: core/graphene/mutations.py:475 core/viewsets.py:345 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" "Tipo incorrecto proveniente del método order.buy(): {type(instance)!s}" @@ -873,7 +965,7 @@ msgstr "" msgid "original address string provided by the user" msgstr "Cadena de dirección original proporcionada por el usuario" -#: core/graphene/mutations.py:572 core/viewsets.py:238 core/viewsets.py:351 +#: core/graphene/mutations.py:572 core/viewsets.py:240 core/viewsets.py:348 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} no existe: {uuid}" @@ -887,7 +979,7 @@ msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - funciona a las mil maravillas" #: core/graphene/object_types.py:43 core/graphene/object_types.py:245 -#: core/graphene/object_types.py:286 core/models.py:126 core/models.py:489 +#: core/graphene/object_types.py:286 core/models.py:126 core/models.py:495 msgid "attributes" msgstr "Atributos" @@ -900,11 +992,11 @@ msgid "groups of attributes" msgstr "Grupos de atributos" #: core/graphene/object_types.py:76 core/graphene/object_types.py:104 -#: core/graphene/object_types.py:132 core/models.py:90 core/models.py:220 +#: core/graphene/object_types.py:132 core/models.py:90 core/models.py:226 msgid "categories" msgstr "Categorías" -#: core/graphene/object_types.py:83 core/models.py:267 +#: core/graphene/object_types.py:83 core/models.py:273 msgid "brands" msgstr "Marcas" @@ -929,7 +1021,7 @@ msgstr "" "Precios mínimo y máximo de los productos de esta categoría, si están " "disponibles." -#: core/graphene/object_types.py:202 core/models.py:404 +#: core/graphene/object_types.py:202 core/models.py:410 msgid "vendors" msgstr "Vendedores" @@ -956,7 +1048,7 @@ msgid "represents feedback from a user." msgstr "Representa la opinión de un usuario." #: core/graphene/object_types.py:246 core/graphene/object_types.py:287 -#: core/models.py:483 +#: core/models.py:489 msgid "notifications" msgstr "Notificaciones" @@ -968,7 +1060,7 @@ msgstr "Descargar url para este producto de pedido si procede" msgid "a list of order products in this order" msgstr "Una lista de los productos del pedido" -#: core/graphene/object_types.py:278 core/models.py:453 +#: core/graphene/object_types.py:278 core/models.py:459 msgid "billing address" msgstr "Dirección de facturación" @@ -992,7 +1084,7 @@ msgstr "Cantidad total de productos del pedido" msgid "are all products in the order digital" msgstr "¿Están todos los productos en el pedido digital" -#: core/graphene/object_types.py:305 core/models.py:517 +#: core/graphene/object_types.py:305 core/models.py:523 msgid "orders" msgstr "Pedidos" @@ -1004,15 +1096,15 @@ msgstr "URL de la imagen" msgid "product's images" msgstr "Imágenes del producto" -#: core/graphene/object_types.py:335 core/models.py:219 core/models.py:277 +#: core/graphene/object_types.py:335 core/models.py:225 core/models.py:283 msgid "category" msgstr "Categoría" -#: core/graphene/object_types.py:337 core/models.py:440 +#: core/graphene/object_types.py:337 core/models.py:446 msgid "feedbacks" msgstr "Comentarios" -#: core/graphene/object_types.py:338 core/models.py:266 core/models.py:285 +#: core/graphene/object_types.py:338 core/models.py:272 core/models.py:291 msgid "brand" msgstr "Marca" @@ -1032,7 +1124,7 @@ msgstr "Cantidad" msgid "number of feedbacks" msgstr "Número de reacciones" -#: core/graphene/object_types.py:360 core/models.py:329 +#: core/graphene/object_types.py:360 core/models.py:335 msgid "products" msgstr "Productos" @@ -1044,15 +1136,15 @@ msgstr "Códigos promocionales" msgid "products on sale" msgstr "Productos a la venta" -#: core/graphene/object_types.py:425 core/models.py:1121 +#: core/graphene/object_types.py:425 core/models.py:1153 msgid "promotions" msgstr "Promociones" -#: core/graphene/object_types.py:429 core/models.py:403 +#: core/graphene/object_types.py:429 core/models.py:409 msgid "vendor" msgstr "Vendedor" -#: core/graphene/object_types.py:430 core/models.py:328 +#: core/graphene/object_types.py:430 core/models.py:334 #: core/templates/digital_order_created_email.html:107 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:93 @@ -1060,11 +1152,11 @@ msgstr "Vendedor" msgid "product" msgstr "Producto" -#: core/graphene/object_types.py:441 core/models.py:1191 +#: core/graphene/object_types.py:441 core/models.py:1223 msgid "wishlisted products" msgstr "Productos deseados" -#: core/graphene/object_types.py:447 core/models.py:1208 +#: core/graphene/object_types.py:447 core/models.py:1240 msgid "wishlists" msgstr "Listas de deseos" @@ -1072,7 +1164,7 @@ msgstr "Listas de deseos" msgid "tagged products" msgstr "Productos con etiqueta" -#: core/graphene/object_types.py:458 core/models.py:291 core/models.py:952 +#: core/graphene/object_types.py:458 core/models.py:297 core/models.py:959 msgid "product tags" msgstr "Etiquetas del producto" @@ -1219,8 +1311,8 @@ msgstr "Atributo de este valor" msgid "the specific product associated with this attribute's value" msgstr "El producto específico asociado al valor de este atributo" -#: core/models.py:145 core/models.py:851 core/models.py:978 -#: core/models.py:1147 +#: core/models.py:145 core/models.py:858 core/models.py:1010 +#: core/models.py:1179 msgid "associated product" msgstr "Producto asociado" @@ -1264,278 +1356,286 @@ msgstr "Añadir una descripción detallada para esta categoría" msgid "category description" msgstr "Descripción de la categoría" -#: core/models.py:229 +#: core/models.py:212 +msgid "tags that help describe or group this category" +msgstr "etiquetas que ayudan a describir o agrupar esta categoría" + +#: core/models.py:213 core/models.py:984 +msgid "category tags" +msgstr "etiquetas de categoría" + +#: core/models.py:235 msgid "name of this brand" msgstr "Nombre de esta marca" -#: core/models.py:230 +#: core/models.py:236 msgid "brand name" msgstr "Marca" -#: core/models.py:237 +#: core/models.py:243 msgid "upload a logo representing this brand" msgstr "Cargar un logotipo que represente a esta marca" -#: core/models.py:239 +#: core/models.py:245 msgid "brand small image" msgstr "Marca pequeña imagen" -#: core/models.py:245 +#: core/models.py:251 msgid "upload a big logo representing this brand" msgstr "Sube un logotipo grande que represente a esta marca" -#: core/models.py:247 +#: core/models.py:253 msgid "brand big image" msgstr "Gran imagen de marca" -#: core/models.py:252 +#: core/models.py:258 msgid "add a detailed description of the brand" msgstr "Añadir una descripción detallada de la marca" -#: core/models.py:253 +#: core/models.py:259 msgid "brand description" msgstr "Descripción de la marca" -#: core/models.py:258 +#: core/models.py:264 msgid "optional categories that this brand is associated with" msgstr "Categorías opcionales a las que se asocia esta marca" -#: core/models.py:259 +#: core/models.py:265 msgid "associated categories" msgstr "Categorías" -#: core/models.py:276 +#: core/models.py:282 msgid "category this product belongs to" msgstr "Categoría a la que pertenece este producto" -#: core/models.py:284 +#: core/models.py:290 msgid "optionally associate this product with a brand" msgstr "Si lo desea, puede asociar este producto a una marca" -#: core/models.py:290 +#: core/models.py:296 msgid "tags that help describe or group this product" msgstr "Etiquetas que ayudan a describir o agrupar este producto" -#: core/models.py:295 +#: core/models.py:301 msgid "indicates whether this product is digitally delivered" msgstr "Indica si este producto se entrega digitalmente" -#: core/models.py:296 +#: core/models.py:302 msgid "is product digital" msgstr "¿Es digital el producto?" -#: core/models.py:302 +#: core/models.py:308 msgid "provide a clear identifying name for the product" msgstr "Proporcionar un nombre que identifique claramente el producto" -#: core/models.py:303 +#: core/models.py:309 msgid "product name" msgstr "Nombre del producto" -#: core/models.py:308 core/models.py:1109 +#: core/models.py:314 core/models.py:1141 msgid "add a detailed description of the product" msgstr "Añada una descripción detallada del producto" -#: core/models.py:309 +#: core/models.py:315 msgid "product description" msgstr "Descripción del producto" -#: core/models.py:316 +#: core/models.py:322 msgid "part number for this product" msgstr "Número de pieza de este producto" -#: core/models.py:317 +#: core/models.py:323 msgid "part number" msgstr "Número de pieza" -#: core/models.py:381 +#: core/models.py:387 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Almacena las credenciales y los puntos finales necesarios para la " "comunicación API del proveedor" -#: core/models.py:382 +#: core/models.py:388 msgid "authentication info" msgstr "Información de autenticación" -#: core/models.py:387 +#: core/models.py:393 msgid "define the markup for products retrieved from this vendor" msgstr "" "Definir el margen de beneficio para los productos recuperados de este " "proveedor" -#: core/models.py:388 +#: core/models.py:394 msgid "vendor markup percentage" msgstr "Porcentaje de margen del vendedor" -#: core/models.py:392 +#: core/models.py:398 msgid "name of this vendor" msgstr "Nombre de este vendedor" -#: core/models.py:393 +#: core/models.py:399 msgid "vendor name" msgstr "Nombre del vendedor" -#: core/models.py:416 +#: core/models.py:422 msgid "user-provided comments about their experience with the product" msgstr "Comentarios de los usuarios sobre su experiencia con el producto" -#: core/models.py:417 +#: core/models.py:423 msgid "feedback comments" msgstr "Comentarios" -#: core/models.py:424 +#: core/models.py:430 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "Hace referencia al producto específico de un pedido sobre el que trata esta " "opinión" -#: core/models.py:425 +#: core/models.py:431 msgid "related order product" msgstr "Producto relacionado con el pedido" -#: core/models.py:430 +#: core/models.py:436 msgid "user-assigned rating for the product" msgstr "Valoración del producto asignada por el usuario" -#: core/models.py:431 +#: core/models.py:437 msgid "product rating" msgstr "Valoración del producto" -#: core/models.py:439 +#: core/models.py:445 msgid "feedback" msgstr "Comentarios" -#: core/models.py:452 +#: core/models.py:458 msgid "the billing address used for this order" msgstr "La dirección de facturación utilizada para este pedido" -#: core/models.py:460 +#: core/models.py:466 msgid "optional promo code applied to this order" msgstr "Código promocional opcional aplicado a este pedido" -#: core/models.py:461 +#: core/models.py:467 msgid "applied promo code" msgstr "Código promocional aplicado" -#: core/models.py:469 +#: core/models.py:475 msgid "the shipping address used for this order" msgstr "La dirección de envío utilizada para este pedido" -#: core/models.py:470 +#: core/models.py:476 msgid "shipping address" msgstr "Dirección de envío" -#: core/models.py:476 +#: core/models.py:482 msgid "current status of the order in its lifecycle" msgstr "Estado actual del pedido en su ciclo de vida" -#: core/models.py:477 +#: core/models.py:483 msgid "order status" msgstr "Estado del pedido" -#: core/models.py:482 core/models.py:828 +#: core/models.py:488 core/models.py:835 msgid "json structure of notifications to display to users" msgstr "" "Estructura JSON de las notificaciones para mostrar a los usuarios, en la " "interfaz de administración se utiliza la vista de tabla." -#: core/models.py:488 +#: core/models.py:494 msgid "json representation of order attributes for this order" msgstr "Representación JSON de los atributos de la orden para esta orden" -#: core/models.py:494 +#: core/models.py:500 msgid "the user who placed the order" msgstr "El usuario que realizó el pedido" -#: core/models.py:495 +#: core/models.py:501 msgid "user" msgstr "Usuario" -#: core/models.py:501 +#: core/models.py:507 msgid "the timestamp when the order was finalized" msgstr "Fecha de finalización de la orden" -#: core/models.py:502 +#: core/models.py:508 msgid "buy time" msgstr "Comprar tiempo" -#: core/models.py:509 +#: core/models.py:515 msgid "a human-readable identifier for the order" msgstr "Un identificador legible por el ser humano para la orden" -#: core/models.py:510 +#: core/models.py:516 msgid "human readable id" msgstr "ID legible por humanos" -#: core/models.py:516 +#: core/models.py:522 msgid "order" msgstr "Pida" -#: core/models.py:531 +#: core/models.py:537 msgid "a user must have only one pending order at a time" msgstr "Un usuario sólo puede tener una orden pendiente a la vez." -#: core/models.py:559 +#: core/models.py:566 msgid "you cannot add products to an order that is not a pending one" msgstr "No puede añadir productos a un pedido que no esté pendiente" -#: core/models.py:564 +#: core/models.py:571 msgid "you cannot add inactive products to order" msgstr "No se pueden añadir productos inactivos al pedido" -#: core/models.py:581 +#: core/models.py:588 msgid "you cannot add more products than available in stock" msgstr "No puede añadir más productos de los disponibles en stock" -#: core/models.py:590 core/models.py:610 core/models.py:634 -#: core/models.py:1218 core/models.py:1230 +#: core/models.py:597 core/models.py:617 core/models.py:641 +#: core/models.py:1250 core/models.py:1262 #, python-brace-format msgid "{name} does not exist: {product_uuid}" msgstr "{name} no existe: {product_uuid}" -#: core/models.py:594 core/models.py:618 core/models.py:626 +#: core/models.py:601 core/models.py:625 core/models.py:633 msgid "you cannot remove products from an order that is not a pending one" msgstr "No puede eliminar productos de un pedido que no esté pendiente" -#: core/models.py:614 +#: core/models.py:621 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} no existe con la consulta <{query}>" -#: core/models.py:645 +#: core/models.py:652 msgid "promocode does not exist" msgstr "Promocode no existe" -#: core/models.py:654 +#: core/models.py:661 msgid "you can only buy physical products with shipping address specified" msgstr "" "Sólo puede comprar productos físicos con la dirección de envío especificada." -#: core/models.py:673 +#: core/models.py:680 msgid "address does not exist" msgstr "La dirección no existe" -#: core/models.py:684 core/models.py:727 +#: core/models.py:691 core/models.py:734 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "No puede comprar en este momento, por favor inténtelo de nuevo en unos " "minutos." -#: core/models.py:687 +#: core/models.py:694 msgid "invalid force value" msgstr "Valor de fuerza no válido" -#: core/models.py:692 core/models.py:730 +#: core/models.py:699 core/models.py:737 msgid "you cannot purchase an empty order!" msgstr "No se puede comprar un pedido vacío." -#: core/models.py:707 +#: core/models.py:714 msgid "insufficient funds to complete the order" msgstr "Fondos insuficientes para completar el pedido" -#: core/models.py:739 +#: core/models.py:746 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -1543,199 +1643,203 @@ msgstr "" "no puede comprar sin registrarse, facilite la siguiente información: nombre " "del cliente, correo electrónico del cliente, número de teléfono del cliente" -#: core/models.py:748 +#: core/models.py:755 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "Forma de pago no válida: ¡{payment_method} de {available_payment_methods}!" -#: core/models.py:816 +#: core/models.py:823 msgid "the price paid by the customer for this product at purchase time" msgstr "" "El precio pagado por el cliente por este producto en el momento de la compra" -#: core/models.py:817 +#: core/models.py:824 msgid "purchase price at order time" msgstr "Precio de compra en el momento del pedido" -#: core/models.py:822 +#: core/models.py:829 msgid "internal comments for admins about this ordered product" msgstr "" "Comentarios internos para los administradores sobre este producto solicitado" -#: core/models.py:823 +#: core/models.py:830 msgid "internal comments" msgstr "Comentarios internos" -#: core/models.py:829 +#: core/models.py:836 msgid "user notifications" msgstr "Notificaciones a los usuarios" -#: core/models.py:834 +#: core/models.py:841 msgid "json representation of this item's attributes" msgstr "Representación JSON de los atributos de este elemento" -#: core/models.py:835 +#: core/models.py:842 msgid "ordered product attributes" msgstr "Atributos ordenados del producto" -#: core/models.py:840 +#: core/models.py:847 msgid "reference to the parent order that contains this product" msgstr "Referencia al pedido principal que contiene este producto" -#: core/models.py:841 +#: core/models.py:848 msgid "parent order" msgstr "Orden de los padres" -#: core/models.py:850 +#: core/models.py:857 msgid "the specific product associated with this order line" msgstr "El producto específico asociado a esta línea de pedido" -#: core/models.py:857 +#: core/models.py:864 msgid "quantity of this specific product in the order" msgstr "Cantidad de este producto específico en el pedido" -#: core/models.py:858 +#: core/models.py:865 msgid "product quantity" msgstr "Cantidad de productos" -#: core/models.py:865 +#: core/models.py:872 msgid "current status of this product in the order" msgstr "Estado actual de este producto en el pedido" -#: core/models.py:866 +#: core/models.py:873 msgid "product line status" msgstr "Estado de la línea de productos" -#: core/models.py:918 +#: core/models.py:925 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "acción incorrecta especificada para la retroalimentación: {action}" -#: core/models.py:926 +#: core/models.py:933 msgid "you cannot feedback an order which is not received" msgstr "no se puede comentar un pedido no recibido" -#: core/models.py:937 +#: core/models.py:944 core/models.py:969 msgid "internal tag identifier for the product tag" msgstr "Identificador interno de la etiqueta del producto" -#: core/models.py:938 +#: core/models.py:945 core/models.py:970 msgid "tag name" msgstr "Nombre de la etiqueta" -#: core/models.py:942 +#: core/models.py:949 core/models.py:974 msgid "user-friendly name for the product tag" msgstr "Nombre fácil de usar para la etiqueta del producto" -#: core/models.py:943 +#: core/models.py:950 core/models.py:975 msgid "tag display name" msgstr "Nombre de la etiqueta" -#: core/models.py:951 +#: core/models.py:958 msgid "product tag" msgstr "Etiqueta del producto" -#: core/models.py:960 +#: core/models.py:983 +msgid "category tag" +msgstr "etiqueta de categoría" + +#: core/models.py:992 msgid "provide alternative text for the image for accessibility" msgstr "" "Proporcione un texto alternativo para la imagen en aras de la accesibilidad" -#: core/models.py:961 +#: core/models.py:993 msgid "image alt text" msgstr "Texto alternativo de la imagen" -#: core/models.py:964 +#: core/models.py:996 msgid "upload the image file for this product" msgstr "Cargar el archivo de imagen para este producto" -#: core/models.py:965 core/models.py:990 +#: core/models.py:997 core/models.py:1022 msgid "product image" msgstr "Imagen del producto" -#: core/models.py:971 +#: core/models.py:1003 msgid "determines the order in which images are displayed" msgstr "Determina el orden de visualización de las imágenes" -#: core/models.py:972 +#: core/models.py:1004 msgid "display priority" msgstr "Prioridad de visualización" -#: core/models.py:977 +#: core/models.py:1009 msgid "the product that this image represents" msgstr "El producto que representa esta imagen" -#: core/models.py:991 +#: core/models.py:1023 msgid "product images" msgstr "Imágenes de productos" -#: core/models.py:1001 +#: core/models.py:1033 msgid "unique code used by a user to redeem a discount" msgstr "Código único utilizado por un usuario para canjear un descuento" -#: core/models.py:1002 +#: core/models.py:1034 msgid "promo code identifier" msgstr "Promo code identifier" -#: core/models.py:1009 +#: core/models.py:1041 msgid "fixed discount amount applied if percent is not used" msgstr "Se aplica un descuento fijo si no se utiliza el porcentaje" -#: core/models.py:1010 +#: core/models.py:1042 msgid "fixed discount amount" msgstr "Importe fijo del descuento" -#: core/models.py:1016 +#: core/models.py:1048 msgid "percentage discount applied if fixed amount is not used" msgstr "Porcentaje de descuento aplicado si no se utiliza el importe fijo" -#: core/models.py:1017 +#: core/models.py:1049 msgid "percentage discount" msgstr "Porcentaje de descuento" -#: core/models.py:1022 +#: core/models.py:1054 msgid "timestamp when the promocode expires" msgstr "Fecha de caducidad del promocode" -#: core/models.py:1023 +#: core/models.py:1055 msgid "end validity time" msgstr "Hora de fin de validez" -#: core/models.py:1028 +#: core/models.py:1060 msgid "timestamp from which this promocode is valid" msgstr "Fecha a partir de la cual es válido este promocode" -#: core/models.py:1029 +#: core/models.py:1061 msgid "start validity time" msgstr "Hora de inicio de validez" -#: core/models.py:1034 +#: core/models.py:1066 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "Fecha en la que se utilizó el promocode, en blanco si aún no se ha utilizado" -#: core/models.py:1035 +#: core/models.py:1067 msgid "usage timestamp" msgstr "Marca de tiempo de uso" -#: core/models.py:1040 +#: core/models.py:1072 msgid "user assigned to this promocode if applicable" msgstr "Usuario asignado a este promocode si procede" -#: core/models.py:1041 +#: core/models.py:1073 msgid "assigned user" msgstr "Usuario asignado" -#: core/models.py:1048 +#: core/models.py:1080 msgid "promo code" msgstr "Promo code" -#: core/models.py:1049 +#: core/models.py:1081 msgid "promo codes" msgstr "Promo codes" -#: core/models.py:1056 +#: core/models.py:1088 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -1743,196 +1847,196 @@ msgstr "" "Sólo debe definirse un tipo de descuento (importe o porcentaje), pero no " "ambos ni ninguno." -#: core/models.py:1071 +#: core/models.py:1103 msgid "promocode already used" msgstr "El código promocional ya ha sido utilizado" -#: core/models.py:1085 +#: core/models.py:1117 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Tipo de descuento no válido para promocode {self.uuid}" -#: core/models.py:1097 +#: core/models.py:1129 msgid "percentage discount for the selected products" msgstr "Porcentaje de descuento para los productos seleccionados" -#: core/models.py:1098 +#: core/models.py:1130 msgid "discount percentage" msgstr "Porcentaje de descuento" -#: core/models.py:1103 +#: core/models.py:1135 msgid "provide a unique name for this promotion" msgstr "Proporcione un nombre único para esta promoción" -#: core/models.py:1104 +#: core/models.py:1136 msgid "promotion name" msgstr "Nombre de la promoción" -#: core/models.py:1110 +#: core/models.py:1142 msgid "promotion description" msgstr "Descripción de la promoción" -#: core/models.py:1115 +#: core/models.py:1147 msgid "select which products are included in this promotion" msgstr "Seleccione los productos incluidos en esta promoción" -#: core/models.py:1116 +#: core/models.py:1148 msgid "included products" msgstr "Productos incluidos" -#: core/models.py:1120 +#: core/models.py:1152 msgid "promotion" msgstr "Promoción" -#: core/models.py:1135 +#: core/models.py:1167 msgid "the vendor supplying this product stock" msgstr "El vendedor que suministra este producto dispone de" -#: core/models.py:1136 +#: core/models.py:1168 msgid "associated vendor" msgstr "Proveedor asociado" -#: core/models.py:1140 +#: core/models.py:1172 msgid "final price to the customer after markups" msgstr "Precio final al cliente después de márgenes" -#: core/models.py:1141 +#: core/models.py:1173 msgid "selling price" msgstr "Precio de venta" -#: core/models.py:1146 +#: core/models.py:1178 msgid "the product associated with this stock entry" msgstr "El producto asociado a esta entrada en stock" -#: core/models.py:1154 +#: core/models.py:1186 msgid "the price paid to the vendor for this product" msgstr "El precio pagado al vendedor por este producto" -#: core/models.py:1155 +#: core/models.py:1187 msgid "vendor purchase price" msgstr "Precio de compra al vendedor" -#: core/models.py:1159 +#: core/models.py:1191 msgid "available quantity of the product in stock" msgstr "Cantidad disponible del producto en stock" -#: core/models.py:1160 +#: core/models.py:1192 msgid "quantity in stock" msgstr "Cantidad en stock" -#: core/models.py:1164 +#: core/models.py:1196 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU asignada por el proveedor para identificar el producto" -#: core/models.py:1165 +#: core/models.py:1197 msgid "vendor sku" msgstr "SKU del vendedor" -#: core/models.py:1171 +#: core/models.py:1203 msgid "digital file associated with this stock if applicable" msgstr "Archivo digital asociado a esta acción, si procede" -#: core/models.py:1172 +#: core/models.py:1204 msgid "digital file" msgstr "Archivo digital" -#: core/models.py:1181 +#: core/models.py:1213 msgid "stock entries" msgstr "Entradas en existencias" -#: core/models.py:1190 +#: core/models.py:1222 msgid "products that the user has marked as wanted" msgstr "Productos que el usuario ha marcado como deseados" -#: core/models.py:1198 +#: core/models.py:1230 msgid "user who owns this wishlist" msgstr "Usuario propietario de esta lista de deseos" -#: core/models.py:1199 +#: core/models.py:1231 msgid "wishlist owner" msgstr "Propietario de Wishlist" -#: core/models.py:1207 +#: core/models.py:1239 msgid "wishlist" msgstr "Lista de deseos" -#: core/models.py:1252 +#: core/models.py:1284 msgid "download" msgstr "Descargar" -#: core/models.py:1253 +#: core/models.py:1285 msgid "downloads" msgstr "Descargas" -#: core/models.py:1261 +#: core/models.py:1293 msgid "you can not download a digital asset for a non-finished order" msgstr "No puede descargar un activo digital para un pedido no finalizado" -#: core/models.py:1273 +#: core/models.py:1305 msgid "documentary" msgstr "Documental" -#: core/models.py:1274 +#: core/models.py:1306 msgid "documentaries" msgstr "Documentaries" -#: core/models.py:1284 +#: core/models.py:1316 msgid "unresolved" msgstr "Sin resolver" -#: core/models.py:1293 +#: core/models.py:1325 msgid "address line for the customer" msgstr "Dirección del cliente" -#: core/models.py:1294 +#: core/models.py:1326 msgid "address line" msgstr "Dirección" -#: core/models.py:1296 +#: core/models.py:1328 msgid "street" msgstr "Calle" -#: core/models.py:1297 +#: core/models.py:1329 msgid "district" msgstr "Distrito" -#: core/models.py:1298 +#: core/models.py:1330 msgid "city" msgstr "Ciudad" -#: core/models.py:1299 +#: core/models.py:1331 msgid "region" msgstr "Región" -#: core/models.py:1300 +#: core/models.py:1332 msgid "postal code" msgstr "Promo code" -#: core/models.py:1301 +#: core/models.py:1333 msgid "country" msgstr "País" -#: core/models.py:1304 +#: core/models.py:1336 msgid "geolocation point: (longitude, latitude)" msgstr "Geolocalización Punto(Longitud, Latitud)" -#: core/models.py:1307 +#: core/models.py:1339 msgid "full JSON response from geocoder for this address" msgstr "Respuesta JSON completa del geocodificador para esta dirección" -#: core/models.py:1309 +#: core/models.py:1341 msgid "stored JSON response from the geocoding service" msgstr "Respuesta JSON almacenada del servicio de geocodificación" -#: core/models.py:1316 +#: core/models.py:1348 msgid "address" msgstr "Dirección" -#: core/models.py:1317 +#: core/models.py:1349 msgid "addresses" msgstr "Direcciones" -#: core/serializers/utility.py:76 +#: core/serializers/utility.py:77 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" @@ -2173,7 +2277,7 @@ msgstr "Sólo puede descargar el activo digital una vez" msgid "favicon not found" msgstr "favicon no encontrado" -#: core/viewsets.py:680 +#: core/viewsets.py:677 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Error de geocodificación: {e}" diff --git a/core/locale/fr_FR/LC_MESSAGES/django.mo b/core/locale/fr_FR/LC_MESSAGES/django.mo index 6e56deaa..091760fc 100644 Binary files a/core/locale/fr_FR/LC_MESSAGES/django.mo and b/core/locale/fr_FR/LC_MESSAGES/django.mo differ diff --git a/core/locale/fr_FR/LC_MESSAGES/django.po b/core/locale/fr_FR/LC_MESSAGES/django.po index 04aa0106..51003c44 100644 --- a/core/locale/fr_FR/LC_MESSAGES/django.po +++ b/core/locale/fr_FR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-08 19:42+0100\n" +"POT-Creation-Date: 2025-06-10 03:32+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -83,7 +83,7 @@ msgstr "Image" msgid "images" msgstr "Images" -#: core/admin.py:162 core/models.py:1180 +#: core/admin.py:162 core/models.py:1212 msgid "stock" msgstr "Stock" @@ -111,11 +111,11 @@ msgstr "Informations de base" msgid "important dates" msgstr "Important Dates" -#: core/admin.py:253 core/models.py:874 +#: core/admin.py:253 core/models.py:881 msgid "order product" msgstr "Commander un produit" -#: core/admin.py:254 core/graphene/object_types.py:262 core/models.py:875 +#: core/admin.py:254 core/graphene/object_types.py:262 core/models.py:882 msgid "order products" msgstr "Commander des produits" @@ -777,6 +777,98 @@ msgstr "" msgid "no search term provided." msgstr "Aucun terme de recherche n'est fourni." +#: core/filters.py:37 core/filters.py:357 +msgid "UUID" +msgstr "UUID" + +#: core/filters.py:38 core/filters.py:309 core/filters.py:340 +msgid "Name" +msgstr "Nom" + +#: core/filters.py:39 core/filters.py:341 +msgid "Categories" +msgstr "Catégories" + +#: core/filters.py:44 +msgid "Categories Slugs" +msgstr "Catégories Limaces" + +#: core/filters.py:45 core/filters.py:312 +msgid "Tags" +msgstr "Tags" + +#: core/filters.py:46 +msgid "Min Price" +msgstr "Prix minimum" + +#: core/filters.py:47 +msgid "Max Price" +msgstr "Prix maximum" + +#: core/filters.py:48 +msgid "Is Active" +msgstr "Est actif" + +#: core/filters.py:49 +msgid "Brand" +msgstr "Marque" + +#: core/filters.py:50 +msgid "Attributes" +msgstr "Attributs" + +#: core/filters.py:51 +msgid "Quantity" +msgstr "Quantité" + +#: core/filters.py:52 core/filters.py:311 +msgid "Slug" +msgstr "Limace" + +#: core/filters.py:53 +msgid "Is Digital" +msgstr "Is Digital" + +#: core/filters.py:56 +msgid "Include sub-categories" +msgstr "Inclure des sous-catégories" + +#: core/filters.py:245 +msgid "Search (ID, product name or part number)" +msgstr "Recherche (ID, nom du produit ou numéro de pièce)" + +#: core/filters.py:248 +msgid "Bought after (inclusive)" +msgstr "Acheté après (inclus)" + +#: core/filters.py:249 +msgid "Bought before (inclusive)" +msgstr "Acheté avant (inclus)" + +#: core/filters.py:252 core/filters.py:295 +msgid "User email" +msgstr "Courriel de l'utilisateur" + +#: core/filters.py:253 core/filters.py:296 core/filters.py:359 +msgid "User UUID" +msgstr "UUID de l'utilisateur" + +#: core/filters.py:254 +msgid "Status" +msgstr "Statut" + +#: core/filters.py:255 +msgid "Human Readable ID" +msgstr "ID lisible par l'homme" + +#: core/filters.py:310 +msgid "Parent" +msgstr "Parent" + +#: core/filters.py:358 +msgid "Product UUID" +msgstr "UUID du produit" + #: core/graphene/mutations.py:38 msgid "key to look for in or set into the cache" msgstr "Clé à rechercher ou à insérer dans la cache" @@ -830,7 +922,7 @@ msgstr "" "mutuellement !" #: core/graphene/mutations.py:225 core/graphene/mutations.py:441 -#: core/graphene/mutations.py:475 core/viewsets.py:348 +#: core/graphene/mutations.py:475 core/viewsets.py:345 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" "Le mauvais type provient de la méthode order.buy() : {type(instance)!s}" @@ -885,7 +977,7 @@ msgstr "" msgid "original address string provided by the user" msgstr "Chaîne d'adresse originale fournie par l'utilisateur" -#: core/graphene/mutations.py:572 core/viewsets.py:238 core/viewsets.py:351 +#: core/graphene/mutations.py:572 core/viewsets.py:240 core/viewsets.py:348 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} n'existe pas : {uuid}" @@ -899,7 +991,7 @@ msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - fonctionne comme un charme" #: core/graphene/object_types.py:43 core/graphene/object_types.py:245 -#: core/graphene/object_types.py:286 core/models.py:126 core/models.py:489 +#: core/graphene/object_types.py:286 core/models.py:126 core/models.py:495 msgid "attributes" msgstr "Attributs" @@ -912,11 +1004,11 @@ msgid "groups of attributes" msgstr "Groupes d'attributs" #: core/graphene/object_types.py:76 core/graphene/object_types.py:104 -#: core/graphene/object_types.py:132 core/models.py:90 core/models.py:220 +#: core/graphene/object_types.py:132 core/models.py:90 core/models.py:226 msgid "categories" msgstr "Catégories" -#: core/graphene/object_types.py:83 core/models.py:267 +#: core/graphene/object_types.py:83 core/models.py:273 msgid "brands" msgstr "Marques" @@ -942,7 +1034,7 @@ msgstr "" "Prix minimum et maximum pour les produits de cette catégorie, s'ils sont " "disponibles." -#: core/graphene/object_types.py:202 core/models.py:404 +#: core/graphene/object_types.py:202 core/models.py:410 msgid "vendors" msgstr "Vendeurs" @@ -967,7 +1059,7 @@ msgid "represents feedback from a user." msgstr "Représente le retour d'information d'un utilisateur." #: core/graphene/object_types.py:246 core/graphene/object_types.py:287 -#: core/models.py:483 +#: core/models.py:489 msgid "notifications" msgstr "Notifications" @@ -979,7 +1071,7 @@ msgstr "URL de téléchargement pour ce produit de la commande, le cas échéant msgid "a list of order products in this order" msgstr "Une liste des produits commandés dans cette commande" -#: core/graphene/object_types.py:278 core/models.py:453 +#: core/graphene/object_types.py:278 core/models.py:459 msgid "billing address" msgstr "Adresse de facturation" @@ -1003,7 +1095,7 @@ msgstr "Quantité totale de produits dans la commande" msgid "are all products in the order digital" msgstr "Tous les produits de la commande sont-ils numériques ?" -#: core/graphene/object_types.py:305 core/models.py:517 +#: core/graphene/object_types.py:305 core/models.py:523 msgid "orders" msgstr "Commandes" @@ -1015,15 +1107,15 @@ msgstr "Image URL" msgid "product's images" msgstr "Images du produit" -#: core/graphene/object_types.py:335 core/models.py:219 core/models.py:277 +#: core/graphene/object_types.py:335 core/models.py:225 core/models.py:283 msgid "category" msgstr "Catégorie" -#: core/graphene/object_types.py:337 core/models.py:440 +#: core/graphene/object_types.py:337 core/models.py:446 msgid "feedbacks" msgstr "Retour d'information" -#: core/graphene/object_types.py:338 core/models.py:266 core/models.py:285 +#: core/graphene/object_types.py:338 core/models.py:272 core/models.py:291 msgid "brand" msgstr "Marque" @@ -1043,7 +1135,7 @@ msgstr "Quantité" msgid "number of feedbacks" msgstr "Nombre de retours d'information" -#: core/graphene/object_types.py:360 core/models.py:329 +#: core/graphene/object_types.py:360 core/models.py:335 msgid "products" msgstr "Produits" @@ -1055,15 +1147,15 @@ msgstr "Promocodes" msgid "products on sale" msgstr "Produits en vente" -#: core/graphene/object_types.py:425 core/models.py:1121 +#: core/graphene/object_types.py:425 core/models.py:1153 msgid "promotions" msgstr "Promotions" -#: core/graphene/object_types.py:429 core/models.py:403 +#: core/graphene/object_types.py:429 core/models.py:409 msgid "vendor" msgstr "Vendeur" -#: core/graphene/object_types.py:430 core/models.py:328 +#: core/graphene/object_types.py:430 core/models.py:334 #: core/templates/digital_order_created_email.html:107 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:93 @@ -1071,11 +1163,11 @@ msgstr "Vendeur" msgid "product" msgstr "Produit" -#: core/graphene/object_types.py:441 core/models.py:1191 +#: core/graphene/object_types.py:441 core/models.py:1223 msgid "wishlisted products" msgstr "Produits en liste de souhaits" -#: core/graphene/object_types.py:447 core/models.py:1208 +#: core/graphene/object_types.py:447 core/models.py:1240 msgid "wishlists" msgstr "Liste de souhaits" @@ -1083,7 +1175,7 @@ msgstr "Liste de souhaits" msgid "tagged products" msgstr "Produits marqués" -#: core/graphene/object_types.py:458 core/models.py:291 core/models.py:952 +#: core/graphene/object_types.py:458 core/models.py:297 core/models.py:959 msgid "product tags" msgstr "Étiquettes du produit" @@ -1231,8 +1323,8 @@ msgstr "Attribut de cette valeur" msgid "the specific product associated with this attribute's value" msgstr "Le produit spécifique associé à la valeur de cet attribut" -#: core/models.py:145 core/models.py:851 core/models.py:978 -#: core/models.py:1147 +#: core/models.py:145 core/models.py:858 core/models.py:1010 +#: core/models.py:1179 msgid "associated product" msgstr "Produit associé" @@ -1277,283 +1369,291 @@ msgstr "Ajouter une description détaillée pour cette catégorie" msgid "category description" msgstr "Description de la catégorie" -#: core/models.py:229 +#: core/models.py:212 +msgid "tags that help describe or group this category" +msgstr "les étiquettes qui aident à décrire ou à regrouper cette catégorie" + +#: core/models.py:213 core/models.py:984 +msgid "category tags" +msgstr "balises de catégorie" + +#: core/models.py:235 msgid "name of this brand" msgstr "Nom de cette marque" -#: core/models.py:230 +#: core/models.py:236 msgid "brand name" msgstr "Nom de marque" -#: core/models.py:237 +#: core/models.py:243 msgid "upload a logo representing this brand" msgstr "Télécharger un logo représentant cette marque" -#: core/models.py:239 +#: core/models.py:245 msgid "brand small image" msgstr "Petite image de marque" -#: core/models.py:245 +#: core/models.py:251 msgid "upload a big logo representing this brand" msgstr "Télécharger un grand logo représentant cette marque" -#: core/models.py:247 +#: core/models.py:253 msgid "brand big image" msgstr "Une grande image de marque" -#: core/models.py:252 +#: core/models.py:258 msgid "add a detailed description of the brand" msgstr "Ajouter une description détaillée de la marque" -#: core/models.py:253 +#: core/models.py:259 msgid "brand description" msgstr "Description de la marque" -#: core/models.py:258 +#: core/models.py:264 msgid "optional categories that this brand is associated with" msgstr "Catégories facultatives auxquelles cette marque est associée" -#: core/models.py:259 +#: core/models.py:265 msgid "associated categories" msgstr "Catégories" -#: core/models.py:276 +#: core/models.py:282 msgid "category this product belongs to" msgstr "Catégorie à laquelle appartient ce produit" -#: core/models.py:284 +#: core/models.py:290 msgid "optionally associate this product with a brand" msgstr "Possibilité d'associer ce produit à une marque" -#: core/models.py:290 +#: core/models.py:296 msgid "tags that help describe or group this product" msgstr "Étiquettes permettant de décrire ou de regrouper ce produit" -#: core/models.py:295 +#: core/models.py:301 msgid "indicates whether this product is digitally delivered" msgstr "Indique si ce produit est livré numériquement" -#: core/models.py:296 +#: core/models.py:302 msgid "is product digital" msgstr "Le produit est-il numérique ?" -#: core/models.py:302 +#: core/models.py:308 msgid "provide a clear identifying name for the product" msgstr "Fournir un nom d'identification clair pour le produit" -#: core/models.py:303 +#: core/models.py:309 msgid "product name" msgstr "Nom du produit" -#: core/models.py:308 core/models.py:1109 +#: core/models.py:314 core/models.py:1141 msgid "add a detailed description of the product" msgstr "Ajouter une description détaillée du produit" -#: core/models.py:309 +#: core/models.py:315 msgid "product description" msgstr "Description du produit" -#: core/models.py:316 +#: core/models.py:322 msgid "part number for this product" msgstr "Numéro de pièce pour ce produit" -#: core/models.py:317 +#: core/models.py:323 msgid "part number" msgstr "Numéro de pièce" -#: core/models.py:381 +#: core/models.py:387 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Stocke les informations d'identification et les points d'extrémité " "nécessaires à la communication avec l'API du fournisseur." -#: core/models.py:382 +#: core/models.py:388 msgid "authentication info" msgstr "Informations sur l'authentification" -#: core/models.py:387 +#: core/models.py:393 msgid "define the markup for products retrieved from this vendor" msgstr "" "Définir la majoration pour les produits récupérés auprès de ce fournisseur" -#: core/models.py:388 +#: core/models.py:394 msgid "vendor markup percentage" msgstr "Pourcentage de marge du vendeur" -#: core/models.py:392 +#: core/models.py:398 msgid "name of this vendor" msgstr "Nom de ce vendeur" -#: core/models.py:393 +#: core/models.py:399 msgid "vendor name" msgstr "Nom du vendeur" -#: core/models.py:416 +#: core/models.py:422 msgid "user-provided comments about their experience with the product" msgstr "Commentaires des utilisateurs sur leur expérience du produit" -#: core/models.py:417 +#: core/models.py:423 msgid "feedback comments" msgstr "Commentaires" -#: core/models.py:424 +#: core/models.py:430 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "Fait référence au produit spécifique d'une commande sur lequel porte le " "retour d'information." -#: core/models.py:425 +#: core/models.py:431 msgid "related order product" msgstr "Produit de commande apparenté" -#: core/models.py:430 +#: core/models.py:436 msgid "user-assigned rating for the product" msgstr "Note attribuée par l'utilisateur au produit" -#: core/models.py:431 +#: core/models.py:437 msgid "product rating" msgstr "Evaluation du produit" -#: core/models.py:439 +#: core/models.py:445 msgid "feedback" msgstr "Retour d'information" -#: core/models.py:452 +#: core/models.py:458 msgid "the billing address used for this order" msgstr "L'adresse de facturation utilisée pour cette commande" -#: core/models.py:460 +#: core/models.py:466 msgid "optional promo code applied to this order" msgstr "Code promo optionnel appliqué à cette commande" -#: core/models.py:461 +#: core/models.py:467 msgid "applied promo code" msgstr "Code promo appliqué" -#: core/models.py:469 +#: core/models.py:475 msgid "the shipping address used for this order" msgstr "L'adresse de livraison utilisée pour cette commande" -#: core/models.py:470 +#: core/models.py:476 msgid "shipping address" msgstr "Adresse de livraison" -#: core/models.py:476 +#: core/models.py:482 msgid "current status of the order in its lifecycle" msgstr "Statut actuel de la commande dans son cycle de vie" -#: core/models.py:477 +#: core/models.py:483 msgid "order status" msgstr "Statut de la commande" -#: core/models.py:482 core/models.py:828 +#: core/models.py:488 core/models.py:835 msgid "json structure of notifications to display to users" msgstr "" "Structure JSON des notifications à afficher aux utilisateurs ; dans " "l'interface d'administration, la vue en tableau est utilisée." -#: core/models.py:488 +#: core/models.py:494 msgid "json representation of order attributes for this order" msgstr "Représentation JSON des attributs de cette commande" -#: core/models.py:494 +#: core/models.py:500 msgid "the user who placed the order" msgstr "L'utilisateur qui a passé la commande" -#: core/models.py:495 +#: core/models.py:501 msgid "user" msgstr "Utilisateur" -#: core/models.py:501 +#: core/models.py:507 msgid "the timestamp when the order was finalized" msgstr "L'heure à laquelle la commande a été finalisée." -#: core/models.py:502 +#: core/models.py:508 msgid "buy time" msgstr "Temps d'achat" -#: core/models.py:509 +#: core/models.py:515 msgid "a human-readable identifier for the order" msgstr "Un identifiant lisible par l'homme pour la commande" -#: core/models.py:510 +#: core/models.py:516 msgid "human readable id" msgstr "ID lisible par l'homme" -#: core/models.py:516 +#: core/models.py:522 msgid "order" msgstr "Commande" -#: core/models.py:531 +#: core/models.py:537 msgid "a user must have only one pending order at a time" msgstr "Un utilisateur ne peut avoir qu'un seul ordre en cours à la fois !" -#: core/models.py:559 +#: core/models.py:566 msgid "you cannot add products to an order that is not a pending one" msgstr "" "Vous ne pouvez pas ajouter de produits à une commande qui n'est pas en " "cours." -#: core/models.py:564 +#: core/models.py:571 msgid "you cannot add inactive products to order" msgstr "Vous ne pouvez pas ajouter des produits inactifs à la commande" -#: core/models.py:581 +#: core/models.py:588 msgid "you cannot add more products than available in stock" msgstr "" "Vous ne pouvez pas ajouter plus de produits que ceux disponibles en stock" -#: core/models.py:590 core/models.py:610 core/models.py:634 -#: core/models.py:1218 core/models.py:1230 +#: core/models.py:597 core/models.py:617 core/models.py:641 +#: core/models.py:1250 core/models.py:1262 #, python-brace-format msgid "{name} does not exist: {product_uuid}" msgstr "{name} n'existe pas : {product_uuid}" -#: core/models.py:594 core/models.py:618 core/models.py:626 +#: core/models.py:601 core/models.py:625 core/models.py:633 msgid "you cannot remove products from an order that is not a pending one" msgstr "" "Vous ne pouvez pas retirer des produits d'une commande qui n'est pas en " "cours." -#: core/models.py:614 +#: core/models.py:621 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} n'existe pas avec la requête <{query}>" -#: core/models.py:645 +#: core/models.py:652 msgid "promocode does not exist" msgstr "Le code promotionnel n'existe pas" -#: core/models.py:654 +#: core/models.py:661 msgid "you can only buy physical products with shipping address specified" msgstr "" "Vous ne pouvez acheter que des produits physiques dont l'adresse de " "livraison est spécifiée !" -#: core/models.py:673 +#: core/models.py:680 msgid "address does not exist" msgstr "L'adresse n'existe pas" -#: core/models.py:684 core/models.py:727 +#: core/models.py:691 core/models.py:734 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "Vous ne pouvez pas acheter en ce moment, veuillez réessayer dans quelques " "minutes." -#: core/models.py:687 +#: core/models.py:694 msgid "invalid force value" msgstr "Valeur de force non valide" -#: core/models.py:692 core/models.py:730 +#: core/models.py:699 core/models.py:737 msgid "you cannot purchase an empty order!" msgstr "Vous ne pouvez pas acheter une commande vide !" -#: core/models.py:707 +#: core/models.py:714 msgid "insufficient funds to complete the order" msgstr "Insuffisance de fonds pour compléter la commande" -#: core/models.py:739 +#: core/models.py:746 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -1562,7 +1662,7 @@ msgstr "" "informations suivantes : nom du client, courriel du client, numéro de " "téléphone du client" -#: core/models.py:748 +#: core/models.py:755 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -1570,196 +1670,200 @@ msgstr "" "Méthode de paiement non valide : {payment_method} de " "{available_payment_methods} !" -#: core/models.py:816 +#: core/models.py:823 msgid "the price paid by the customer for this product at purchase time" msgstr "Le prix payé par le client pour ce produit au moment de l'achat" -#: core/models.py:817 +#: core/models.py:824 msgid "purchase price at order time" msgstr "Prix d'achat au moment de la commande" -#: core/models.py:822 +#: core/models.py:829 msgid "internal comments for admins about this ordered product" msgstr "" "Commentaires internes pour les administrateurs sur ce produit commandé" -#: core/models.py:823 +#: core/models.py:830 msgid "internal comments" msgstr "Commentaires internes" -#: core/models.py:829 +#: core/models.py:836 msgid "user notifications" msgstr "Notifications aux utilisateurs" -#: core/models.py:834 +#: core/models.py:841 msgid "json representation of this item's attributes" msgstr "Représentation JSON des attributs de cet élément" -#: core/models.py:835 +#: core/models.py:842 msgid "ordered product attributes" msgstr "Attributs du produit ordonnés" -#: core/models.py:840 +#: core/models.py:847 msgid "reference to the parent order that contains this product" msgstr "Référence à l'ordre parent qui contient ce produit" -#: core/models.py:841 +#: core/models.py:848 msgid "parent order" msgstr "Ordonnance parentale" -#: core/models.py:850 +#: core/models.py:857 msgid "the specific product associated with this order line" msgstr "Le produit spécifique associé à cette ligne de commande" -#: core/models.py:857 +#: core/models.py:864 msgid "quantity of this specific product in the order" msgstr "Quantité de ce produit spécifique dans la commande" -#: core/models.py:858 +#: core/models.py:865 msgid "product quantity" msgstr "Quantité de produits" -#: core/models.py:865 +#: core/models.py:872 msgid "current status of this product in the order" msgstr "Statut actuel de ce produit dans la commande" -#: core/models.py:866 +#: core/models.py:873 msgid "product line status" msgstr "Statut de la ligne de produits" -#: core/models.py:918 +#: core/models.py:925 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "mauvaise action spécifiée pour le retour d'information : {action}" -#: core/models.py:926 +#: core/models.py:933 msgid "you cannot feedback an order which is not received" msgstr "" "Vous ne pouvez pas retirer des produits d'une commande qui n'est pas en " "cours." -#: core/models.py:937 +#: core/models.py:944 core/models.py:969 msgid "internal tag identifier for the product tag" msgstr "Identifiant interne de l'étiquette du produit" -#: core/models.py:938 +#: core/models.py:945 core/models.py:970 msgid "tag name" msgstr "Nom du jour" -#: core/models.py:942 +#: core/models.py:949 core/models.py:974 msgid "user-friendly name for the product tag" msgstr "Nom convivial pour l'étiquette du produit" -#: core/models.py:943 +#: core/models.py:950 core/models.py:975 msgid "tag display name" msgstr "Nom d'affichage de l'étiquette" -#: core/models.py:951 +#: core/models.py:958 msgid "product tag" msgstr "Étiquette du produit" -#: core/models.py:960 +#: core/models.py:983 +msgid "category tag" +msgstr "étiquette de catégorie" + +#: core/models.py:992 msgid "provide alternative text for the image for accessibility" msgstr "Fournir un texte alternatif pour l'image afin d'en faciliter l'accès" -#: core/models.py:961 +#: core/models.py:993 msgid "image alt text" msgstr "Texte alt de l'image" -#: core/models.py:964 +#: core/models.py:996 msgid "upload the image file for this product" msgstr "Télécharger le fichier image pour ce produit" -#: core/models.py:965 core/models.py:990 +#: core/models.py:997 core/models.py:1022 msgid "product image" msgstr "Image du produit" -#: core/models.py:971 +#: core/models.py:1003 msgid "determines the order in which images are displayed" msgstr "Détermine l'ordre d'affichage des images" -#: core/models.py:972 +#: core/models.py:1004 msgid "display priority" msgstr "Priorité à l'affichage" -#: core/models.py:977 +#: core/models.py:1009 msgid "the product that this image represents" msgstr "Le produit que cette image représente" -#: core/models.py:991 +#: core/models.py:1023 msgid "product images" msgstr "Images du produit" -#: core/models.py:1001 +#: core/models.py:1033 msgid "unique code used by a user to redeem a discount" msgstr "" "Code unique utilisé par un utilisateur pour bénéficier d'une réduction" -#: core/models.py:1002 +#: core/models.py:1034 msgid "promo code identifier" msgstr "Identifiant du code promotionnel" -#: core/models.py:1009 +#: core/models.py:1041 msgid "fixed discount amount applied if percent is not used" msgstr "" "Montant fixe de la remise appliqué si le pourcentage n'est pas utilisé" -#: core/models.py:1010 +#: core/models.py:1042 msgid "fixed discount amount" msgstr "Montant de l'escompte fixe" -#: core/models.py:1016 +#: core/models.py:1048 msgid "percentage discount applied if fixed amount is not used" msgstr "" "Pourcentage de réduction appliqué si le montant fixe n'est pas utilisé" -#: core/models.py:1017 +#: core/models.py:1049 msgid "percentage discount" msgstr "Pourcentage de réduction" -#: core/models.py:1022 +#: core/models.py:1054 msgid "timestamp when the promocode expires" msgstr "Date d'expiration du code promotionnel" -#: core/models.py:1023 +#: core/models.py:1055 msgid "end validity time" msgstr "Heure de fin de validité" -#: core/models.py:1028 +#: core/models.py:1060 msgid "timestamp from which this promocode is valid" msgstr "Date à partir de laquelle ce code promotionnel est valable" -#: core/models.py:1029 +#: core/models.py:1061 msgid "start validity time" msgstr "Heure de début de validité" -#: core/models.py:1034 +#: core/models.py:1066 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "Date à laquelle le code promotionnel a été utilisé, vide s'il n'a pas encore" " été utilisé." -#: core/models.py:1035 +#: core/models.py:1067 msgid "usage timestamp" msgstr "Horodatage de l'utilisation" -#: core/models.py:1040 +#: core/models.py:1072 msgid "user assigned to this promocode if applicable" msgstr "Utilisateur assigné à ce code promo, le cas échéant" -#: core/models.py:1041 +#: core/models.py:1073 msgid "assigned user" msgstr "Utilisateur assigné" -#: core/models.py:1048 +#: core/models.py:1080 msgid "promo code" msgstr "Code promo" -#: core/models.py:1049 +#: core/models.py:1081 msgid "promo codes" msgstr "Codes promotionnels" -#: core/models.py:1056 +#: core/models.py:1088 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -1767,198 +1871,198 @@ msgstr "" "Un seul type de remise doit être défini (montant ou pourcentage), mais pas " "les deux ni aucun des deux." -#: core/models.py:1071 +#: core/models.py:1103 msgid "promocode already used" msgstr "Le code promotionnel a déjà été utilisé" -#: core/models.py:1085 +#: core/models.py:1117 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Type de réduction non valide pour le code promo {self.uuid}" -#: core/models.py:1097 +#: core/models.py:1129 msgid "percentage discount for the selected products" msgstr "Pourcentage de réduction pour les produits sélectionnés" -#: core/models.py:1098 +#: core/models.py:1130 msgid "discount percentage" msgstr "Pourcentage de réduction" -#: core/models.py:1103 +#: core/models.py:1135 msgid "provide a unique name for this promotion" msgstr "Donnez un nom unique à cette promotion" -#: core/models.py:1104 +#: core/models.py:1136 msgid "promotion name" msgstr "Nom de la promotion" -#: core/models.py:1110 +#: core/models.py:1142 msgid "promotion description" msgstr "Promotion description" -#: core/models.py:1115 +#: core/models.py:1147 msgid "select which products are included in this promotion" msgstr "Sélectionnez les produits inclus dans cette promotion" -#: core/models.py:1116 +#: core/models.py:1148 msgid "included products" msgstr "Produits inclus" -#: core/models.py:1120 +#: core/models.py:1152 msgid "promotion" msgstr "Promotion" -#: core/models.py:1135 +#: core/models.py:1167 msgid "the vendor supplying this product stock" msgstr "Le vendeur qui fournit ce stock de produits" -#: core/models.py:1136 +#: core/models.py:1168 msgid "associated vendor" msgstr "Vendeur associé" -#: core/models.py:1140 +#: core/models.py:1172 msgid "final price to the customer after markups" msgstr "Prix final pour le client après majoration" -#: core/models.py:1141 +#: core/models.py:1173 msgid "selling price" msgstr "Prix de vente" -#: core/models.py:1146 +#: core/models.py:1178 msgid "the product associated with this stock entry" msgstr "Le produit associé à cette entrée de stock" -#: core/models.py:1154 +#: core/models.py:1186 msgid "the price paid to the vendor for this product" msgstr "Le prix payé au vendeur pour ce produit" -#: core/models.py:1155 +#: core/models.py:1187 msgid "vendor purchase price" msgstr "Prix d'achat du vendeur" -#: core/models.py:1159 +#: core/models.py:1191 msgid "available quantity of the product in stock" msgstr "Quantité disponible du produit en stock" -#: core/models.py:1160 +#: core/models.py:1192 msgid "quantity in stock" msgstr "Quantité en stock" -#: core/models.py:1164 +#: core/models.py:1196 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU attribué par le fournisseur pour identifier le produit" -#: core/models.py:1165 +#: core/models.py:1197 msgid "vendor sku" msgstr "UGS du vendeur" -#: core/models.py:1171 +#: core/models.py:1203 msgid "digital file associated with this stock if applicable" msgstr "Fichier numérique associé à ce stock, le cas échéant" -#: core/models.py:1172 +#: core/models.py:1204 msgid "digital file" msgstr "Fichier numérique" -#: core/models.py:1181 +#: core/models.py:1213 msgid "stock entries" msgstr "Entrées de stock" -#: core/models.py:1190 +#: core/models.py:1222 msgid "products that the user has marked as wanted" msgstr "Produits que l'utilisateur a marqués comme souhaités" -#: core/models.py:1198 +#: core/models.py:1230 msgid "user who owns this wishlist" msgstr "Utilisateur qui possède cette liste de souhaits" -#: core/models.py:1199 +#: core/models.py:1231 msgid "wishlist owner" msgstr "Propriétaire de la liste de souhaits" -#: core/models.py:1207 +#: core/models.py:1239 msgid "wishlist" msgstr "Liste de souhaits" -#: core/models.py:1252 +#: core/models.py:1284 msgid "download" msgstr "Télécharger" -#: core/models.py:1253 +#: core/models.py:1285 msgid "downloads" msgstr "Téléchargements" -#: core/models.py:1261 +#: core/models.py:1293 msgid "you can not download a digital asset for a non-finished order" msgstr "" "Vous ne pouvez pas télécharger un bien numérique pour une commande non " "terminée." -#: core/models.py:1273 +#: core/models.py:1305 msgid "documentary" msgstr "Documentaire" -#: core/models.py:1274 +#: core/models.py:1306 msgid "documentaries" msgstr "Documentaires" -#: core/models.py:1284 +#: core/models.py:1316 msgid "unresolved" msgstr "Non résolu" -#: core/models.py:1293 +#: core/models.py:1325 msgid "address line for the customer" msgstr "Ligne d'adresse du client" -#: core/models.py:1294 +#: core/models.py:1326 msgid "address line" msgstr "Ligne d'adresse" -#: core/models.py:1296 +#: core/models.py:1328 msgid "street" msgstr "Rue" -#: core/models.py:1297 +#: core/models.py:1329 msgid "district" msgstr "District" -#: core/models.py:1298 +#: core/models.py:1330 msgid "city" msgstr "Ville" -#: core/models.py:1299 +#: core/models.py:1331 msgid "region" msgstr "Région" -#: core/models.py:1300 +#: core/models.py:1332 msgid "postal code" msgstr "Code postal" -#: core/models.py:1301 +#: core/models.py:1333 msgid "country" msgstr "Pays" -#: core/models.py:1304 +#: core/models.py:1336 msgid "geolocation point: (longitude, latitude)" msgstr "Point de géolocalisation (longitude, latitude)" -#: core/models.py:1307 +#: core/models.py:1339 msgid "full JSON response from geocoder for this address" msgstr "Réponse JSON complète du géocodeur pour cette adresse" -#: core/models.py:1309 +#: core/models.py:1341 msgid "stored JSON response from the geocoding service" msgstr "Réponse JSON stockée du service de géocodage" -#: core/models.py:1316 +#: core/models.py:1348 msgid "address" msgstr "Adresse" -#: core/models.py:1317 +#: core/models.py:1349 msgid "addresses" msgstr "Adresses" -#: core/serializers/utility.py:76 +#: core/serializers/utility.py:77 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" @@ -2202,7 +2306,7 @@ msgstr "Vous ne pouvez télécharger le bien numérique qu'une seule fois" msgid "favicon not found" msgstr "favicon introuvable" -#: core/viewsets.py:680 +#: core/viewsets.py:677 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Erreur de géocodage : {e}" diff --git a/core/locale/hi_IN/LC_MESSAGES/django.po b/core/locale/hi_IN/LC_MESSAGES/django.po index 3bb48af1..73aab074 100644 --- a/core/locale/hi_IN/LC_MESSAGES/django.po +++ b/core/locale/hi_IN/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-08 19:42+0100\n" +"POT-Creation-Date: 2025-06-10 03:32+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -81,7 +81,7 @@ msgstr "" msgid "images" msgstr "" -#: core/admin.py:162 core/models.py:1180 +#: core/admin.py:162 core/models.py:1212 msgid "stock" msgstr "" @@ -109,11 +109,11 @@ msgstr "" msgid "important dates" msgstr "" -#: core/admin.py:253 core/models.py:874 +#: core/admin.py:253 core/models.py:881 msgid "order product" msgstr "" -#: core/admin.py:254 core/graphene/object_types.py:262 core/models.py:875 +#: core/admin.py:254 core/graphene/object_types.py:262 core/models.py:882 msgid "order products" msgstr "" @@ -701,6 +701,98 @@ msgstr "" msgid "no search term provided." msgstr "" +#: core/filters.py:37 core/filters.py:357 +msgid "UUID" +msgstr "" + +#: core/filters.py:38 core/filters.py:309 core/filters.py:340 +msgid "Name" +msgstr "" + +#: core/filters.py:39 core/filters.py:341 +msgid "Categories" +msgstr "" + +#: core/filters.py:44 +msgid "Categories Slugs" +msgstr "" + +#: core/filters.py:45 core/filters.py:312 +msgid "Tags" +msgstr "" + +#: core/filters.py:46 +msgid "Min Price" +msgstr "" + +#: core/filters.py:47 +msgid "Max Price" +msgstr "" + +#: core/filters.py:48 +msgid "Is Active" +msgstr "" + +#: core/filters.py:49 +msgid "Brand" +msgstr "" + +#: core/filters.py:50 +msgid "Attributes" +msgstr "" + +#: core/filters.py:51 +msgid "Quantity" +msgstr "" + +#: core/filters.py:52 core/filters.py:311 +msgid "Slug" +msgstr "" + +#: core/filters.py:53 +msgid "Is Digital" +msgstr "" + +#: core/filters.py:56 +msgid "Include sub-categories" +msgstr "" + +#: core/filters.py:245 +msgid "Search (ID, product name or part number)" +msgstr "" + +#: core/filters.py:248 +msgid "Bought after (inclusive)" +msgstr "" + +#: core/filters.py:249 +msgid "Bought before (inclusive)" +msgstr "" + +#: core/filters.py:252 core/filters.py:295 +msgid "User email" +msgstr "" + +#: core/filters.py:253 core/filters.py:296 core/filters.py:359 +msgid "User UUID" +msgstr "" + +#: core/filters.py:254 +msgid "Status" +msgstr "" + +#: core/filters.py:255 +msgid "Human Readable ID" +msgstr "" + +#: core/filters.py:310 +msgid "Parent" +msgstr "" + +#: core/filters.py:358 +msgid "Product UUID" +msgstr "" + #: core/graphene/mutations.py:38 msgid "key to look for in or set into the cache" msgstr "" @@ -752,7 +844,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" #: core/graphene/mutations.py:225 core/graphene/mutations.py:441 -#: core/graphene/mutations.py:475 core/viewsets.py:348 +#: core/graphene/mutations.py:475 core/viewsets.py:345 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" @@ -804,7 +896,7 @@ msgstr "" msgid "original address string provided by the user" msgstr "" -#: core/graphene/mutations.py:572 core/viewsets.py:238 core/viewsets.py:351 +#: core/graphene/mutations.py:572 core/viewsets.py:240 core/viewsets.py:348 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "" @@ -818,7 +910,7 @@ msgid "elasticsearch - works like a charm" msgstr "" #: core/graphene/object_types.py:43 core/graphene/object_types.py:245 -#: core/graphene/object_types.py:286 core/models.py:126 core/models.py:489 +#: core/graphene/object_types.py:286 core/models.py:126 core/models.py:495 msgid "attributes" msgstr "" @@ -831,11 +923,11 @@ msgid "groups of attributes" msgstr "" #: core/graphene/object_types.py:76 core/graphene/object_types.py:104 -#: core/graphene/object_types.py:132 core/models.py:90 core/models.py:220 +#: core/graphene/object_types.py:132 core/models.py:90 core/models.py:226 msgid "categories" msgstr "" -#: core/graphene/object_types.py:83 core/models.py:267 +#: core/graphene/object_types.py:83 core/models.py:273 msgid "brands" msgstr "" @@ -856,7 +948,7 @@ msgstr "" msgid "minimum and maximum prices for products in this category, if available." msgstr "" -#: core/graphene/object_types.py:202 core/models.py:404 +#: core/graphene/object_types.py:202 core/models.py:410 msgid "vendors" msgstr "" @@ -881,7 +973,7 @@ msgid "represents feedback from a user." msgstr "" #: core/graphene/object_types.py:246 core/graphene/object_types.py:287 -#: core/models.py:483 +#: core/models.py:489 msgid "notifications" msgstr "" @@ -893,7 +985,7 @@ msgstr "" msgid "a list of order products in this order" msgstr "" -#: core/graphene/object_types.py:278 core/models.py:453 +#: core/graphene/object_types.py:278 core/models.py:459 msgid "billing address" msgstr "" @@ -915,7 +1007,7 @@ msgstr "" msgid "are all products in the order digital" msgstr "" -#: core/graphene/object_types.py:305 core/models.py:517 +#: core/graphene/object_types.py:305 core/models.py:523 msgid "orders" msgstr "" @@ -927,15 +1019,15 @@ msgstr "" msgid "product's images" msgstr "" -#: core/graphene/object_types.py:335 core/models.py:219 core/models.py:277 +#: core/graphene/object_types.py:335 core/models.py:225 core/models.py:283 msgid "category" msgstr "" -#: core/graphene/object_types.py:337 core/models.py:440 +#: core/graphene/object_types.py:337 core/models.py:446 msgid "feedbacks" msgstr "" -#: core/graphene/object_types.py:338 core/models.py:266 core/models.py:285 +#: core/graphene/object_types.py:338 core/models.py:272 core/models.py:291 msgid "brand" msgstr "" @@ -955,7 +1047,7 @@ msgstr "" msgid "number of feedbacks" msgstr "" -#: core/graphene/object_types.py:360 core/models.py:329 +#: core/graphene/object_types.py:360 core/models.py:335 msgid "products" msgstr "" @@ -967,15 +1059,15 @@ msgstr "" msgid "products on sale" msgstr "" -#: core/graphene/object_types.py:425 core/models.py:1121 +#: core/graphene/object_types.py:425 core/models.py:1153 msgid "promotions" msgstr "" -#: core/graphene/object_types.py:429 core/models.py:403 +#: core/graphene/object_types.py:429 core/models.py:409 msgid "vendor" msgstr "" -#: core/graphene/object_types.py:430 core/models.py:328 +#: core/graphene/object_types.py:430 core/models.py:334 #: core/templates/digital_order_created_email.html:107 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:93 @@ -983,11 +1075,11 @@ msgstr "" msgid "product" msgstr "" -#: core/graphene/object_types.py:441 core/models.py:1191 +#: core/graphene/object_types.py:441 core/models.py:1223 msgid "wishlisted products" msgstr "" -#: core/graphene/object_types.py:447 core/models.py:1208 +#: core/graphene/object_types.py:447 core/models.py:1240 msgid "wishlists" msgstr "" @@ -995,7 +1087,7 @@ msgstr "" msgid "tagged products" msgstr "" -#: core/graphene/object_types.py:458 core/models.py:291 core/models.py:952 +#: core/graphene/object_types.py:458 core/models.py:297 core/models.py:959 msgid "product tags" msgstr "" @@ -1141,7 +1233,8 @@ msgstr "" msgid "the specific product associated with this attribute's value" msgstr "" -#: core/models.py:145 core/models.py:851 core/models.py:978 core/models.py:1147 +#: core/models.py:145 core/models.py:858 core/models.py:1010 +#: core/models.py:1179 msgid "associated product" msgstr "" @@ -1185,654 +1278,666 @@ msgstr "" msgid "category description" msgstr "" -#: core/models.py:229 +#: core/models.py:212 +msgid "tags that help describe or group this category" +msgstr "" + +#: core/models.py:213 core/models.py:984 +msgid "category tags" +msgstr "" + +#: core/models.py:235 msgid "name of this brand" msgstr "" -#: core/models.py:230 +#: core/models.py:236 msgid "brand name" msgstr "" -#: core/models.py:237 +#: core/models.py:243 msgid "upload a logo representing this brand" msgstr "" -#: core/models.py:239 +#: core/models.py:245 msgid "brand small image" msgstr "" -#: core/models.py:245 +#: core/models.py:251 msgid "upload a big logo representing this brand" msgstr "" -#: core/models.py:247 +#: core/models.py:253 msgid "brand big image" msgstr "" -#: core/models.py:252 +#: core/models.py:258 msgid "add a detailed description of the brand" msgstr "" -#: core/models.py:253 +#: core/models.py:259 msgid "brand description" msgstr "" -#: core/models.py:258 +#: core/models.py:264 msgid "optional categories that this brand is associated with" msgstr "" -#: core/models.py:259 +#: core/models.py:265 msgid "associated categories" msgstr "" -#: core/models.py:276 +#: core/models.py:282 msgid "category this product belongs to" msgstr "" -#: core/models.py:284 +#: core/models.py:290 msgid "optionally associate this product with a brand" msgstr "" -#: core/models.py:290 +#: core/models.py:296 msgid "tags that help describe or group this product" msgstr "" -#: core/models.py:295 +#: core/models.py:301 msgid "indicates whether this product is digitally delivered" msgstr "" -#: core/models.py:296 +#: core/models.py:302 msgid "is product digital" msgstr "" -#: core/models.py:302 +#: core/models.py:308 msgid "provide a clear identifying name for the product" msgstr "" -#: core/models.py:303 +#: core/models.py:309 msgid "product name" msgstr "" -#: core/models.py:308 core/models.py:1109 +#: core/models.py:314 core/models.py:1141 msgid "add a detailed description of the product" msgstr "" -#: core/models.py:309 +#: core/models.py:315 msgid "product description" msgstr "" -#: core/models.py:316 +#: core/models.py:322 msgid "part number for this product" msgstr "" -#: core/models.py:317 +#: core/models.py:323 msgid "part number" msgstr "" -#: core/models.py:381 +#: core/models.py:387 msgid "stores credentials and endpoints required for vendor communication" msgstr "" -#: core/models.py:382 +#: core/models.py:388 msgid "authentication info" msgstr "" -#: core/models.py:387 +#: core/models.py:393 msgid "define the markup for products retrieved from this vendor" msgstr "" -#: core/models.py:388 +#: core/models.py:394 msgid "vendor markup percentage" msgstr "" -#: core/models.py:392 +#: core/models.py:398 msgid "name of this vendor" msgstr "" -#: core/models.py:393 +#: core/models.py:399 msgid "vendor name" msgstr "" -#: core/models.py:416 +#: core/models.py:422 msgid "user-provided comments about their experience with the product" msgstr "" -#: core/models.py:417 +#: core/models.py:423 msgid "feedback comments" msgstr "" -#: core/models.py:424 +#: core/models.py:430 msgid "references the specific product in an order that this feedback is about" msgstr "" -#: core/models.py:425 +#: core/models.py:431 msgid "related order product" msgstr "" -#: core/models.py:430 +#: core/models.py:436 msgid "user-assigned rating for the product" msgstr "" -#: core/models.py:431 +#: core/models.py:437 msgid "product rating" msgstr "" -#: core/models.py:439 +#: core/models.py:445 msgid "feedback" msgstr "" -#: core/models.py:452 +#: core/models.py:458 msgid "the billing address used for this order" msgstr "" -#: core/models.py:460 +#: core/models.py:466 msgid "optional promo code applied to this order" msgstr "" -#: core/models.py:461 +#: core/models.py:467 msgid "applied promo code" msgstr "" -#: core/models.py:469 +#: core/models.py:475 msgid "the shipping address used for this order" msgstr "" -#: core/models.py:470 +#: core/models.py:476 msgid "shipping address" msgstr "" -#: core/models.py:476 +#: core/models.py:482 msgid "current status of the order in its lifecycle" msgstr "" -#: core/models.py:477 +#: core/models.py:483 msgid "order status" msgstr "" -#: core/models.py:482 core/models.py:828 +#: core/models.py:488 core/models.py:835 msgid "json structure of notifications to display to users" msgstr "" -#: core/models.py:488 +#: core/models.py:494 msgid "json representation of order attributes for this order" msgstr "" -#: core/models.py:494 +#: core/models.py:500 msgid "the user who placed the order" msgstr "" -#: core/models.py:495 +#: core/models.py:501 msgid "user" msgstr "" -#: core/models.py:501 +#: core/models.py:507 msgid "the timestamp when the order was finalized" msgstr "" -#: core/models.py:502 +#: core/models.py:508 msgid "buy time" msgstr "" -#: core/models.py:509 +#: core/models.py:515 msgid "a human-readable identifier for the order" msgstr "" -#: core/models.py:510 +#: core/models.py:516 msgid "human readable id" msgstr "" -#: core/models.py:516 +#: core/models.py:522 msgid "order" msgstr "" -#: core/models.py:531 +#: core/models.py:537 msgid "a user must have only one pending order at a time" msgstr "" -#: core/models.py:559 +#: core/models.py:566 msgid "you cannot add products to an order that is not a pending one" msgstr "" -#: core/models.py:564 +#: core/models.py:571 msgid "you cannot add inactive products to order" msgstr "" -#: core/models.py:581 +#: core/models.py:588 msgid "you cannot add more products than available in stock" msgstr "" -#: core/models.py:590 core/models.py:610 core/models.py:634 core/models.py:1218 -#: core/models.py:1230 +#: core/models.py:597 core/models.py:617 core/models.py:641 core/models.py:1250 +#: core/models.py:1262 #, python-brace-format msgid "{name} does not exist: {product_uuid}" msgstr "" -#: core/models.py:594 core/models.py:618 core/models.py:626 +#: core/models.py:601 core/models.py:625 core/models.py:633 msgid "you cannot remove products from an order that is not a pending one" msgstr "" -#: core/models.py:614 +#: core/models.py:621 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "" -#: core/models.py:645 +#: core/models.py:652 msgid "promocode does not exist" msgstr "" -#: core/models.py:654 +#: core/models.py:661 msgid "you can only buy physical products with shipping address specified" msgstr "" -#: core/models.py:673 +#: core/models.py:680 msgid "address does not exist" msgstr "" -#: core/models.py:684 core/models.py:727 +#: core/models.py:691 core/models.py:734 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" -#: core/models.py:687 +#: core/models.py:694 msgid "invalid force value" msgstr "" -#: core/models.py:692 core/models.py:730 +#: core/models.py:699 core/models.py:737 msgid "you cannot purchase an empty order!" msgstr "" -#: core/models.py:707 +#: core/models.py:714 msgid "insufficient funds to complete the order" msgstr "" -#: core/models.py:739 +#: core/models.py:746 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "" -#: core/models.py:748 +#: core/models.py:755 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" -#: core/models.py:816 +#: core/models.py:823 msgid "the price paid by the customer for this product at purchase time" msgstr "" -#: core/models.py:817 +#: core/models.py:824 msgid "purchase price at order time" msgstr "" -#: core/models.py:822 +#: core/models.py:829 msgid "internal comments for admins about this ordered product" msgstr "" -#: core/models.py:823 +#: core/models.py:830 msgid "internal comments" msgstr "" -#: core/models.py:829 +#: core/models.py:836 msgid "user notifications" msgstr "" -#: core/models.py:834 +#: core/models.py:841 msgid "json representation of this item's attributes" msgstr "" -#: core/models.py:835 +#: core/models.py:842 msgid "ordered product attributes" msgstr "" -#: core/models.py:840 +#: core/models.py:847 msgid "reference to the parent order that contains this product" msgstr "" -#: core/models.py:841 +#: core/models.py:848 msgid "parent order" msgstr "" -#: core/models.py:850 +#: core/models.py:857 msgid "the specific product associated with this order line" msgstr "" -#: core/models.py:857 +#: core/models.py:864 msgid "quantity of this specific product in the order" msgstr "" -#: core/models.py:858 +#: core/models.py:865 msgid "product quantity" msgstr "" -#: core/models.py:865 +#: core/models.py:872 msgid "current status of this product in the order" msgstr "" -#: core/models.py:866 +#: core/models.py:873 msgid "product line status" msgstr "" -#: core/models.py:918 +#: core/models.py:925 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "" -#: core/models.py:926 +#: core/models.py:933 msgid "you cannot feedback an order which is not received" msgstr "" -#: core/models.py:937 +#: core/models.py:944 core/models.py:969 msgid "internal tag identifier for the product tag" msgstr "" -#: core/models.py:938 +#: core/models.py:945 core/models.py:970 msgid "tag name" msgstr "" -#: core/models.py:942 +#: core/models.py:949 core/models.py:974 msgid "user-friendly name for the product tag" msgstr "" -#: core/models.py:943 +#: core/models.py:950 core/models.py:975 msgid "tag display name" msgstr "" -#: core/models.py:951 +#: core/models.py:958 msgid "product tag" msgstr "" -#: core/models.py:960 +#: core/models.py:983 +msgid "category tag" +msgstr "" + +#: core/models.py:992 msgid "provide alternative text for the image for accessibility" msgstr "" -#: core/models.py:961 +#: core/models.py:993 msgid "image alt text" msgstr "" -#: core/models.py:964 +#: core/models.py:996 msgid "upload the image file for this product" msgstr "" -#: core/models.py:965 core/models.py:990 +#: core/models.py:997 core/models.py:1022 msgid "product image" msgstr "" -#: core/models.py:971 +#: core/models.py:1003 msgid "determines the order in which images are displayed" msgstr "" -#: core/models.py:972 +#: core/models.py:1004 msgid "display priority" msgstr "" -#: core/models.py:977 +#: core/models.py:1009 msgid "the product that this image represents" msgstr "" -#: core/models.py:991 +#: core/models.py:1023 msgid "product images" msgstr "" -#: core/models.py:1001 +#: core/models.py:1033 msgid "unique code used by a user to redeem a discount" msgstr "" -#: core/models.py:1002 +#: core/models.py:1034 msgid "promo code identifier" msgstr "" -#: core/models.py:1009 +#: core/models.py:1041 msgid "fixed discount amount applied if percent is not used" msgstr "" -#: core/models.py:1010 +#: core/models.py:1042 msgid "fixed discount amount" msgstr "" -#: core/models.py:1016 +#: core/models.py:1048 msgid "percentage discount applied if fixed amount is not used" msgstr "" -#: core/models.py:1017 +#: core/models.py:1049 msgid "percentage discount" msgstr "" -#: core/models.py:1022 +#: core/models.py:1054 msgid "timestamp when the promocode expires" msgstr "" -#: core/models.py:1023 +#: core/models.py:1055 msgid "end validity time" msgstr "" -#: core/models.py:1028 +#: core/models.py:1060 msgid "timestamp from which this promocode is valid" msgstr "" -#: core/models.py:1029 +#: core/models.py:1061 msgid "start validity time" msgstr "" -#: core/models.py:1034 +#: core/models.py:1066 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" -#: core/models.py:1035 +#: core/models.py:1067 msgid "usage timestamp" msgstr "" -#: core/models.py:1040 +#: core/models.py:1072 msgid "user assigned to this promocode if applicable" msgstr "" -#: core/models.py:1041 +#: core/models.py:1073 msgid "assigned user" msgstr "" -#: core/models.py:1048 +#: core/models.py:1080 msgid "promo code" msgstr "" -#: core/models.py:1049 +#: core/models.py:1081 msgid "promo codes" msgstr "" -#: core/models.py:1056 +#: core/models.py:1088 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "" -#: core/models.py:1071 +#: core/models.py:1103 msgid "promocode already used" msgstr "" -#: core/models.py:1085 +#: core/models.py:1117 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "" -#: core/models.py:1097 +#: core/models.py:1129 msgid "percentage discount for the selected products" msgstr "" -#: core/models.py:1098 +#: core/models.py:1130 msgid "discount percentage" msgstr "" -#: core/models.py:1103 +#: core/models.py:1135 msgid "provide a unique name for this promotion" msgstr "" -#: core/models.py:1104 +#: core/models.py:1136 msgid "promotion name" msgstr "" -#: core/models.py:1110 +#: core/models.py:1142 msgid "promotion description" msgstr "" -#: core/models.py:1115 +#: core/models.py:1147 msgid "select which products are included in this promotion" msgstr "" -#: core/models.py:1116 +#: core/models.py:1148 msgid "included products" msgstr "" -#: core/models.py:1120 +#: core/models.py:1152 msgid "promotion" msgstr "" -#: core/models.py:1135 +#: core/models.py:1167 msgid "the vendor supplying this product stock" msgstr "" -#: core/models.py:1136 +#: core/models.py:1168 msgid "associated vendor" msgstr "" -#: core/models.py:1140 +#: core/models.py:1172 msgid "final price to the customer after markups" msgstr "" -#: core/models.py:1141 +#: core/models.py:1173 msgid "selling price" msgstr "" -#: core/models.py:1146 +#: core/models.py:1178 msgid "the product associated with this stock entry" msgstr "" -#: core/models.py:1154 +#: core/models.py:1186 msgid "the price paid to the vendor for this product" msgstr "" -#: core/models.py:1155 +#: core/models.py:1187 msgid "vendor purchase price" msgstr "" -#: core/models.py:1159 +#: core/models.py:1191 msgid "available quantity of the product in stock" msgstr "" -#: core/models.py:1160 +#: core/models.py:1192 msgid "quantity in stock" msgstr "" -#: core/models.py:1164 +#: core/models.py:1196 msgid "vendor-assigned SKU for identifying the product" msgstr "" -#: core/models.py:1165 +#: core/models.py:1197 msgid "vendor sku" msgstr "" -#: core/models.py:1171 +#: core/models.py:1203 msgid "digital file associated with this stock if applicable" msgstr "" -#: core/models.py:1172 +#: core/models.py:1204 msgid "digital file" msgstr "" -#: core/models.py:1181 +#: core/models.py:1213 msgid "stock entries" msgstr "" -#: core/models.py:1190 +#: core/models.py:1222 msgid "products that the user has marked as wanted" msgstr "" -#: core/models.py:1198 +#: core/models.py:1230 msgid "user who owns this wishlist" msgstr "" -#: core/models.py:1199 +#: core/models.py:1231 msgid "wishlist owner" msgstr "" -#: core/models.py:1207 +#: core/models.py:1239 msgid "wishlist" msgstr "" -#: core/models.py:1252 +#: core/models.py:1284 msgid "download" msgstr "" -#: core/models.py:1253 +#: core/models.py:1285 msgid "downloads" msgstr "" -#: core/models.py:1261 +#: core/models.py:1293 msgid "you can not download a digital asset for a non-finished order" msgstr "" -#: core/models.py:1273 +#: core/models.py:1305 msgid "documentary" msgstr "" -#: core/models.py:1274 +#: core/models.py:1306 msgid "documentaries" msgstr "" -#: core/models.py:1284 +#: core/models.py:1316 msgid "unresolved" msgstr "" -#: core/models.py:1293 +#: core/models.py:1325 msgid "address line for the customer" msgstr "" -#: core/models.py:1294 +#: core/models.py:1326 msgid "address line" msgstr "" -#: core/models.py:1296 +#: core/models.py:1328 msgid "street" msgstr "" -#: core/models.py:1297 +#: core/models.py:1329 msgid "district" msgstr "" -#: core/models.py:1298 +#: core/models.py:1330 msgid "city" msgstr "" -#: core/models.py:1299 +#: core/models.py:1331 msgid "region" msgstr "" -#: core/models.py:1300 +#: core/models.py:1332 msgid "postal code" msgstr "" -#: core/models.py:1301 +#: core/models.py:1333 msgid "country" msgstr "" -#: core/models.py:1304 +#: core/models.py:1336 msgid "geolocation point: (longitude, latitude)" msgstr "" -#: core/models.py:1307 +#: core/models.py:1339 msgid "full JSON response from geocoder for this address" msgstr "" -#: core/models.py:1309 +#: core/models.py:1341 msgid "stored JSON response from the geocoding service" msgstr "" -#: core/models.py:1316 +#: core/models.py:1348 msgid "address" msgstr "" -#: core/models.py:1317 +#: core/models.py:1349 msgid "addresses" msgstr "" -#: core/serializers/utility.py:76 +#: core/serializers/utility.py:77 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" @@ -2058,7 +2163,7 @@ msgstr "" msgid "favicon not found" msgstr "" -#: core/viewsets.py:680 +#: core/viewsets.py:677 #, python-brace-format msgid "Geocoding error: {e}" msgstr "" diff --git a/core/locale/it_IT/LC_MESSAGES/django.mo b/core/locale/it_IT/LC_MESSAGES/django.mo index a38574ba..3a0e6a2d 100644 Binary files a/core/locale/it_IT/LC_MESSAGES/django.mo and b/core/locale/it_IT/LC_MESSAGES/django.mo differ diff --git a/core/locale/it_IT/LC_MESSAGES/django.po b/core/locale/it_IT/LC_MESSAGES/django.po index f88fc363..39a039d8 100644 --- a/core/locale/it_IT/LC_MESSAGES/django.po +++ b/core/locale/it_IT/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-08 19:42+0100\n" +"POT-Creation-Date: 2025-06-10 03:32+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -83,7 +83,7 @@ msgstr "Immagine" msgid "images" msgstr "Immagini" -#: core/admin.py:162 core/models.py:1180 +#: core/admin.py:162 core/models.py:1212 msgid "stock" msgstr "Stock" @@ -111,11 +111,11 @@ msgstr "Informazioni di base" msgid "important dates" msgstr "Date importanti" -#: core/admin.py:253 core/models.py:874 +#: core/admin.py:253 core/models.py:881 msgid "order product" msgstr "Ordina il prodotto" -#: core/admin.py:254 core/graphene/object_types.py:262 core/models.py:875 +#: core/admin.py:254 core/graphene/object_types.py:262 core/models.py:882 msgid "order products" msgstr "Ordinare i prodotti" @@ -776,6 +776,98 @@ msgstr "aggiungere o rimuovere un feedback su una relazione ordine-prodotto" msgid "no search term provided." msgstr "Non è stato fornito alcun termine di ricerca." +#: core/filters.py:37 core/filters.py:357 +msgid "UUID" +msgstr "UUID" + +#: core/filters.py:38 core/filters.py:309 core/filters.py:340 +msgid "Name" +msgstr "Nome" + +#: core/filters.py:39 core/filters.py:341 +msgid "Categories" +msgstr "Categorie" + +#: core/filters.py:44 +msgid "Categories Slugs" +msgstr "Categorie Lumache" + +#: core/filters.py:45 core/filters.py:312 +msgid "Tags" +msgstr "Tag" + +#: core/filters.py:46 +msgid "Min Price" +msgstr "Prezzo minimo" + +#: core/filters.py:47 +msgid "Max Price" +msgstr "Max Price" + +#: core/filters.py:48 +msgid "Is Active" +msgstr "È attivo" + +#: core/filters.py:49 +msgid "Brand" +msgstr "Marchio" + +#: core/filters.py:50 +msgid "Attributes" +msgstr "Attributi" + +#: core/filters.py:51 +msgid "Quantity" +msgstr "Quantità" + +#: core/filters.py:52 core/filters.py:311 +msgid "Slug" +msgstr "Lumaca" + +#: core/filters.py:53 +msgid "Is Digital" +msgstr "È digitale" + +#: core/filters.py:56 +msgid "Include sub-categories" +msgstr "Includere le sottocategorie" + +#: core/filters.py:245 +msgid "Search (ID, product name or part number)" +msgstr "Ricerca (ID, nome del prodotto o numero di parte)" + +#: core/filters.py:248 +msgid "Bought after (inclusive)" +msgstr "Acquistato dopo (incluso)" + +#: core/filters.py:249 +msgid "Bought before (inclusive)" +msgstr "Acquistato prima (compreso)" + +#: core/filters.py:252 core/filters.py:295 +msgid "User email" +msgstr "Email dell'utente" + +#: core/filters.py:253 core/filters.py:296 core/filters.py:359 +msgid "User UUID" +msgstr "UUID utente" + +#: core/filters.py:254 +msgid "Status" +msgstr "Stato" + +#: core/filters.py:255 +msgid "Human Readable ID" +msgstr "ID leggibile dall'uomo" + +#: core/filters.py:310 +msgid "Parent" +msgstr "Genitore" + +#: core/filters.py:358 +msgid "Product UUID" +msgstr "UUID del prodotto" + #: core/graphene/mutations.py:38 msgid "key to look for in or set into the cache" msgstr "Chiave da cercare o da inserire nella cache" @@ -828,7 +920,7 @@ msgstr "" "Si prega di fornire order_uuid o order_hr_id, che si escludono a vicenda!" #: core/graphene/mutations.py:225 core/graphene/mutations.py:441 -#: core/graphene/mutations.py:475 core/viewsets.py:348 +#: core/graphene/mutations.py:475 core/viewsets.py:345 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" "Il metodo order.buy() ha fornito un tipo sbagliato: {type(instance)!s}" @@ -883,7 +975,7 @@ msgstr "" msgid "original address string provided by the user" msgstr "Stringa di indirizzo originale fornita dall'utente" -#: core/graphene/mutations.py:572 core/viewsets.py:238 core/viewsets.py:351 +#: core/graphene/mutations.py:572 core/viewsets.py:240 core/viewsets.py:348 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} non esiste: {uuid}" @@ -897,7 +989,7 @@ msgid "elasticsearch - works like a charm" msgstr "ElasticSearch: funziona a meraviglia" #: core/graphene/object_types.py:43 core/graphene/object_types.py:245 -#: core/graphene/object_types.py:286 core/models.py:126 core/models.py:489 +#: core/graphene/object_types.py:286 core/models.py:126 core/models.py:495 msgid "attributes" msgstr "Attributi" @@ -910,11 +1002,11 @@ msgid "groups of attributes" msgstr "Gruppi di attributi" #: core/graphene/object_types.py:76 core/graphene/object_types.py:104 -#: core/graphene/object_types.py:132 core/models.py:90 core/models.py:220 +#: core/graphene/object_types.py:132 core/models.py:90 core/models.py:226 msgid "categories" msgstr "Categorie" -#: core/graphene/object_types.py:83 core/models.py:267 +#: core/graphene/object_types.py:83 core/models.py:273 msgid "brands" msgstr "Marche" @@ -939,7 +1031,7 @@ msgid "" msgstr "" "Prezzi minimi e massimi per i prodotti di questa categoria, se disponibili." -#: core/graphene/object_types.py:202 core/models.py:404 +#: core/graphene/object_types.py:202 core/models.py:410 msgid "vendors" msgstr "Venditori" @@ -964,7 +1056,7 @@ msgid "represents feedback from a user." msgstr "Rappresenta il feedback di un utente." #: core/graphene/object_types.py:246 core/graphene/object_types.py:287 -#: core/models.py:483 +#: core/models.py:489 msgid "notifications" msgstr "Notifiche" @@ -976,7 +1068,7 @@ msgstr "URL di download per il prodotto dell'ordine, se applicabile" msgid "a list of order products in this order" msgstr "Un elenco di prodotti ordinati in questo ordine" -#: core/graphene/object_types.py:278 core/models.py:453 +#: core/graphene/object_types.py:278 core/models.py:459 msgid "billing address" msgstr "Indirizzo di fatturazione" @@ -1000,7 +1092,7 @@ msgstr "Quantità totale di prodotti in ordine" msgid "are all products in the order digital" msgstr "Tutti i prodotti sono presenti nell'ordine digitale" -#: core/graphene/object_types.py:305 core/models.py:517 +#: core/graphene/object_types.py:305 core/models.py:523 msgid "orders" msgstr "Ordini" @@ -1012,15 +1104,15 @@ msgstr "URL immagine" msgid "product's images" msgstr "Immagini del prodotto" -#: core/graphene/object_types.py:335 core/models.py:219 core/models.py:277 +#: core/graphene/object_types.py:335 core/models.py:225 core/models.py:283 msgid "category" msgstr "Categoria" -#: core/graphene/object_types.py:337 core/models.py:440 +#: core/graphene/object_types.py:337 core/models.py:446 msgid "feedbacks" msgstr "Feedback" -#: core/graphene/object_types.py:338 core/models.py:266 core/models.py:285 +#: core/graphene/object_types.py:338 core/models.py:272 core/models.py:291 msgid "brand" msgstr "Marchio" @@ -1040,7 +1132,7 @@ msgstr "Quantità" msgid "number of feedbacks" msgstr "Numero di feedback" -#: core/graphene/object_types.py:360 core/models.py:329 +#: core/graphene/object_types.py:360 core/models.py:335 msgid "products" msgstr "Prodotti" @@ -1052,15 +1144,15 @@ msgstr "Codici promozionali" msgid "products on sale" msgstr "Prodotti in vendita" -#: core/graphene/object_types.py:425 core/models.py:1121 +#: core/graphene/object_types.py:425 core/models.py:1153 msgid "promotions" msgstr "Promozioni" -#: core/graphene/object_types.py:429 core/models.py:403 +#: core/graphene/object_types.py:429 core/models.py:409 msgid "vendor" msgstr "Venditore" -#: core/graphene/object_types.py:430 core/models.py:328 +#: core/graphene/object_types.py:430 core/models.py:334 #: core/templates/digital_order_created_email.html:107 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:93 @@ -1068,11 +1160,11 @@ msgstr "Venditore" msgid "product" msgstr "Prodotto" -#: core/graphene/object_types.py:441 core/models.py:1191 +#: core/graphene/object_types.py:441 core/models.py:1223 msgid "wishlisted products" msgstr "Prodotti desiderati" -#: core/graphene/object_types.py:447 core/models.py:1208 +#: core/graphene/object_types.py:447 core/models.py:1240 msgid "wishlists" msgstr "Liste dei desideri" @@ -1080,7 +1172,7 @@ msgstr "Liste dei desideri" msgid "tagged products" msgstr "Prodotti contrassegnati" -#: core/graphene/object_types.py:458 core/models.py:291 core/models.py:952 +#: core/graphene/object_types.py:458 core/models.py:297 core/models.py:959 msgid "product tags" msgstr "Tag del prodotto" @@ -1227,8 +1319,8 @@ msgstr "Attributo di questo valore" msgid "the specific product associated with this attribute's value" msgstr "Il prodotto specifico associato al valore di questo attributo" -#: core/models.py:145 core/models.py:851 core/models.py:978 -#: core/models.py:1147 +#: core/models.py:145 core/models.py:858 core/models.py:1010 +#: core/models.py:1179 msgid "associated product" msgstr "Prodotto associato" @@ -1273,277 +1365,285 @@ msgstr "Aggiungere una descrizione dettagliata per questa categoria" msgid "category description" msgstr "Descrizione della categoria" -#: core/models.py:229 +#: core/models.py:212 +msgid "tags that help describe or group this category" +msgstr "tag che aiutano a descrivere o raggruppare questa categoria" + +#: core/models.py:213 core/models.py:984 +msgid "category tags" +msgstr "tag di categoria" + +#: core/models.py:235 msgid "name of this brand" msgstr "Nome del marchio" -#: core/models.py:230 +#: core/models.py:236 msgid "brand name" msgstr "Nome del marchio" -#: core/models.py:237 +#: core/models.py:243 msgid "upload a logo representing this brand" msgstr "Caricare un logo che rappresenti questo marchio" -#: core/models.py:239 +#: core/models.py:245 msgid "brand small image" msgstr "Immagine piccola del marchio" -#: core/models.py:245 +#: core/models.py:251 msgid "upload a big logo representing this brand" msgstr "Caricare un grande logo che rappresenti questo marchio" -#: core/models.py:247 +#: core/models.py:253 msgid "brand big image" msgstr "Grande immagine del marchio" -#: core/models.py:252 +#: core/models.py:258 msgid "add a detailed description of the brand" msgstr "Aggiungere una descrizione dettagliata del marchio" -#: core/models.py:253 +#: core/models.py:259 msgid "brand description" msgstr "Descrizione del marchio" -#: core/models.py:258 +#: core/models.py:264 msgid "optional categories that this brand is associated with" msgstr "Categorie opzionali a cui questo marchio è associato" -#: core/models.py:259 +#: core/models.py:265 msgid "associated categories" msgstr "Categorie" -#: core/models.py:276 +#: core/models.py:282 msgid "category this product belongs to" msgstr "Categoria a cui appartiene questo prodotto" -#: core/models.py:284 +#: core/models.py:290 msgid "optionally associate this product with a brand" msgstr "Associare facoltativamente questo prodotto a un marchio" -#: core/models.py:290 +#: core/models.py:296 msgid "tags that help describe or group this product" msgstr "Tag che aiutano a descrivere o raggruppare questo prodotto" -#: core/models.py:295 +#: core/models.py:301 msgid "indicates whether this product is digitally delivered" msgstr "Indica se il prodotto è consegnato in formato digitale" -#: core/models.py:296 +#: core/models.py:302 msgid "is product digital" msgstr "Il prodotto è digitale" -#: core/models.py:302 +#: core/models.py:308 msgid "provide a clear identifying name for the product" msgstr "Fornire un nome identificativo chiaro per il prodotto" -#: core/models.py:303 +#: core/models.py:309 msgid "product name" msgstr "Nome del prodotto" -#: core/models.py:308 core/models.py:1109 +#: core/models.py:314 core/models.py:1141 msgid "add a detailed description of the product" msgstr "Aggiungere una descrizione dettagliata del prodotto" -#: core/models.py:309 +#: core/models.py:315 msgid "product description" msgstr "Descrizione del prodotto" -#: core/models.py:316 +#: core/models.py:322 msgid "part number for this product" msgstr "Numero di parte per questo prodotto" -#: core/models.py:317 +#: core/models.py:323 msgid "part number" msgstr "Numero di parte" -#: core/models.py:381 +#: core/models.py:387 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Memorizza le credenziali e gli endpoint necessari per la comunicazione API " "del fornitore." -#: core/models.py:382 +#: core/models.py:388 msgid "authentication info" msgstr "Informazioni sull'autenticazione" -#: core/models.py:387 +#: core/models.py:393 msgid "define the markup for products retrieved from this vendor" msgstr "Definire il markup per i prodotti recuperati da questo fornitore" -#: core/models.py:388 +#: core/models.py:394 msgid "vendor markup percentage" msgstr "Percentuale di ricarico del fornitore" -#: core/models.py:392 +#: core/models.py:398 msgid "name of this vendor" msgstr "Nome del fornitore" -#: core/models.py:393 +#: core/models.py:399 msgid "vendor name" msgstr "Nome del fornitore" -#: core/models.py:416 +#: core/models.py:422 msgid "user-provided comments about their experience with the product" msgstr "Commenti degli utenti sulla loro esperienza con il prodotto" -#: core/models.py:417 +#: core/models.py:423 msgid "feedback comments" msgstr "Commenti di feedback" -#: core/models.py:424 +#: core/models.py:430 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "Riferisce il prodotto specifico in un ordine di cui si tratta il feedback." -#: core/models.py:425 +#: core/models.py:431 msgid "related order product" msgstr "Prodotto correlato all'ordine" -#: core/models.py:430 +#: core/models.py:436 msgid "user-assigned rating for the product" msgstr "Valutazione del prodotto assegnata dall'utente" -#: core/models.py:431 +#: core/models.py:437 msgid "product rating" msgstr "Valutazione del prodotto" -#: core/models.py:439 +#: core/models.py:445 msgid "feedback" msgstr "Feedback" -#: core/models.py:452 +#: core/models.py:458 msgid "the billing address used for this order" msgstr "L'indirizzo di fatturazione utilizzato per questo ordine" -#: core/models.py:460 +#: core/models.py:466 msgid "optional promo code applied to this order" msgstr "Codice promozionale opzionale applicato a questo ordine" -#: core/models.py:461 +#: core/models.py:467 msgid "applied promo code" msgstr "Codice promozionale applicato" -#: core/models.py:469 +#: core/models.py:475 msgid "the shipping address used for this order" msgstr "L'indirizzo di spedizione utilizzato per questo ordine" -#: core/models.py:470 +#: core/models.py:476 msgid "shipping address" msgstr "Indirizzo di spedizione" -#: core/models.py:476 +#: core/models.py:482 msgid "current status of the order in its lifecycle" msgstr "Stato attuale dell'ordine nel suo ciclo di vita" -#: core/models.py:477 +#: core/models.py:483 msgid "order status" msgstr "Stato dell'ordine" -#: core/models.py:482 core/models.py:828 +#: core/models.py:488 core/models.py:835 msgid "json structure of notifications to display to users" msgstr "" "Struttura JSON delle notifiche da mostrare agli utenti; nell'interfaccia " "utente dell'amministratore viene utilizzata la visualizzazione a tabella." -#: core/models.py:488 +#: core/models.py:494 msgid "json representation of order attributes for this order" msgstr "Rappresentazione JSON degli attributi dell'ordine per questo ordine" -#: core/models.py:494 +#: core/models.py:500 msgid "the user who placed the order" msgstr "L'utente che ha effettuato l'ordine" -#: core/models.py:495 +#: core/models.py:501 msgid "user" msgstr "Utente" -#: core/models.py:501 +#: core/models.py:507 msgid "the timestamp when the order was finalized" msgstr "Il timestamp del momento in cui l'ordine è stato finalizzato" -#: core/models.py:502 +#: core/models.py:508 msgid "buy time" msgstr "Acquista tempo" -#: core/models.py:509 +#: core/models.py:515 msgid "a human-readable identifier for the order" msgstr "Un identificatore leggibile dall'uomo per l'ordine" -#: core/models.py:510 +#: core/models.py:516 msgid "human readable id" msgstr "ID leggibile dall'uomo" -#: core/models.py:516 +#: core/models.py:522 msgid "order" msgstr "Ordine" -#: core/models.py:531 +#: core/models.py:537 msgid "a user must have only one pending order at a time" msgstr "Un utente può avere un solo ordine pendente alla volta!" -#: core/models.py:559 +#: core/models.py:566 msgid "you cannot add products to an order that is not a pending one" msgstr "" "Non è possibile aggiungere prodotti a un ordine che non sia in sospeso." -#: core/models.py:564 +#: core/models.py:571 msgid "you cannot add inactive products to order" msgstr "Non è possibile aggiungere all'ordine prodotti inattivi" -#: core/models.py:581 +#: core/models.py:588 msgid "you cannot add more products than available in stock" msgstr "" "Non è possibile aggiungere più prodotti di quelli disponibili in magazzino" -#: core/models.py:590 core/models.py:610 core/models.py:634 -#: core/models.py:1218 core/models.py:1230 +#: core/models.py:597 core/models.py:617 core/models.py:641 +#: core/models.py:1250 core/models.py:1262 #, python-brace-format msgid "{name} does not exist: {product_uuid}" msgstr "{name} non esiste: {product_uuid}" -#: core/models.py:594 core/models.py:618 core/models.py:626 +#: core/models.py:601 core/models.py:625 core/models.py:633 msgid "you cannot remove products from an order that is not a pending one" msgstr "Non è possibile rimuovere i prodotti da un ordine che non è in corso." -#: core/models.py:614 +#: core/models.py:621 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} non esiste con la query <{query}>." -#: core/models.py:645 +#: core/models.py:652 msgid "promocode does not exist" msgstr "Il codice promozionale non esiste" -#: core/models.py:654 +#: core/models.py:661 msgid "you can only buy physical products with shipping address specified" msgstr "" "È possibile acquistare solo prodotti fisici con indirizzo di spedizione " "specificato!" -#: core/models.py:673 +#: core/models.py:680 msgid "address does not exist" msgstr "L'indirizzo non esiste" -#: core/models.py:684 core/models.py:727 +#: core/models.py:691 core/models.py:734 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "In questo momento non è possibile acquistare, riprovare tra qualche minuto." -#: core/models.py:687 +#: core/models.py:694 msgid "invalid force value" msgstr "Valore di forza non valido" -#: core/models.py:692 core/models.py:730 +#: core/models.py:699 core/models.py:737 msgid "you cannot purchase an empty order!" msgstr "Non è possibile acquistare un ordine vuoto!" -#: core/models.py:707 +#: core/models.py:714 msgid "insufficient funds to complete the order" msgstr "Fondi insufficienti per completare l'ordine" -#: core/models.py:739 +#: core/models.py:746 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -1552,7 +1652,7 @@ msgstr "" "seguenti informazioni: nome del cliente, e-mail del cliente, numero di " "telefono del cliente" -#: core/models.py:748 +#: core/models.py:755 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -1560,193 +1660,197 @@ msgstr "" "Metodo di pagamento non valido: {payment_method} da " "{available_payment_methods}!" -#: core/models.py:816 +#: core/models.py:823 msgid "the price paid by the customer for this product at purchase time" msgstr "" "Il prezzo pagato dal cliente per questo prodotto al momento dell'acquisto." -#: core/models.py:817 +#: core/models.py:824 msgid "purchase price at order time" msgstr "Prezzo di acquisto al momento dell'ordine" -#: core/models.py:822 +#: core/models.py:829 msgid "internal comments for admins about this ordered product" msgstr "Commenti interni per gli amministratori su questo prodotto ordinato" -#: core/models.py:823 +#: core/models.py:830 msgid "internal comments" msgstr "Commenti interni" -#: core/models.py:829 +#: core/models.py:836 msgid "user notifications" msgstr "Notifiche degli utenti" -#: core/models.py:834 +#: core/models.py:841 msgid "json representation of this item's attributes" msgstr "Rappresentazione JSON degli attributi di questo elemento" -#: core/models.py:835 +#: core/models.py:842 msgid "ordered product attributes" msgstr "Attributi del prodotto ordinati" -#: core/models.py:840 +#: core/models.py:847 msgid "reference to the parent order that contains this product" msgstr "Riferimento all'ordine padre che contiene questo prodotto" -#: core/models.py:841 +#: core/models.py:848 msgid "parent order" msgstr "Ordine dei genitori" -#: core/models.py:850 +#: core/models.py:857 msgid "the specific product associated with this order line" msgstr "Il prodotto specifico associato a questa riga d'ordine" -#: core/models.py:857 +#: core/models.py:864 msgid "quantity of this specific product in the order" msgstr "Quantità di questo prodotto specifico nell'ordine" -#: core/models.py:858 +#: core/models.py:865 msgid "product quantity" msgstr "Quantità di prodotto" -#: core/models.py:865 +#: core/models.py:872 msgid "current status of this product in the order" msgstr "Stato attuale di questo prodotto nell'ordine" -#: core/models.py:866 +#: core/models.py:873 msgid "product line status" msgstr "Stato della linea di prodotti" -#: core/models.py:918 +#: core/models.py:925 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "azione errata specificata per il feedback: {action}" -#: core/models.py:926 +#: core/models.py:933 msgid "you cannot feedback an order which is not received" msgstr "non è possibile dare un riscontro a un ordine non ricevuto" -#: core/models.py:937 +#: core/models.py:944 core/models.py:969 msgid "internal tag identifier for the product tag" msgstr "Identificatore interno dell'etichetta del prodotto" -#: core/models.py:938 +#: core/models.py:945 core/models.py:970 msgid "tag name" msgstr "Nome del tag" -#: core/models.py:942 +#: core/models.py:949 core/models.py:974 msgid "user-friendly name for the product tag" msgstr "Nome intuitivo per l'etichetta del prodotto" -#: core/models.py:943 +#: core/models.py:950 core/models.py:975 msgid "tag display name" msgstr "Nome del tag" -#: core/models.py:951 +#: core/models.py:958 msgid "product tag" msgstr "Etichetta del prodotto" -#: core/models.py:960 +#: core/models.py:983 +msgid "category tag" +msgstr "tag categoria" + +#: core/models.py:992 msgid "provide alternative text for the image for accessibility" msgstr "" "Fornire un testo alternativo per l'immagine ai fini dell'accessibilità." -#: core/models.py:961 +#: core/models.py:993 msgid "image alt text" msgstr "Testo alt dell'immagine" -#: core/models.py:964 +#: core/models.py:996 msgid "upload the image file for this product" msgstr "Caricare il file immagine per questo prodotto" -#: core/models.py:965 core/models.py:990 +#: core/models.py:997 core/models.py:1022 msgid "product image" msgstr "Immagine del prodotto" -#: core/models.py:971 +#: core/models.py:1003 msgid "determines the order in which images are displayed" msgstr "Determina l'ordine di visualizzazione delle immagini" -#: core/models.py:972 +#: core/models.py:1004 msgid "display priority" msgstr "Priorità del display" -#: core/models.py:977 +#: core/models.py:1009 msgid "the product that this image represents" msgstr "Il prodotto che questa immagine rappresenta" -#: core/models.py:991 +#: core/models.py:1023 msgid "product images" msgstr "Immagini del prodotto" -#: core/models.py:1001 +#: core/models.py:1033 msgid "unique code used by a user to redeem a discount" msgstr "Codice univoco utilizzato da un utente per riscattare uno sconto" -#: core/models.py:1002 +#: core/models.py:1034 msgid "promo code identifier" msgstr "Identificatore del codice promozionale" -#: core/models.py:1009 +#: core/models.py:1041 msgid "fixed discount amount applied if percent is not used" msgstr "" "Importo fisso dello sconto applicato se non si utilizza la percentuale" -#: core/models.py:1010 +#: core/models.py:1042 msgid "fixed discount amount" msgstr "Importo fisso dello sconto" -#: core/models.py:1016 +#: core/models.py:1048 msgid "percentage discount applied if fixed amount is not used" msgstr "Sconto percentuale applicato se l'importo fisso non viene utilizzato" -#: core/models.py:1017 +#: core/models.py:1049 msgid "percentage discount" msgstr "Sconto percentuale" -#: core/models.py:1022 +#: core/models.py:1054 msgid "timestamp when the promocode expires" msgstr "Data di scadenza del codice promozionale" -#: core/models.py:1023 +#: core/models.py:1055 msgid "end validity time" msgstr "Tempo di validità finale" -#: core/models.py:1028 +#: core/models.py:1060 msgid "timestamp from which this promocode is valid" msgstr "Data a partire dalla quale il codice promozionale è valido" -#: core/models.py:1029 +#: core/models.py:1061 msgid "start validity time" msgstr "Ora di inizio validità" -#: core/models.py:1034 +#: core/models.py:1066 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "Timestamp in cui è stato utilizzato il codice promozionale, vuoto se non " "ancora utilizzato" -#: core/models.py:1035 +#: core/models.py:1067 msgid "usage timestamp" msgstr "Timestamp d'uso" -#: core/models.py:1040 +#: core/models.py:1072 msgid "user assigned to this promocode if applicable" msgstr "Utente assegnato a questo codice promozionale, se applicabile" -#: core/models.py:1041 +#: core/models.py:1073 msgid "assigned user" msgstr "Utente assegnato" -#: core/models.py:1048 +#: core/models.py:1080 msgid "promo code" msgstr "Codice promozionale" -#: core/models.py:1049 +#: core/models.py:1081 msgid "promo codes" msgstr "Codici promozionali" -#: core/models.py:1056 +#: core/models.py:1088 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -1754,196 +1858,196 @@ msgstr "" "È necessario definire un solo tipo di sconto (importo o percentuale), ma non" " entrambi o nessuno." -#: core/models.py:1071 +#: core/models.py:1103 msgid "promocode already used" msgstr "Il codice promozionale è già stato utilizzato" -#: core/models.py:1085 +#: core/models.py:1117 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Tipo di sconto non valido per il codice promozionale {self.uuid}" -#: core/models.py:1097 +#: core/models.py:1129 msgid "percentage discount for the selected products" msgstr "Percentuale di sconto per i prodotti selezionati" -#: core/models.py:1098 +#: core/models.py:1130 msgid "discount percentage" msgstr "Percentuale di sconto" -#: core/models.py:1103 +#: core/models.py:1135 msgid "provide a unique name for this promotion" msgstr "Fornite un nome unico per questa promozione" -#: core/models.py:1104 +#: core/models.py:1136 msgid "promotion name" msgstr "Nome della promozione" -#: core/models.py:1110 +#: core/models.py:1142 msgid "promotion description" msgstr "Descrizione della promozione" -#: core/models.py:1115 +#: core/models.py:1147 msgid "select which products are included in this promotion" msgstr "Selezionare i prodotti inclusi in questa promozione" -#: core/models.py:1116 +#: core/models.py:1148 msgid "included products" msgstr "Prodotti inclusi" -#: core/models.py:1120 +#: core/models.py:1152 msgid "promotion" msgstr "Promozione" -#: core/models.py:1135 +#: core/models.py:1167 msgid "the vendor supplying this product stock" msgstr "Il venditore che fornisce questo stock di prodotti" -#: core/models.py:1136 +#: core/models.py:1168 msgid "associated vendor" msgstr "Venditore associato" -#: core/models.py:1140 +#: core/models.py:1172 msgid "final price to the customer after markups" msgstr "Prezzo finale al cliente dopo i ricarichi" -#: core/models.py:1141 +#: core/models.py:1173 msgid "selling price" msgstr "Prezzo di vendita" -#: core/models.py:1146 +#: core/models.py:1178 msgid "the product associated with this stock entry" msgstr "Il prodotto associato a questa voce di magazzino" -#: core/models.py:1154 +#: core/models.py:1186 msgid "the price paid to the vendor for this product" msgstr "Il prezzo pagato al venditore per questo prodotto" -#: core/models.py:1155 +#: core/models.py:1187 msgid "vendor purchase price" msgstr "Prezzo di acquisto del fornitore" -#: core/models.py:1159 +#: core/models.py:1191 msgid "available quantity of the product in stock" msgstr "Quantità disponibile del prodotto in magazzino" -#: core/models.py:1160 +#: core/models.py:1192 msgid "quantity in stock" msgstr "Quantità in magazzino" -#: core/models.py:1164 +#: core/models.py:1196 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU assegnato dal fornitore per identificare il prodotto" -#: core/models.py:1165 +#: core/models.py:1197 msgid "vendor sku" msgstr "SKU del venditore" -#: core/models.py:1171 +#: core/models.py:1203 msgid "digital file associated with this stock if applicable" msgstr "File digitale associato a questo stock, se applicabile" -#: core/models.py:1172 +#: core/models.py:1204 msgid "digital file" msgstr "File digitale" -#: core/models.py:1181 +#: core/models.py:1213 msgid "stock entries" msgstr "Voci di magazzino" -#: core/models.py:1190 +#: core/models.py:1222 msgid "products that the user has marked as wanted" msgstr "Prodotti che l'utente ha contrassegnato come desiderati" -#: core/models.py:1198 +#: core/models.py:1230 msgid "user who owns this wishlist" msgstr "Utente che possiede questa wishlist" -#: core/models.py:1199 +#: core/models.py:1231 msgid "wishlist owner" msgstr "Proprietario della lista dei desideri" -#: core/models.py:1207 +#: core/models.py:1239 msgid "wishlist" msgstr "Lista dei desideri" -#: core/models.py:1252 +#: core/models.py:1284 msgid "download" msgstr "Scaricare" -#: core/models.py:1253 +#: core/models.py:1285 msgid "downloads" msgstr "Scaricamento" -#: core/models.py:1261 +#: core/models.py:1293 msgid "you can not download a digital asset for a non-finished order" msgstr "Non è possibile scaricare un bene digitale per un ordine non finito." -#: core/models.py:1273 +#: core/models.py:1305 msgid "documentary" msgstr "Documentario" -#: core/models.py:1274 +#: core/models.py:1306 msgid "documentaries" msgstr "Documentari" -#: core/models.py:1284 +#: core/models.py:1316 msgid "unresolved" msgstr "Non risolto" -#: core/models.py:1293 +#: core/models.py:1325 msgid "address line for the customer" msgstr "Indirizzo del cliente" -#: core/models.py:1294 +#: core/models.py:1326 msgid "address line" msgstr "Linea di indirizzo" -#: core/models.py:1296 +#: core/models.py:1328 msgid "street" msgstr "Via" -#: core/models.py:1297 +#: core/models.py:1329 msgid "district" msgstr "Distretto" -#: core/models.py:1298 +#: core/models.py:1330 msgid "city" msgstr "Città" -#: core/models.py:1299 +#: core/models.py:1331 msgid "region" msgstr "Regione" -#: core/models.py:1300 +#: core/models.py:1332 msgid "postal code" msgstr "Codice postale" -#: core/models.py:1301 +#: core/models.py:1333 msgid "country" msgstr "Paese" -#: core/models.py:1304 +#: core/models.py:1336 msgid "geolocation point: (longitude, latitude)" msgstr "Punto di geolocalizzazione(Longitudine, Latitudine)" -#: core/models.py:1307 +#: core/models.py:1339 msgid "full JSON response from geocoder for this address" msgstr "Risposta JSON completa di geocoder per questo indirizzo" -#: core/models.py:1309 +#: core/models.py:1341 msgid "stored JSON response from the geocoding service" msgstr "Risposta JSON memorizzata dal servizio di geocodifica" -#: core/models.py:1316 +#: core/models.py:1348 msgid "address" msgstr "Indirizzo" -#: core/models.py:1317 +#: core/models.py:1349 msgid "addresses" msgstr "Indirizzi" -#: core/serializers/utility.py:76 +#: core/serializers/utility.py:77 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" @@ -2185,7 +2289,7 @@ msgstr "È possibile scaricare l'asset digitale una sola volta" msgid "favicon not found" msgstr "favicon non trovata" -#: core/viewsets.py:680 +#: core/viewsets.py:677 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Errore di geocodifica: {e}" diff --git a/core/locale/ja_JP/LC_MESSAGES/django.mo b/core/locale/ja_JP/LC_MESSAGES/django.mo index e01ae29a..191f5498 100644 Binary files a/core/locale/ja_JP/LC_MESSAGES/django.mo and b/core/locale/ja_JP/LC_MESSAGES/django.mo differ diff --git a/core/locale/ja_JP/LC_MESSAGES/django.po b/core/locale/ja_JP/LC_MESSAGES/django.po index 7646b5e2..cb90a6cb 100644 --- a/core/locale/ja_JP/LC_MESSAGES/django.po +++ b/core/locale/ja_JP/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-08 19:42+0100\n" +"POT-Creation-Date: 2025-06-10 03:32+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -79,7 +79,7 @@ msgstr "画像" msgid "images" msgstr "画像" -#: core/admin.py:162 core/models.py:1180 +#: core/admin.py:162 core/models.py:1212 msgid "stock" msgstr "在庫" @@ -107,11 +107,11 @@ msgstr "基本情報" msgid "important dates" msgstr "重要な日程" -#: core/admin.py:253 core/models.py:874 +#: core/admin.py:253 core/models.py:881 msgid "order product" msgstr "商品のご注文" -#: core/admin.py:254 core/graphene/object_types.py:262 core/models.py:875 +#: core/admin.py:254 core/graphene/object_types.py:262 core/models.py:882 msgid "order products" msgstr "商品のご注文" @@ -715,6 +715,98 @@ msgstr "注文と商品の関係に関するフィードバックを追加また msgid "no search term provided." msgstr "検索語はありません。" +#: core/filters.py:37 core/filters.py:357 +msgid "UUID" +msgstr "ユーユーアイディー" + +#: core/filters.py:38 core/filters.py:309 core/filters.py:340 +msgid "Name" +msgstr "名称" + +#: core/filters.py:39 core/filters.py:341 +msgid "Categories" +msgstr "カテゴリー" + +#: core/filters.py:44 +msgid "Categories Slugs" +msgstr "カテゴリー ナメクジ" + +#: core/filters.py:45 core/filters.py:312 +msgid "Tags" +msgstr "タグ" + +#: core/filters.py:46 +msgid "Min Price" +msgstr "最低価格" + +#: core/filters.py:47 +msgid "Max Price" +msgstr "最高価格" + +#: core/filters.py:48 +msgid "Is Active" +msgstr "アクティブ" + +#: core/filters.py:49 +msgid "Brand" +msgstr "ブランド" + +#: core/filters.py:50 +msgid "Attributes" +msgstr "属性" + +#: core/filters.py:51 +msgid "Quantity" +msgstr "数量" + +#: core/filters.py:52 core/filters.py:311 +msgid "Slug" +msgstr "スラッグ" + +#: core/filters.py:53 +msgid "Is Digital" +msgstr "デジタル" + +#: core/filters.py:56 +msgid "Include sub-categories" +msgstr "サブカテゴリーを含む" + +#: core/filters.py:245 +msgid "Search (ID, product name or part number)" +msgstr "検索(ID、製品名または部品番号)" + +#: core/filters.py:248 +msgid "Bought after (inclusive)" +msgstr "購入時期" + +#: core/filters.py:249 +msgid "Bought before (inclusive)" +msgstr "以前に購入したもの(含む)" + +#: core/filters.py:252 core/filters.py:295 +msgid "User email" +msgstr "ユーザーEメール" + +#: core/filters.py:253 core/filters.py:296 core/filters.py:359 +msgid "User UUID" +msgstr "ユーザーUUID" + +#: core/filters.py:254 +msgid "Status" +msgstr "ステータス" + +#: core/filters.py:255 +msgid "Human Readable ID" +msgstr "人間が読めるID" + +#: core/filters.py:310 +msgid "Parent" +msgstr "親" + +#: core/filters.py:358 +msgid "Product UUID" +msgstr "製品UUID" + #: core/graphene/mutations.py:38 msgid "key to look for in or set into the cache" msgstr "キャッシュを探すキー、またはキャッシュにセットするキー" @@ -766,7 +858,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "order_uuidまたはorder_hr_idを入力してください!" #: core/graphene/mutations.py:225 core/graphene/mutations.py:441 -#: core/graphene/mutations.py:475 core/viewsets.py:348 +#: core/graphene/mutations.py:475 core/viewsets.py:345 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "order.buy()メソッドから間違った型が来た:{type(instance)!s}。" @@ -818,7 +910,7 @@ msgstr "属性は、attr1=value1,attr2=value2のような形式の文字列と msgid "original address string provided by the user" msgstr "ユーザーが提供したオリジナルのアドレス文字列" -#: core/graphene/mutations.py:572 core/viewsets.py:238 core/viewsets.py:351 +#: core/graphene/mutations.py:572 core/viewsets.py:240 core/viewsets.py:348 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} は存在しません:{uuid} は存在しません。" @@ -832,7 +924,7 @@ msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - 魅力のように動作" #: core/graphene/object_types.py:43 core/graphene/object_types.py:245 -#: core/graphene/object_types.py:286 core/models.py:126 core/models.py:489 +#: core/graphene/object_types.py:286 core/models.py:126 core/models.py:495 msgid "attributes" msgstr "属性" @@ -845,11 +937,11 @@ msgid "groups of attributes" msgstr "属性のグループ" #: core/graphene/object_types.py:76 core/graphene/object_types.py:104 -#: core/graphene/object_types.py:132 core/models.py:90 core/models.py:220 +#: core/graphene/object_types.py:132 core/models.py:90 core/models.py:226 msgid "categories" msgstr "カテゴリー" -#: core/graphene/object_types.py:83 core/models.py:267 +#: core/graphene/object_types.py:83 core/models.py:273 msgid "brands" msgstr "ブランド" @@ -871,7 +963,7 @@ msgid "" "minimum and maximum prices for products in this category, if available." msgstr "このカテゴリーの商品の最低価格と最高価格がある場合。" -#: core/graphene/object_types.py:202 core/models.py:404 +#: core/graphene/object_types.py:202 core/models.py:410 msgid "vendors" msgstr "ベンダー" @@ -896,7 +988,7 @@ msgid "represents feedback from a user." msgstr "ユーザーからのフィードバックを表す。" #: core/graphene/object_types.py:246 core/graphene/object_types.py:287 -#: core/models.py:483 +#: core/models.py:489 msgid "notifications" msgstr "お知らせ" @@ -908,7 +1000,7 @@ msgstr "該当する場合は、この注文商品のダウンロードURLを入 msgid "a list of order products in this order" msgstr "注文商品のリスト" -#: core/graphene/object_types.py:278 core/models.py:453 +#: core/graphene/object_types.py:278 core/models.py:459 msgid "billing address" msgstr "請求先住所" @@ -930,7 +1022,7 @@ msgstr "注文商品の総数量" msgid "are all products in the order digital" msgstr "ご注文の商品はすべてデジタルですか?" -#: core/graphene/object_types.py:305 core/models.py:517 +#: core/graphene/object_types.py:305 core/models.py:523 msgid "orders" msgstr "受注状況" @@ -942,15 +1034,15 @@ msgstr "画像URL" msgid "product's images" msgstr "製品画像" -#: core/graphene/object_types.py:335 core/models.py:219 core/models.py:277 +#: core/graphene/object_types.py:335 core/models.py:225 core/models.py:283 msgid "category" msgstr "カテゴリー" -#: core/graphene/object_types.py:337 core/models.py:440 +#: core/graphene/object_types.py:337 core/models.py:446 msgid "feedbacks" msgstr "フィードバック" -#: core/graphene/object_types.py:338 core/models.py:266 core/models.py:285 +#: core/graphene/object_types.py:338 core/models.py:272 core/models.py:291 msgid "brand" msgstr "ブランド" @@ -970,7 +1062,7 @@ msgstr "数量" msgid "number of feedbacks" msgstr "フィードバック数" -#: core/graphene/object_types.py:360 core/models.py:329 +#: core/graphene/object_types.py:360 core/models.py:335 msgid "products" msgstr "製品紹介" @@ -982,15 +1074,15 @@ msgstr "プロモコード" msgid "products on sale" msgstr "販売商品" -#: core/graphene/object_types.py:425 core/models.py:1121 +#: core/graphene/object_types.py:425 core/models.py:1153 msgid "promotions" msgstr "プロモーション" -#: core/graphene/object_types.py:429 core/models.py:403 +#: core/graphene/object_types.py:429 core/models.py:409 msgid "vendor" msgstr "ベンダー" -#: core/graphene/object_types.py:430 core/models.py:328 +#: core/graphene/object_types.py:430 core/models.py:334 #: core/templates/digital_order_created_email.html:107 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:93 @@ -998,11 +1090,11 @@ msgstr "ベンダー" msgid "product" msgstr "製品" -#: core/graphene/object_types.py:441 core/models.py:1191 +#: core/graphene/object_types.py:441 core/models.py:1223 msgid "wishlisted products" msgstr "ウィッシュリスト掲載商品" -#: core/graphene/object_types.py:447 core/models.py:1208 +#: core/graphene/object_types.py:447 core/models.py:1240 msgid "wishlists" msgstr "ウィッシュリスト" @@ -1010,7 +1102,7 @@ msgstr "ウィッシュリスト" msgid "tagged products" msgstr "タグ別アーカイブ" -#: core/graphene/object_types.py:458 core/models.py:291 core/models.py:952 +#: core/graphene/object_types.py:458 core/models.py:297 core/models.py:959 msgid "product tags" msgstr "商品タグ" @@ -1156,8 +1248,8 @@ msgstr "この値の属性" msgid "the specific product associated with this attribute's value" msgstr "この属性の値に関連する特定の製品" -#: core/models.py:145 core/models.py:851 core/models.py:978 -#: core/models.py:1147 +#: core/models.py:145 core/models.py:858 core/models.py:1010 +#: core/models.py:1179 msgid "associated product" msgstr "関連製品" @@ -1201,655 +1293,667 @@ msgstr "このカテゴリの詳細説明を追加する" msgid "category description" msgstr "カテゴリー説明" -#: core/models.py:229 +#: core/models.py:212 +msgid "tags that help describe or group this category" +msgstr "このカテゴリーを説明またはグループ化するのに役立つタグ" + +#: core/models.py:213 core/models.py:984 +msgid "category tags" +msgstr "カテゴリータグ" + +#: core/models.py:235 msgid "name of this brand" msgstr "ブランド名" -#: core/models.py:230 +#: core/models.py:236 msgid "brand name" msgstr "ブランド名" -#: core/models.py:237 +#: core/models.py:243 msgid "upload a logo representing this brand" msgstr "このブランドを代表するロゴをアップロードする" -#: core/models.py:239 +#: core/models.py:245 msgid "brand small image" msgstr "小さなブランドイメージ" -#: core/models.py:245 +#: core/models.py:251 msgid "upload a big logo representing this brand" msgstr "このブランドを象徴する大きなロゴをアップロードする" -#: core/models.py:247 +#: core/models.py:253 msgid "brand big image" msgstr "大きなブランドイメージ" -#: core/models.py:252 +#: core/models.py:258 msgid "add a detailed description of the brand" msgstr "ブランドの詳細な説明を加える" -#: core/models.py:253 +#: core/models.py:259 msgid "brand description" msgstr "ブランド説明" -#: core/models.py:258 +#: core/models.py:264 msgid "optional categories that this brand is associated with" msgstr "このブランドが関連するオプション・カテゴリー" -#: core/models.py:259 +#: core/models.py:265 msgid "associated categories" msgstr "カテゴリー" -#: core/models.py:276 +#: core/models.py:282 msgid "category this product belongs to" msgstr "この製品が属するカテゴリ" -#: core/models.py:284 +#: core/models.py:290 msgid "optionally associate this product with a brand" msgstr "オプションでこの製品をブランドと関連付ける" -#: core/models.py:290 +#: core/models.py:296 msgid "tags that help describe or group this product" msgstr "この商品の説明やグループ分けに役立つタグ" -#: core/models.py:295 +#: core/models.py:301 msgid "indicates whether this product is digitally delivered" msgstr "この製品がデジタル配信されるかどうかを示す" -#: core/models.py:296 +#: core/models.py:302 msgid "is product digital" msgstr "製品はデジタルか" -#: core/models.py:302 +#: core/models.py:308 msgid "provide a clear identifying name for the product" msgstr "製品の明確な識別名を提供する" -#: core/models.py:303 +#: core/models.py:309 msgid "product name" msgstr "商品名" -#: core/models.py:308 core/models.py:1109 +#: core/models.py:314 core/models.py:1141 msgid "add a detailed description of the product" msgstr "商品の詳細説明を追加する" -#: core/models.py:309 +#: core/models.py:315 msgid "product description" msgstr "商品説明" -#: core/models.py:316 +#: core/models.py:322 msgid "part number for this product" msgstr "この製品の品番" -#: core/models.py:317 +#: core/models.py:323 msgid "part number" msgstr "品番" -#: core/models.py:381 +#: core/models.py:387 msgid "stores credentials and endpoints required for vendor communication" msgstr "ベンダーのAPI通信に必要な認証情報とエンドポイントを保存する。" -#: core/models.py:382 +#: core/models.py:388 msgid "authentication info" msgstr "認証情報" -#: core/models.py:387 +#: core/models.py:393 msgid "define the markup for products retrieved from this vendor" msgstr "このベンダーから取得した商品のマークアップを定義する。" -#: core/models.py:388 +#: core/models.py:394 msgid "vendor markup percentage" msgstr "ベンダーのマークアップ率" -#: core/models.py:392 +#: core/models.py:398 msgid "name of this vendor" msgstr "このベンダーの名前" -#: core/models.py:393 +#: core/models.py:399 msgid "vendor name" msgstr "ベンダー名" -#: core/models.py:416 +#: core/models.py:422 msgid "user-provided comments about their experience with the product" msgstr "ユーザーから寄せられた製品使用体験に関するコメント" -#: core/models.py:417 +#: core/models.py:423 msgid "feedback comments" msgstr "フィードバック・コメント" -#: core/models.py:424 +#: core/models.py:430 msgid "" "references the specific product in an order that this feedback is about" msgstr "このフィードバックが対象としている注文の特定の製品を参照する。" -#: core/models.py:425 +#: core/models.py:431 msgid "related order product" msgstr "関連注文商品" -#: core/models.py:430 +#: core/models.py:436 msgid "user-assigned rating for the product" msgstr "ユーザーによる製品の評価" -#: core/models.py:431 +#: core/models.py:437 msgid "product rating" msgstr "製品評価" -#: core/models.py:439 +#: core/models.py:445 msgid "feedback" msgstr "フィードバック" -#: core/models.py:452 +#: core/models.py:458 msgid "the billing address used for this order" msgstr "この注文に使用される請求先住所" -#: core/models.py:460 +#: core/models.py:466 msgid "optional promo code applied to this order" msgstr "この注文に適用されるプロモコード" -#: core/models.py:461 +#: core/models.py:467 msgid "applied promo code" msgstr "プロモーションコード適用" -#: core/models.py:469 +#: core/models.py:475 msgid "the shipping address used for this order" msgstr "この注文に使用された配送先住所" -#: core/models.py:470 +#: core/models.py:476 msgid "shipping address" msgstr "配送先住所" -#: core/models.py:476 +#: core/models.py:482 msgid "current status of the order in its lifecycle" msgstr "ライフサイクルにおける現在の注文状況" -#: core/models.py:477 +#: core/models.py:483 msgid "order status" msgstr "注文状況" -#: core/models.py:482 core/models.py:828 +#: core/models.py:488 core/models.py:835 msgid "json structure of notifications to display to users" msgstr "ユーザーに表示する通知のJSON構造、管理UIではテーブルビューが使用されます。" -#: core/models.py:488 +#: core/models.py:494 msgid "json representation of order attributes for this order" msgstr "この注文の注文属性のJSON表現" -#: core/models.py:494 +#: core/models.py:500 msgid "the user who placed the order" msgstr "注文を行ったユーザー" -#: core/models.py:495 +#: core/models.py:501 msgid "user" msgstr "ユーザー" -#: core/models.py:501 +#: core/models.py:507 msgid "the timestamp when the order was finalized" msgstr "注文が確定したタイムスタンプ" -#: core/models.py:502 +#: core/models.py:508 msgid "buy time" msgstr "時間を買う" -#: core/models.py:509 +#: core/models.py:515 msgid "a human-readable identifier for the order" msgstr "オーダーの人間が読み取り可能な識別子。" -#: core/models.py:510 +#: core/models.py:516 msgid "human readable id" msgstr "人間が読めるID" -#: core/models.py:516 +#: core/models.py:522 msgid "order" msgstr "オーダー" -#: core/models.py:531 +#: core/models.py:537 msgid "a user must have only one pending order at a time" msgstr "ユーザーは一度に1つの未決注文しか持つことができません!" -#: core/models.py:559 +#: core/models.py:566 msgid "you cannot add products to an order that is not a pending one" msgstr "保留中の注文以外の注文に商品を追加することはできません。" -#: core/models.py:564 +#: core/models.py:571 msgid "you cannot add inactive products to order" msgstr "アクティブでない商品を注文に追加することはできません。" -#: core/models.py:581 +#: core/models.py:588 msgid "you cannot add more products than available in stock" msgstr "在庫以上の商品を追加することはできません。" -#: core/models.py:590 core/models.py:610 core/models.py:634 -#: core/models.py:1218 core/models.py:1230 +#: core/models.py:597 core/models.py:617 core/models.py:641 +#: core/models.py:1250 core/models.py:1262 #, python-brace-format msgid "{name} does not exist: {product_uuid}" msgstr "{name}が存在しません:{product_uuid}が存在しません。" -#: core/models.py:594 core/models.py:618 core/models.py:626 +#: core/models.py:601 core/models.py:625 core/models.py:633 msgid "you cannot remove products from an order that is not a pending one" msgstr "保留中の注文以外の注文から商品を削除することはできません。" -#: core/models.py:614 +#: core/models.py:621 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "クエリ<{query}>で{name}が存在しません。" -#: core/models.py:645 +#: core/models.py:652 msgid "promocode does not exist" msgstr "プロモコードが存在しない" -#: core/models.py:654 +#: core/models.py:661 msgid "you can only buy physical products with shipping address specified" msgstr "配送先住所が指定された現物商品のみ購入可能!" -#: core/models.py:673 +#: core/models.py:680 msgid "address does not exist" msgstr "アドレスが存在しない" -#: core/models.py:684 core/models.py:727 +#: core/models.py:691 core/models.py:734 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "現在ご購入いただけません。数分後にもう一度お試しください。" -#: core/models.py:687 +#: core/models.py:694 msgid "invalid force value" msgstr "無効なフォース値" -#: core/models.py:692 core/models.py:730 +#: core/models.py:699 core/models.py:737 msgid "you cannot purchase an empty order!" msgstr "空注文はできません!" -#: core/models.py:707 +#: core/models.py:714 msgid "insufficient funds to complete the order" msgstr "注文を完了するための資金不足" -#: core/models.py:739 +#: core/models.py:746 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "ご登録がない場合はご購入いただけませんので、以下の情報をお知らせください:お客様のお名前、お客様のEメール、お客様の電話番号" -#: core/models.py:748 +#: core/models.py:755 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "支払方法が無効です:{available_payment_methods}からの{payment_method}が無効です!" -#: core/models.py:816 +#: core/models.py:823 msgid "the price paid by the customer for this product at purchase time" msgstr "この商品の購入時に顧客が支払った価格" -#: core/models.py:817 +#: core/models.py:824 msgid "purchase price at order time" msgstr "注文時の購入価格" -#: core/models.py:822 +#: core/models.py:829 msgid "internal comments for admins about this ordered product" msgstr "この注文商品に関する管理者への内部コメント" -#: core/models.py:823 +#: core/models.py:830 msgid "internal comments" msgstr "社内コメント" -#: core/models.py:829 +#: core/models.py:836 msgid "user notifications" msgstr "ユーザー通知" -#: core/models.py:834 +#: core/models.py:841 msgid "json representation of this item's attributes" msgstr "このアイテムの属性のJSON表現" -#: core/models.py:835 +#: core/models.py:842 msgid "ordered product attributes" msgstr "製品属性の順序" -#: core/models.py:840 +#: core/models.py:847 msgid "reference to the parent order that contains this product" msgstr "この商品を含む親注文への参照" -#: core/models.py:841 +#: core/models.py:848 msgid "parent order" msgstr "親注文" -#: core/models.py:850 +#: core/models.py:857 msgid "the specific product associated with this order line" msgstr "この注文ラインに関連する特定の製品" -#: core/models.py:857 +#: core/models.py:864 msgid "quantity of this specific product in the order" msgstr "注文に含まれる特定の商品の数量" -#: core/models.py:858 +#: core/models.py:865 msgid "product quantity" msgstr "製品数量" -#: core/models.py:865 +#: core/models.py:872 msgid "current status of this product in the order" msgstr "この商品の現在のご注文状況" -#: core/models.py:866 +#: core/models.py:873 msgid "product line status" msgstr "製品ラインの状況" -#: core/models.py:918 +#: core/models.py:925 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "フィードバックに指定されたアクションが間違っています:{action}" -#: core/models.py:926 +#: core/models.py:933 msgid "you cannot feedback an order which is not received" msgstr "受信していない注文をフィードバックすることはできません。" -#: core/models.py:937 +#: core/models.py:944 core/models.py:969 msgid "internal tag identifier for the product tag" msgstr "商品タグの内部タグ識別子" -#: core/models.py:938 +#: core/models.py:945 core/models.py:970 msgid "tag name" msgstr "タグ名" -#: core/models.py:942 +#: core/models.py:949 core/models.py:974 msgid "user-friendly name for the product tag" msgstr "商品タグのユーザーフレンドリーな名前" -#: core/models.py:943 +#: core/models.py:950 core/models.py:975 msgid "tag display name" msgstr "タグ表示名" -#: core/models.py:951 +#: core/models.py:958 msgid "product tag" msgstr "商品タグ" -#: core/models.py:960 +#: core/models.py:983 +msgid "category tag" +msgstr "カテゴリタグ" + +#: core/models.py:992 msgid "provide alternative text for the image for accessibility" msgstr "アクセシビリティのために、画像に代替テキストを提供する。" -#: core/models.py:961 +#: core/models.py:993 msgid "image alt text" msgstr "画像のaltテキスト" -#: core/models.py:964 +#: core/models.py:996 msgid "upload the image file for this product" msgstr "この商品の画像ファイルをアップロードする" -#: core/models.py:965 core/models.py:990 +#: core/models.py:997 core/models.py:1022 msgid "product image" msgstr "商品画像" -#: core/models.py:971 +#: core/models.py:1003 msgid "determines the order in which images are displayed" msgstr "画像の表示順を決める" -#: core/models.py:972 +#: core/models.py:1004 msgid "display priority" msgstr "表示優先度" -#: core/models.py:977 +#: core/models.py:1009 msgid "the product that this image represents" msgstr "この画像が表す製品" -#: core/models.py:991 +#: core/models.py:1023 msgid "product images" msgstr "商品画像" -#: core/models.py:1001 +#: core/models.py:1033 msgid "unique code used by a user to redeem a discount" msgstr "ユーザーが割引を利用する際に使用する固有のコード" -#: core/models.py:1002 +#: core/models.py:1034 msgid "promo code identifier" msgstr "プロモコード識別子" -#: core/models.py:1009 +#: core/models.py:1041 msgid "fixed discount amount applied if percent is not used" msgstr "パーセントを使用しない場合に適用される固定割引額" -#: core/models.py:1010 +#: core/models.py:1042 msgid "fixed discount amount" msgstr "固定割引額" -#: core/models.py:1016 +#: core/models.py:1048 msgid "percentage discount applied if fixed amount is not used" msgstr "定額を使用しない場合に適用される割引率" -#: core/models.py:1017 +#: core/models.py:1049 msgid "percentage discount" msgstr "割引率" -#: core/models.py:1022 +#: core/models.py:1054 msgid "timestamp when the promocode expires" msgstr "プロモコードの有効期限が切れるタイムスタンプ" -#: core/models.py:1023 +#: core/models.py:1055 msgid "end validity time" msgstr "終了有効時間" -#: core/models.py:1028 +#: core/models.py:1060 msgid "timestamp from which this promocode is valid" msgstr "このプロモコードが有効なタイムスタンプ" -#: core/models.py:1029 +#: core/models.py:1061 msgid "start validity time" msgstr "開始有効時間" -#: core/models.py:1034 +#: core/models.py:1066 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "プロモコードが使用されたタイムスタンプ、未使用の場合は空白" -#: core/models.py:1035 +#: core/models.py:1067 msgid "usage timestamp" msgstr "使用タイムスタンプ" -#: core/models.py:1040 +#: core/models.py:1072 msgid "user assigned to this promocode if applicable" msgstr "該当する場合、このプロモコードに割り当てられたユーザー" -#: core/models.py:1041 +#: core/models.py:1073 msgid "assigned user" msgstr "担当ユーザー" -#: core/models.py:1048 +#: core/models.py:1080 msgid "promo code" msgstr "プロモコード" -#: core/models.py:1049 +#: core/models.py:1081 msgid "promo codes" msgstr "プロモコード" -#: core/models.py:1056 +#: core/models.py:1088 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "割引の種類は1つだけ(金額またはパーセント)定義されるべきで、両方またはどちらも定義してはならない。" -#: core/models.py:1071 +#: core/models.py:1103 msgid "promocode already used" msgstr "プロモコードはすでに使用されています" -#: core/models.py:1085 +#: core/models.py:1117 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "プロモコード {self.uuid} の割引タイプが無効です。" -#: core/models.py:1097 +#: core/models.py:1129 msgid "percentage discount for the selected products" msgstr "選択した商品の割引率" -#: core/models.py:1098 +#: core/models.py:1130 msgid "discount percentage" msgstr "割引率" -#: core/models.py:1103 +#: core/models.py:1135 msgid "provide a unique name for this promotion" msgstr "このプロモーションのユニークな名前を入力してください。" -#: core/models.py:1104 +#: core/models.py:1136 msgid "promotion name" msgstr "プロモーション名" -#: core/models.py:1110 +#: core/models.py:1142 msgid "promotion description" msgstr "プロモーション内容" -#: core/models.py:1115 +#: core/models.py:1147 msgid "select which products are included in this promotion" msgstr "キャンペーン対象商品をお選びください。" -#: core/models.py:1116 +#: core/models.py:1148 msgid "included products" msgstr "含まれる製品" -#: core/models.py:1120 +#: core/models.py:1152 msgid "promotion" msgstr "プロモーション" -#: core/models.py:1135 +#: core/models.py:1167 msgid "the vendor supplying this product stock" msgstr "この製品の在庫を供給しているベンダー" -#: core/models.py:1136 +#: core/models.py:1168 msgid "associated vendor" msgstr "関連ベンダー" -#: core/models.py:1140 +#: core/models.py:1172 msgid "final price to the customer after markups" msgstr "マークアップ後の顧客への最終価格" -#: core/models.py:1141 +#: core/models.py:1173 msgid "selling price" msgstr "販売価格" -#: core/models.py:1146 +#: core/models.py:1178 msgid "the product associated with this stock entry" msgstr "このストックエントリーに関連する製品" -#: core/models.py:1154 +#: core/models.py:1186 msgid "the price paid to the vendor for this product" msgstr "この製品に対してベンダーに支払われた価格" -#: core/models.py:1155 +#: core/models.py:1187 msgid "vendor purchase price" msgstr "ベンダーの購入価格" -#: core/models.py:1159 +#: core/models.py:1191 msgid "available quantity of the product in stock" msgstr "在庫数" -#: core/models.py:1160 +#: core/models.py:1192 msgid "quantity in stock" msgstr "在庫数" -#: core/models.py:1164 +#: core/models.py:1196 msgid "vendor-assigned SKU for identifying the product" msgstr "製品を識別するためにベンダーが割り当てたSKU" -#: core/models.py:1165 +#: core/models.py:1197 msgid "vendor sku" msgstr "ベンダーのSKU" -#: core/models.py:1171 +#: core/models.py:1203 msgid "digital file associated with this stock if applicable" msgstr "この銘柄に関連するデジタルファイル(該当する場合" -#: core/models.py:1172 +#: core/models.py:1204 msgid "digital file" msgstr "デジタルファイル" -#: core/models.py:1181 +#: core/models.py:1213 msgid "stock entries" msgstr "ストックエントリー" -#: core/models.py:1190 +#: core/models.py:1222 msgid "products that the user has marked as wanted" msgstr "ユーザーが欲しいとマークした商品" -#: core/models.py:1198 +#: core/models.py:1230 msgid "user who owns this wishlist" msgstr "このウィッシュリストを所有しているユーザー" -#: core/models.py:1199 +#: core/models.py:1231 msgid "wishlist owner" msgstr "ウィッシュリストのオーナー" -#: core/models.py:1207 +#: core/models.py:1239 msgid "wishlist" msgstr "ウィッシュリスト" -#: core/models.py:1252 +#: core/models.py:1284 msgid "download" msgstr "ダウンロード" -#: core/models.py:1253 +#: core/models.py:1285 msgid "downloads" msgstr "ダウンロード" -#: core/models.py:1261 +#: core/models.py:1293 msgid "you can not download a digital asset for a non-finished order" msgstr "未完成の注文のデジタル資産をダウンロードすることはできません。" -#: core/models.py:1273 +#: core/models.py:1305 msgid "documentary" msgstr "ドキュメンタリー" -#: core/models.py:1274 +#: core/models.py:1306 msgid "documentaries" msgstr "ドキュメンタリー" -#: core/models.py:1284 +#: core/models.py:1316 msgid "unresolved" msgstr "未解決" -#: core/models.py:1293 +#: core/models.py:1325 msgid "address line for the customer" msgstr "お客様の住所" -#: core/models.py:1294 +#: core/models.py:1326 msgid "address line" msgstr "住所" -#: core/models.py:1296 +#: core/models.py:1328 msgid "street" msgstr "ストリート" -#: core/models.py:1297 +#: core/models.py:1329 msgid "district" msgstr "地区" -#: core/models.py:1298 +#: core/models.py:1330 msgid "city" msgstr "都市" -#: core/models.py:1299 +#: core/models.py:1331 msgid "region" msgstr "地域" -#: core/models.py:1300 +#: core/models.py:1332 msgid "postal code" msgstr "郵便番号" -#: core/models.py:1301 +#: core/models.py:1333 msgid "country" msgstr "国名" -#: core/models.py:1304 +#: core/models.py:1336 msgid "geolocation point: (longitude, latitude)" msgstr "ジオロケーションポイント(経度、緯度)" -#: core/models.py:1307 +#: core/models.py:1339 msgid "full JSON response from geocoder for this address" msgstr "この住所に対するジオコーダーからの完全なJSON応答" -#: core/models.py:1309 +#: core/models.py:1341 msgid "stored JSON response from the geocoding service" msgstr "ジオコーディング・サービスからの保存されたJSONレスポンス" -#: core/models.py:1316 +#: core/models.py:1348 msgid "address" msgstr "住所" -#: core/models.py:1317 +#: core/models.py:1349 msgid "addresses" msgstr "住所" -#: core/serializers/utility.py:76 +#: core/serializers/utility.py:77 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "フィードバックを追加するには、コメント、評価、および注文商品の uuid を入力する必要があります。" @@ -2075,7 +2179,7 @@ msgstr "デジタルアセットのダウンロードは1回限りです。" msgid "favicon not found" msgstr "ファビコンが見つかりません" -#: core/viewsets.py:680 +#: core/viewsets.py:677 #, python-brace-format msgid "Geocoding error: {e}" msgstr "ジオコーディングエラー:{e}" diff --git a/core/locale/kk_KZ/LC_MESSAGES/django.po b/core/locale/kk_KZ/LC_MESSAGES/django.po index 3bb48af1..73aab074 100644 --- a/core/locale/kk_KZ/LC_MESSAGES/django.po +++ b/core/locale/kk_KZ/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-08 19:42+0100\n" +"POT-Creation-Date: 2025-06-10 03:32+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -81,7 +81,7 @@ msgstr "" msgid "images" msgstr "" -#: core/admin.py:162 core/models.py:1180 +#: core/admin.py:162 core/models.py:1212 msgid "stock" msgstr "" @@ -109,11 +109,11 @@ msgstr "" msgid "important dates" msgstr "" -#: core/admin.py:253 core/models.py:874 +#: core/admin.py:253 core/models.py:881 msgid "order product" msgstr "" -#: core/admin.py:254 core/graphene/object_types.py:262 core/models.py:875 +#: core/admin.py:254 core/graphene/object_types.py:262 core/models.py:882 msgid "order products" msgstr "" @@ -701,6 +701,98 @@ msgstr "" msgid "no search term provided." msgstr "" +#: core/filters.py:37 core/filters.py:357 +msgid "UUID" +msgstr "" + +#: core/filters.py:38 core/filters.py:309 core/filters.py:340 +msgid "Name" +msgstr "" + +#: core/filters.py:39 core/filters.py:341 +msgid "Categories" +msgstr "" + +#: core/filters.py:44 +msgid "Categories Slugs" +msgstr "" + +#: core/filters.py:45 core/filters.py:312 +msgid "Tags" +msgstr "" + +#: core/filters.py:46 +msgid "Min Price" +msgstr "" + +#: core/filters.py:47 +msgid "Max Price" +msgstr "" + +#: core/filters.py:48 +msgid "Is Active" +msgstr "" + +#: core/filters.py:49 +msgid "Brand" +msgstr "" + +#: core/filters.py:50 +msgid "Attributes" +msgstr "" + +#: core/filters.py:51 +msgid "Quantity" +msgstr "" + +#: core/filters.py:52 core/filters.py:311 +msgid "Slug" +msgstr "" + +#: core/filters.py:53 +msgid "Is Digital" +msgstr "" + +#: core/filters.py:56 +msgid "Include sub-categories" +msgstr "" + +#: core/filters.py:245 +msgid "Search (ID, product name or part number)" +msgstr "" + +#: core/filters.py:248 +msgid "Bought after (inclusive)" +msgstr "" + +#: core/filters.py:249 +msgid "Bought before (inclusive)" +msgstr "" + +#: core/filters.py:252 core/filters.py:295 +msgid "User email" +msgstr "" + +#: core/filters.py:253 core/filters.py:296 core/filters.py:359 +msgid "User UUID" +msgstr "" + +#: core/filters.py:254 +msgid "Status" +msgstr "" + +#: core/filters.py:255 +msgid "Human Readable ID" +msgstr "" + +#: core/filters.py:310 +msgid "Parent" +msgstr "" + +#: core/filters.py:358 +msgid "Product UUID" +msgstr "" + #: core/graphene/mutations.py:38 msgid "key to look for in or set into the cache" msgstr "" @@ -752,7 +844,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" #: core/graphene/mutations.py:225 core/graphene/mutations.py:441 -#: core/graphene/mutations.py:475 core/viewsets.py:348 +#: core/graphene/mutations.py:475 core/viewsets.py:345 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" @@ -804,7 +896,7 @@ msgstr "" msgid "original address string provided by the user" msgstr "" -#: core/graphene/mutations.py:572 core/viewsets.py:238 core/viewsets.py:351 +#: core/graphene/mutations.py:572 core/viewsets.py:240 core/viewsets.py:348 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "" @@ -818,7 +910,7 @@ msgid "elasticsearch - works like a charm" msgstr "" #: core/graphene/object_types.py:43 core/graphene/object_types.py:245 -#: core/graphene/object_types.py:286 core/models.py:126 core/models.py:489 +#: core/graphene/object_types.py:286 core/models.py:126 core/models.py:495 msgid "attributes" msgstr "" @@ -831,11 +923,11 @@ msgid "groups of attributes" msgstr "" #: core/graphene/object_types.py:76 core/graphene/object_types.py:104 -#: core/graphene/object_types.py:132 core/models.py:90 core/models.py:220 +#: core/graphene/object_types.py:132 core/models.py:90 core/models.py:226 msgid "categories" msgstr "" -#: core/graphene/object_types.py:83 core/models.py:267 +#: core/graphene/object_types.py:83 core/models.py:273 msgid "brands" msgstr "" @@ -856,7 +948,7 @@ msgstr "" msgid "minimum and maximum prices for products in this category, if available." msgstr "" -#: core/graphene/object_types.py:202 core/models.py:404 +#: core/graphene/object_types.py:202 core/models.py:410 msgid "vendors" msgstr "" @@ -881,7 +973,7 @@ msgid "represents feedback from a user." msgstr "" #: core/graphene/object_types.py:246 core/graphene/object_types.py:287 -#: core/models.py:483 +#: core/models.py:489 msgid "notifications" msgstr "" @@ -893,7 +985,7 @@ msgstr "" msgid "a list of order products in this order" msgstr "" -#: core/graphene/object_types.py:278 core/models.py:453 +#: core/graphene/object_types.py:278 core/models.py:459 msgid "billing address" msgstr "" @@ -915,7 +1007,7 @@ msgstr "" msgid "are all products in the order digital" msgstr "" -#: core/graphene/object_types.py:305 core/models.py:517 +#: core/graphene/object_types.py:305 core/models.py:523 msgid "orders" msgstr "" @@ -927,15 +1019,15 @@ msgstr "" msgid "product's images" msgstr "" -#: core/graphene/object_types.py:335 core/models.py:219 core/models.py:277 +#: core/graphene/object_types.py:335 core/models.py:225 core/models.py:283 msgid "category" msgstr "" -#: core/graphene/object_types.py:337 core/models.py:440 +#: core/graphene/object_types.py:337 core/models.py:446 msgid "feedbacks" msgstr "" -#: core/graphene/object_types.py:338 core/models.py:266 core/models.py:285 +#: core/graphene/object_types.py:338 core/models.py:272 core/models.py:291 msgid "brand" msgstr "" @@ -955,7 +1047,7 @@ msgstr "" msgid "number of feedbacks" msgstr "" -#: core/graphene/object_types.py:360 core/models.py:329 +#: core/graphene/object_types.py:360 core/models.py:335 msgid "products" msgstr "" @@ -967,15 +1059,15 @@ msgstr "" msgid "products on sale" msgstr "" -#: core/graphene/object_types.py:425 core/models.py:1121 +#: core/graphene/object_types.py:425 core/models.py:1153 msgid "promotions" msgstr "" -#: core/graphene/object_types.py:429 core/models.py:403 +#: core/graphene/object_types.py:429 core/models.py:409 msgid "vendor" msgstr "" -#: core/graphene/object_types.py:430 core/models.py:328 +#: core/graphene/object_types.py:430 core/models.py:334 #: core/templates/digital_order_created_email.html:107 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:93 @@ -983,11 +1075,11 @@ msgstr "" msgid "product" msgstr "" -#: core/graphene/object_types.py:441 core/models.py:1191 +#: core/graphene/object_types.py:441 core/models.py:1223 msgid "wishlisted products" msgstr "" -#: core/graphene/object_types.py:447 core/models.py:1208 +#: core/graphene/object_types.py:447 core/models.py:1240 msgid "wishlists" msgstr "" @@ -995,7 +1087,7 @@ msgstr "" msgid "tagged products" msgstr "" -#: core/graphene/object_types.py:458 core/models.py:291 core/models.py:952 +#: core/graphene/object_types.py:458 core/models.py:297 core/models.py:959 msgid "product tags" msgstr "" @@ -1141,7 +1233,8 @@ msgstr "" msgid "the specific product associated with this attribute's value" msgstr "" -#: core/models.py:145 core/models.py:851 core/models.py:978 core/models.py:1147 +#: core/models.py:145 core/models.py:858 core/models.py:1010 +#: core/models.py:1179 msgid "associated product" msgstr "" @@ -1185,654 +1278,666 @@ msgstr "" msgid "category description" msgstr "" -#: core/models.py:229 +#: core/models.py:212 +msgid "tags that help describe or group this category" +msgstr "" + +#: core/models.py:213 core/models.py:984 +msgid "category tags" +msgstr "" + +#: core/models.py:235 msgid "name of this brand" msgstr "" -#: core/models.py:230 +#: core/models.py:236 msgid "brand name" msgstr "" -#: core/models.py:237 +#: core/models.py:243 msgid "upload a logo representing this brand" msgstr "" -#: core/models.py:239 +#: core/models.py:245 msgid "brand small image" msgstr "" -#: core/models.py:245 +#: core/models.py:251 msgid "upload a big logo representing this brand" msgstr "" -#: core/models.py:247 +#: core/models.py:253 msgid "brand big image" msgstr "" -#: core/models.py:252 +#: core/models.py:258 msgid "add a detailed description of the brand" msgstr "" -#: core/models.py:253 +#: core/models.py:259 msgid "brand description" msgstr "" -#: core/models.py:258 +#: core/models.py:264 msgid "optional categories that this brand is associated with" msgstr "" -#: core/models.py:259 +#: core/models.py:265 msgid "associated categories" msgstr "" -#: core/models.py:276 +#: core/models.py:282 msgid "category this product belongs to" msgstr "" -#: core/models.py:284 +#: core/models.py:290 msgid "optionally associate this product with a brand" msgstr "" -#: core/models.py:290 +#: core/models.py:296 msgid "tags that help describe or group this product" msgstr "" -#: core/models.py:295 +#: core/models.py:301 msgid "indicates whether this product is digitally delivered" msgstr "" -#: core/models.py:296 +#: core/models.py:302 msgid "is product digital" msgstr "" -#: core/models.py:302 +#: core/models.py:308 msgid "provide a clear identifying name for the product" msgstr "" -#: core/models.py:303 +#: core/models.py:309 msgid "product name" msgstr "" -#: core/models.py:308 core/models.py:1109 +#: core/models.py:314 core/models.py:1141 msgid "add a detailed description of the product" msgstr "" -#: core/models.py:309 +#: core/models.py:315 msgid "product description" msgstr "" -#: core/models.py:316 +#: core/models.py:322 msgid "part number for this product" msgstr "" -#: core/models.py:317 +#: core/models.py:323 msgid "part number" msgstr "" -#: core/models.py:381 +#: core/models.py:387 msgid "stores credentials and endpoints required for vendor communication" msgstr "" -#: core/models.py:382 +#: core/models.py:388 msgid "authentication info" msgstr "" -#: core/models.py:387 +#: core/models.py:393 msgid "define the markup for products retrieved from this vendor" msgstr "" -#: core/models.py:388 +#: core/models.py:394 msgid "vendor markup percentage" msgstr "" -#: core/models.py:392 +#: core/models.py:398 msgid "name of this vendor" msgstr "" -#: core/models.py:393 +#: core/models.py:399 msgid "vendor name" msgstr "" -#: core/models.py:416 +#: core/models.py:422 msgid "user-provided comments about their experience with the product" msgstr "" -#: core/models.py:417 +#: core/models.py:423 msgid "feedback comments" msgstr "" -#: core/models.py:424 +#: core/models.py:430 msgid "references the specific product in an order that this feedback is about" msgstr "" -#: core/models.py:425 +#: core/models.py:431 msgid "related order product" msgstr "" -#: core/models.py:430 +#: core/models.py:436 msgid "user-assigned rating for the product" msgstr "" -#: core/models.py:431 +#: core/models.py:437 msgid "product rating" msgstr "" -#: core/models.py:439 +#: core/models.py:445 msgid "feedback" msgstr "" -#: core/models.py:452 +#: core/models.py:458 msgid "the billing address used for this order" msgstr "" -#: core/models.py:460 +#: core/models.py:466 msgid "optional promo code applied to this order" msgstr "" -#: core/models.py:461 +#: core/models.py:467 msgid "applied promo code" msgstr "" -#: core/models.py:469 +#: core/models.py:475 msgid "the shipping address used for this order" msgstr "" -#: core/models.py:470 +#: core/models.py:476 msgid "shipping address" msgstr "" -#: core/models.py:476 +#: core/models.py:482 msgid "current status of the order in its lifecycle" msgstr "" -#: core/models.py:477 +#: core/models.py:483 msgid "order status" msgstr "" -#: core/models.py:482 core/models.py:828 +#: core/models.py:488 core/models.py:835 msgid "json structure of notifications to display to users" msgstr "" -#: core/models.py:488 +#: core/models.py:494 msgid "json representation of order attributes for this order" msgstr "" -#: core/models.py:494 +#: core/models.py:500 msgid "the user who placed the order" msgstr "" -#: core/models.py:495 +#: core/models.py:501 msgid "user" msgstr "" -#: core/models.py:501 +#: core/models.py:507 msgid "the timestamp when the order was finalized" msgstr "" -#: core/models.py:502 +#: core/models.py:508 msgid "buy time" msgstr "" -#: core/models.py:509 +#: core/models.py:515 msgid "a human-readable identifier for the order" msgstr "" -#: core/models.py:510 +#: core/models.py:516 msgid "human readable id" msgstr "" -#: core/models.py:516 +#: core/models.py:522 msgid "order" msgstr "" -#: core/models.py:531 +#: core/models.py:537 msgid "a user must have only one pending order at a time" msgstr "" -#: core/models.py:559 +#: core/models.py:566 msgid "you cannot add products to an order that is not a pending one" msgstr "" -#: core/models.py:564 +#: core/models.py:571 msgid "you cannot add inactive products to order" msgstr "" -#: core/models.py:581 +#: core/models.py:588 msgid "you cannot add more products than available in stock" msgstr "" -#: core/models.py:590 core/models.py:610 core/models.py:634 core/models.py:1218 -#: core/models.py:1230 +#: core/models.py:597 core/models.py:617 core/models.py:641 core/models.py:1250 +#: core/models.py:1262 #, python-brace-format msgid "{name} does not exist: {product_uuid}" msgstr "" -#: core/models.py:594 core/models.py:618 core/models.py:626 +#: core/models.py:601 core/models.py:625 core/models.py:633 msgid "you cannot remove products from an order that is not a pending one" msgstr "" -#: core/models.py:614 +#: core/models.py:621 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "" -#: core/models.py:645 +#: core/models.py:652 msgid "promocode does not exist" msgstr "" -#: core/models.py:654 +#: core/models.py:661 msgid "you can only buy physical products with shipping address specified" msgstr "" -#: core/models.py:673 +#: core/models.py:680 msgid "address does not exist" msgstr "" -#: core/models.py:684 core/models.py:727 +#: core/models.py:691 core/models.py:734 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" -#: core/models.py:687 +#: core/models.py:694 msgid "invalid force value" msgstr "" -#: core/models.py:692 core/models.py:730 +#: core/models.py:699 core/models.py:737 msgid "you cannot purchase an empty order!" msgstr "" -#: core/models.py:707 +#: core/models.py:714 msgid "insufficient funds to complete the order" msgstr "" -#: core/models.py:739 +#: core/models.py:746 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "" -#: core/models.py:748 +#: core/models.py:755 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" -#: core/models.py:816 +#: core/models.py:823 msgid "the price paid by the customer for this product at purchase time" msgstr "" -#: core/models.py:817 +#: core/models.py:824 msgid "purchase price at order time" msgstr "" -#: core/models.py:822 +#: core/models.py:829 msgid "internal comments for admins about this ordered product" msgstr "" -#: core/models.py:823 +#: core/models.py:830 msgid "internal comments" msgstr "" -#: core/models.py:829 +#: core/models.py:836 msgid "user notifications" msgstr "" -#: core/models.py:834 +#: core/models.py:841 msgid "json representation of this item's attributes" msgstr "" -#: core/models.py:835 +#: core/models.py:842 msgid "ordered product attributes" msgstr "" -#: core/models.py:840 +#: core/models.py:847 msgid "reference to the parent order that contains this product" msgstr "" -#: core/models.py:841 +#: core/models.py:848 msgid "parent order" msgstr "" -#: core/models.py:850 +#: core/models.py:857 msgid "the specific product associated with this order line" msgstr "" -#: core/models.py:857 +#: core/models.py:864 msgid "quantity of this specific product in the order" msgstr "" -#: core/models.py:858 +#: core/models.py:865 msgid "product quantity" msgstr "" -#: core/models.py:865 +#: core/models.py:872 msgid "current status of this product in the order" msgstr "" -#: core/models.py:866 +#: core/models.py:873 msgid "product line status" msgstr "" -#: core/models.py:918 +#: core/models.py:925 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "" -#: core/models.py:926 +#: core/models.py:933 msgid "you cannot feedback an order which is not received" msgstr "" -#: core/models.py:937 +#: core/models.py:944 core/models.py:969 msgid "internal tag identifier for the product tag" msgstr "" -#: core/models.py:938 +#: core/models.py:945 core/models.py:970 msgid "tag name" msgstr "" -#: core/models.py:942 +#: core/models.py:949 core/models.py:974 msgid "user-friendly name for the product tag" msgstr "" -#: core/models.py:943 +#: core/models.py:950 core/models.py:975 msgid "tag display name" msgstr "" -#: core/models.py:951 +#: core/models.py:958 msgid "product tag" msgstr "" -#: core/models.py:960 +#: core/models.py:983 +msgid "category tag" +msgstr "" + +#: core/models.py:992 msgid "provide alternative text for the image for accessibility" msgstr "" -#: core/models.py:961 +#: core/models.py:993 msgid "image alt text" msgstr "" -#: core/models.py:964 +#: core/models.py:996 msgid "upload the image file for this product" msgstr "" -#: core/models.py:965 core/models.py:990 +#: core/models.py:997 core/models.py:1022 msgid "product image" msgstr "" -#: core/models.py:971 +#: core/models.py:1003 msgid "determines the order in which images are displayed" msgstr "" -#: core/models.py:972 +#: core/models.py:1004 msgid "display priority" msgstr "" -#: core/models.py:977 +#: core/models.py:1009 msgid "the product that this image represents" msgstr "" -#: core/models.py:991 +#: core/models.py:1023 msgid "product images" msgstr "" -#: core/models.py:1001 +#: core/models.py:1033 msgid "unique code used by a user to redeem a discount" msgstr "" -#: core/models.py:1002 +#: core/models.py:1034 msgid "promo code identifier" msgstr "" -#: core/models.py:1009 +#: core/models.py:1041 msgid "fixed discount amount applied if percent is not used" msgstr "" -#: core/models.py:1010 +#: core/models.py:1042 msgid "fixed discount amount" msgstr "" -#: core/models.py:1016 +#: core/models.py:1048 msgid "percentage discount applied if fixed amount is not used" msgstr "" -#: core/models.py:1017 +#: core/models.py:1049 msgid "percentage discount" msgstr "" -#: core/models.py:1022 +#: core/models.py:1054 msgid "timestamp when the promocode expires" msgstr "" -#: core/models.py:1023 +#: core/models.py:1055 msgid "end validity time" msgstr "" -#: core/models.py:1028 +#: core/models.py:1060 msgid "timestamp from which this promocode is valid" msgstr "" -#: core/models.py:1029 +#: core/models.py:1061 msgid "start validity time" msgstr "" -#: core/models.py:1034 +#: core/models.py:1066 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" -#: core/models.py:1035 +#: core/models.py:1067 msgid "usage timestamp" msgstr "" -#: core/models.py:1040 +#: core/models.py:1072 msgid "user assigned to this promocode if applicable" msgstr "" -#: core/models.py:1041 +#: core/models.py:1073 msgid "assigned user" msgstr "" -#: core/models.py:1048 +#: core/models.py:1080 msgid "promo code" msgstr "" -#: core/models.py:1049 +#: core/models.py:1081 msgid "promo codes" msgstr "" -#: core/models.py:1056 +#: core/models.py:1088 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "" -#: core/models.py:1071 +#: core/models.py:1103 msgid "promocode already used" msgstr "" -#: core/models.py:1085 +#: core/models.py:1117 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "" -#: core/models.py:1097 +#: core/models.py:1129 msgid "percentage discount for the selected products" msgstr "" -#: core/models.py:1098 +#: core/models.py:1130 msgid "discount percentage" msgstr "" -#: core/models.py:1103 +#: core/models.py:1135 msgid "provide a unique name for this promotion" msgstr "" -#: core/models.py:1104 +#: core/models.py:1136 msgid "promotion name" msgstr "" -#: core/models.py:1110 +#: core/models.py:1142 msgid "promotion description" msgstr "" -#: core/models.py:1115 +#: core/models.py:1147 msgid "select which products are included in this promotion" msgstr "" -#: core/models.py:1116 +#: core/models.py:1148 msgid "included products" msgstr "" -#: core/models.py:1120 +#: core/models.py:1152 msgid "promotion" msgstr "" -#: core/models.py:1135 +#: core/models.py:1167 msgid "the vendor supplying this product stock" msgstr "" -#: core/models.py:1136 +#: core/models.py:1168 msgid "associated vendor" msgstr "" -#: core/models.py:1140 +#: core/models.py:1172 msgid "final price to the customer after markups" msgstr "" -#: core/models.py:1141 +#: core/models.py:1173 msgid "selling price" msgstr "" -#: core/models.py:1146 +#: core/models.py:1178 msgid "the product associated with this stock entry" msgstr "" -#: core/models.py:1154 +#: core/models.py:1186 msgid "the price paid to the vendor for this product" msgstr "" -#: core/models.py:1155 +#: core/models.py:1187 msgid "vendor purchase price" msgstr "" -#: core/models.py:1159 +#: core/models.py:1191 msgid "available quantity of the product in stock" msgstr "" -#: core/models.py:1160 +#: core/models.py:1192 msgid "quantity in stock" msgstr "" -#: core/models.py:1164 +#: core/models.py:1196 msgid "vendor-assigned SKU for identifying the product" msgstr "" -#: core/models.py:1165 +#: core/models.py:1197 msgid "vendor sku" msgstr "" -#: core/models.py:1171 +#: core/models.py:1203 msgid "digital file associated with this stock if applicable" msgstr "" -#: core/models.py:1172 +#: core/models.py:1204 msgid "digital file" msgstr "" -#: core/models.py:1181 +#: core/models.py:1213 msgid "stock entries" msgstr "" -#: core/models.py:1190 +#: core/models.py:1222 msgid "products that the user has marked as wanted" msgstr "" -#: core/models.py:1198 +#: core/models.py:1230 msgid "user who owns this wishlist" msgstr "" -#: core/models.py:1199 +#: core/models.py:1231 msgid "wishlist owner" msgstr "" -#: core/models.py:1207 +#: core/models.py:1239 msgid "wishlist" msgstr "" -#: core/models.py:1252 +#: core/models.py:1284 msgid "download" msgstr "" -#: core/models.py:1253 +#: core/models.py:1285 msgid "downloads" msgstr "" -#: core/models.py:1261 +#: core/models.py:1293 msgid "you can not download a digital asset for a non-finished order" msgstr "" -#: core/models.py:1273 +#: core/models.py:1305 msgid "documentary" msgstr "" -#: core/models.py:1274 +#: core/models.py:1306 msgid "documentaries" msgstr "" -#: core/models.py:1284 +#: core/models.py:1316 msgid "unresolved" msgstr "" -#: core/models.py:1293 +#: core/models.py:1325 msgid "address line for the customer" msgstr "" -#: core/models.py:1294 +#: core/models.py:1326 msgid "address line" msgstr "" -#: core/models.py:1296 +#: core/models.py:1328 msgid "street" msgstr "" -#: core/models.py:1297 +#: core/models.py:1329 msgid "district" msgstr "" -#: core/models.py:1298 +#: core/models.py:1330 msgid "city" msgstr "" -#: core/models.py:1299 +#: core/models.py:1331 msgid "region" msgstr "" -#: core/models.py:1300 +#: core/models.py:1332 msgid "postal code" msgstr "" -#: core/models.py:1301 +#: core/models.py:1333 msgid "country" msgstr "" -#: core/models.py:1304 +#: core/models.py:1336 msgid "geolocation point: (longitude, latitude)" msgstr "" -#: core/models.py:1307 +#: core/models.py:1339 msgid "full JSON response from geocoder for this address" msgstr "" -#: core/models.py:1309 +#: core/models.py:1341 msgid "stored JSON response from the geocoding service" msgstr "" -#: core/models.py:1316 +#: core/models.py:1348 msgid "address" msgstr "" -#: core/models.py:1317 +#: core/models.py:1349 msgid "addresses" msgstr "" -#: core/serializers/utility.py:76 +#: core/serializers/utility.py:77 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" @@ -2058,7 +2163,7 @@ msgstr "" msgid "favicon not found" msgstr "" -#: core/viewsets.py:680 +#: core/viewsets.py:677 #, python-brace-format msgid "Geocoding error: {e}" msgstr "" diff --git a/core/locale/nl_NL/LC_MESSAGES/django.mo b/core/locale/nl_NL/LC_MESSAGES/django.mo index 1b7d9925..8e7b6134 100644 Binary files a/core/locale/nl_NL/LC_MESSAGES/django.mo and b/core/locale/nl_NL/LC_MESSAGES/django.mo differ diff --git a/core/locale/nl_NL/LC_MESSAGES/django.po b/core/locale/nl_NL/LC_MESSAGES/django.po index 3395a42a..02ac709b 100644 --- a/core/locale/nl_NL/LC_MESSAGES/django.po +++ b/core/locale/nl_NL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-08 19:42+0100\n" +"POT-Creation-Date: 2025-06-10 03:32+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -81,7 +81,7 @@ msgstr "Afbeelding" msgid "images" msgstr "Afbeeldingen" -#: core/admin.py:162 core/models.py:1180 +#: core/admin.py:162 core/models.py:1212 msgid "stock" msgstr "Voorraad" @@ -109,11 +109,11 @@ msgstr "Basisinformatie" msgid "important dates" msgstr "Belangrijke data" -#: core/admin.py:253 core/models.py:874 +#: core/admin.py:253 core/models.py:881 msgid "order product" msgstr "Product bestellen" -#: core/admin.py:254 core/graphene/object_types.py:262 core/models.py:875 +#: core/admin.py:254 core/graphene/object_types.py:262 core/models.py:882 msgid "order products" msgstr "Producten bestellen" @@ -773,6 +773,98 @@ msgstr "feedback toevoegen of verwijderen op een order-productrelatie" msgid "no search term provided." msgstr "Geen zoekterm opgegeven." +#: core/filters.py:37 core/filters.py:357 +msgid "UUID" +msgstr "UUID" + +#: core/filters.py:38 core/filters.py:309 core/filters.py:340 +msgid "Name" +msgstr "Naam" + +#: core/filters.py:39 core/filters.py:341 +msgid "Categories" +msgstr "Categorieën" + +#: core/filters.py:44 +msgid "Categories Slugs" +msgstr "Categorieën Naaktslakken" + +#: core/filters.py:45 core/filters.py:312 +msgid "Tags" +msgstr "Tags" + +#: core/filters.py:46 +msgid "Min Price" +msgstr "Min Prijs" + +#: core/filters.py:47 +msgid "Max Price" +msgstr "Maximale prijs" + +#: core/filters.py:48 +msgid "Is Active" +msgstr "Is actief" + +#: core/filters.py:49 +msgid "Brand" +msgstr "Merk" + +#: core/filters.py:50 +msgid "Attributes" +msgstr "Attributen" + +#: core/filters.py:51 +msgid "Quantity" +msgstr "Hoeveelheid" + +#: core/filters.py:52 core/filters.py:311 +msgid "Slug" +msgstr "Slak" + +#: core/filters.py:53 +msgid "Is Digital" +msgstr "Is digitaal" + +#: core/filters.py:56 +msgid "Include sub-categories" +msgstr "Subcategorieën opnemen" + +#: core/filters.py:245 +msgid "Search (ID, product name or part number)" +msgstr "Zoeken (ID, productnaam of onderdeelnummer)" + +#: core/filters.py:248 +msgid "Bought after (inclusive)" +msgstr "Gekocht na (inclusief)" + +#: core/filters.py:249 +msgid "Bought before (inclusive)" +msgstr "Eerder gekocht (inclusief)" + +#: core/filters.py:252 core/filters.py:295 +msgid "User email" +msgstr "E-mail gebruiker" + +#: core/filters.py:253 core/filters.py:296 core/filters.py:359 +msgid "User UUID" +msgstr "Gebruiker UUID" + +#: core/filters.py:254 +msgid "Status" +msgstr "Status" + +#: core/filters.py:255 +msgid "Human Readable ID" +msgstr "Menselijk leesbare ID" + +#: core/filters.py:310 +msgid "Parent" +msgstr "Ouder" + +#: core/filters.py:358 +msgid "Product UUID" +msgstr "Product UUID" + #: core/graphene/mutations.py:38 msgid "key to look for in or set into the cache" msgstr "Sleutel om te zoeken of te plaatsen in de cache" @@ -824,7 +916,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "Geef order_uuid of order_hr_id - wederzijds exclusief!" #: core/graphene/mutations.py:225 core/graphene/mutations.py:441 -#: core/graphene/mutations.py:475 core/viewsets.py:348 +#: core/graphene/mutations.py:475 core/viewsets.py:345 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Verkeerd type kwam uit order.buy() methode: {type(instance)!s}" @@ -877,7 +969,7 @@ msgstr "" msgid "original address string provided by the user" msgstr "Originele adresstring geleverd door de gebruiker" -#: core/graphene/mutations.py:572 core/viewsets.py:238 core/viewsets.py:351 +#: core/graphene/mutations.py:572 core/viewsets.py:240 core/viewsets.py:348 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} bestaat niet: {uuid}" @@ -891,7 +983,7 @@ msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - werkt als een charme" #: core/graphene/object_types.py:43 core/graphene/object_types.py:245 -#: core/graphene/object_types.py:286 core/models.py:126 core/models.py:489 +#: core/graphene/object_types.py:286 core/models.py:126 core/models.py:495 msgid "attributes" msgstr "Attributen" @@ -904,11 +996,11 @@ msgid "groups of attributes" msgstr "Groepen van kenmerken" #: core/graphene/object_types.py:76 core/graphene/object_types.py:104 -#: core/graphene/object_types.py:132 core/models.py:90 core/models.py:220 +#: core/graphene/object_types.py:132 core/models.py:90 core/models.py:226 msgid "categories" msgstr "Categorieën" -#: core/graphene/object_types.py:83 core/models.py:267 +#: core/graphene/object_types.py:83 core/models.py:273 msgid "brands" msgstr "Merken" @@ -934,7 +1026,7 @@ msgstr "" "Minimale en maximale prijzen voor producten in deze categorie, indien " "beschikbaar." -#: core/graphene/object_types.py:202 core/models.py:404 +#: core/graphene/object_types.py:202 core/models.py:410 msgid "vendors" msgstr "Verkopers" @@ -959,7 +1051,7 @@ msgid "represents feedback from a user." msgstr "Vertegenwoordigt feedback van een gebruiker." #: core/graphene/object_types.py:246 core/graphene/object_types.py:287 -#: core/models.py:483 +#: core/models.py:489 msgid "notifications" msgstr "Meldingen" @@ -971,7 +1063,7 @@ msgstr "Download url voor dit bestelproduct indien van toepassing" msgid "a list of order products in this order" msgstr "Een lijst met bestelde producten in deze bestelling" -#: core/graphene/object_types.py:278 core/models.py:453 +#: core/graphene/object_types.py:278 core/models.py:459 msgid "billing address" msgstr "Factuuradres" @@ -995,7 +1087,7 @@ msgstr "Totale hoeveelheid producten in bestelling" msgid "are all products in the order digital" msgstr "Zijn alle producten in de bestelling digitaal" -#: core/graphene/object_types.py:305 core/models.py:517 +#: core/graphene/object_types.py:305 core/models.py:523 msgid "orders" msgstr "Bestellingen" @@ -1007,15 +1099,15 @@ msgstr "Afbeelding URL" msgid "product's images" msgstr "Afbeeldingen van het product" -#: core/graphene/object_types.py:335 core/models.py:219 core/models.py:277 +#: core/graphene/object_types.py:335 core/models.py:225 core/models.py:283 msgid "category" msgstr "Categorie" -#: core/graphene/object_types.py:337 core/models.py:440 +#: core/graphene/object_types.py:337 core/models.py:446 msgid "feedbacks" msgstr "Reacties" -#: core/graphene/object_types.py:338 core/models.py:266 core/models.py:285 +#: core/graphene/object_types.py:338 core/models.py:272 core/models.py:291 msgid "brand" msgstr "Merk" @@ -1035,7 +1127,7 @@ msgstr "Hoeveelheid" msgid "number of feedbacks" msgstr "Aantal terugkoppelingen" -#: core/graphene/object_types.py:360 core/models.py:329 +#: core/graphene/object_types.py:360 core/models.py:335 msgid "products" msgstr "Producten" @@ -1047,15 +1139,15 @@ msgstr "Promocodes" msgid "products on sale" msgstr "Producten te koop" -#: core/graphene/object_types.py:425 core/models.py:1121 +#: core/graphene/object_types.py:425 core/models.py:1153 msgid "promotions" msgstr "Promoties" -#: core/graphene/object_types.py:429 core/models.py:403 +#: core/graphene/object_types.py:429 core/models.py:409 msgid "vendor" msgstr "Verkoper" -#: core/graphene/object_types.py:430 core/models.py:328 +#: core/graphene/object_types.py:430 core/models.py:334 #: core/templates/digital_order_created_email.html:107 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:93 @@ -1063,11 +1155,11 @@ msgstr "Verkoper" msgid "product" msgstr "Product" -#: core/graphene/object_types.py:441 core/models.py:1191 +#: core/graphene/object_types.py:441 core/models.py:1223 msgid "wishlisted products" msgstr "Gewenste producten" -#: core/graphene/object_types.py:447 core/models.py:1208 +#: core/graphene/object_types.py:447 core/models.py:1240 msgid "wishlists" msgstr "Verlanglijst" @@ -1075,7 +1167,7 @@ msgstr "Verlanglijst" msgid "tagged products" msgstr "Getagde producten" -#: core/graphene/object_types.py:458 core/models.py:291 core/models.py:952 +#: core/graphene/object_types.py:458 core/models.py:297 core/models.py:959 msgid "product tags" msgstr "Product tags" @@ -1223,8 +1315,8 @@ msgstr "Attribuut van deze waarde" msgid "the specific product associated with this attribute's value" msgstr "Het specifieke product geassocieerd met de waarde van dit kenmerk" -#: core/models.py:145 core/models.py:851 core/models.py:978 -#: core/models.py:1147 +#: core/models.py:145 core/models.py:858 core/models.py:1010 +#: core/models.py:1179 msgid "associated product" msgstr "Bijbehorend product" @@ -1268,279 +1360,287 @@ msgstr "Voeg een gedetailleerde beschrijving toe voor deze categorie" msgid "category description" msgstr "Categorie beschrijving" -#: core/models.py:229 +#: core/models.py:212 +msgid "tags that help describe or group this category" +msgstr "tags die deze categorie helpen beschrijven of groeperen" + +#: core/models.py:213 core/models.py:984 +msgid "category tags" +msgstr "categorie tags" + +#: core/models.py:235 msgid "name of this brand" msgstr "Naam van dit merk" -#: core/models.py:230 +#: core/models.py:236 msgid "brand name" msgstr "Merknaam" -#: core/models.py:237 +#: core/models.py:243 msgid "upload a logo representing this brand" msgstr "Upload een logo dat dit merk vertegenwoordigt" -#: core/models.py:239 +#: core/models.py:245 msgid "brand small image" msgstr "Klein merkimago" -#: core/models.py:245 +#: core/models.py:251 msgid "upload a big logo representing this brand" msgstr "Upload een groot logo dat dit merk vertegenwoordigt" -#: core/models.py:247 +#: core/models.py:253 msgid "brand big image" msgstr "Groot merkimago" -#: core/models.py:252 +#: core/models.py:258 msgid "add a detailed description of the brand" msgstr "Een gedetailleerde beschrijving van het merk toevoegen" -#: core/models.py:253 +#: core/models.py:259 msgid "brand description" msgstr "Merknaam" -#: core/models.py:258 +#: core/models.py:264 msgid "optional categories that this brand is associated with" msgstr "Optionele categorieën waarmee dit merk wordt geassocieerd" -#: core/models.py:259 +#: core/models.py:265 msgid "associated categories" msgstr "Categorieën" -#: core/models.py:276 +#: core/models.py:282 msgid "category this product belongs to" msgstr "Categorie waartoe dit product behoort" -#: core/models.py:284 +#: core/models.py:290 msgid "optionally associate this product with a brand" msgstr "Dit product optioneel koppelen aan een merk" -#: core/models.py:290 +#: core/models.py:296 msgid "tags that help describe or group this product" msgstr "Tags die dit product helpen beschrijven of groeperen" -#: core/models.py:295 +#: core/models.py:301 msgid "indicates whether this product is digitally delivered" msgstr "Geeft aan of dit product digitaal wordt geleverd" -#: core/models.py:296 +#: core/models.py:302 msgid "is product digital" msgstr "Is product digitaal" -#: core/models.py:302 +#: core/models.py:308 msgid "provide a clear identifying name for the product" msgstr "Zorg voor een duidelijke identificerende naam voor het product" -#: core/models.py:303 +#: core/models.py:309 msgid "product name" msgstr "Naam product" -#: core/models.py:308 core/models.py:1109 +#: core/models.py:314 core/models.py:1141 msgid "add a detailed description of the product" msgstr "Voeg een gedetailleerde beschrijving van het product toe" -#: core/models.py:309 +#: core/models.py:315 msgid "product description" msgstr "Productbeschrijving" -#: core/models.py:316 +#: core/models.py:322 msgid "part number for this product" msgstr "Onderdeelnummer voor dit product" -#: core/models.py:317 +#: core/models.py:323 msgid "part number" msgstr "Onderdeelnummer" -#: core/models.py:381 +#: core/models.py:387 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Slaat referenties en eindpunten op die vereist zijn voor API-communicatie " "van de verkoper" -#: core/models.py:382 +#: core/models.py:388 msgid "authentication info" msgstr "Authenticatie-info" -#: core/models.py:387 +#: core/models.py:393 msgid "define the markup for products retrieved from this vendor" msgstr "" "Definieer de opmaak voor producten die zijn opgehaald bij deze leverancier" -#: core/models.py:388 +#: core/models.py:394 msgid "vendor markup percentage" msgstr "Verkoper winstpercentage" -#: core/models.py:392 +#: core/models.py:398 msgid "name of this vendor" msgstr "Naam van deze verkoper" -#: core/models.py:393 +#: core/models.py:399 msgid "vendor name" msgstr "Naam verkoper" -#: core/models.py:416 +#: core/models.py:422 msgid "user-provided comments about their experience with the product" msgstr "Opmerkingen van gebruikers over hun ervaring met het product" -#: core/models.py:417 +#: core/models.py:423 msgid "feedback comments" msgstr "Reacties" -#: core/models.py:424 +#: core/models.py:430 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "Verwijst naar het specifieke product in een bestelling waar deze feedback " "over gaat" -#: core/models.py:425 +#: core/models.py:431 msgid "related order product" msgstr "Gerelateerd product bestellen" -#: core/models.py:430 +#: core/models.py:436 msgid "user-assigned rating for the product" msgstr "Door de gebruiker toegekende waardering voor het product" -#: core/models.py:431 +#: core/models.py:437 msgid "product rating" msgstr "Productbeoordeling" -#: core/models.py:439 +#: core/models.py:445 msgid "feedback" msgstr "Feedback" -#: core/models.py:452 +#: core/models.py:458 msgid "the billing address used for this order" msgstr "Het factuuradres dat voor deze bestelling is gebruikt" -#: core/models.py:460 +#: core/models.py:466 msgid "optional promo code applied to this order" msgstr "Optionele promotiecode toegepast op deze bestelling" -#: core/models.py:461 +#: core/models.py:467 msgid "applied promo code" msgstr "Kortingscode toegepast" -#: core/models.py:469 +#: core/models.py:475 msgid "the shipping address used for this order" msgstr "Het verzendadres dat voor deze bestelling is gebruikt" -#: core/models.py:470 +#: core/models.py:476 msgid "shipping address" msgstr "Verzendadres" -#: core/models.py:476 +#: core/models.py:482 msgid "current status of the order in its lifecycle" msgstr "Huidige status van de order in zijn levenscyclus" -#: core/models.py:477 +#: core/models.py:483 msgid "order status" msgstr "Bestelstatus" -#: core/models.py:482 core/models.py:828 +#: core/models.py:488 core/models.py:835 msgid "json structure of notifications to display to users" msgstr "" "JSON-structuur van meldingen om weer te geven aan gebruikers, in admin UI " "wordt de tabelweergave gebruikt" -#: core/models.py:488 +#: core/models.py:494 msgid "json representation of order attributes for this order" msgstr "JSON-weergave van bestelattributen voor deze bestelling" -#: core/models.py:494 +#: core/models.py:500 msgid "the user who placed the order" msgstr "De gebruiker die de bestelling heeft geplaatst" -#: core/models.py:495 +#: core/models.py:501 msgid "user" msgstr "Gebruiker" -#: core/models.py:501 +#: core/models.py:507 msgid "the timestamp when the order was finalized" msgstr "De tijdstempel waarop de bestelling is afgerond" -#: core/models.py:502 +#: core/models.py:508 msgid "buy time" msgstr "Tijd kopen" -#: core/models.py:509 +#: core/models.py:515 msgid "a human-readable identifier for the order" msgstr "Een menselijk leesbare identificatiecode voor de bestelling" -#: core/models.py:510 +#: core/models.py:516 msgid "human readable id" msgstr "menselijk leesbare ID" -#: core/models.py:516 +#: core/models.py:522 msgid "order" msgstr "Bestel" -#: core/models.py:531 +#: core/models.py:537 msgid "a user must have only one pending order at a time" msgstr "Een gebruiker mag maar één lopende order tegelijk hebben!" -#: core/models.py:559 +#: core/models.py:566 msgid "you cannot add products to an order that is not a pending one" msgstr "" "U kunt geen producten toevoegen aan een bestelling die niet in behandeling " "is." -#: core/models.py:564 +#: core/models.py:571 msgid "you cannot add inactive products to order" msgstr "U kunt geen inactieve producten toevoegen aan uw bestelling" -#: core/models.py:581 +#: core/models.py:588 msgid "you cannot add more products than available in stock" msgstr "Je kunt niet meer producten toevoegen dan er op voorraad zijn" -#: core/models.py:590 core/models.py:610 core/models.py:634 -#: core/models.py:1218 core/models.py:1230 +#: core/models.py:597 core/models.py:617 core/models.py:641 +#: core/models.py:1250 core/models.py:1262 #, python-brace-format msgid "{name} does not exist: {product_uuid}" msgstr "{name} bestaat niet: {product_uuid}" -#: core/models.py:594 core/models.py:618 core/models.py:626 +#: core/models.py:601 core/models.py:625 core/models.py:633 msgid "you cannot remove products from an order that is not a pending one" msgstr "" "U kunt geen producten verwijderen uit een bestelling die niet in behandeling" " is." -#: core/models.py:614 +#: core/models.py:621 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} bestaat niet met query <{query}>" -#: core/models.py:645 +#: core/models.py:652 msgid "promocode does not exist" msgstr "Promocode bestaat niet" -#: core/models.py:654 +#: core/models.py:661 msgid "you can only buy physical products with shipping address specified" msgstr "Je kunt alleen fysieke producten kopen met opgegeven verzendadres!" -#: core/models.py:673 +#: core/models.py:680 msgid "address does not exist" msgstr "Adres bestaat niet" -#: core/models.py:684 core/models.py:727 +#: core/models.py:691 core/models.py:734 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "U kunt op dit moment niet kopen. Probeer het over een paar minuten nog eens." -#: core/models.py:687 +#: core/models.py:694 msgid "invalid force value" msgstr "Ongeldige krachtwaarde" -#: core/models.py:692 core/models.py:730 +#: core/models.py:699 core/models.py:737 msgid "you cannot purchase an empty order!" msgstr "Je kunt geen lege bestelling kopen!" -#: core/models.py:707 +#: core/models.py:714 msgid "insufficient funds to complete the order" msgstr "Onvoldoende fondsen om de bestelling te voltooien" -#: core/models.py:739 +#: core/models.py:746 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -1548,7 +1648,7 @@ msgstr "" "u niet kunt kopen zonder registratie, geef dan de volgende informatie: " "klantnaam, e-mail klant, telefoonnummer klant" -#: core/models.py:748 +#: core/models.py:755 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -1556,195 +1656,199 @@ msgstr "" "Ongeldige betalingsmethode: {payment_method} van " "{available_payment_methods}!" -#: core/models.py:816 +#: core/models.py:823 msgid "the price paid by the customer for this product at purchase time" msgstr "De prijs die de klant bij aankoop voor dit product heeft betaald" -#: core/models.py:817 +#: core/models.py:824 msgid "purchase price at order time" msgstr "Aankoopprijs bij bestelling" -#: core/models.py:822 +#: core/models.py:829 msgid "internal comments for admins about this ordered product" msgstr "Interne opmerkingen voor beheerders over dit bestelde product" -#: core/models.py:823 +#: core/models.py:830 msgid "internal comments" msgstr "Interne opmerkingen" -#: core/models.py:829 +#: core/models.py:836 msgid "user notifications" msgstr "Meldingen van gebruikers" -#: core/models.py:834 +#: core/models.py:841 msgid "json representation of this item's attributes" msgstr "JSON weergave van de attributen van dit item" -#: core/models.py:835 +#: core/models.py:842 msgid "ordered product attributes" msgstr "Geordende producteigenschappen" -#: core/models.py:840 +#: core/models.py:847 msgid "reference to the parent order that contains this product" msgstr "Verwijzing naar de bovenliggende bestelling die dit product bevat" -#: core/models.py:841 +#: core/models.py:848 msgid "parent order" msgstr "Ouderlijk bevel" -#: core/models.py:850 +#: core/models.py:857 msgid "the specific product associated with this order line" msgstr "Het specifieke product dat bij deze bestelregel hoort" -#: core/models.py:857 +#: core/models.py:864 msgid "quantity of this specific product in the order" msgstr "Hoeveelheid van dit specifieke product in de bestelling" -#: core/models.py:858 +#: core/models.py:865 msgid "product quantity" msgstr "Hoeveelheid product" -#: core/models.py:865 +#: core/models.py:872 msgid "current status of this product in the order" msgstr "Huidige status van dit product in de bestelling" -#: core/models.py:866 +#: core/models.py:873 msgid "product line status" msgstr "Status productlijn" -#: core/models.py:918 +#: core/models.py:925 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "verkeerde actie opgegeven voor feedback: {action}" -#: core/models.py:926 +#: core/models.py:933 msgid "you cannot feedback an order which is not received" msgstr "" "U kunt geen producten verwijderen uit een bestelling die niet in behandeling" " is." -#: core/models.py:937 +#: core/models.py:944 core/models.py:969 msgid "internal tag identifier for the product tag" msgstr "Interne tagidentifier voor de producttag" -#: core/models.py:938 +#: core/models.py:945 core/models.py:970 msgid "tag name" msgstr "Tag naam" -#: core/models.py:942 +#: core/models.py:949 core/models.py:974 msgid "user-friendly name for the product tag" msgstr "Gebruiksvriendelijke naam voor de producttag" -#: core/models.py:943 +#: core/models.py:950 core/models.py:975 msgid "tag display name" msgstr "Tag weergavenaam" -#: core/models.py:951 +#: core/models.py:958 msgid "product tag" msgstr "Productlabel" -#: core/models.py:960 +#: core/models.py:983 +msgid "category tag" +msgstr "categorie tag" + +#: core/models.py:992 msgid "provide alternative text for the image for accessibility" msgstr "Geef alternatieve tekst voor de afbeelding voor toegankelijkheid" -#: core/models.py:961 +#: core/models.py:993 msgid "image alt text" msgstr "Alt-tekst afbeelding" -#: core/models.py:964 +#: core/models.py:996 msgid "upload the image file for this product" msgstr "Upload het afbeeldingsbestand voor dit product" -#: core/models.py:965 core/models.py:990 +#: core/models.py:997 core/models.py:1022 msgid "product image" msgstr "Product afbeelding" -#: core/models.py:971 +#: core/models.py:1003 msgid "determines the order in which images are displayed" msgstr "Bepaalt de volgorde waarin afbeeldingen worden weergegeven" -#: core/models.py:972 +#: core/models.py:1004 msgid "display priority" msgstr "Prioriteit weergeven" -#: core/models.py:977 +#: core/models.py:1009 msgid "the product that this image represents" msgstr "Het product dat deze afbeelding vertegenwoordigt" -#: core/models.py:991 +#: core/models.py:1023 msgid "product images" msgstr "Product afbeeldingen" -#: core/models.py:1001 +#: core/models.py:1033 msgid "unique code used by a user to redeem a discount" msgstr "Unieke code die een gebruiker gebruikt om een korting te verzilveren" -#: core/models.py:1002 +#: core/models.py:1034 msgid "promo code identifier" msgstr "Promo code identificatie" -#: core/models.py:1009 +#: core/models.py:1041 msgid "fixed discount amount applied if percent is not used" msgstr "" "Vast kortingsbedrag dat wordt toegepast als percentage niet wordt gebruikt" -#: core/models.py:1010 +#: core/models.py:1042 msgid "fixed discount amount" msgstr "Vast kortingsbedrag" -#: core/models.py:1016 +#: core/models.py:1048 msgid "percentage discount applied if fixed amount is not used" msgstr "" "Kortingspercentage dat wordt toegepast als het vaste bedrag niet wordt " "gebruikt" -#: core/models.py:1017 +#: core/models.py:1049 msgid "percentage discount" msgstr "Kortingspercentage" -#: core/models.py:1022 +#: core/models.py:1054 msgid "timestamp when the promocode expires" msgstr "Tijdstempel wanneer de promocode verloopt" -#: core/models.py:1023 +#: core/models.py:1055 msgid "end validity time" msgstr "Geldigheidsduur einde" -#: core/models.py:1028 +#: core/models.py:1060 msgid "timestamp from which this promocode is valid" msgstr "Tijdstempel vanaf wanneer deze promocode geldig is" -#: core/models.py:1029 +#: core/models.py:1061 msgid "start validity time" msgstr "Begin geldigheidsduur" -#: core/models.py:1034 +#: core/models.py:1066 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "Tijdstempel wanneer de promocode werd gebruikt, leeg indien nog niet " "gebruikt" -#: core/models.py:1035 +#: core/models.py:1067 msgid "usage timestamp" msgstr "Gebruik tijdstempel" -#: core/models.py:1040 +#: core/models.py:1072 msgid "user assigned to this promocode if applicable" msgstr "Gebruiker toegewezen aan deze promocode indien van toepassing" -#: core/models.py:1041 +#: core/models.py:1073 msgid "assigned user" msgstr "Toegewezen gebruiker" -#: core/models.py:1048 +#: core/models.py:1080 msgid "promo code" msgstr "Kortingscode" -#: core/models.py:1049 +#: core/models.py:1081 msgid "promo codes" msgstr "Actiecodes" -#: core/models.py:1056 +#: core/models.py:1088 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -1752,197 +1856,197 @@ msgstr "" "Er moet slechts één type korting worden gedefinieerd (bedrag of percentage)," " maar niet beide of geen van beide." -#: core/models.py:1071 +#: core/models.py:1103 msgid "promocode already used" msgstr "Promocode is al gebruikt" -#: core/models.py:1085 +#: core/models.py:1117 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Ongeldig kortingstype voor promocode {self.uuid}" -#: core/models.py:1097 +#: core/models.py:1129 msgid "percentage discount for the selected products" msgstr "Kortingspercentage voor de geselecteerde producten" -#: core/models.py:1098 +#: core/models.py:1130 msgid "discount percentage" msgstr "Kortingspercentage" -#: core/models.py:1103 +#: core/models.py:1135 msgid "provide a unique name for this promotion" msgstr "Geef deze promotie een unieke naam" -#: core/models.py:1104 +#: core/models.py:1136 msgid "promotion name" msgstr "Naam promotie" -#: core/models.py:1110 +#: core/models.py:1142 msgid "promotion description" msgstr "Promotie beschrijving" -#: core/models.py:1115 +#: core/models.py:1147 msgid "select which products are included in this promotion" msgstr "Selecteer welke producten onder deze promotie vallen" -#: core/models.py:1116 +#: core/models.py:1148 msgid "included products" msgstr "Meegeleverde producten" -#: core/models.py:1120 +#: core/models.py:1152 msgid "promotion" msgstr "Promotie" -#: core/models.py:1135 +#: core/models.py:1167 msgid "the vendor supplying this product stock" msgstr "De verkoper die dit product levert" -#: core/models.py:1136 +#: core/models.py:1168 msgid "associated vendor" msgstr "Geassocieerde verkoper" -#: core/models.py:1140 +#: core/models.py:1172 msgid "final price to the customer after markups" msgstr "Eindprijs voor de klant na winstmarges" -#: core/models.py:1141 +#: core/models.py:1173 msgid "selling price" msgstr "Verkoopprijs" -#: core/models.py:1146 +#: core/models.py:1178 msgid "the product associated with this stock entry" msgstr "Het product dat bij deze voorraadvermelding hoort" -#: core/models.py:1154 +#: core/models.py:1186 msgid "the price paid to the vendor for this product" msgstr "De prijs die voor dit product aan de verkoper is betaald" -#: core/models.py:1155 +#: core/models.py:1187 msgid "vendor purchase price" msgstr "Aankoopprijs verkoper" -#: core/models.py:1159 +#: core/models.py:1191 msgid "available quantity of the product in stock" msgstr "Beschikbare hoeveelheid van het product in voorraad" -#: core/models.py:1160 +#: core/models.py:1192 msgid "quantity in stock" msgstr "Hoeveelheid op voorraad" -#: core/models.py:1164 +#: core/models.py:1196 msgid "vendor-assigned SKU for identifying the product" msgstr "Door de verkoper toegewezen SKU om het product te identificeren" -#: core/models.py:1165 +#: core/models.py:1197 msgid "vendor sku" msgstr "Verkoper SKU" -#: core/models.py:1171 +#: core/models.py:1203 msgid "digital file associated with this stock if applicable" msgstr "Digitaal bestand gekoppeld aan deze voorraad indien van toepassing" -#: core/models.py:1172 +#: core/models.py:1204 msgid "digital file" msgstr "Digitaal bestand" -#: core/models.py:1181 +#: core/models.py:1213 msgid "stock entries" msgstr "Voorraadboekingen" -#: core/models.py:1190 +#: core/models.py:1222 msgid "products that the user has marked as wanted" msgstr "Producten die de gebruiker als gewenst heeft gemarkeerd" -#: core/models.py:1198 +#: core/models.py:1230 msgid "user who owns this wishlist" msgstr "Gebruiker die eigenaar is van deze verlanglijst" -#: core/models.py:1199 +#: core/models.py:1231 msgid "wishlist owner" msgstr "Eigenaar verlanglijstje" -#: core/models.py:1207 +#: core/models.py:1239 msgid "wishlist" msgstr "Verlanglijst" -#: core/models.py:1252 +#: core/models.py:1284 msgid "download" msgstr "Downloaden" -#: core/models.py:1253 +#: core/models.py:1285 msgid "downloads" msgstr "Downloads" -#: core/models.py:1261 +#: core/models.py:1293 msgid "you can not download a digital asset for a non-finished order" msgstr "" "U kunt geen digitale activa downloaden voor een niet-afgeronde bestelling" -#: core/models.py:1273 +#: core/models.py:1305 msgid "documentary" msgstr "Documentaire" -#: core/models.py:1274 +#: core/models.py:1306 msgid "documentaries" msgstr "Documentaires" -#: core/models.py:1284 +#: core/models.py:1316 msgid "unresolved" msgstr "Onopgelost" -#: core/models.py:1293 +#: core/models.py:1325 msgid "address line for the customer" msgstr "Adresregel voor de klant" -#: core/models.py:1294 +#: core/models.py:1326 msgid "address line" msgstr "Adresregel" -#: core/models.py:1296 +#: core/models.py:1328 msgid "street" msgstr "Straat" -#: core/models.py:1297 +#: core/models.py:1329 msgid "district" msgstr "District" -#: core/models.py:1298 +#: core/models.py:1330 msgid "city" msgstr "Stad" -#: core/models.py:1299 +#: core/models.py:1331 msgid "region" msgstr "Regio" -#: core/models.py:1300 +#: core/models.py:1332 msgid "postal code" msgstr "Postcode" -#: core/models.py:1301 +#: core/models.py:1333 msgid "country" msgstr "Land" -#: core/models.py:1304 +#: core/models.py:1336 msgid "geolocation point: (longitude, latitude)" msgstr "Geolocatie Punt (lengtegraad, breedtegraad)" -#: core/models.py:1307 +#: core/models.py:1339 msgid "full JSON response from geocoder for this address" msgstr "Volledig JSON-antwoord van geocoder voor dit adres" -#: core/models.py:1309 +#: core/models.py:1341 msgid "stored JSON response from the geocoding service" msgstr "Opgeslagen JSON-antwoord van de geocoderingsservice" -#: core/models.py:1316 +#: core/models.py:1348 msgid "address" msgstr "Adres" -#: core/models.py:1317 +#: core/models.py:1349 msgid "addresses" msgstr "Adressen" -#: core/serializers/utility.py:76 +#: core/serializers/utility.py:77 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" @@ -2184,7 +2288,7 @@ msgstr "U kunt het digitale goed maar één keer downloaden" msgid "favicon not found" msgstr "favicon niet gevonden" -#: core/viewsets.py:680 +#: core/viewsets.py:677 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Fout bij geocodering: {e}" diff --git a/core/locale/pl_PL/LC_MESSAGES/django.mo b/core/locale/pl_PL/LC_MESSAGES/django.mo index 6463c9bc..ddc8cded 100644 Binary files a/core/locale/pl_PL/LC_MESSAGES/django.mo and b/core/locale/pl_PL/LC_MESSAGES/django.mo differ diff --git a/core/locale/pl_PL/LC_MESSAGES/django.po b/core/locale/pl_PL/LC_MESSAGES/django.po index ae8418bd..b7a4a54b 100644 --- a/core/locale/pl_PL/LC_MESSAGES/django.po +++ b/core/locale/pl_PL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-08 19:42+0100\n" +"POT-Creation-Date: 2025-06-10 03:32+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -83,7 +83,7 @@ msgstr "Obraz" msgid "images" msgstr "Obrazy" -#: core/admin.py:162 core/models.py:1180 +#: core/admin.py:162 core/models.py:1212 msgid "stock" msgstr "Stan magazynowy" @@ -111,11 +111,11 @@ msgstr "Podstawowe informacje" msgid "important dates" msgstr "Ważne daty" -#: core/admin.py:253 core/models.py:874 +#: core/admin.py:253 core/models.py:881 msgid "order product" msgstr "Zamów produkt" -#: core/admin.py:254 core/graphene/object_types.py:262 core/models.py:875 +#: core/admin.py:254 core/graphene/object_types.py:262 core/models.py:882 msgid "order products" msgstr "Zamawianie produktów" @@ -769,6 +769,98 @@ msgstr "dodawanie lub usuwanie opinii na temat relacji zamówienie-produkt" msgid "no search term provided." msgstr "Nie podano wyszukiwanego hasła." +#: core/filters.py:37 core/filters.py:357 +msgid "UUID" +msgstr "UUID" + +#: core/filters.py:38 core/filters.py:309 core/filters.py:340 +msgid "Name" +msgstr "Nazwa" + +#: core/filters.py:39 core/filters.py:341 +msgid "Categories" +msgstr "Kategorie" + +#: core/filters.py:44 +msgid "Categories Slugs" +msgstr "Kategorie Ślimaki" + +#: core/filters.py:45 core/filters.py:312 +msgid "Tags" +msgstr "Tagi" + +#: core/filters.py:46 +msgid "Min Price" +msgstr "Cena minimalna" + +#: core/filters.py:47 +msgid "Max Price" +msgstr "Maksymalna cena" + +#: core/filters.py:48 +msgid "Is Active" +msgstr "Jest aktywny" + +#: core/filters.py:49 +msgid "Brand" +msgstr "Marka" + +#: core/filters.py:50 +msgid "Attributes" +msgstr "Atrybuty" + +#: core/filters.py:51 +msgid "Quantity" +msgstr "Ilość" + +#: core/filters.py:52 core/filters.py:311 +msgid "Slug" +msgstr "Ślimak" + +#: core/filters.py:53 +msgid "Is Digital" +msgstr "Czy cyfrowy" + +#: core/filters.py:56 +msgid "Include sub-categories" +msgstr "Uwzględnienie podkategorii" + +#: core/filters.py:245 +msgid "Search (ID, product name or part number)" +msgstr "Wyszukiwanie (ID, nazwa produktu lub numer części)" + +#: core/filters.py:248 +msgid "Bought after (inclusive)" +msgstr "Kupione po (włącznie)" + +#: core/filters.py:249 +msgid "Bought before (inclusive)" +msgstr "Kupione wcześniej (włącznie)" + +#: core/filters.py:252 core/filters.py:295 +msgid "User email" +msgstr "E-mail użytkownika" + +#: core/filters.py:253 core/filters.py:296 core/filters.py:359 +msgid "User UUID" +msgstr "UUID użytkownika" + +#: core/filters.py:254 +msgid "Status" +msgstr "Status" + +#: core/filters.py:255 +msgid "Human Readable ID" +msgstr "Identyfikator czytelny dla człowieka" + +#: core/filters.py:310 +msgid "Parent" +msgstr "Rodzic" + +#: core/filters.py:358 +msgid "Product UUID" +msgstr "UUID produktu" + #: core/graphene/mutations.py:38 msgid "key to look for in or set into the cache" msgstr "Klucz do wyszukania lub ustawienia w pamięci podręcznej" @@ -820,7 +912,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "Podaj albo order_uuid albo order_hr_id - wzajemnie się wykluczają!" #: core/graphene/mutations.py:225 core/graphene/mutations.py:441 -#: core/graphene/mutations.py:475 core/viewsets.py:348 +#: core/graphene/mutations.py:475 core/viewsets.py:345 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Nieprawidłowy typ pochodzi z metody order.buy(): {type(instance)!s}" @@ -874,7 +966,7 @@ msgstr "" msgid "original address string provided by the user" msgstr "Oryginalny ciąg adresu podany przez użytkownika" -#: core/graphene/mutations.py:572 core/viewsets.py:238 core/viewsets.py:351 +#: core/graphene/mutations.py:572 core/viewsets.py:240 core/viewsets.py:348 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} nie istnieje: {uuid}" @@ -888,7 +980,7 @@ msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - działa jak urok" #: core/graphene/object_types.py:43 core/graphene/object_types.py:245 -#: core/graphene/object_types.py:286 core/models.py:126 core/models.py:489 +#: core/graphene/object_types.py:286 core/models.py:126 core/models.py:495 msgid "attributes" msgstr "Atrybuty" @@ -901,11 +993,11 @@ msgid "groups of attributes" msgstr "Grupy atrybutów" #: core/graphene/object_types.py:76 core/graphene/object_types.py:104 -#: core/graphene/object_types.py:132 core/models.py:90 core/models.py:220 +#: core/graphene/object_types.py:132 core/models.py:90 core/models.py:226 msgid "categories" msgstr "Kategorie" -#: core/graphene/object_types.py:83 core/models.py:267 +#: core/graphene/object_types.py:83 core/models.py:273 msgid "brands" msgstr "Marki" @@ -929,7 +1021,7 @@ msgid "" msgstr "" "Minimalne i maksymalne ceny produktów w tej kategorii, jeśli są dostępne." -#: core/graphene/object_types.py:202 core/models.py:404 +#: core/graphene/object_types.py:202 core/models.py:410 msgid "vendors" msgstr "Sprzedawcy" @@ -954,7 +1046,7 @@ msgid "represents feedback from a user." msgstr "Reprezentuje informacje zwrotne od użytkownika." #: core/graphene/object_types.py:246 core/graphene/object_types.py:287 -#: core/models.py:483 +#: core/models.py:489 msgid "notifications" msgstr "Powiadomienia" @@ -966,7 +1058,7 @@ msgstr "Adres URL pobierania dla tego produktu zamówienia, jeśli dotyczy" msgid "a list of order products in this order" msgstr "Lista zamówionych produktów w tym zamówieniu" -#: core/graphene/object_types.py:278 core/models.py:453 +#: core/graphene/object_types.py:278 core/models.py:459 msgid "billing address" msgstr "Adres rozliczeniowy" @@ -990,7 +1082,7 @@ msgstr "Całkowita ilość produktów w zamówieniu" msgid "are all products in the order digital" msgstr "Czy wszystkie produkty w zamówieniu są cyfrowe?" -#: core/graphene/object_types.py:305 core/models.py:517 +#: core/graphene/object_types.py:305 core/models.py:523 msgid "orders" msgstr "Zamówienia" @@ -1002,15 +1094,15 @@ msgstr "Adres URL obrazu" msgid "product's images" msgstr "Zdjęcia produktu" -#: core/graphene/object_types.py:335 core/models.py:219 core/models.py:277 +#: core/graphene/object_types.py:335 core/models.py:225 core/models.py:283 msgid "category" msgstr "Kategoria" -#: core/graphene/object_types.py:337 core/models.py:440 +#: core/graphene/object_types.py:337 core/models.py:446 msgid "feedbacks" msgstr "Informacje zwrotne" -#: core/graphene/object_types.py:338 core/models.py:266 core/models.py:285 +#: core/graphene/object_types.py:338 core/models.py:272 core/models.py:291 msgid "brand" msgstr "Marka" @@ -1030,7 +1122,7 @@ msgstr "Ilość" msgid "number of feedbacks" msgstr "Liczba informacji zwrotnych" -#: core/graphene/object_types.py:360 core/models.py:329 +#: core/graphene/object_types.py:360 core/models.py:335 msgid "products" msgstr "Produkty" @@ -1042,15 +1134,15 @@ msgstr "Promocodes" msgid "products on sale" msgstr "Produkty w sprzedaży" -#: core/graphene/object_types.py:425 core/models.py:1121 +#: core/graphene/object_types.py:425 core/models.py:1153 msgid "promotions" msgstr "Promocje" -#: core/graphene/object_types.py:429 core/models.py:403 +#: core/graphene/object_types.py:429 core/models.py:409 msgid "vendor" msgstr "Sprzedawca" -#: core/graphene/object_types.py:430 core/models.py:328 +#: core/graphene/object_types.py:430 core/models.py:334 #: core/templates/digital_order_created_email.html:107 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:93 @@ -1058,11 +1150,11 @@ msgstr "Sprzedawca" msgid "product" msgstr "Produkt" -#: core/graphene/object_types.py:441 core/models.py:1191 +#: core/graphene/object_types.py:441 core/models.py:1223 msgid "wishlisted products" msgstr "Produkty z listy życzeń" -#: core/graphene/object_types.py:447 core/models.py:1208 +#: core/graphene/object_types.py:447 core/models.py:1240 msgid "wishlists" msgstr "Listy życzeń" @@ -1070,7 +1162,7 @@ msgstr "Listy życzeń" msgid "tagged products" msgstr "Produkty Tagged" -#: core/graphene/object_types.py:458 core/models.py:291 core/models.py:952 +#: core/graphene/object_types.py:458 core/models.py:297 core/models.py:959 msgid "product tags" msgstr "Tagi produktu" @@ -1216,8 +1308,8 @@ msgstr "Atrybut tej wartości" msgid "the specific product associated with this attribute's value" msgstr "Konkretny produkt powiązany z wartością tego atrybutu" -#: core/models.py:145 core/models.py:851 core/models.py:978 -#: core/models.py:1147 +#: core/models.py:145 core/models.py:858 core/models.py:1010 +#: core/models.py:1179 msgid "associated product" msgstr "Produkt powiązany" @@ -1261,279 +1353,287 @@ msgstr "Dodaj szczegółowy opis dla tej kategorii" msgid "category description" msgstr "Opis kategorii" -#: core/models.py:229 +#: core/models.py:212 +msgid "tags that help describe or group this category" +msgstr "tagi, które pomagają opisać lub pogrupować tę kategorię" + +#: core/models.py:213 core/models.py:984 +msgid "category tags" +msgstr "tagi kategorii" + +#: core/models.py:235 msgid "name of this brand" msgstr "Nazwa tej marki" -#: core/models.py:230 +#: core/models.py:236 msgid "brand name" msgstr "Nazwa marki" -#: core/models.py:237 +#: core/models.py:243 msgid "upload a logo representing this brand" msgstr "Prześlij logo reprezentujące tę markę" -#: core/models.py:239 +#: core/models.py:245 msgid "brand small image" msgstr "Mały wizerunek marki" -#: core/models.py:245 +#: core/models.py:251 msgid "upload a big logo representing this brand" msgstr "Prześlij duże logo reprezentujące tę markę" -#: core/models.py:247 +#: core/models.py:253 msgid "brand big image" msgstr "Duży wizerunek marki" -#: core/models.py:252 +#: core/models.py:258 msgid "add a detailed description of the brand" msgstr "Dodaj szczegółowy opis marki" -#: core/models.py:253 +#: core/models.py:259 msgid "brand description" msgstr "Opis marki" -#: core/models.py:258 +#: core/models.py:264 msgid "optional categories that this brand is associated with" msgstr "Opcjonalne kategorie, z którymi powiązana jest ta marka" -#: core/models.py:259 +#: core/models.py:265 msgid "associated categories" msgstr "Kategorie" -#: core/models.py:276 +#: core/models.py:282 msgid "category this product belongs to" msgstr "Kategoria, do której należy ten produkt" -#: core/models.py:284 +#: core/models.py:290 msgid "optionally associate this product with a brand" msgstr "Opcjonalnie można powiązać ten produkt z marką" -#: core/models.py:290 +#: core/models.py:296 msgid "tags that help describe or group this product" msgstr "Tagi, które pomagają opisać lub pogrupować ten produkt" -#: core/models.py:295 +#: core/models.py:301 msgid "indicates whether this product is digitally delivered" msgstr "Wskazuje, czy produkt jest dostarczany cyfrowo." -#: core/models.py:296 +#: core/models.py:302 msgid "is product digital" msgstr "Czy produkt jest cyfrowy?" -#: core/models.py:302 +#: core/models.py:308 msgid "provide a clear identifying name for the product" msgstr "Wyraźna nazwa identyfikująca produkt" -#: core/models.py:303 +#: core/models.py:309 msgid "product name" msgstr "Nazwa produktu" -#: core/models.py:308 core/models.py:1109 +#: core/models.py:314 core/models.py:1141 msgid "add a detailed description of the product" msgstr "Dodaj szczegółowy opis produktu" -#: core/models.py:309 +#: core/models.py:315 msgid "product description" msgstr "Opis produktu" -#: core/models.py:316 +#: core/models.py:322 msgid "part number for this product" msgstr "Numer części dla tego produktu" -#: core/models.py:317 +#: core/models.py:323 msgid "part number" msgstr "Numer części" -#: core/models.py:381 +#: core/models.py:387 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Przechowuje dane uwierzytelniające i punkty końcowe wymagane do komunikacji " "API dostawcy." -#: core/models.py:382 +#: core/models.py:388 msgid "authentication info" msgstr "Informacje o uwierzytelnianiu" -#: core/models.py:387 +#: core/models.py:393 msgid "define the markup for products retrieved from this vendor" msgstr "Definiowanie znaczników dla produktów pobranych od tego dostawcy" -#: core/models.py:388 +#: core/models.py:394 msgid "vendor markup percentage" msgstr "Procentowa marża sprzedawcy" -#: core/models.py:392 +#: core/models.py:398 msgid "name of this vendor" msgstr "Nazwa tego sprzedawcy" -#: core/models.py:393 +#: core/models.py:399 msgid "vendor name" msgstr "Nazwa sprzedawcy" -#: core/models.py:416 +#: core/models.py:422 msgid "user-provided comments about their experience with the product" msgstr "Komentarze użytkowników na temat ich doświadczeń z produktem" -#: core/models.py:417 +#: core/models.py:423 msgid "feedback comments" msgstr "Komentarze zwrotne" -#: core/models.py:424 +#: core/models.py:430 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "Odnosi się do konkretnego produktu w zamówieniu, którego dotyczy ta " "informacja zwrotna." -#: core/models.py:425 +#: core/models.py:431 msgid "related order product" msgstr "Powiązany produkt zamówienia" -#: core/models.py:430 +#: core/models.py:436 msgid "user-assigned rating for the product" msgstr "Ocena produktu przypisana przez użytkownika" -#: core/models.py:431 +#: core/models.py:437 msgid "product rating" msgstr "Ocena produktu" -#: core/models.py:439 +#: core/models.py:445 msgid "feedback" msgstr "Informacje zwrotne" -#: core/models.py:452 +#: core/models.py:458 msgid "the billing address used for this order" msgstr "Adres rozliczeniowy użyty dla tego zamówienia" -#: core/models.py:460 +#: core/models.py:466 msgid "optional promo code applied to this order" msgstr "Opcjonalny kod promocyjny zastosowany do tego zamówienia" -#: core/models.py:461 +#: core/models.py:467 msgid "applied promo code" msgstr "Zastosowany kod promocyjny" -#: core/models.py:469 +#: core/models.py:475 msgid "the shipping address used for this order" msgstr "Adres wysyłki użyty dla tego zamówienia" -#: core/models.py:470 +#: core/models.py:476 msgid "shipping address" msgstr "Adres wysyłki" -#: core/models.py:476 +#: core/models.py:482 msgid "current status of the order in its lifecycle" msgstr "Aktualny status zamówienia w jego cyklu życia" -#: core/models.py:477 +#: core/models.py:483 msgid "order status" msgstr "Status zamówienia" -#: core/models.py:482 core/models.py:828 +#: core/models.py:488 core/models.py:835 msgid "json structure of notifications to display to users" msgstr "" "Struktura JSON powiadomień do wyświetlenia użytkownikom, w interfejsie " "administratora używany jest widok tabeli" -#: core/models.py:488 +#: core/models.py:494 msgid "json representation of order attributes for this order" msgstr "Reprezentacja JSON atrybutów zamówienia dla tego zamówienia" -#: core/models.py:494 +#: core/models.py:500 msgid "the user who placed the order" msgstr "Użytkownik, który złożył zamówienie" -#: core/models.py:495 +#: core/models.py:501 msgid "user" msgstr "Użytkownik" -#: core/models.py:501 +#: core/models.py:507 msgid "the timestamp when the order was finalized" msgstr "Znacznik czasu, kiedy zamówienie zostało sfinalizowane" -#: core/models.py:502 +#: core/models.py:508 msgid "buy time" msgstr "Kup czas" -#: core/models.py:509 +#: core/models.py:515 msgid "a human-readable identifier for the order" msgstr "Czytelny dla człowieka identyfikator zamówienia" -#: core/models.py:510 +#: core/models.py:516 msgid "human readable id" msgstr "Identyfikator czytelny dla człowieka" -#: core/models.py:516 +#: core/models.py:522 msgid "order" msgstr "Zamówienie" -#: core/models.py:531 +#: core/models.py:537 msgid "a user must have only one pending order at a time" msgstr "" "Użytkownik może mieć tylko jedno oczekujące zlecenie w danym momencie!" -#: core/models.py:559 +#: core/models.py:566 msgid "you cannot add products to an order that is not a pending one" msgstr "" "Nie można dodać produktów do zamówienia, które nie jest zamówieniem " "oczekującym." -#: core/models.py:564 +#: core/models.py:571 msgid "you cannot add inactive products to order" msgstr "Nie można dodać nieaktywnych produktów do zamówienia" -#: core/models.py:581 +#: core/models.py:588 msgid "you cannot add more products than available in stock" msgstr "Nie można dodać więcej produktów niż jest dostępnych w magazynie" -#: core/models.py:590 core/models.py:610 core/models.py:634 -#: core/models.py:1218 core/models.py:1230 +#: core/models.py:597 core/models.py:617 core/models.py:641 +#: core/models.py:1250 core/models.py:1262 #, python-brace-format msgid "{name} does not exist: {product_uuid}" msgstr "{name} nie istnieje: {product_uuid}" -#: core/models.py:594 core/models.py:618 core/models.py:626 +#: core/models.py:601 core/models.py:625 core/models.py:633 msgid "you cannot remove products from an order that is not a pending one" msgstr "" "Nie można usunąć produktów z zamówienia, które nie jest zamówieniem " "oczekującym." -#: core/models.py:614 +#: core/models.py:621 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} nie istnieje z zapytaniem <{query}>." -#: core/models.py:645 +#: core/models.py:652 msgid "promocode does not exist" msgstr "Kod promocyjny nie istnieje" -#: core/models.py:654 +#: core/models.py:661 msgid "you can only buy physical products with shipping address specified" msgstr "Możesz kupować tylko produkty fizyczne z podanym adresem wysyłki!" -#: core/models.py:673 +#: core/models.py:680 msgid "address does not exist" msgstr "Adres nie istnieje" -#: core/models.py:684 core/models.py:727 +#: core/models.py:691 core/models.py:734 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "W tej chwili nie możesz dokonać zakupu, spróbuj ponownie za kilka minut." -#: core/models.py:687 +#: core/models.py:694 msgid "invalid force value" msgstr "Nieprawidłowa wartość siły" -#: core/models.py:692 core/models.py:730 +#: core/models.py:699 core/models.py:737 msgid "you cannot purchase an empty order!" msgstr "Nie można kupić pustego zamówienia!" -#: core/models.py:707 +#: core/models.py:714 msgid "insufficient funds to complete the order" msgstr "Niewystarczające środki do zrealizowania zamówienia" -#: core/models.py:739 +#: core/models.py:746 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -1542,7 +1642,7 @@ msgstr "" "informacje: imię i nazwisko klienta, adres e-mail klienta, numer telefonu " "klienta." -#: core/models.py:748 +#: core/models.py:755 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -1550,195 +1650,199 @@ msgstr "" "Nieprawidłowa metoda płatności: {payment_method} z " "{available_payment_methods}!" -#: core/models.py:816 +#: core/models.py:823 msgid "the price paid by the customer for this product at purchase time" msgstr "Cena zapłacona przez klienta za ten produkt w momencie zakupu." -#: core/models.py:817 +#: core/models.py:824 msgid "purchase price at order time" msgstr "Cena zakupu w momencie zamówienia" -#: core/models.py:822 +#: core/models.py:829 msgid "internal comments for admins about this ordered product" msgstr "" "Wewnętrzne komentarze dla administratorów dotyczące tego zamówionego " "produktu" -#: core/models.py:823 +#: core/models.py:830 msgid "internal comments" msgstr "Uwagi wewnętrzne" -#: core/models.py:829 +#: core/models.py:836 msgid "user notifications" msgstr "Powiadomienia użytkownika" -#: core/models.py:834 +#: core/models.py:841 msgid "json representation of this item's attributes" msgstr "Reprezentacja JSON atrybutów tego elementu" -#: core/models.py:835 +#: core/models.py:842 msgid "ordered product attributes" msgstr "Zamówione atrybuty produktu" -#: core/models.py:840 +#: core/models.py:847 msgid "reference to the parent order that contains this product" msgstr "Odniesienie do zamówienia nadrzędnego zawierającego ten produkt" -#: core/models.py:841 +#: core/models.py:848 msgid "parent order" msgstr "Zamówienie nadrzędne" -#: core/models.py:850 +#: core/models.py:857 msgid "the specific product associated with this order line" msgstr "Konkretny produkt powiązany z tą linią zamówienia" -#: core/models.py:857 +#: core/models.py:864 msgid "quantity of this specific product in the order" msgstr "Ilość tego konkretnego produktu w zamówieniu" -#: core/models.py:858 +#: core/models.py:865 msgid "product quantity" msgstr "Ilość produktu" -#: core/models.py:865 +#: core/models.py:872 msgid "current status of this product in the order" msgstr "Aktualny status tego produktu w zamówieniu" -#: core/models.py:866 +#: core/models.py:873 msgid "product line status" msgstr "Status linii produktów" -#: core/models.py:918 +#: core/models.py:925 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "nieprawidłowe działanie określone dla informacji zwrotnej: {action}" -#: core/models.py:926 +#: core/models.py:933 msgid "you cannot feedback an order which is not received" msgstr "" "Nie można usunąć produktów z zamówienia, które nie jest zamówieniem " "oczekującym." -#: core/models.py:937 +#: core/models.py:944 core/models.py:969 msgid "internal tag identifier for the product tag" msgstr "Wewnętrzny identyfikator tagu produktu" -#: core/models.py:938 +#: core/models.py:945 core/models.py:970 msgid "tag name" msgstr "Nazwa tagu" -#: core/models.py:942 +#: core/models.py:949 core/models.py:974 msgid "user-friendly name for the product tag" msgstr "Przyjazna dla użytkownika nazwa etykiety produktu" -#: core/models.py:943 +#: core/models.py:950 core/models.py:975 msgid "tag display name" msgstr "Wyświetlana nazwa znacznika" -#: core/models.py:951 +#: core/models.py:958 msgid "product tag" msgstr "Etykieta produktu" -#: core/models.py:960 +#: core/models.py:983 +msgid "category tag" +msgstr "tag kategorii" + +#: core/models.py:992 msgid "provide alternative text for the image for accessibility" msgstr "" "Zapewnienie alternatywnego tekstu dla obrazu w celu ułatwienia dostępu" -#: core/models.py:961 +#: core/models.py:993 msgid "image alt text" msgstr "Tekst alternatywny obrazu" -#: core/models.py:964 +#: core/models.py:996 msgid "upload the image file for this product" msgstr "Prześlij plik obrazu dla tego produktu" -#: core/models.py:965 core/models.py:990 +#: core/models.py:997 core/models.py:1022 msgid "product image" msgstr "Obraz produktu" -#: core/models.py:971 +#: core/models.py:1003 msgid "determines the order in which images are displayed" msgstr "Określa kolejność wyświetlania obrazów" -#: core/models.py:972 +#: core/models.py:1004 msgid "display priority" msgstr "Priorytet wyświetlania" -#: core/models.py:977 +#: core/models.py:1009 msgid "the product that this image represents" msgstr "Produkt, który przedstawia ten obraz" -#: core/models.py:991 +#: core/models.py:1023 msgid "product images" msgstr "Zdjęcia produktów" -#: core/models.py:1001 +#: core/models.py:1033 msgid "unique code used by a user to redeem a discount" msgstr "Unikalny kod używany przez użytkownika do realizacji rabatu." -#: core/models.py:1002 +#: core/models.py:1034 msgid "promo code identifier" msgstr "Identyfikator kodu promocyjnego" -#: core/models.py:1009 +#: core/models.py:1041 msgid "fixed discount amount applied if percent is not used" msgstr "Stała kwota rabatu stosowana, jeśli procent nie jest używany" -#: core/models.py:1010 +#: core/models.py:1042 msgid "fixed discount amount" msgstr "Stała kwota rabatu" -#: core/models.py:1016 +#: core/models.py:1048 msgid "percentage discount applied if fixed amount is not used" msgstr "Rabat procentowy stosowany w przypadku niewykorzystania stałej kwoty" -#: core/models.py:1017 +#: core/models.py:1049 msgid "percentage discount" msgstr "Rabat procentowy" -#: core/models.py:1022 +#: core/models.py:1054 msgid "timestamp when the promocode expires" msgstr "Znacznik czasu wygaśnięcia kodu promocyjnego" -#: core/models.py:1023 +#: core/models.py:1055 msgid "end validity time" msgstr "Końcowy czas ważności" -#: core/models.py:1028 +#: core/models.py:1060 msgid "timestamp from which this promocode is valid" msgstr "Znacznik czasu, od którego ten kod promocyjny jest ważny" -#: core/models.py:1029 +#: core/models.py:1061 msgid "start validity time" msgstr "Czas rozpoczęcia ważności" -#: core/models.py:1034 +#: core/models.py:1066 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "Znacznik czasu użycia kodu promocyjnego, pusty, jeśli nie został jeszcze " "użyty." -#: core/models.py:1035 +#: core/models.py:1067 msgid "usage timestamp" msgstr "Znacznik czasu użycia" -#: core/models.py:1040 +#: core/models.py:1072 msgid "user assigned to this promocode if applicable" msgstr "Użytkownik przypisany do tego kodu promocyjnego, jeśli dotyczy" -#: core/models.py:1041 +#: core/models.py:1073 msgid "assigned user" msgstr "Przypisany użytkownik" -#: core/models.py:1048 +#: core/models.py:1080 msgid "promo code" msgstr "Kod promocyjny" -#: core/models.py:1049 +#: core/models.py:1081 msgid "promo codes" msgstr "Kody promocyjne" -#: core/models.py:1056 +#: core/models.py:1088 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -1746,196 +1850,196 @@ msgstr "" "Należy zdefiniować tylko jeden rodzaj rabatu (kwotowy lub procentowy), ale " "nie oba lub żaden z nich." -#: core/models.py:1071 +#: core/models.py:1103 msgid "promocode already used" msgstr "Kod promocyjny został już wykorzystany" -#: core/models.py:1085 +#: core/models.py:1117 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Nieprawidłowy typ rabatu dla kodu promocyjnego {self.uuid}." -#: core/models.py:1097 +#: core/models.py:1129 msgid "percentage discount for the selected products" msgstr "Rabat procentowy na wybrane produkty" -#: core/models.py:1098 +#: core/models.py:1130 msgid "discount percentage" msgstr "Procent rabatu" -#: core/models.py:1103 +#: core/models.py:1135 msgid "provide a unique name for this promotion" msgstr "Podaj unikalną nazwę tej promocji" -#: core/models.py:1104 +#: core/models.py:1136 msgid "promotion name" msgstr "Nazwa promocji" -#: core/models.py:1110 +#: core/models.py:1142 msgid "promotion description" msgstr "Opis promocji" -#: core/models.py:1115 +#: core/models.py:1147 msgid "select which products are included in this promotion" msgstr "Wybierz produkty objęte promocją" -#: core/models.py:1116 +#: core/models.py:1148 msgid "included products" msgstr "Dołączone produkty" -#: core/models.py:1120 +#: core/models.py:1152 msgid "promotion" msgstr "Promocja" -#: core/models.py:1135 +#: core/models.py:1167 msgid "the vendor supplying this product stock" msgstr "Sprzedawca dostarczający ten produkt" -#: core/models.py:1136 +#: core/models.py:1168 msgid "associated vendor" msgstr "Powiązany sprzedawca" -#: core/models.py:1140 +#: core/models.py:1172 msgid "final price to the customer after markups" msgstr "Ostateczna cena dla klienta po uwzględnieniu marży" -#: core/models.py:1141 +#: core/models.py:1173 msgid "selling price" msgstr "Cena sprzedaży" -#: core/models.py:1146 +#: core/models.py:1178 msgid "the product associated with this stock entry" msgstr "Produkt powiązany z tym wpisem magazynowym" -#: core/models.py:1154 +#: core/models.py:1186 msgid "the price paid to the vendor for this product" msgstr "Cena zapłacona sprzedawcy za ten produkt" -#: core/models.py:1155 +#: core/models.py:1187 msgid "vendor purchase price" msgstr "Cena zakupu przez sprzedawcę" -#: core/models.py:1159 +#: core/models.py:1191 msgid "available quantity of the product in stock" msgstr "Dostępna ilość produktu w magazynie" -#: core/models.py:1160 +#: core/models.py:1192 msgid "quantity in stock" msgstr "Ilość w magazynie" -#: core/models.py:1164 +#: core/models.py:1196 msgid "vendor-assigned SKU for identifying the product" msgstr "Jednostki SKU przypisane przez dostawcę w celu identyfikacji produktu" -#: core/models.py:1165 +#: core/models.py:1197 msgid "vendor sku" msgstr "SKU sprzedawcy" -#: core/models.py:1171 +#: core/models.py:1203 msgid "digital file associated with this stock if applicable" msgstr "Plik cyfrowy powiązany z tymi zapasami, jeśli dotyczy" -#: core/models.py:1172 +#: core/models.py:1204 msgid "digital file" msgstr "Plik cyfrowy" -#: core/models.py:1181 +#: core/models.py:1213 msgid "stock entries" msgstr "Zapisy magazynowe" -#: core/models.py:1190 +#: core/models.py:1222 msgid "products that the user has marked as wanted" msgstr "Produkty, które użytkownik oznaczył jako poszukiwane" -#: core/models.py:1198 +#: core/models.py:1230 msgid "user who owns this wishlist" msgstr "Użytkownik posiadający tę listę życzeń" -#: core/models.py:1199 +#: core/models.py:1231 msgid "wishlist owner" msgstr "Właściciel listy życzeń" -#: core/models.py:1207 +#: core/models.py:1239 msgid "wishlist" msgstr "Lista życzeń" -#: core/models.py:1252 +#: core/models.py:1284 msgid "download" msgstr "Pobierz" -#: core/models.py:1253 +#: core/models.py:1285 msgid "downloads" msgstr "Pliki do pobrania" -#: core/models.py:1261 +#: core/models.py:1293 msgid "you can not download a digital asset for a non-finished order" msgstr "Nie można pobrać zasobu cyfrowego dla nieukończonego zamówienia." -#: core/models.py:1273 +#: core/models.py:1305 msgid "documentary" msgstr "Film dokumentalny" -#: core/models.py:1274 +#: core/models.py:1306 msgid "documentaries" msgstr "Filmy dokumentalne" -#: core/models.py:1284 +#: core/models.py:1316 msgid "unresolved" msgstr "Nierozwiązany" -#: core/models.py:1293 +#: core/models.py:1325 msgid "address line for the customer" msgstr "Linia adresu dla klienta" -#: core/models.py:1294 +#: core/models.py:1326 msgid "address line" msgstr "Linia adresowa" -#: core/models.py:1296 +#: core/models.py:1328 msgid "street" msgstr "ul." -#: core/models.py:1297 +#: core/models.py:1329 msgid "district" msgstr "Okręg" -#: core/models.py:1298 +#: core/models.py:1330 msgid "city" msgstr "Miasto" -#: core/models.py:1299 +#: core/models.py:1331 msgid "region" msgstr "Region" -#: core/models.py:1300 +#: core/models.py:1332 msgid "postal code" msgstr "Kod pocztowy" -#: core/models.py:1301 +#: core/models.py:1333 msgid "country" msgstr "Kraj" -#: core/models.py:1304 +#: core/models.py:1336 msgid "geolocation point: (longitude, latitude)" msgstr "Geolocation Point(Longitude, Latitude)" -#: core/models.py:1307 +#: core/models.py:1339 msgid "full JSON response from geocoder for this address" msgstr "Pełna odpowiedź JSON z geokodera dla tego adresu" -#: core/models.py:1309 +#: core/models.py:1341 msgid "stored JSON response from the geocoding service" msgstr "Przechowywana odpowiedź JSON z usługi geokodowania" -#: core/models.py:1316 +#: core/models.py:1348 msgid "address" msgstr "Adres" -#: core/models.py:1317 +#: core/models.py:1349 msgid "addresses" msgstr "Adresy" -#: core/serializers/utility.py:76 +#: core/serializers/utility.py:77 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" @@ -2177,7 +2281,7 @@ msgstr "Zasób cyfrowy można pobrać tylko raz" msgid "favicon not found" msgstr "nie znaleziono favicon" -#: core/viewsets.py:680 +#: core/viewsets.py:677 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Błąd geokodowania: {e}" diff --git a/core/locale/pt_BR/LC_MESSAGES/django.mo b/core/locale/pt_BR/LC_MESSAGES/django.mo index 3277f04b..46a17782 100644 Binary files a/core/locale/pt_BR/LC_MESSAGES/django.mo and b/core/locale/pt_BR/LC_MESSAGES/django.mo differ diff --git a/core/locale/pt_BR/LC_MESSAGES/django.po b/core/locale/pt_BR/LC_MESSAGES/django.po index dc0fcf6c..952fc895 100644 --- a/core/locale/pt_BR/LC_MESSAGES/django.po +++ b/core/locale/pt_BR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-08 19:42+0100\n" +"POT-Creation-Date: 2025-06-10 03:32+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -83,7 +83,7 @@ msgstr "Imagem" msgid "images" msgstr "Imagens" -#: core/admin.py:162 core/models.py:1180 +#: core/admin.py:162 core/models.py:1212 msgid "stock" msgstr "Estoque" @@ -111,11 +111,11 @@ msgstr "Informações básicas" msgid "important dates" msgstr "Datas importantes" -#: core/admin.py:253 core/models.py:874 +#: core/admin.py:253 core/models.py:881 msgid "order product" msgstr "Pedido de produto" -#: core/admin.py:254 core/graphene/object_types.py:262 core/models.py:875 +#: core/admin.py:254 core/graphene/object_types.py:262 core/models.py:882 msgid "order products" msgstr "Solicitar produtos" @@ -760,6 +760,98 @@ msgstr "adicionar ou remover feedback em uma relação pedido-produto" msgid "no search term provided." msgstr "Nenhum termo de pesquisa foi fornecido." +#: core/filters.py:37 core/filters.py:357 +msgid "UUID" +msgstr "UUID" + +#: core/filters.py:38 core/filters.py:309 core/filters.py:340 +msgid "Name" +msgstr "Nome" + +#: core/filters.py:39 core/filters.py:341 +msgid "Categories" +msgstr "Categorias" + +#: core/filters.py:44 +msgid "Categories Slugs" +msgstr "Categorias Lesmas" + +#: core/filters.py:45 core/filters.py:312 +msgid "Tags" +msgstr "Tags" + +#: core/filters.py:46 +msgid "Min Price" +msgstr "Preço mínimo" + +#: core/filters.py:47 +msgid "Max Price" +msgstr "Preço máximo" + +#: core/filters.py:48 +msgid "Is Active" +msgstr "Está ativo" + +#: core/filters.py:49 +msgid "Brand" +msgstr "Brand" + +#: core/filters.py:50 +msgid "Attributes" +msgstr "Atributos" + +#: core/filters.py:51 +msgid "Quantity" +msgstr "Quantidade" + +#: core/filters.py:52 core/filters.py:311 +msgid "Slug" +msgstr "Lesma" + +#: core/filters.py:53 +msgid "Is Digital" +msgstr "É digital" + +#: core/filters.py:56 +msgid "Include sub-categories" +msgstr "Incluir subcategorias" + +#: core/filters.py:245 +msgid "Search (ID, product name or part number)" +msgstr "Pesquisa (ID, nome do produto ou número de peça)" + +#: core/filters.py:248 +msgid "Bought after (inclusive)" +msgstr "Comprado depois (inclusive)" + +#: core/filters.py:249 +msgid "Bought before (inclusive)" +msgstr "Comprado antes (inclusive)" + +#: core/filters.py:252 core/filters.py:295 +msgid "User email" +msgstr "E-mail do usuário" + +#: core/filters.py:253 core/filters.py:296 core/filters.py:359 +msgid "User UUID" +msgstr "UUID do usuário" + +#: core/filters.py:254 +msgid "Status" +msgstr "Status" + +#: core/filters.py:255 +msgid "Human Readable ID" +msgstr "ID legível por humanos" + +#: core/filters.py:310 +msgid "Parent" +msgstr "Parent" + +#: core/filters.py:358 +msgid "Product UUID" +msgstr "UUID do produto" + #: core/graphene/mutations.py:38 msgid "key to look for in or set into the cache" msgstr "Chave para procurar ou colocar no cache" @@ -811,7 +903,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "Forneça order_uuid ou order_hr_id - mutuamente exclusivos!" #: core/graphene/mutations.py:225 core/graphene/mutations.py:441 -#: core/graphene/mutations.py:475 core/viewsets.py:348 +#: core/graphene/mutations.py:475 core/viewsets.py:345 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "O tipo errado veio do método order.buy(): {type(instance)!s}" @@ -864,7 +956,7 @@ msgstr "" msgid "original address string provided by the user" msgstr "Cadeia de endereços original fornecida pelo usuário" -#: core/graphene/mutations.py:572 core/viewsets.py:238 core/viewsets.py:351 +#: core/graphene/mutations.py:572 core/viewsets.py:240 core/viewsets.py:348 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} não existe: {uuid}" @@ -878,7 +970,7 @@ msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - funciona muito bem" #: core/graphene/object_types.py:43 core/graphene/object_types.py:245 -#: core/graphene/object_types.py:286 core/models.py:126 core/models.py:489 +#: core/graphene/object_types.py:286 core/models.py:126 core/models.py:495 msgid "attributes" msgstr "Atributos" @@ -891,11 +983,11 @@ msgid "groups of attributes" msgstr "Grupos de atributos" #: core/graphene/object_types.py:76 core/graphene/object_types.py:104 -#: core/graphene/object_types.py:132 core/models.py:90 core/models.py:220 +#: core/graphene/object_types.py:132 core/models.py:90 core/models.py:226 msgid "categories" msgstr "Categorias" -#: core/graphene/object_types.py:83 core/models.py:267 +#: core/graphene/object_types.py:83 core/models.py:273 msgid "brands" msgstr "Marcas" @@ -918,7 +1010,7 @@ msgid "" "minimum and maximum prices for products in this category, if available." msgstr "Preços mínimo e máximo dos produtos dessa categoria, se disponíveis." -#: core/graphene/object_types.py:202 core/models.py:404 +#: core/graphene/object_types.py:202 core/models.py:410 msgid "vendors" msgstr "Vendors" @@ -944,7 +1036,7 @@ msgid "represents feedback from a user." msgstr "Representa o feedback de um usuário." #: core/graphene/object_types.py:246 core/graphene/object_types.py:287 -#: core/models.py:483 +#: core/models.py:489 msgid "notifications" msgstr "Notificações" @@ -956,7 +1048,7 @@ msgstr "URL de download para este produto do pedido, se aplicável" msgid "a list of order products in this order" msgstr "Uma lista dos produtos solicitados nesse pedido" -#: core/graphene/object_types.py:278 core/models.py:453 +#: core/graphene/object_types.py:278 core/models.py:459 msgid "billing address" msgstr "Endereço de cobrança" @@ -980,7 +1072,7 @@ msgstr "Quantidade total de produtos no pedido" msgid "are all products in the order digital" msgstr "Todos os produtos estão no pedido digital?" -#: core/graphene/object_types.py:305 core/models.py:517 +#: core/graphene/object_types.py:305 core/models.py:523 msgid "orders" msgstr "Pedidos" @@ -992,15 +1084,15 @@ msgstr "URL da imagem" msgid "product's images" msgstr "Imagens do produto" -#: core/graphene/object_types.py:335 core/models.py:219 core/models.py:277 +#: core/graphene/object_types.py:335 core/models.py:225 core/models.py:283 msgid "category" msgstr "Categoria" -#: core/graphene/object_types.py:337 core/models.py:440 +#: core/graphene/object_types.py:337 core/models.py:446 msgid "feedbacks" msgstr "Feedbacks" -#: core/graphene/object_types.py:338 core/models.py:266 core/models.py:285 +#: core/graphene/object_types.py:338 core/models.py:272 core/models.py:291 msgid "brand" msgstr "Brand" @@ -1020,7 +1112,7 @@ msgstr "Quantidade" msgid "number of feedbacks" msgstr "Número de feedbacks" -#: core/graphene/object_types.py:360 core/models.py:329 +#: core/graphene/object_types.py:360 core/models.py:335 msgid "products" msgstr "Produtos" @@ -1032,15 +1124,15 @@ msgstr "Códigos promocionais" msgid "products on sale" msgstr "Produtos à venda" -#: core/graphene/object_types.py:425 core/models.py:1121 +#: core/graphene/object_types.py:425 core/models.py:1153 msgid "promotions" msgstr "Promoções" -#: core/graphene/object_types.py:429 core/models.py:403 +#: core/graphene/object_types.py:429 core/models.py:409 msgid "vendor" msgstr "Vendor" -#: core/graphene/object_types.py:430 core/models.py:328 +#: core/graphene/object_types.py:430 core/models.py:334 #: core/templates/digital_order_created_email.html:107 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:93 @@ -1048,11 +1140,11 @@ msgstr "Vendor" msgid "product" msgstr "Produto" -#: core/graphene/object_types.py:441 core/models.py:1191 +#: core/graphene/object_types.py:441 core/models.py:1223 msgid "wishlisted products" msgstr "Produtos da lista de desejos" -#: core/graphene/object_types.py:447 core/models.py:1208 +#: core/graphene/object_types.py:447 core/models.py:1240 msgid "wishlists" msgstr "Listas de desejos" @@ -1060,7 +1152,7 @@ msgstr "Listas de desejos" msgid "tagged products" msgstr "Produtos marcados" -#: core/graphene/object_types.py:458 core/models.py:291 core/models.py:952 +#: core/graphene/object_types.py:458 core/models.py:297 core/models.py:959 msgid "product tags" msgstr "Etiquetas do produto" @@ -1207,8 +1299,8 @@ msgstr "Atributo desse valor" msgid "the specific product associated with this attribute's value" msgstr "O produto específico associado ao valor desse atributo" -#: core/models.py:145 core/models.py:851 core/models.py:978 -#: core/models.py:1147 +#: core/models.py:145 core/models.py:858 core/models.py:1010 +#: core/models.py:1179 msgid "associated product" msgstr "Produto associado" @@ -1252,278 +1344,286 @@ msgstr "Adicione uma descrição detalhada para essa categoria" msgid "category description" msgstr "Descrição da categoria" -#: core/models.py:229 +#: core/models.py:212 +msgid "tags that help describe or group this category" +msgstr "tags que ajudam a descrever ou agrupar essa categoria" + +#: core/models.py:213 core/models.py:984 +msgid "category tags" +msgstr "tags de categoria" + +#: core/models.py:235 msgid "name of this brand" msgstr "Nome da marca" -#: core/models.py:230 +#: core/models.py:236 msgid "brand name" msgstr "Nome da marca" -#: core/models.py:237 +#: core/models.py:243 msgid "upload a logo representing this brand" msgstr "Faça upload de um logotipo que represente essa marca" -#: core/models.py:239 +#: core/models.py:245 msgid "brand small image" msgstr "Imagem pequena da marca" -#: core/models.py:245 +#: core/models.py:251 msgid "upload a big logo representing this brand" msgstr "Faça upload de um logotipo grande que represente essa marca" -#: core/models.py:247 +#: core/models.py:253 msgid "brand big image" msgstr "Imagem de marca grande" -#: core/models.py:252 +#: core/models.py:258 msgid "add a detailed description of the brand" msgstr "Adicione uma descrição detalhada da marca" -#: core/models.py:253 +#: core/models.py:259 msgid "brand description" msgstr "Descrição da marca" -#: core/models.py:258 +#: core/models.py:264 msgid "optional categories that this brand is associated with" msgstr "Categorias opcionais às quais essa marca está associada" -#: core/models.py:259 +#: core/models.py:265 msgid "associated categories" msgstr "Categorias" -#: core/models.py:276 +#: core/models.py:282 msgid "category this product belongs to" msgstr "Categoria à qual este produto pertence" -#: core/models.py:284 +#: core/models.py:290 msgid "optionally associate this product with a brand" msgstr "Opcionalmente, associe esse produto a uma marca" -#: core/models.py:290 +#: core/models.py:296 msgid "tags that help describe or group this product" msgstr "Tags que ajudam a descrever ou agrupar este produto" -#: core/models.py:295 +#: core/models.py:301 msgid "indicates whether this product is digitally delivered" msgstr "Indica se esse produto é entregue digitalmente" -#: core/models.py:296 +#: core/models.py:302 msgid "is product digital" msgstr "O produto é digital" -#: core/models.py:302 +#: core/models.py:308 msgid "provide a clear identifying name for the product" msgstr "Fornecer um nome de identificação claro para o produto" -#: core/models.py:303 +#: core/models.py:309 msgid "product name" msgstr "Nome do produto" -#: core/models.py:308 core/models.py:1109 +#: core/models.py:314 core/models.py:1141 msgid "add a detailed description of the product" msgstr "Adicione uma descrição detalhada do produto" -#: core/models.py:309 +#: core/models.py:315 msgid "product description" msgstr "Descrição do produto" -#: core/models.py:316 +#: core/models.py:322 msgid "part number for this product" msgstr "Número de peça para este produto" -#: core/models.py:317 +#: core/models.py:323 msgid "part number" msgstr "Número da peça" -#: core/models.py:381 +#: core/models.py:387 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Armazena as credenciais e os pontos de extremidade necessários para a " "comunicação da API do fornecedor" -#: core/models.py:382 +#: core/models.py:388 msgid "authentication info" msgstr "Informações de autenticação" -#: core/models.py:387 +#: core/models.py:393 msgid "define the markup for products retrieved from this vendor" msgstr "Definir a marcação para produtos recuperados desse fornecedor" -#: core/models.py:388 +#: core/models.py:394 msgid "vendor markup percentage" msgstr "Porcentagem da margem de lucro do fornecedor" -#: core/models.py:392 +#: core/models.py:398 msgid "name of this vendor" msgstr "Nome do fornecedor" -#: core/models.py:393 +#: core/models.py:399 msgid "vendor name" msgstr "Nome do fornecedor" -#: core/models.py:416 +#: core/models.py:422 msgid "user-provided comments about their experience with the product" msgstr "" "Comentários fornecidos pelo usuário sobre sua experiência com o produto" -#: core/models.py:417 +#: core/models.py:423 msgid "feedback comments" msgstr "Comentários de feedback" -#: core/models.py:424 +#: core/models.py:430 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "Faz referência ao produto específico em um pedido sobre o qual se trata esse" " feedback" -#: core/models.py:425 +#: core/models.py:431 msgid "related order product" msgstr "Produto de pedido relacionado" -#: core/models.py:430 +#: core/models.py:436 msgid "user-assigned rating for the product" msgstr "Classificação atribuída pelo usuário ao produto" -#: core/models.py:431 +#: core/models.py:437 msgid "product rating" msgstr "Avaliação do produto" -#: core/models.py:439 +#: core/models.py:445 msgid "feedback" msgstr "Feedback" -#: core/models.py:452 +#: core/models.py:458 msgid "the billing address used for this order" msgstr "O endereço de cobrança usado para esse pedido" -#: core/models.py:460 +#: core/models.py:466 msgid "optional promo code applied to this order" msgstr "Código promocional opcional aplicado a este pedido" -#: core/models.py:461 +#: core/models.py:467 msgid "applied promo code" msgstr "Código promocional aplicado" -#: core/models.py:469 +#: core/models.py:475 msgid "the shipping address used for this order" msgstr "O endereço de entrega usado para esse pedido" -#: core/models.py:470 +#: core/models.py:476 msgid "shipping address" msgstr "Endereço de entrega" -#: core/models.py:476 +#: core/models.py:482 msgid "current status of the order in its lifecycle" msgstr "Status atual do pedido em seu ciclo de vida" -#: core/models.py:477 +#: core/models.py:483 msgid "order status" msgstr "Status do pedido" -#: core/models.py:482 core/models.py:828 +#: core/models.py:488 core/models.py:835 msgid "json structure of notifications to display to users" msgstr "" "Estrutura JSON de notificações a serem exibidas aos usuários; na interface " "do usuário do administrador, é usada a visualização de tabela" -#: core/models.py:488 +#: core/models.py:494 msgid "json representation of order attributes for this order" msgstr "Representação JSON dos atributos do pedido para esse pedido" -#: core/models.py:494 +#: core/models.py:500 msgid "the user who placed the order" msgstr "O usuário que fez o pedido" -#: core/models.py:495 +#: core/models.py:501 msgid "user" msgstr "Usuário" -#: core/models.py:501 +#: core/models.py:507 msgid "the timestamp when the order was finalized" msgstr "O registro de data e hora em que o pedido foi finalizado" -#: core/models.py:502 +#: core/models.py:508 msgid "buy time" msgstr "Tempo de compra" -#: core/models.py:509 +#: core/models.py:515 msgid "a human-readable identifier for the order" msgstr "Um identificador legível por humanos para o pedido" -#: core/models.py:510 +#: core/models.py:516 msgid "human readable id" msgstr "ID legível por humanos" -#: core/models.py:516 +#: core/models.py:522 msgid "order" msgstr "Pedido" -#: core/models.py:531 +#: core/models.py:537 msgid "a user must have only one pending order at a time" msgstr "Um usuário deve ter apenas uma ordem pendente por vez!" -#: core/models.py:559 +#: core/models.py:566 msgid "you cannot add products to an order that is not a pending one" msgstr "Não é possível adicionar produtos a um pedido que não esteja pendente" -#: core/models.py:564 +#: core/models.py:571 msgid "you cannot add inactive products to order" msgstr "Não é possível adicionar produtos inativos ao pedido" -#: core/models.py:581 +#: core/models.py:588 msgid "you cannot add more products than available in stock" msgstr "" "Não é possível adicionar mais produtos do que os disponíveis em estoque" -#: core/models.py:590 core/models.py:610 core/models.py:634 -#: core/models.py:1218 core/models.py:1230 +#: core/models.py:597 core/models.py:617 core/models.py:641 +#: core/models.py:1250 core/models.py:1262 #, python-brace-format msgid "{name} does not exist: {product_uuid}" msgstr "{name} não existe: {product_uuid}" -#: core/models.py:594 core/models.py:618 core/models.py:626 +#: core/models.py:601 core/models.py:625 core/models.py:633 msgid "you cannot remove products from an order that is not a pending one" msgstr "Não é possível remover produtos de um pedido que não esteja pendente" -#: core/models.py:614 +#: core/models.py:621 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} não existe com a consulta <{query}>" -#: core/models.py:645 +#: core/models.py:652 msgid "promocode does not exist" msgstr "O código promocional não existe" -#: core/models.py:654 +#: core/models.py:661 msgid "you can only buy physical products with shipping address specified" msgstr "" "Você só pode comprar produtos físicos com o endereço de entrega " "especificado!" -#: core/models.py:673 +#: core/models.py:680 msgid "address does not exist" msgstr "O endereço não existe" -#: core/models.py:684 core/models.py:727 +#: core/models.py:691 core/models.py:734 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "Não é possível comprar neste momento, tente novamente em alguns minutos." -#: core/models.py:687 +#: core/models.py:694 msgid "invalid force value" msgstr "Valor de força inválido" -#: core/models.py:692 core/models.py:730 +#: core/models.py:699 core/models.py:737 msgid "you cannot purchase an empty order!" msgstr "Você não pode comprar um pedido vazio!" -#: core/models.py:707 +#: core/models.py:714 msgid "insufficient funds to complete the order" msgstr "Fundos insuficientes para concluir o pedido" -#: core/models.py:739 +#: core/models.py:746 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -1531,7 +1631,7 @@ msgstr "" "Não é possível comprar sem registro, forneça as seguintes informações: nome " "do cliente, e-mail do cliente, número de telefone do cliente" -#: core/models.py:748 +#: core/models.py:755 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -1539,193 +1639,197 @@ msgstr "" "Método de pagamento inválido: {payment_method} de " "{available_payment_methods}!" -#: core/models.py:816 +#: core/models.py:823 msgid "the price paid by the customer for this product at purchase time" msgstr "O preço pago pelo cliente por esse produto no momento da compra" -#: core/models.py:817 +#: core/models.py:824 msgid "purchase price at order time" msgstr "Preço de compra no momento do pedido" -#: core/models.py:822 +#: core/models.py:829 msgid "internal comments for admins about this ordered product" msgstr "" "Comentários internos para administradores sobre este produto encomendado" -#: core/models.py:823 +#: core/models.py:830 msgid "internal comments" msgstr "Comentários internos" -#: core/models.py:829 +#: core/models.py:836 msgid "user notifications" msgstr "Notificações do usuário" -#: core/models.py:834 +#: core/models.py:841 msgid "json representation of this item's attributes" msgstr "Representação JSON dos atributos desse item" -#: core/models.py:835 +#: core/models.py:842 msgid "ordered product attributes" msgstr "Atributos ordenados do produto" -#: core/models.py:840 +#: core/models.py:847 msgid "reference to the parent order that contains this product" msgstr "Referência ao pedido pai que contém esse produto" -#: core/models.py:841 +#: core/models.py:848 msgid "parent order" msgstr "Ordem dos pais" -#: core/models.py:850 +#: core/models.py:857 msgid "the specific product associated with this order line" msgstr "O produto específico associado a essa linha de pedido" -#: core/models.py:857 +#: core/models.py:864 msgid "quantity of this specific product in the order" msgstr "Quantidade desse produto específico no pedido" -#: core/models.py:858 +#: core/models.py:865 msgid "product quantity" msgstr "Quantidade do produto" -#: core/models.py:865 +#: core/models.py:872 msgid "current status of this product in the order" msgstr "Status atual desse produto no pedido" -#: core/models.py:866 +#: core/models.py:873 msgid "product line status" msgstr "Status da linha de produtos" -#: core/models.py:918 +#: core/models.py:925 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "ação incorreta especificada para feedback: {action}" -#: core/models.py:926 +#: core/models.py:933 msgid "you cannot feedback an order which is not received" msgstr "você não pode dar feedback a um pedido que não foi recebido" -#: core/models.py:937 +#: core/models.py:944 core/models.py:969 msgid "internal tag identifier for the product tag" msgstr "Identificador de tag interno para a tag do produto" -#: core/models.py:938 +#: core/models.py:945 core/models.py:970 msgid "tag name" msgstr "Nome da etiqueta" -#: core/models.py:942 +#: core/models.py:949 core/models.py:974 msgid "user-friendly name for the product tag" msgstr "Nome de fácil utilização para a etiqueta do produto" -#: core/models.py:943 +#: core/models.py:950 core/models.py:975 msgid "tag display name" msgstr "Nome de exibição da tag" -#: core/models.py:951 +#: core/models.py:958 msgid "product tag" msgstr "Etiqueta do produto" -#: core/models.py:960 +#: core/models.py:983 +msgid "category tag" +msgstr "tag de categoria" + +#: core/models.py:992 msgid "provide alternative text for the image for accessibility" msgstr "" "Forneça um texto alternativo para a imagem para fins de acessibilidade" -#: core/models.py:961 +#: core/models.py:993 msgid "image alt text" msgstr "Texto alternativo da imagem" -#: core/models.py:964 +#: core/models.py:996 msgid "upload the image file for this product" msgstr "Faça o upload do arquivo de imagem para este produto" -#: core/models.py:965 core/models.py:990 +#: core/models.py:997 core/models.py:1022 msgid "product image" msgstr "Imagem do produto" -#: core/models.py:971 +#: core/models.py:1003 msgid "determines the order in which images are displayed" msgstr "Determina a ordem em que as imagens são exibidas" -#: core/models.py:972 +#: core/models.py:1004 msgid "display priority" msgstr "Prioridade de exibição" -#: core/models.py:977 +#: core/models.py:1009 msgid "the product that this image represents" msgstr "O produto que esta imagem representa" -#: core/models.py:991 +#: core/models.py:1023 msgid "product images" msgstr "Imagens do produto" -#: core/models.py:1001 +#: core/models.py:1033 msgid "unique code used by a user to redeem a discount" msgstr "Código exclusivo usado por um usuário para resgatar um desconto" -#: core/models.py:1002 +#: core/models.py:1034 msgid "promo code identifier" msgstr "Identificador de código promocional" -#: core/models.py:1009 +#: core/models.py:1041 msgid "fixed discount amount applied if percent is not used" msgstr "Valor de desconto fixo aplicado se a porcentagem não for usada" -#: core/models.py:1010 +#: core/models.py:1042 msgid "fixed discount amount" msgstr "Valor do desconto fixo" -#: core/models.py:1016 +#: core/models.py:1048 msgid "percentage discount applied if fixed amount is not used" msgstr "Desconto percentual aplicado se o valor fixo não for usado" -#: core/models.py:1017 +#: core/models.py:1049 msgid "percentage discount" msgstr "Desconto percentual" -#: core/models.py:1022 +#: core/models.py:1054 msgid "timestamp when the promocode expires" msgstr "Registro de data e hora em que o código promocional expira" -#: core/models.py:1023 +#: core/models.py:1055 msgid "end validity time" msgstr "Tempo de validade final" -#: core/models.py:1028 +#: core/models.py:1060 msgid "timestamp from which this promocode is valid" msgstr "" "Registro de data e hora a partir do qual esse código promocional é válido" -#: core/models.py:1029 +#: core/models.py:1061 msgid "start validity time" msgstr "Hora de início da validade" -#: core/models.py:1034 +#: core/models.py:1066 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "Registro de data e hora em que o código promocional foi usado, em branco se " "ainda não tiver sido usado" -#: core/models.py:1035 +#: core/models.py:1067 msgid "usage timestamp" msgstr "Registro de data e hora de uso" -#: core/models.py:1040 +#: core/models.py:1072 msgid "user assigned to this promocode if applicable" msgstr "Usuário atribuído a esse código promocional, se aplicável" -#: core/models.py:1041 +#: core/models.py:1073 msgid "assigned user" msgstr "Usuário atribuído" -#: core/models.py:1048 +#: core/models.py:1080 msgid "promo code" msgstr "Código promocional" -#: core/models.py:1049 +#: core/models.py:1081 msgid "promo codes" msgstr "Códigos promocionais" -#: core/models.py:1056 +#: core/models.py:1088 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -1733,198 +1837,198 @@ msgstr "" "Apenas um tipo de desconto deve ser definido (valor ou porcentagem), mas não" " ambos ou nenhum." -#: core/models.py:1071 +#: core/models.py:1103 msgid "promocode already used" msgstr "O código promocional já foi usado" -#: core/models.py:1085 +#: core/models.py:1117 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Tipo de desconto inválido para o código promocional {self.uuid}" -#: core/models.py:1097 +#: core/models.py:1129 msgid "percentage discount for the selected products" msgstr "Desconto percentual para os produtos selecionados" -#: core/models.py:1098 +#: core/models.py:1130 msgid "discount percentage" msgstr "Porcentagem de desconto" -#: core/models.py:1103 +#: core/models.py:1135 msgid "provide a unique name for this promotion" msgstr "Forneça um nome exclusivo para essa promoção" -#: core/models.py:1104 +#: core/models.py:1136 msgid "promotion name" msgstr "Nome da promoção" -#: core/models.py:1110 +#: core/models.py:1142 msgid "promotion description" msgstr "Descrição da promoção" -#: core/models.py:1115 +#: core/models.py:1147 msgid "select which products are included in this promotion" msgstr "Selecione quais produtos estão incluídos nessa promoção" -#: core/models.py:1116 +#: core/models.py:1148 msgid "included products" msgstr "Produtos incluídos" -#: core/models.py:1120 +#: core/models.py:1152 msgid "promotion" msgstr "Promoção" -#: core/models.py:1135 +#: core/models.py:1167 msgid "the vendor supplying this product stock" msgstr "O fornecedor que fornece esse estoque de produtos" -#: core/models.py:1136 +#: core/models.py:1168 msgid "associated vendor" msgstr "Fornecedor associado" -#: core/models.py:1140 +#: core/models.py:1172 msgid "final price to the customer after markups" msgstr "Preço final para o cliente após as marcações" -#: core/models.py:1141 +#: core/models.py:1173 msgid "selling price" msgstr "Preço de venda" -#: core/models.py:1146 +#: core/models.py:1178 msgid "the product associated with this stock entry" msgstr "O produto associado a essa entrada em estoque" -#: core/models.py:1154 +#: core/models.py:1186 msgid "the price paid to the vendor for this product" msgstr "O preço pago ao fornecedor por esse produto" -#: core/models.py:1155 +#: core/models.py:1187 msgid "vendor purchase price" msgstr "Preço de compra do fornecedor" -#: core/models.py:1159 +#: core/models.py:1191 msgid "available quantity of the product in stock" msgstr "Quantidade disponível do produto em estoque" -#: core/models.py:1160 +#: core/models.py:1192 msgid "quantity in stock" msgstr "Quantidade em estoque" -#: core/models.py:1164 +#: core/models.py:1196 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU atribuído pelo fornecedor para identificar o produto" -#: core/models.py:1165 +#: core/models.py:1197 msgid "vendor sku" msgstr "SKU do fornecedor" -#: core/models.py:1171 +#: core/models.py:1203 msgid "digital file associated with this stock if applicable" msgstr "Arquivo digital associado a esse estoque, se aplicável" -#: core/models.py:1172 +#: core/models.py:1204 msgid "digital file" msgstr "Arquivo digital" -#: core/models.py:1181 +#: core/models.py:1213 msgid "stock entries" msgstr "Entradas de estoque" -#: core/models.py:1190 +#: core/models.py:1222 msgid "products that the user has marked as wanted" msgstr "Produtos que o usuário marcou como desejados" -#: core/models.py:1198 +#: core/models.py:1230 msgid "user who owns this wishlist" msgstr "Usuário que possui esta lista de desejos" -#: core/models.py:1199 +#: core/models.py:1231 msgid "wishlist owner" msgstr "Proprietário da lista de desejos" -#: core/models.py:1207 +#: core/models.py:1239 msgid "wishlist" msgstr "Lista de desejos" -#: core/models.py:1252 +#: core/models.py:1284 msgid "download" msgstr "Baixar" -#: core/models.py:1253 +#: core/models.py:1285 msgid "downloads" msgstr "Downloads" -#: core/models.py:1261 +#: core/models.py:1293 msgid "you can not download a digital asset for a non-finished order" msgstr "" "Não é possível fazer download de um ativo digital para um pedido não " "concluído" -#: core/models.py:1273 +#: core/models.py:1305 msgid "documentary" msgstr "Documentário" -#: core/models.py:1274 +#: core/models.py:1306 msgid "documentaries" msgstr "Documentários" -#: core/models.py:1284 +#: core/models.py:1316 msgid "unresolved" msgstr "Não resolvido" -#: core/models.py:1293 +#: core/models.py:1325 msgid "address line for the customer" msgstr "Linha de endereço do cliente" -#: core/models.py:1294 +#: core/models.py:1326 msgid "address line" msgstr "Linha de endereço" -#: core/models.py:1296 +#: core/models.py:1328 msgid "street" msgstr "Rua" -#: core/models.py:1297 +#: core/models.py:1329 msgid "district" msgstr "Distrito" -#: core/models.py:1298 +#: core/models.py:1330 msgid "city" msgstr "Cidade" -#: core/models.py:1299 +#: core/models.py:1331 msgid "region" msgstr "Região" -#: core/models.py:1300 +#: core/models.py:1332 msgid "postal code" msgstr "Código postal" -#: core/models.py:1301 +#: core/models.py:1333 msgid "country" msgstr "País" -#: core/models.py:1304 +#: core/models.py:1336 msgid "geolocation point: (longitude, latitude)" msgstr "Ponto de geolocalização (Longitude, Latitude)" -#: core/models.py:1307 +#: core/models.py:1339 msgid "full JSON response from geocoder for this address" msgstr "Resposta JSON completa do geocodificador para este endereço" -#: core/models.py:1309 +#: core/models.py:1341 msgid "stored JSON response from the geocoding service" msgstr "Resposta JSON armazenada do serviço de geocodificação" -#: core/models.py:1316 +#: core/models.py:1348 msgid "address" msgstr "Endereço" -#: core/models.py:1317 +#: core/models.py:1349 msgid "addresses" msgstr "Endereços" -#: core/serializers/utility.py:76 +#: core/serializers/utility.py:77 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" @@ -2163,7 +2267,7 @@ msgstr "Você só pode fazer o download do ativo digital uma vez" msgid "favicon not found" msgstr "favicon não encontrado" -#: core/viewsets.py:680 +#: core/viewsets.py:677 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Erro de geocodificação: {e}" diff --git a/core/locale/ro_RO/LC_MESSAGES/django.mo b/core/locale/ro_RO/LC_MESSAGES/django.mo index f3bcb963..32b89bc5 100644 Binary files a/core/locale/ro_RO/LC_MESSAGES/django.mo and b/core/locale/ro_RO/LC_MESSAGES/django.mo differ diff --git a/core/locale/ro_RO/LC_MESSAGES/django.po b/core/locale/ro_RO/LC_MESSAGES/django.po index 2cbf9650..0baa48da 100644 --- a/core/locale/ro_RO/LC_MESSAGES/django.po +++ b/core/locale/ro_RO/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-08 19:42+0100\n" +"POT-Creation-Date: 2025-06-10 03:32+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -83,7 +83,7 @@ msgstr "Imagine" msgid "images" msgstr "Imagini" -#: core/admin.py:162 core/models.py:1180 +#: core/admin.py:162 core/models.py:1212 msgid "stock" msgstr "Stoc" @@ -111,11 +111,11 @@ msgstr "Informații de bază" msgid "important dates" msgstr "Date importante" -#: core/admin.py:253 core/models.py:874 +#: core/admin.py:253 core/models.py:881 msgid "order product" msgstr "Comanda Produs" -#: core/admin.py:254 core/graphene/object_types.py:262 core/models.py:875 +#: core/admin.py:254 core/graphene/object_types.py:262 core/models.py:882 msgid "order products" msgstr "Comandați produse" @@ -770,6 +770,98 @@ msgstr "adăugarea sau eliminarea feedback-ului într-o relație comandă-produs msgid "no search term provided." msgstr "Nu a fost furnizat niciun termen de căutare." +#: core/filters.py:37 core/filters.py:357 +msgid "UUID" +msgstr "UUID" + +#: core/filters.py:38 core/filters.py:309 core/filters.py:340 +msgid "Name" +msgstr "Nume și prenume" + +#: core/filters.py:39 core/filters.py:341 +msgid "Categories" +msgstr "Categorii" + +#: core/filters.py:44 +msgid "Categories Slugs" +msgstr "Categorii Melci" + +#: core/filters.py:45 core/filters.py:312 +msgid "Tags" +msgstr "Etichete" + +#: core/filters.py:46 +msgid "Min Price" +msgstr "Preț minim" + +#: core/filters.py:47 +msgid "Max Price" +msgstr "Preț maxim" + +#: core/filters.py:48 +msgid "Is Active" +msgstr "Este activ" + +#: core/filters.py:49 +msgid "Brand" +msgstr "Marca" + +#: core/filters.py:50 +msgid "Attributes" +msgstr "Atribute" + +#: core/filters.py:51 +msgid "Quantity" +msgstr "Cantitate" + +#: core/filters.py:52 core/filters.py:311 +msgid "Slug" +msgstr "Melc" + +#: core/filters.py:53 +msgid "Is Digital" +msgstr "Este digital" + +#: core/filters.py:56 +msgid "Include sub-categories" +msgstr "Includeți subcategorii" + +#: core/filters.py:245 +msgid "Search (ID, product name or part number)" +msgstr "Căutare (ID, numele produsului sau numărul piesei)" + +#: core/filters.py:248 +msgid "Bought after (inclusive)" +msgstr "Cumpărat după (inclusiv)" + +#: core/filters.py:249 +msgid "Bought before (inclusive)" +msgstr "Cumpărat înainte (inclusiv)" + +#: core/filters.py:252 core/filters.py:295 +msgid "User email" +msgstr "E-mail utilizator" + +#: core/filters.py:253 core/filters.py:296 core/filters.py:359 +msgid "User UUID" +msgstr "UUID utilizator" + +#: core/filters.py:254 +msgid "Status" +msgstr "Statut" + +#: core/filters.py:255 +msgid "Human Readable ID" +msgstr "ID lizibil de către om" + +#: core/filters.py:310 +msgid "Parent" +msgstr "Părinte" + +#: core/filters.py:358 +msgid "Product UUID" +msgstr "UUID produs" + #: core/graphene/mutations.py:38 msgid "key to look for in or set into the cache" msgstr "Cheie care trebuie căutată sau introdusă în cache" @@ -822,7 +914,7 @@ msgstr "" "Vă rugăm să furnizați fie order_uuid sau order_hr_id - se exclud reciproc!" #: core/graphene/mutations.py:225 core/graphene/mutations.py:441 -#: core/graphene/mutations.py:475 core/viewsets.py:348 +#: core/graphene/mutations.py:475 core/viewsets.py:345 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Metoda order.buy() a generat un tip greșit: {type(instance)!s}" @@ -876,7 +968,7 @@ msgstr "" msgid "original address string provided by the user" msgstr "Șirul de adrese original furnizat de utilizator" -#: core/graphene/mutations.py:572 core/viewsets.py:238 core/viewsets.py:351 +#: core/graphene/mutations.py:572 core/viewsets.py:240 core/viewsets.py:348 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} nu există: {uuid}" @@ -890,7 +982,7 @@ msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - funcționează ca un farmec" #: core/graphene/object_types.py:43 core/graphene/object_types.py:245 -#: core/graphene/object_types.py:286 core/models.py:126 core/models.py:489 +#: core/graphene/object_types.py:286 core/models.py:126 core/models.py:495 msgid "attributes" msgstr "Atribute" @@ -903,11 +995,11 @@ msgid "groups of attributes" msgstr "Grupuri de atribute" #: core/graphene/object_types.py:76 core/graphene/object_types.py:104 -#: core/graphene/object_types.py:132 core/models.py:90 core/models.py:220 +#: core/graphene/object_types.py:132 core/models.py:90 core/models.py:226 msgid "categories" msgstr "Categorii" -#: core/graphene/object_types.py:83 core/models.py:267 +#: core/graphene/object_types.py:83 core/models.py:273 msgid "brands" msgstr "Mărci" @@ -933,7 +1025,7 @@ msgstr "" "Prețurile minime și maxime pentru produsele din această categorie, dacă sunt" " disponibile." -#: core/graphene/object_types.py:202 core/models.py:404 +#: core/graphene/object_types.py:202 core/models.py:410 msgid "vendors" msgstr "Furnizori" @@ -958,7 +1050,7 @@ msgid "represents feedback from a user." msgstr "Reprezintă feedback de la un utilizator." #: core/graphene/object_types.py:246 core/graphene/object_types.py:287 -#: core/models.py:483 +#: core/models.py:489 msgid "notifications" msgstr "Notificări" @@ -970,7 +1062,7 @@ msgstr "URL de descărcare pentru acest produs de comandă, dacă este cazul" msgid "a list of order products in this order" msgstr "O listă a produselor comandate în această comandă" -#: core/graphene/object_types.py:278 core/models.py:453 +#: core/graphene/object_types.py:278 core/models.py:459 msgid "billing address" msgstr "Adresa de facturare" @@ -994,7 +1086,7 @@ msgstr "Cantitatea totală de produse din comandă" msgid "are all products in the order digital" msgstr "Sunt toate produsele din comanda digitală" -#: core/graphene/object_types.py:305 core/models.py:517 +#: core/graphene/object_types.py:305 core/models.py:523 msgid "orders" msgstr "Ordine" @@ -1006,15 +1098,15 @@ msgstr "URL imagine" msgid "product's images" msgstr "Imagini ale produsului" -#: core/graphene/object_types.py:335 core/models.py:219 core/models.py:277 +#: core/graphene/object_types.py:335 core/models.py:225 core/models.py:283 msgid "category" msgstr "Categorie" -#: core/graphene/object_types.py:337 core/models.py:440 +#: core/graphene/object_types.py:337 core/models.py:446 msgid "feedbacks" msgstr "Feedback-uri" -#: core/graphene/object_types.py:338 core/models.py:266 core/models.py:285 +#: core/graphene/object_types.py:338 core/models.py:272 core/models.py:291 msgid "brand" msgstr "Marca" @@ -1034,7 +1126,7 @@ msgstr "Cantitate" msgid "number of feedbacks" msgstr "Numărul de reacții" -#: core/graphene/object_types.py:360 core/models.py:329 +#: core/graphene/object_types.py:360 core/models.py:335 msgid "products" msgstr "Produse" @@ -1046,15 +1138,15 @@ msgstr "Coduri promoționale" msgid "products on sale" msgstr "Produse scoase la vânzare" -#: core/graphene/object_types.py:425 core/models.py:1121 +#: core/graphene/object_types.py:425 core/models.py:1153 msgid "promotions" msgstr "Promoții" -#: core/graphene/object_types.py:429 core/models.py:403 +#: core/graphene/object_types.py:429 core/models.py:409 msgid "vendor" msgstr "Furnizor" -#: core/graphene/object_types.py:430 core/models.py:328 +#: core/graphene/object_types.py:430 core/models.py:334 #: core/templates/digital_order_created_email.html:107 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:93 @@ -1062,11 +1154,11 @@ msgstr "Furnizor" msgid "product" msgstr "Produs" -#: core/graphene/object_types.py:441 core/models.py:1191 +#: core/graphene/object_types.py:441 core/models.py:1223 msgid "wishlisted products" msgstr "Produse dorite" -#: core/graphene/object_types.py:447 core/models.py:1208 +#: core/graphene/object_types.py:447 core/models.py:1240 msgid "wishlists" msgstr "Liste de dorințe" @@ -1074,7 +1166,7 @@ msgstr "Liste de dorințe" msgid "tagged products" msgstr "Produse etichetate" -#: core/graphene/object_types.py:458 core/models.py:291 core/models.py:952 +#: core/graphene/object_types.py:458 core/models.py:297 core/models.py:959 msgid "product tags" msgstr "Etichete de produs" @@ -1222,8 +1314,8 @@ msgstr "Atributul acestei valori" msgid "the specific product associated with this attribute's value" msgstr "Produsul specific asociat cu valoarea acestui atribut" -#: core/models.py:145 core/models.py:851 core/models.py:978 -#: core/models.py:1147 +#: core/models.py:145 core/models.py:858 core/models.py:1010 +#: core/models.py:1179 msgid "associated product" msgstr "Produs asociat" @@ -1268,280 +1360,288 @@ msgstr "Adăugați o descriere detaliată pentru această categorie" msgid "category description" msgstr "Descriere categorie" -#: core/models.py:229 +#: core/models.py:212 +msgid "tags that help describe or group this category" +msgstr "etichete care ajută la descrierea sau gruparea acestei categorii" + +#: core/models.py:213 core/models.py:984 +msgid "category tags" +msgstr "Etichete de categorie" + +#: core/models.py:235 msgid "name of this brand" msgstr "Denumirea acestui brand" -#: core/models.py:230 +#: core/models.py:236 msgid "brand name" msgstr "Nume de marcă" -#: core/models.py:237 +#: core/models.py:243 msgid "upload a logo representing this brand" msgstr "Încărcați un logo care reprezintă acest brand" -#: core/models.py:239 +#: core/models.py:245 msgid "brand small image" msgstr "Brand imagine mică" -#: core/models.py:245 +#: core/models.py:251 msgid "upload a big logo representing this brand" msgstr "Încărcați un logo mare care reprezintă acest brand" -#: core/models.py:247 +#: core/models.py:253 msgid "brand big image" msgstr "Imagine de marcă mare" -#: core/models.py:252 +#: core/models.py:258 msgid "add a detailed description of the brand" msgstr "Adăugați o descriere detaliată a mărcii" -#: core/models.py:253 +#: core/models.py:259 msgid "brand description" msgstr "Descrierea mărcii" -#: core/models.py:258 +#: core/models.py:264 msgid "optional categories that this brand is associated with" msgstr "Categorii opționale cu care acest brand este asociat" -#: core/models.py:259 +#: core/models.py:265 msgid "associated categories" msgstr "Categorii" -#: core/models.py:276 +#: core/models.py:282 msgid "category this product belongs to" msgstr "Categoria din care face parte acest produs" -#: core/models.py:284 +#: core/models.py:290 msgid "optionally associate this product with a brand" msgstr "Opțional, asociați acest produs cu un brand" -#: core/models.py:290 +#: core/models.py:296 msgid "tags that help describe or group this product" msgstr "Etichete care ajută la descrierea sau gruparea acestui produs" -#: core/models.py:295 +#: core/models.py:301 msgid "indicates whether this product is digitally delivered" msgstr "Indică dacă acest produs este livrat digital" -#: core/models.py:296 +#: core/models.py:302 msgid "is product digital" msgstr "Produsul este digital" -#: core/models.py:302 +#: core/models.py:308 msgid "provide a clear identifying name for the product" msgstr "Furnizați o denumire clară de identificare a produsului" -#: core/models.py:303 +#: core/models.py:309 msgid "product name" msgstr "Denumirea produsului" -#: core/models.py:308 core/models.py:1109 +#: core/models.py:314 core/models.py:1141 msgid "add a detailed description of the product" msgstr "Adăugați o descriere detaliată a produsului" -#: core/models.py:309 +#: core/models.py:315 msgid "product description" msgstr "Descrierea produsului" -#: core/models.py:316 +#: core/models.py:322 msgid "part number for this product" msgstr "Numărul piesei pentru acest produs" -#: core/models.py:317 +#: core/models.py:323 msgid "part number" msgstr "Numărul piesei" -#: core/models.py:381 +#: core/models.py:387 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Stochează acreditările și punctele finale necesare pentru comunicarea API a " "furnizorului" -#: core/models.py:382 +#: core/models.py:388 msgid "authentication info" msgstr "Informații privind autentificarea" -#: core/models.py:387 +#: core/models.py:393 msgid "define the markup for products retrieved from this vendor" msgstr "" "Definirea marjei de profit pentru produsele preluate de la acest furnizor" -#: core/models.py:388 +#: core/models.py:394 msgid "vendor markup percentage" msgstr "Procentul de majorare al furnizorului" -#: core/models.py:392 +#: core/models.py:398 msgid "name of this vendor" msgstr "Numele acestui vânzător" -#: core/models.py:393 +#: core/models.py:399 msgid "vendor name" msgstr "Numele furnizorului" -#: core/models.py:416 +#: core/models.py:422 msgid "user-provided comments about their experience with the product" msgstr "" "Comentarii furnizate de utilizatori cu privire la experiența lor cu produsul" -#: core/models.py:417 +#: core/models.py:423 msgid "feedback comments" msgstr "Comentarii de feedback" -#: core/models.py:424 +#: core/models.py:430 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "Face referire la produsul specific dintr-o comandă despre care este vorba în" " acest feedback" -#: core/models.py:425 +#: core/models.py:431 msgid "related order product" msgstr "Produs aferent comenzii" -#: core/models.py:430 +#: core/models.py:436 msgid "user-assigned rating for the product" msgstr "Rating atribuit de utilizator pentru produs" -#: core/models.py:431 +#: core/models.py:437 msgid "product rating" msgstr "Evaluarea produsului" -#: core/models.py:439 +#: core/models.py:445 msgid "feedback" msgstr "Feedback" -#: core/models.py:452 +#: core/models.py:458 msgid "the billing address used for this order" msgstr "Adresa de facturare utilizată pentru această comandă" -#: core/models.py:460 +#: core/models.py:466 msgid "optional promo code applied to this order" msgstr "Cod promoțional opțional aplicat la această comandă" -#: core/models.py:461 +#: core/models.py:467 msgid "applied promo code" msgstr "Cod promoțional aplicat" -#: core/models.py:469 +#: core/models.py:475 msgid "the shipping address used for this order" msgstr "Adresa de expediere utilizată pentru această comandă" -#: core/models.py:470 +#: core/models.py:476 msgid "shipping address" msgstr "Adresa de expediere" -#: core/models.py:476 +#: core/models.py:482 msgid "current status of the order in its lifecycle" msgstr "Stadiul actual al comenzii în ciclul său de viață" -#: core/models.py:477 +#: core/models.py:483 msgid "order status" msgstr "Stadiul comenzii" -#: core/models.py:482 core/models.py:828 +#: core/models.py:488 core/models.py:835 msgid "json structure of notifications to display to users" msgstr "" "Structura JSON a notificărilor care urmează să fie afișate utilizatorilor, " "în interfața de administrare este utilizată vizualizarea tabelară" -#: core/models.py:488 +#: core/models.py:494 msgid "json representation of order attributes for this order" msgstr "Reprezentarea JSON a atributelor comenzii pentru această comandă" -#: core/models.py:494 +#: core/models.py:500 msgid "the user who placed the order" msgstr "Utilizatorul care a plasat comanda" -#: core/models.py:495 +#: core/models.py:501 msgid "user" msgstr "Utilizator" -#: core/models.py:501 +#: core/models.py:507 msgid "the timestamp when the order was finalized" msgstr "Momentul în care comanda a fost finalizată" -#: core/models.py:502 +#: core/models.py:508 msgid "buy time" msgstr "Cumpărați timp" -#: core/models.py:509 +#: core/models.py:515 msgid "a human-readable identifier for the order" msgstr "Un identificator ușor de citit pentru comandă" -#: core/models.py:510 +#: core/models.py:516 msgid "human readable id" msgstr "ID lizibil de către om" -#: core/models.py:516 +#: core/models.py:522 msgid "order" msgstr "Comandă" -#: core/models.py:531 +#: core/models.py:537 msgid "a user must have only one pending order at a time" msgstr "" "Un utilizator trebuie să aibă un singur ordin în așteptare la un moment dat!" -#: core/models.py:559 +#: core/models.py:566 msgid "you cannot add products to an order that is not a pending one" msgstr "Nu puteți adăuga produse la o comandă care nu este în așteptare" -#: core/models.py:564 +#: core/models.py:571 msgid "you cannot add inactive products to order" msgstr "Nu puteți adăuga produse inactive la comandă" -#: core/models.py:581 +#: core/models.py:588 msgid "you cannot add more products than available in stock" msgstr "Nu puteți adăuga mai multe produse decât cele disponibile în stoc" -#: core/models.py:590 core/models.py:610 core/models.py:634 -#: core/models.py:1218 core/models.py:1230 +#: core/models.py:597 core/models.py:617 core/models.py:641 +#: core/models.py:1250 core/models.py:1262 #, python-brace-format msgid "{name} does not exist: {product_uuid}" msgstr "{name} nu există: {product_uuid}" -#: core/models.py:594 core/models.py:618 core/models.py:626 +#: core/models.py:601 core/models.py:625 core/models.py:633 msgid "you cannot remove products from an order that is not a pending one" msgstr "" "Nu puteți elimina produse dintr-o comandă care nu este o comandă în curs" -#: core/models.py:614 +#: core/models.py:621 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} nu există cu interogarea <{query}>" -#: core/models.py:645 +#: core/models.py:652 msgid "promocode does not exist" msgstr "Codul promoțional nu există" -#: core/models.py:654 +#: core/models.py:661 msgid "you can only buy physical products with shipping address specified" msgstr "" "Puteți cumpăra numai produse fizice cu adresa de expediere specificată!" -#: core/models.py:673 +#: core/models.py:680 msgid "address does not exist" msgstr "Adresa nu există" -#: core/models.py:684 core/models.py:727 +#: core/models.py:691 core/models.py:734 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "Nu puteți achiziționa în acest moment, vă rugăm să încercați din nou în " "câteva minute." -#: core/models.py:687 +#: core/models.py:694 msgid "invalid force value" msgstr "Valoare forță invalidă" -#: core/models.py:692 core/models.py:730 +#: core/models.py:699 core/models.py:737 msgid "you cannot purchase an empty order!" msgstr "Nu puteți achiziționa o comandă goală!" -#: core/models.py:707 +#: core/models.py:714 msgid "insufficient funds to complete the order" msgstr "Insuficiența fondurilor pentru finalizarea comenzii" -#: core/models.py:739 +#: core/models.py:746 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -1549,7 +1649,7 @@ msgstr "" "nu puteți cumpăra fără înregistrare, vă rugăm să furnizați următoarele " "informații: nume client, e-mail client, număr de telefon client" -#: core/models.py:748 +#: core/models.py:755 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -1557,192 +1657,196 @@ msgstr "" "Metodă de plată invalidă: {payment_method} de la " "{available_payment_methods}!" -#: core/models.py:816 +#: core/models.py:823 msgid "the price paid by the customer for this product at purchase time" msgstr "Prețul plătit de client pentru acest produs la momentul achiziției" -#: core/models.py:817 +#: core/models.py:824 msgid "purchase price at order time" msgstr "Prețul de achiziție la momentul comenzii" -#: core/models.py:822 +#: core/models.py:829 msgid "internal comments for admins about this ordered product" msgstr "" "Comentarii interne pentru administratori cu privire la acest produs comandat" -#: core/models.py:823 +#: core/models.py:830 msgid "internal comments" msgstr "Observații interne" -#: core/models.py:829 +#: core/models.py:836 msgid "user notifications" msgstr "Notificări pentru utilizatori" -#: core/models.py:834 +#: core/models.py:841 msgid "json representation of this item's attributes" msgstr "Reprezentarea JSON a atributelor acestui element" -#: core/models.py:835 +#: core/models.py:842 msgid "ordered product attributes" msgstr "Atribute de produs ordonate" -#: core/models.py:840 +#: core/models.py:847 msgid "reference to the parent order that contains this product" msgstr "Trimitere la comanda mamă care conține acest produs" -#: core/models.py:841 +#: core/models.py:848 msgid "parent order" msgstr "Ordinul părinților" -#: core/models.py:850 +#: core/models.py:857 msgid "the specific product associated with this order line" msgstr "Produsul specific asociat cu această linie de comandă" -#: core/models.py:857 +#: core/models.py:864 msgid "quantity of this specific product in the order" msgstr "Cantitatea acestui produs specific din comandă" -#: core/models.py:858 +#: core/models.py:865 msgid "product quantity" msgstr "Cantitatea produsului" -#: core/models.py:865 +#: core/models.py:872 msgid "current status of this product in the order" msgstr "Starea actuală a acestui produs în comandă" -#: core/models.py:866 +#: core/models.py:873 msgid "product line status" msgstr "Starea liniei de produse" -#: core/models.py:918 +#: core/models.py:925 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "acțiune greșită specificată pentru feedback: {action}" -#: core/models.py:926 +#: core/models.py:933 msgid "you cannot feedback an order which is not received" msgstr "" "Nu puteți elimina produse dintr-o comandă care nu este o comandă în curs" -#: core/models.py:937 +#: core/models.py:944 core/models.py:969 msgid "internal tag identifier for the product tag" msgstr "Identificator intern de etichetă pentru eticheta produsului" -#: core/models.py:938 +#: core/models.py:945 core/models.py:970 msgid "tag name" msgstr "Nume etichetă" -#: core/models.py:942 +#: core/models.py:949 core/models.py:974 msgid "user-friendly name for the product tag" msgstr "Nume ușor de utilizat pentru eticheta produsului" -#: core/models.py:943 +#: core/models.py:950 core/models.py:975 msgid "tag display name" msgstr "Nume afișare etichetă" -#: core/models.py:951 +#: core/models.py:958 msgid "product tag" msgstr "Etichetă produs" -#: core/models.py:960 +#: core/models.py:983 +msgid "category tag" +msgstr "etichetă de categorie" + +#: core/models.py:992 msgid "provide alternative text for the image for accessibility" msgstr "Furnizați text alternativ pentru imagine pentru accesibilitate" -#: core/models.py:961 +#: core/models.py:993 msgid "image alt text" msgstr "Textul alt al imaginii" -#: core/models.py:964 +#: core/models.py:996 msgid "upload the image file for this product" msgstr "Încărcați fișierul de imagine pentru acest produs" -#: core/models.py:965 core/models.py:990 +#: core/models.py:997 core/models.py:1022 msgid "product image" msgstr "Imaginea produsului" -#: core/models.py:971 +#: core/models.py:1003 msgid "determines the order in which images are displayed" msgstr "Determină ordinea în care sunt afișate imaginile" -#: core/models.py:972 +#: core/models.py:1004 msgid "display priority" msgstr "Prioritatea afișării" -#: core/models.py:977 +#: core/models.py:1009 msgid "the product that this image represents" msgstr "Produsul pe care îl reprezintă această imagine" -#: core/models.py:991 +#: core/models.py:1023 msgid "product images" msgstr "Imagini ale produsului" -#: core/models.py:1001 +#: core/models.py:1033 msgid "unique code used by a user to redeem a discount" msgstr "Cod unic utilizat de un utilizator pentru a răscumpăra o reducere" -#: core/models.py:1002 +#: core/models.py:1034 msgid "promo code identifier" msgstr "Cod promoțional de identificare" -#: core/models.py:1009 +#: core/models.py:1041 msgid "fixed discount amount applied if percent is not used" msgstr "Valoarea fixă a reducerii aplicate dacă procentul nu este utilizat" -#: core/models.py:1010 +#: core/models.py:1042 msgid "fixed discount amount" msgstr "Valoarea fixă a reducerii" -#: core/models.py:1016 +#: core/models.py:1048 msgid "percentage discount applied if fixed amount is not used" msgstr "Procentul de reducere aplicat dacă suma fixă nu este utilizată" -#: core/models.py:1017 +#: core/models.py:1049 msgid "percentage discount" msgstr "Reducere procentuală" -#: core/models.py:1022 +#: core/models.py:1054 msgid "timestamp when the promocode expires" msgstr "Data la care expiră codul promoțional" -#: core/models.py:1023 +#: core/models.py:1055 msgid "end validity time" msgstr "Timpul final de valabilitate" -#: core/models.py:1028 +#: core/models.py:1060 msgid "timestamp from which this promocode is valid" msgstr "Timestamp de la care acest cod promoțional este valabil" -#: core/models.py:1029 +#: core/models.py:1061 msgid "start validity time" msgstr "Ora de începere a valabilității" -#: core/models.py:1034 +#: core/models.py:1066 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "Momentul în care codul promoțional a fost utilizat, gol dacă nu a fost " "utilizat încă" -#: core/models.py:1035 +#: core/models.py:1067 msgid "usage timestamp" msgstr "Timestamp de utilizare" -#: core/models.py:1040 +#: core/models.py:1072 msgid "user assigned to this promocode if applicable" msgstr "Utilizatorul atribuit acestui cod promoțional, dacă este cazul" -#: core/models.py:1041 +#: core/models.py:1073 msgid "assigned user" msgstr "Utilizator atribuit" -#: core/models.py:1048 +#: core/models.py:1080 msgid "promo code" msgstr "Cod promoțional" -#: core/models.py:1049 +#: core/models.py:1081 msgid "promo codes" msgstr "Coduri promoționale" -#: core/models.py:1056 +#: core/models.py:1088 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -1750,196 +1854,196 @@ msgstr "" "Trebuie definit un singur tip de reducere (sumă sau procent), dar nu ambele " "sau niciuna." -#: core/models.py:1071 +#: core/models.py:1103 msgid "promocode already used" msgstr "Codul promoțional a fost deja utilizat" -#: core/models.py:1085 +#: core/models.py:1117 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Tip de reducere invalid pentru codul promoțional {self.uuid}" -#: core/models.py:1097 +#: core/models.py:1129 msgid "percentage discount for the selected products" msgstr "Procentul de reducere pentru produsele selectate" -#: core/models.py:1098 +#: core/models.py:1130 msgid "discount percentage" msgstr "Procent de reducere" -#: core/models.py:1103 +#: core/models.py:1135 msgid "provide a unique name for this promotion" msgstr "Furnizați un nume unic pentru această promoție" -#: core/models.py:1104 +#: core/models.py:1136 msgid "promotion name" msgstr "Numele promoției" -#: core/models.py:1110 +#: core/models.py:1142 msgid "promotion description" msgstr "Descrierea promoției" -#: core/models.py:1115 +#: core/models.py:1147 msgid "select which products are included in this promotion" msgstr "Selectați ce produse sunt incluse în această promoție" -#: core/models.py:1116 +#: core/models.py:1148 msgid "included products" msgstr "Produse incluse" -#: core/models.py:1120 +#: core/models.py:1152 msgid "promotion" msgstr "Promovare" -#: core/models.py:1135 +#: core/models.py:1167 msgid "the vendor supplying this product stock" msgstr "Furnizorul care furnizează acest stoc de produse" -#: core/models.py:1136 +#: core/models.py:1168 msgid "associated vendor" msgstr "Furnizor asociat" -#: core/models.py:1140 +#: core/models.py:1172 msgid "final price to the customer after markups" msgstr "Prețul final pentru client după majorări" -#: core/models.py:1141 +#: core/models.py:1173 msgid "selling price" msgstr "Prețul de vânzare" -#: core/models.py:1146 +#: core/models.py:1178 msgid "the product associated with this stock entry" msgstr "Produsul asociat cu această intrare în stoc" -#: core/models.py:1154 +#: core/models.py:1186 msgid "the price paid to the vendor for this product" msgstr "Prețul plătit vânzătorului pentru acest produs" -#: core/models.py:1155 +#: core/models.py:1187 msgid "vendor purchase price" msgstr "Prețul de achiziție al furnizorului" -#: core/models.py:1159 +#: core/models.py:1191 msgid "available quantity of the product in stock" msgstr "Cantitatea disponibilă a produsului în stoc" -#: core/models.py:1160 +#: core/models.py:1192 msgid "quantity in stock" msgstr "Cantitate în stoc" -#: core/models.py:1164 +#: core/models.py:1196 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU atribuit de furnizor pentru identificarea produsului" -#: core/models.py:1165 +#: core/models.py:1197 msgid "vendor sku" msgstr "SKU al furnizorului" -#: core/models.py:1171 +#: core/models.py:1203 msgid "digital file associated with this stock if applicable" msgstr "Fișier digital asociat cu acest stoc, dacă este cazul" -#: core/models.py:1172 +#: core/models.py:1204 msgid "digital file" msgstr "Fișier digital" -#: core/models.py:1181 +#: core/models.py:1213 msgid "stock entries" msgstr "Intrări pe stoc" -#: core/models.py:1190 +#: core/models.py:1222 msgid "products that the user has marked as wanted" msgstr "Produse pe care utilizatorul le-a marcat ca fiind dorite" -#: core/models.py:1198 +#: core/models.py:1230 msgid "user who owns this wishlist" msgstr "Utilizatorul care deține această listă de dorințe" -#: core/models.py:1199 +#: core/models.py:1231 msgid "wishlist owner" msgstr "Proprietarul listei de dorințe" -#: core/models.py:1207 +#: core/models.py:1239 msgid "wishlist" msgstr "Lista dorințelor" -#: core/models.py:1252 +#: core/models.py:1284 msgid "download" msgstr "Descărcare" -#: core/models.py:1253 +#: core/models.py:1285 msgid "downloads" msgstr "Descărcări" -#: core/models.py:1261 +#: core/models.py:1293 msgid "you can not download a digital asset for a non-finished order" msgstr "Nu puteți descărca un bun digital pentru o comandă nefinalizată" -#: core/models.py:1273 +#: core/models.py:1305 msgid "documentary" msgstr "Documentar" -#: core/models.py:1274 +#: core/models.py:1306 msgid "documentaries" msgstr "Documentare" -#: core/models.py:1284 +#: core/models.py:1316 msgid "unresolved" msgstr "Nerezolvat" -#: core/models.py:1293 +#: core/models.py:1325 msgid "address line for the customer" msgstr "Linia de adresă pentru client" -#: core/models.py:1294 +#: core/models.py:1326 msgid "address line" msgstr "Linia de adresă" -#: core/models.py:1296 +#: core/models.py:1328 msgid "street" msgstr "Strada" -#: core/models.py:1297 +#: core/models.py:1329 msgid "district" msgstr "Districtul" -#: core/models.py:1298 +#: core/models.py:1330 msgid "city" msgstr "Oraș" -#: core/models.py:1299 +#: core/models.py:1331 msgid "region" msgstr "Regiunea" -#: core/models.py:1300 +#: core/models.py:1332 msgid "postal code" msgstr "Cod poștal" -#: core/models.py:1301 +#: core/models.py:1333 msgid "country" msgstr "Țara" -#: core/models.py:1304 +#: core/models.py:1336 msgid "geolocation point: (longitude, latitude)" msgstr "Punct de geolocație (longitudine, latitudine)" -#: core/models.py:1307 +#: core/models.py:1339 msgid "full JSON response from geocoder for this address" msgstr "Răspuns JSON complet de la geocoder pentru această adresă" -#: core/models.py:1309 +#: core/models.py:1341 msgid "stored JSON response from the geocoding service" msgstr "Răspuns JSON stocat de la serviciul de geocodare" -#: core/models.py:1316 +#: core/models.py:1348 msgid "address" msgstr "Adresă" -#: core/models.py:1317 +#: core/models.py:1349 msgid "addresses" msgstr "Adrese" -#: core/serializers/utility.py:76 +#: core/serializers/utility.py:77 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" @@ -2180,7 +2284,7 @@ msgstr "Puteți descărca activul digital o singură dată" msgid "favicon not found" msgstr "favicon nu a fost găsit" -#: core/viewsets.py:680 +#: core/viewsets.py:677 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Eroare de geocodare: {e}" diff --git a/core/locale/ru_RU/LC_MESSAGES/django.mo b/core/locale/ru_RU/LC_MESSAGES/django.mo index e1b7863d..ff31c1ea 100644 Binary files a/core/locale/ru_RU/LC_MESSAGES/django.mo and b/core/locale/ru_RU/LC_MESSAGES/django.mo differ diff --git a/core/locale/ru_RU/LC_MESSAGES/django.po b/core/locale/ru_RU/LC_MESSAGES/django.po index 7b9103fe..94a0a71b 100644 --- a/core/locale/ru_RU/LC_MESSAGES/django.po +++ b/core/locale/ru_RU/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-08 19:42+0100\n" +"POT-Creation-Date: 2025-06-10 03:32+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -83,7 +83,7 @@ msgstr "Изображение" msgid "images" msgstr "Изображения" -#: core/admin.py:162 core/models.py:1180 +#: core/admin.py:162 core/models.py:1212 msgid "stock" msgstr "Наличие" @@ -111,11 +111,11 @@ msgstr "Основная информация" msgid "important dates" msgstr "Важные даты" -#: core/admin.py:253 core/models.py:874 +#: core/admin.py:253 core/models.py:881 msgid "order product" msgstr "Заказать товар" -#: core/admin.py:254 core/graphene/object_types.py:262 core/models.py:875 +#: core/admin.py:254 core/graphene/object_types.py:262 core/models.py:882 msgid "order products" msgstr "Заказать товары" @@ -769,6 +769,98 @@ msgstr "добавлять или удалять отзывы о связи за msgid "no search term provided." msgstr "Поисковый запрос не предоставлен." +#: core/filters.py:37 core/filters.py:357 +msgid "UUID" +msgstr "UUID" + +#: core/filters.py:38 core/filters.py:309 core/filters.py:340 +msgid "Name" +msgstr "Имя" + +#: core/filters.py:39 core/filters.py:341 +msgid "Categories" +msgstr "Категории" + +#: core/filters.py:44 +msgid "Categories Slugs" +msgstr "Категории Слизни" + +#: core/filters.py:45 core/filters.py:312 +msgid "Tags" +msgstr "Теги" + +#: core/filters.py:46 +msgid "Min Price" +msgstr "Мин. цена" + +#: core/filters.py:47 +msgid "Max Price" +msgstr "Максимальная цена" + +#: core/filters.py:48 +msgid "Is Active" +msgstr "Активен" + +#: core/filters.py:49 +msgid "Brand" +msgstr "Бренд" + +#: core/filters.py:50 +msgid "Attributes" +msgstr "Атрибуты" + +#: core/filters.py:51 +msgid "Quantity" +msgstr "Количество" + +#: core/filters.py:52 core/filters.py:311 +msgid "Slug" +msgstr "Слизняк" + +#: core/filters.py:53 +msgid "Is Digital" +msgstr "Цифровой" + +#: core/filters.py:56 +msgid "Include sub-categories" +msgstr "Включите подкатегории" + +#: core/filters.py:245 +msgid "Search (ID, product name or part number)" +msgstr "Поиск (идентификатор, название продукта или номер детали)" + +#: core/filters.py:248 +msgid "Bought after (inclusive)" +msgstr "Куплено после (включительно)" + +#: core/filters.py:249 +msgid "Bought before (inclusive)" +msgstr "Куплено ранее (включительно)" + +#: core/filters.py:252 core/filters.py:295 +msgid "User email" +msgstr "Электронная почта пользователя" + +#: core/filters.py:253 core/filters.py:296 core/filters.py:359 +msgid "User UUID" +msgstr "UUID пользователя" + +#: core/filters.py:254 +msgid "Status" +msgstr "Статус" + +#: core/filters.py:255 +msgid "Human Readable ID" +msgstr "Человекочитаемый идентификатор" + +#: core/filters.py:310 +msgid "Parent" +msgstr "Родитель" + +#: core/filters.py:358 +msgid "Product UUID" +msgstr "UUID продукта" + #: core/graphene/mutations.py:38 msgid "key to look for in or set into the cache" msgstr "Ключ, который нужно найти в тайнике или вложить в него" @@ -822,7 +914,7 @@ msgstr "" "варианты!" #: core/graphene/mutations.py:225 core/graphene/mutations.py:441 -#: core/graphene/mutations.py:475 core/viewsets.py:348 +#: core/graphene/mutations.py:475 core/viewsets.py:345 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Неправильный тип получен из метода order.buy(): {type(instance)!s}" @@ -876,7 +968,7 @@ msgstr "" msgid "original address string provided by the user" msgstr "Оригинальная строка адреса, предоставленная пользователем" -#: core/graphene/mutations.py:572 core/viewsets.py:238 core/viewsets.py:351 +#: core/graphene/mutations.py:572 core/viewsets.py:240 core/viewsets.py:348 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} не существует: {uuid}" @@ -890,7 +982,7 @@ msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - работает как шарм" #: core/graphene/object_types.py:43 core/graphene/object_types.py:245 -#: core/graphene/object_types.py:286 core/models.py:126 core/models.py:489 +#: core/graphene/object_types.py:286 core/models.py:126 core/models.py:495 msgid "attributes" msgstr "Атрибуты" @@ -903,11 +995,11 @@ msgid "groups of attributes" msgstr "Группы атрибутов" #: core/graphene/object_types.py:76 core/graphene/object_types.py:104 -#: core/graphene/object_types.py:132 core/models.py:90 core/models.py:220 +#: core/graphene/object_types.py:132 core/models.py:90 core/models.py:226 msgid "categories" msgstr "Категории" -#: core/graphene/object_types.py:83 core/models.py:267 +#: core/graphene/object_types.py:83 core/models.py:273 msgid "brands" msgstr "Бренды" @@ -932,7 +1024,7 @@ msgstr "" "Минимальные и максимальные цены на товары в этой категории, если они " "доступны." -#: core/graphene/object_types.py:202 core/models.py:404 +#: core/graphene/object_types.py:202 core/models.py:410 msgid "vendors" msgstr "Поставщики" @@ -958,7 +1050,7 @@ msgid "represents feedback from a user." msgstr "Представляет собой отзыв пользователя." #: core/graphene/object_types.py:246 core/graphene/object_types.py:287 -#: core/models.py:483 +#: core/models.py:489 msgid "notifications" msgstr "Уведомления" @@ -970,7 +1062,7 @@ msgstr "Если применимо, загрузите url для этого п msgid "a list of order products in this order" msgstr "Список товаров, заказанных в этом заказе" -#: core/graphene/object_types.py:278 core/models.py:453 +#: core/graphene/object_types.py:278 core/models.py:459 msgid "billing address" msgstr "Адрес для выставления счетов" @@ -994,7 +1086,7 @@ msgstr "Общее количество продуктов в заказе" msgid "are all products in the order digital" msgstr "Все ли товары в заказе представлены в цифровом виде" -#: core/graphene/object_types.py:305 core/models.py:517 +#: core/graphene/object_types.py:305 core/models.py:523 msgid "orders" msgstr "Заказы" @@ -1006,15 +1098,15 @@ msgstr "URL-адрес изображения" msgid "product's images" msgstr "Изображения продукта" -#: core/graphene/object_types.py:335 core/models.py:219 core/models.py:277 +#: core/graphene/object_types.py:335 core/models.py:225 core/models.py:283 msgid "category" msgstr "Категория" -#: core/graphene/object_types.py:337 core/models.py:440 +#: core/graphene/object_types.py:337 core/models.py:446 msgid "feedbacks" msgstr "Отзывы" -#: core/graphene/object_types.py:338 core/models.py:266 core/models.py:285 +#: core/graphene/object_types.py:338 core/models.py:272 core/models.py:291 msgid "brand" msgstr "Бренд" @@ -1034,7 +1126,7 @@ msgstr "Количество" msgid "number of feedbacks" msgstr "Количество отзывов" -#: core/graphene/object_types.py:360 core/models.py:329 +#: core/graphene/object_types.py:360 core/models.py:335 msgid "products" msgstr "Продукция" @@ -1046,15 +1138,15 @@ msgstr "Промокоды" msgid "products on sale" msgstr "Продукты в продаже" -#: core/graphene/object_types.py:425 core/models.py:1121 +#: core/graphene/object_types.py:425 core/models.py:1153 msgid "promotions" msgstr "Акции" -#: core/graphene/object_types.py:429 core/models.py:403 +#: core/graphene/object_types.py:429 core/models.py:409 msgid "vendor" msgstr "Поставщик" -#: core/graphene/object_types.py:430 core/models.py:328 +#: core/graphene/object_types.py:430 core/models.py:334 #: core/templates/digital_order_created_email.html:107 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:93 @@ -1062,11 +1154,11 @@ msgstr "Поставщик" msgid "product" msgstr "Продукт" -#: core/graphene/object_types.py:441 core/models.py:1191 +#: core/graphene/object_types.py:441 core/models.py:1223 msgid "wishlisted products" msgstr "Продукты из списка желаний" -#: core/graphene/object_types.py:447 core/models.py:1208 +#: core/graphene/object_types.py:447 core/models.py:1240 msgid "wishlists" msgstr "Списки желаний" @@ -1074,7 +1166,7 @@ msgstr "Списки желаний" msgid "tagged products" msgstr "Tagged products" -#: core/graphene/object_types.py:458 core/models.py:291 core/models.py:952 +#: core/graphene/object_types.py:458 core/models.py:297 core/models.py:959 msgid "product tags" msgstr "Теги товара" @@ -1222,8 +1314,8 @@ msgstr "Атрибут этого значения" msgid "the specific product associated with this attribute's value" msgstr "Конкретный продукт, связанный со значением этого атрибута" -#: core/models.py:145 core/models.py:851 core/models.py:978 -#: core/models.py:1147 +#: core/models.py:145 core/models.py:858 core/models.py:1010 +#: core/models.py:1179 msgid "associated product" msgstr "Сопутствующий товар" @@ -1267,276 +1359,284 @@ msgstr "Добавьте подробное описание для этой к msgid "category description" msgstr "Описание категории" -#: core/models.py:229 +#: core/models.py:212 +msgid "tags that help describe or group this category" +msgstr "теги, которые помогают описать или сгруппировать эту категорию" + +#: core/models.py:213 core/models.py:984 +msgid "category tags" +msgstr "теги категорий" + +#: core/models.py:235 msgid "name of this brand" msgstr "Название этой марки" -#: core/models.py:230 +#: core/models.py:236 msgid "brand name" msgstr "Название бренда" -#: core/models.py:237 +#: core/models.py:243 msgid "upload a logo representing this brand" msgstr "Загрузите логотип, представляющий этот бренд" -#: core/models.py:239 +#: core/models.py:245 msgid "brand small image" msgstr "Маленький образ бренда" -#: core/models.py:245 +#: core/models.py:251 msgid "upload a big logo representing this brand" msgstr "Загрузите большой логотип, представляющий этот бренд" -#: core/models.py:247 +#: core/models.py:253 msgid "brand big image" msgstr "Большой имидж бренда" -#: core/models.py:252 +#: core/models.py:258 msgid "add a detailed description of the brand" msgstr "Добавьте подробное описание бренда" -#: core/models.py:253 +#: core/models.py:259 msgid "brand description" msgstr "Описание бренда" -#: core/models.py:258 +#: core/models.py:264 msgid "optional categories that this brand is associated with" msgstr "Дополнительные категории, с которыми ассоциируется этот бренд" -#: core/models.py:259 +#: core/models.py:265 msgid "associated categories" msgstr "Категории" -#: core/models.py:276 +#: core/models.py:282 msgid "category this product belongs to" msgstr "Категория, к которой относится этот продукт" -#: core/models.py:284 +#: core/models.py:290 msgid "optionally associate this product with a brand" msgstr "По желанию ассоциируйте этот продукт с брендом" -#: core/models.py:290 +#: core/models.py:296 msgid "tags that help describe or group this product" msgstr "Теги, которые помогают описать или сгруппировать этот продукт" -#: core/models.py:295 +#: core/models.py:301 msgid "indicates whether this product is digitally delivered" msgstr "Указывает, поставляется ли этот продукт в цифровом виде" -#: core/models.py:296 +#: core/models.py:302 msgid "is product digital" msgstr "Является ли продукт цифровым" -#: core/models.py:302 +#: core/models.py:308 msgid "provide a clear identifying name for the product" msgstr "Обеспечьте четкое идентификационное название продукта" -#: core/models.py:303 +#: core/models.py:309 msgid "product name" msgstr "Название продукта" -#: core/models.py:308 core/models.py:1109 +#: core/models.py:314 core/models.py:1141 msgid "add a detailed description of the product" msgstr "Добавьте подробное описание продукта" -#: core/models.py:309 +#: core/models.py:315 msgid "product description" msgstr "Описание товара" -#: core/models.py:316 +#: core/models.py:322 msgid "part number for this product" msgstr "Парт. номер для данного товара" -#: core/models.py:317 +#: core/models.py:323 msgid "part number" msgstr "Парт. номер" -#: core/models.py:381 +#: core/models.py:387 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Хранит учетные данные и конечные точки, необходимые для взаимодействия с API" " поставщика." -#: core/models.py:382 +#: core/models.py:388 msgid "authentication info" msgstr "Информация об аутентификации" -#: core/models.py:387 +#: core/models.py:393 msgid "define the markup for products retrieved from this vendor" msgstr "Определите наценку для товаров, полученных от этого продавца" -#: core/models.py:388 +#: core/models.py:394 msgid "vendor markup percentage" msgstr "Процент наценки поставщика" -#: core/models.py:392 +#: core/models.py:398 msgid "name of this vendor" msgstr "Имя этого продавца" -#: core/models.py:393 +#: core/models.py:399 msgid "vendor name" msgstr "Название поставщика" -#: core/models.py:416 +#: core/models.py:422 msgid "user-provided comments about their experience with the product" msgstr "Комментарии пользователей об их опыте использования продукта" -#: core/models.py:417 +#: core/models.py:423 msgid "feedback comments" msgstr "Комментарии к отзывам" -#: core/models.py:424 +#: core/models.py:430 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "Ссылка на конкретный продукт в заказе, о котором идет речь в этом отзыве" -#: core/models.py:425 +#: core/models.py:431 msgid "related order product" msgstr "Сопутствующий товар для заказа" -#: core/models.py:430 +#: core/models.py:436 msgid "user-assigned rating for the product" msgstr "Присвоенный пользователем рейтинг продукта" -#: core/models.py:431 +#: core/models.py:437 msgid "product rating" msgstr "Рейтинг продукции" -#: core/models.py:439 +#: core/models.py:445 msgid "feedback" msgstr "Обратная связь" -#: core/models.py:452 +#: core/models.py:458 msgid "the billing address used for this order" msgstr "Адрес для выставления счетов, используемый для данного заказа" -#: core/models.py:460 +#: core/models.py:466 msgid "optional promo code applied to this order" msgstr "Дополнительный промокод, применяемый к этому заказу" -#: core/models.py:461 +#: core/models.py:467 msgid "applied promo code" msgstr "Примененный промокод" -#: core/models.py:469 +#: core/models.py:475 msgid "the shipping address used for this order" msgstr "Адрес доставки, используемый для данного заказа" -#: core/models.py:470 +#: core/models.py:476 msgid "shipping address" msgstr "Адрес доставки" -#: core/models.py:476 +#: core/models.py:482 msgid "current status of the order in its lifecycle" msgstr "Текущий статус заказа в его жизненном цикле" -#: core/models.py:477 +#: core/models.py:483 msgid "order status" msgstr "Статус заказа" -#: core/models.py:482 core/models.py:828 +#: core/models.py:488 core/models.py:835 msgid "json structure of notifications to display to users" msgstr "" "JSON-структура уведомлений для отображения пользователям, в административном" " интерфейсе используется табличный вид" -#: core/models.py:488 +#: core/models.py:494 msgid "json representation of order attributes for this order" msgstr "JSON-представление атрибутов заказа для этого заказа" -#: core/models.py:494 +#: core/models.py:500 msgid "the user who placed the order" msgstr "Пользователь, разместивший заказ" -#: core/models.py:495 +#: core/models.py:501 msgid "user" msgstr "Пользователь" -#: core/models.py:501 +#: core/models.py:507 msgid "the timestamp when the order was finalized" msgstr "Временная метка, когда заказ был завершен" -#: core/models.py:502 +#: core/models.py:508 msgid "buy time" msgstr "Время покупки" -#: core/models.py:509 +#: core/models.py:515 msgid "a human-readable identifier for the order" msgstr "Человекочитаемый идентификатор для заказа" -#: core/models.py:510 +#: core/models.py:516 msgid "human readable id" msgstr "человекочитаемый идентификатор" -#: core/models.py:516 +#: core/models.py:522 msgid "order" msgstr "Заказать" -#: core/models.py:531 +#: core/models.py:537 msgid "a user must have only one pending order at a time" msgstr "Пользователь может одновременно иметь только один отложенный ордер!" -#: core/models.py:559 +#: core/models.py:566 msgid "you cannot add products to an order that is not a pending one" msgstr "Вы не можете добавить товары в заказ, который не является отложенным." -#: core/models.py:564 +#: core/models.py:571 msgid "you cannot add inactive products to order" msgstr "Вы не можете добавить неактивные товары в заказ" -#: core/models.py:581 +#: core/models.py:588 msgid "you cannot add more products than available in stock" msgstr "Вы не можете добавить больше товаров, чем есть на складе" -#: core/models.py:590 core/models.py:610 core/models.py:634 -#: core/models.py:1218 core/models.py:1230 +#: core/models.py:597 core/models.py:617 core/models.py:641 +#: core/models.py:1250 core/models.py:1262 #, python-brace-format msgid "{name} does not exist: {product_uuid}" msgstr "{name} не существует: {product_uuid}" -#: core/models.py:594 core/models.py:618 core/models.py:626 +#: core/models.py:601 core/models.py:625 core/models.py:633 msgid "you cannot remove products from an order that is not a pending one" msgstr "" "Вы не можете удалить товары из заказа, который не является отложенным." -#: core/models.py:614 +#: core/models.py:621 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} не существует в запросе <{query}>." -#: core/models.py:645 +#: core/models.py:652 msgid "promocode does not exist" msgstr "Промокод не существует" -#: core/models.py:654 +#: core/models.py:661 msgid "you can only buy physical products with shipping address specified" msgstr "" "Вы можете купить физические товары только с указанным адресом доставки!" -#: core/models.py:673 +#: core/models.py:680 msgid "address does not exist" msgstr "Адрес не существует" -#: core/models.py:684 core/models.py:727 +#: core/models.py:691 core/models.py:734 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "В данный момент вы не можете совершить покупку, пожалуйста, повторите " "попытку через несколько минут." -#: core/models.py:687 +#: core/models.py:694 msgid "invalid force value" msgstr "Недопустимое значение силы" -#: core/models.py:692 core/models.py:730 +#: core/models.py:699 core/models.py:737 msgid "you cannot purchase an empty order!" msgstr "Вы не можете приобрести пустой заказ!" -#: core/models.py:707 +#: core/models.py:714 msgid "insufficient funds to complete the order" msgstr "Недостаточно средств для выполнения заказа" -#: core/models.py:739 +#: core/models.py:746 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -1544,201 +1644,205 @@ msgstr "" "Вы не можете купить без регистрации, пожалуйста, предоставьте следующую " "информацию: имя клиента, электронная почта клиента, номер телефона клиента" -#: core/models.py:748 +#: core/models.py:755 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "Неверный способ оплаты: {payment_method} от {available_payment_methods}!" -#: core/models.py:816 +#: core/models.py:823 msgid "the price paid by the customer for this product at purchase time" msgstr "Цена, уплаченная клиентом за данный продукт на момент покупки" -#: core/models.py:817 +#: core/models.py:824 msgid "purchase price at order time" msgstr "Покупная цена на момент заказа" -#: core/models.py:822 +#: core/models.py:829 msgid "internal comments for admins about this ordered product" msgstr "" "Внутренние комментарии для администраторов об этом заказанном продукте" -#: core/models.py:823 +#: core/models.py:830 msgid "internal comments" msgstr "Внутренние комментарии" -#: core/models.py:829 +#: core/models.py:836 msgid "user notifications" msgstr "Уведомления пользователей" -#: core/models.py:834 +#: core/models.py:841 msgid "json representation of this item's attributes" msgstr "JSON-представление атрибутов этого элемента" -#: core/models.py:835 +#: core/models.py:842 msgid "ordered product attributes" msgstr "Атрибуты заказанного продукта" -#: core/models.py:840 +#: core/models.py:847 msgid "reference to the parent order that contains this product" msgstr "Ссылка на родительский заказ, содержащий данный продукт" -#: core/models.py:841 +#: core/models.py:848 msgid "parent order" msgstr "Родительский приказ" -#: core/models.py:850 +#: core/models.py:857 msgid "the specific product associated with this order line" msgstr "Конкретный продукт, связанный с этой линией заказа" -#: core/models.py:857 +#: core/models.py:864 msgid "quantity of this specific product in the order" msgstr "Количество данного товара в заказе" -#: core/models.py:858 +#: core/models.py:865 msgid "product quantity" msgstr "Количество продукта" -#: core/models.py:865 +#: core/models.py:872 msgid "current status of this product in the order" msgstr "Текущий статус этого продукта в заказе" -#: core/models.py:866 +#: core/models.py:873 msgid "product line status" msgstr "Состояние продуктовой линейки" -#: core/models.py:918 +#: core/models.py:925 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "указано неверное действие для обратной связи: {action}" -#: core/models.py:926 +#: core/models.py:933 msgid "you cannot feedback an order which is not received" msgstr "Вы не можете отозвать заказ, который не был получен" -#: core/models.py:937 +#: core/models.py:944 core/models.py:969 msgid "internal tag identifier for the product tag" msgstr "Внутренний идентификатор тега для тега продукта" -#: core/models.py:938 +#: core/models.py:945 core/models.py:970 msgid "tag name" msgstr "Название тега" -#: core/models.py:942 +#: core/models.py:949 core/models.py:974 msgid "user-friendly name for the product tag" msgstr "Удобное название для метки продукта" -#: core/models.py:943 +#: core/models.py:950 core/models.py:975 msgid "tag display name" msgstr "Отображаемое имя тега" -#: core/models.py:951 +#: core/models.py:958 msgid "product tag" msgstr "Метка продукта" -#: core/models.py:960 +#: core/models.py:983 +msgid "category tag" +msgstr "тег категории" + +#: core/models.py:992 msgid "provide alternative text for the image for accessibility" msgstr "" "Предоставьте альтернативный текст для изображения, чтобы обеспечить " "доступность" -#: core/models.py:961 +#: core/models.py:993 msgid "image alt text" msgstr "Альтовый текст изображения" -#: core/models.py:964 +#: core/models.py:996 msgid "upload the image file for this product" msgstr "Загрузите файл изображения для этого продукта" -#: core/models.py:965 core/models.py:990 +#: core/models.py:997 core/models.py:1022 msgid "product image" msgstr "Изображение продукта" -#: core/models.py:971 +#: core/models.py:1003 msgid "determines the order in which images are displayed" msgstr "Определяет порядок отображения изображений" -#: core/models.py:972 +#: core/models.py:1004 msgid "display priority" msgstr "Приоритет отображения" -#: core/models.py:977 +#: core/models.py:1009 msgid "the product that this image represents" msgstr "Продукт, который представлен на этом изображении" -#: core/models.py:991 +#: core/models.py:1023 msgid "product images" msgstr "Изображения продуктов" -#: core/models.py:1001 +#: core/models.py:1033 msgid "unique code used by a user to redeem a discount" msgstr "Уникальный код, используемый пользователем для получения скидки" -#: core/models.py:1002 +#: core/models.py:1034 msgid "promo code identifier" msgstr "Идентификатор промо-кода" -#: core/models.py:1009 +#: core/models.py:1041 msgid "fixed discount amount applied if percent is not used" msgstr "Фиксированная сумма скидки, применяемая, если процент не используется" -#: core/models.py:1010 +#: core/models.py:1042 msgid "fixed discount amount" msgstr "Фиксированная сумма скидки" -#: core/models.py:1016 +#: core/models.py:1048 msgid "percentage discount applied if fixed amount is not used" msgstr "" "Процентная скидка, применяемая, если фиксированная сумма не используется" -#: core/models.py:1017 +#: core/models.py:1049 msgid "percentage discount" msgstr "Процентная скидка" -#: core/models.py:1022 +#: core/models.py:1054 msgid "timestamp when the promocode expires" msgstr "Временная метка, когда истекает срок действия промокода" -#: core/models.py:1023 +#: core/models.py:1055 msgid "end validity time" msgstr "Время окончания срока действия" -#: core/models.py:1028 +#: core/models.py:1060 msgid "timestamp from which this promocode is valid" msgstr "Время, с которого действует этот промокод" -#: core/models.py:1029 +#: core/models.py:1061 msgid "start validity time" msgstr "Время начала действия" -#: core/models.py:1034 +#: core/models.py:1066 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "Временная метка, когда был использован промокод, пустая, если он еще не " "использовался" -#: core/models.py:1035 +#: core/models.py:1067 msgid "usage timestamp" msgstr "Временная метка использования" -#: core/models.py:1040 +#: core/models.py:1072 msgid "user assigned to this promocode if applicable" msgstr "Пользователь, назначенный на этот промокод, если применимо" -#: core/models.py:1041 +#: core/models.py:1073 msgid "assigned user" msgstr "Назначенный пользователь" -#: core/models.py:1048 +#: core/models.py:1080 msgid "promo code" msgstr "Промокод" -#: core/models.py:1049 +#: core/models.py:1081 msgid "promo codes" msgstr "Промокоды" -#: core/models.py:1056 +#: core/models.py:1088 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -1746,196 +1850,196 @@ msgstr "" "Следует определить только один тип скидки (сумма или процент), но не оба или" " ни один из них." -#: core/models.py:1071 +#: core/models.py:1103 msgid "promocode already used" msgstr "Промокоды" -#: core/models.py:1085 +#: core/models.py:1117 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Неверный тип скидки для промокода {self.uuid}" -#: core/models.py:1097 +#: core/models.py:1129 msgid "percentage discount for the selected products" msgstr "Процентная скидка на выбранные продукты" -#: core/models.py:1098 +#: core/models.py:1130 msgid "discount percentage" msgstr "Процент скидки" -#: core/models.py:1103 +#: core/models.py:1135 msgid "provide a unique name for this promotion" msgstr "Укажите уникальное имя для этой акции" -#: core/models.py:1104 +#: core/models.py:1136 msgid "promotion name" msgstr "Название акции" -#: core/models.py:1110 +#: core/models.py:1142 msgid "promotion description" msgstr "Описание акции" -#: core/models.py:1115 +#: core/models.py:1147 msgid "select which products are included in this promotion" msgstr "Выберите, какие продукты участвуют в этой акции" -#: core/models.py:1116 +#: core/models.py:1148 msgid "included products" msgstr "Включенные продукты" -#: core/models.py:1120 +#: core/models.py:1152 msgid "promotion" msgstr "Продвижение" -#: core/models.py:1135 +#: core/models.py:1167 msgid "the vendor supplying this product stock" msgstr "Поставщик, поставляющий данный товар на склад" -#: core/models.py:1136 +#: core/models.py:1168 msgid "associated vendor" msgstr "Ассоциированный поставщик" -#: core/models.py:1140 +#: core/models.py:1172 msgid "final price to the customer after markups" msgstr "Окончательная цена для покупателя после наценок" -#: core/models.py:1141 +#: core/models.py:1173 msgid "selling price" msgstr "Цена продажи" -#: core/models.py:1146 +#: core/models.py:1178 msgid "the product associated with this stock entry" msgstr "Продукт, связанный с этой складской записью" -#: core/models.py:1154 +#: core/models.py:1186 msgid "the price paid to the vendor for this product" msgstr "Цена, уплаченная продавцу за этот продукт" -#: core/models.py:1155 +#: core/models.py:1187 msgid "vendor purchase price" msgstr "Цена покупки у поставщика" -#: core/models.py:1159 +#: core/models.py:1191 msgid "available quantity of the product in stock" msgstr "Доступное количество продукта на складе" -#: core/models.py:1160 +#: core/models.py:1192 msgid "quantity in stock" msgstr "Количество на складе" -#: core/models.py:1164 +#: core/models.py:1196 msgid "vendor-assigned SKU for identifying the product" msgstr "Присвоенный поставщиком SKU для идентификации продукта" -#: core/models.py:1165 +#: core/models.py:1197 msgid "vendor sku" msgstr "SKU поставщика" -#: core/models.py:1171 +#: core/models.py:1203 msgid "digital file associated with this stock if applicable" msgstr "Цифровой файл, связанный с этой акцией, если применимо" -#: core/models.py:1172 +#: core/models.py:1204 msgid "digital file" msgstr "Цифровой файл" -#: core/models.py:1181 +#: core/models.py:1213 msgid "stock entries" -msgstr "Проводки по запасам" +msgstr "Складские состояния" -#: core/models.py:1190 +#: core/models.py:1222 msgid "products that the user has marked as wanted" msgstr "Продукты, которые пользователь отметил как желаемые" -#: core/models.py:1198 +#: core/models.py:1230 msgid "user who owns this wishlist" msgstr "Пользователь, владеющий этим списком желаний" -#: core/models.py:1199 +#: core/models.py:1231 msgid "wishlist owner" msgstr "Владелец вишлиста" -#: core/models.py:1207 +#: core/models.py:1239 msgid "wishlist" msgstr "Список желаний" -#: core/models.py:1252 +#: core/models.py:1284 msgid "download" msgstr "Скачать" -#: core/models.py:1253 +#: core/models.py:1285 msgid "downloads" msgstr "Скачать" -#: core/models.py:1261 +#: core/models.py:1293 msgid "you can not download a digital asset for a non-finished order" msgstr "Вы не можете загрузить цифровой актив для незавершенного заказа" -#: core/models.py:1273 +#: core/models.py:1305 msgid "documentary" msgstr "Документальный фильм" -#: core/models.py:1274 +#: core/models.py:1306 msgid "documentaries" msgstr "Документальные фильмы" -#: core/models.py:1284 +#: core/models.py:1316 msgid "unresolved" msgstr "Неразрешенные" -#: core/models.py:1293 +#: core/models.py:1325 msgid "address line for the customer" msgstr "Адресная строка для клиента" -#: core/models.py:1294 +#: core/models.py:1326 msgid "address line" msgstr "Адресная строка" -#: core/models.py:1296 +#: core/models.py:1328 msgid "street" msgstr "Улица" -#: core/models.py:1297 +#: core/models.py:1329 msgid "district" msgstr "Округ" -#: core/models.py:1298 +#: core/models.py:1330 msgid "city" msgstr "Город" -#: core/models.py:1299 +#: core/models.py:1331 msgid "region" msgstr "Регион" -#: core/models.py:1300 +#: core/models.py:1332 msgid "postal code" msgstr "Почтовый индекс" -#: core/models.py:1301 +#: core/models.py:1333 msgid "country" msgstr "Страна" -#: core/models.py:1304 +#: core/models.py:1336 msgid "geolocation point: (longitude, latitude)" msgstr "Геолокационная точка(долгота, широта)" -#: core/models.py:1307 +#: core/models.py:1339 msgid "full JSON response from geocoder for this address" msgstr "Полный JSON-ответ от геокодера для этого адреса" -#: core/models.py:1309 +#: core/models.py:1341 msgid "stored JSON response from the geocoding service" msgstr "Сохраненный JSON-ответ от сервиса геокодирования" -#: core/models.py:1316 +#: core/models.py:1348 msgid "address" msgstr "Адрес" -#: core/models.py:1317 +#: core/models.py:1349 msgid "addresses" msgstr "Адреса" -#: core/serializers/utility.py:76 +#: core/serializers/utility.py:77 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" @@ -2177,7 +2281,7 @@ msgstr "Вы можете загрузить цифровой актив тол msgid "favicon not found" msgstr "favicon не найден" -#: core/viewsets.py:680 +#: core/viewsets.py:677 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Ошибка геокодирования: {e}" diff --git a/core/locale/zh_Hans/LC_MESSAGES/django.mo b/core/locale/zh_Hans/LC_MESSAGES/django.mo index 5bda6d42..cf2405fe 100644 Binary files a/core/locale/zh_Hans/LC_MESSAGES/django.mo and b/core/locale/zh_Hans/LC_MESSAGES/django.mo differ diff --git a/core/locale/zh_Hans/LC_MESSAGES/django.po b/core/locale/zh_Hans/LC_MESSAGES/django.po index 07f09da5..44482d8f 100644 --- a/core/locale/zh_Hans/LC_MESSAGES/django.po +++ b/core/locale/zh_Hans/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-08 19:42+0100\n" +"POT-Creation-Date: 2025-06-10 03:32+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -79,7 +79,7 @@ msgstr "图片" msgid "images" msgstr "图片" -#: core/admin.py:162 core/models.py:1180 +#: core/admin.py:162 core/models.py:1212 msgid "stock" msgstr "库存" @@ -107,11 +107,11 @@ msgstr "基本信息" msgid "important dates" msgstr "重要日期" -#: core/admin.py:253 core/models.py:874 +#: core/admin.py:253 core/models.py:881 msgid "order product" msgstr "订购产品" -#: core/admin.py:254 core/graphene/object_types.py:262 core/models.py:875 +#: core/admin.py:254 core/graphene/object_types.py:262 core/models.py:882 msgid "order products" msgstr "订购产品" @@ -710,6 +710,98 @@ msgstr "添加或删除订单与产品关系中的反馈信息" msgid "no search term provided." msgstr "未提供搜索条件。" +#: core/filters.py:37 core/filters.py:357 +msgid "UUID" +msgstr "UUID" + +#: core/filters.py:38 core/filters.py:309 core/filters.py:340 +msgid "Name" +msgstr "名称" + +#: core/filters.py:39 core/filters.py:341 +msgid "Categories" +msgstr "类别" + +#: core/filters.py:44 +msgid "Categories Slugs" +msgstr "类别 蛞蝓" + +#: core/filters.py:45 core/filters.py:312 +msgid "Tags" +msgstr "标签" + +#: core/filters.py:46 +msgid "Min Price" +msgstr "最低价格" + +#: core/filters.py:47 +msgid "Max Price" +msgstr "最高价格" + +#: core/filters.py:48 +msgid "Is Active" +msgstr "处于活动状态" + +#: core/filters.py:49 +msgid "Brand" +msgstr "品牌" + +#: core/filters.py:50 +msgid "Attributes" +msgstr "属性" + +#: core/filters.py:51 +msgid "Quantity" +msgstr "数量" + +#: core/filters.py:52 core/filters.py:311 +msgid "Slug" +msgstr "蛞蝓" + +#: core/filters.py:53 +msgid "Is Digital" +msgstr "是数字" + +#: core/filters.py:56 +msgid "Include sub-categories" +msgstr "包括子类别" + +#: core/filters.py:245 +msgid "Search (ID, product name or part number)" +msgstr "搜索(ID、产品名称或零件编号)" + +#: core/filters.py:248 +msgid "Bought after (inclusive)" +msgstr "之后购买(含)" + +#: core/filters.py:249 +msgid "Bought before (inclusive)" +msgstr "之前购买(含)" + +#: core/filters.py:252 core/filters.py:295 +msgid "User email" +msgstr "用户电子邮件" + +#: core/filters.py:253 core/filters.py:296 core/filters.py:359 +msgid "User UUID" +msgstr "用户 UUID" + +#: core/filters.py:254 +msgid "Status" +msgstr "现状" + +#: core/filters.py:255 +msgid "Human Readable ID" +msgstr "人可读 ID" + +#: core/filters.py:310 +msgid "Parent" +msgstr "家长" + +#: core/filters.py:358 +msgid "Product UUID" +msgstr "产品 UUID" + #: core/graphene/mutations.py:38 msgid "key to look for in or set into the cache" msgstr "在缓存中查找或设置的关键字" @@ -761,7 +853,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "请提供 order_uuid 或 order_hr_id(互斥)!" #: core/graphene/mutations.py:225 core/graphene/mutations.py:441 -#: core/graphene/mutations.py:475 core/viewsets.py:348 +#: core/graphene/mutations.py:475 core/viewsets.py:345 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "order.buy() 方法中的类型有误:{type(instance)!s}" @@ -813,7 +905,7 @@ msgstr "请以字符串形式发送属性,格式如 attr1=value1,attr2=value2" msgid "original address string provided by the user" msgstr "用户提供的原始地址字符串" -#: core/graphene/mutations.py:572 core/viewsets.py:238 core/viewsets.py:351 +#: core/graphene/mutations.py:572 core/viewsets.py:240 core/viewsets.py:348 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} 不存在:{uuid}不存在" @@ -827,7 +919,7 @@ msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - 工作起来得心应手" #: core/graphene/object_types.py:43 core/graphene/object_types.py:245 -#: core/graphene/object_types.py:286 core/models.py:126 core/models.py:489 +#: core/graphene/object_types.py:286 core/models.py:126 core/models.py:495 msgid "attributes" msgstr "属性" @@ -840,11 +932,11 @@ msgid "groups of attributes" msgstr "属性组" #: core/graphene/object_types.py:76 core/graphene/object_types.py:104 -#: core/graphene/object_types.py:132 core/models.py:90 core/models.py:220 +#: core/graphene/object_types.py:132 core/models.py:90 core/models.py:226 msgid "categories" msgstr "类别" -#: core/graphene/object_types.py:83 core/models.py:267 +#: core/graphene/object_types.py:83 core/models.py:273 msgid "brands" msgstr "品牌" @@ -866,7 +958,7 @@ msgid "" "minimum and maximum prices for products in this category, if available." msgstr "该类别产品的最低和最高价格(如有)。" -#: core/graphene/object_types.py:202 core/models.py:404 +#: core/graphene/object_types.py:202 core/models.py:410 msgid "vendors" msgstr "供应商" @@ -891,7 +983,7 @@ msgid "represents feedback from a user." msgstr "代表用户的反馈意见。" #: core/graphene/object_types.py:246 core/graphene/object_types.py:287 -#: core/models.py:483 +#: core/models.py:489 msgid "notifications" msgstr "通知" @@ -903,7 +995,7 @@ msgstr "此订单产品的下载网址(如适用" msgid "a list of order products in this order" msgstr "该订单中的订单产品列表" -#: core/graphene/object_types.py:278 core/models.py:453 +#: core/graphene/object_types.py:278 core/models.py:459 msgid "billing address" msgstr "账单地址" @@ -925,7 +1017,7 @@ msgstr "订单中产品的总数量" msgid "are all products in the order digital" msgstr "订单中的所有产品都是数字产品吗?" -#: core/graphene/object_types.py:305 core/models.py:517 +#: core/graphene/object_types.py:305 core/models.py:523 msgid "orders" msgstr "订单" @@ -937,15 +1029,15 @@ msgstr "图片 URL" msgid "product's images" msgstr "产品图片" -#: core/graphene/object_types.py:335 core/models.py:219 core/models.py:277 +#: core/graphene/object_types.py:335 core/models.py:225 core/models.py:283 msgid "category" msgstr "类别" -#: core/graphene/object_types.py:337 core/models.py:440 +#: core/graphene/object_types.py:337 core/models.py:446 msgid "feedbacks" msgstr "反馈意见" -#: core/graphene/object_types.py:338 core/models.py:266 core/models.py:285 +#: core/graphene/object_types.py:338 core/models.py:272 core/models.py:291 msgid "brand" msgstr "品牌" @@ -965,7 +1057,7 @@ msgstr "数量" msgid "number of feedbacks" msgstr "反馈数量" -#: core/graphene/object_types.py:360 core/models.py:329 +#: core/graphene/object_types.py:360 core/models.py:335 msgid "products" msgstr "产品" @@ -977,15 +1069,15 @@ msgstr "促销代码" msgid "products on sale" msgstr "销售产品" -#: core/graphene/object_types.py:425 core/models.py:1121 +#: core/graphene/object_types.py:425 core/models.py:1153 msgid "promotions" msgstr "促销活动" -#: core/graphene/object_types.py:429 core/models.py:403 +#: core/graphene/object_types.py:429 core/models.py:409 msgid "vendor" msgstr "供应商" -#: core/graphene/object_types.py:430 core/models.py:328 +#: core/graphene/object_types.py:430 core/models.py:334 #: core/templates/digital_order_created_email.html:107 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:93 @@ -993,11 +1085,11 @@ msgstr "供应商" msgid "product" msgstr "产品" -#: core/graphene/object_types.py:441 core/models.py:1191 +#: core/graphene/object_types.py:441 core/models.py:1223 msgid "wishlisted products" msgstr "心愿单上的产品" -#: core/graphene/object_types.py:447 core/models.py:1208 +#: core/graphene/object_types.py:447 core/models.py:1240 msgid "wishlists" msgstr "愿望清单" @@ -1005,7 +1097,7 @@ msgstr "愿望清单" msgid "tagged products" msgstr "标签产品" -#: core/graphene/object_types.py:458 core/models.py:291 core/models.py:952 +#: core/graphene/object_types.py:458 core/models.py:297 core/models.py:959 msgid "product tags" msgstr "产品标签" @@ -1151,8 +1243,8 @@ msgstr "该值的属性" msgid "the specific product associated with this attribute's value" msgstr "与该属性值相关的特定产品" -#: core/models.py:145 core/models.py:851 core/models.py:978 -#: core/models.py:1147 +#: core/models.py:145 core/models.py:858 core/models.py:1010 +#: core/models.py:1179 msgid "associated product" msgstr "相关产品" @@ -1196,655 +1288,667 @@ msgstr "为该类别添加详细说明" msgid "category description" msgstr "类别说明" -#: core/models.py:229 +#: core/models.py:212 +msgid "tags that help describe or group this category" +msgstr "有助于描述或归类该类别的标签" + +#: core/models.py:213 core/models.py:984 +msgid "category tags" +msgstr "类别标签" + +#: core/models.py:235 msgid "name of this brand" msgstr "品牌名称" -#: core/models.py:230 +#: core/models.py:236 msgid "brand name" msgstr "品牌名称" -#: core/models.py:237 +#: core/models.py:243 msgid "upload a logo representing this brand" msgstr "上传代表该品牌的徽标" -#: core/models.py:239 +#: core/models.py:245 msgid "brand small image" msgstr "品牌小形象" -#: core/models.py:245 +#: core/models.py:251 msgid "upload a big logo representing this brand" msgstr "上传代表该品牌的大徽标" -#: core/models.py:247 +#: core/models.py:253 msgid "brand big image" msgstr "品牌大形象" -#: core/models.py:252 +#: core/models.py:258 msgid "add a detailed description of the brand" msgstr "添加品牌的详细描述" -#: core/models.py:253 +#: core/models.py:259 msgid "brand description" msgstr "品牌描述" -#: core/models.py:258 +#: core/models.py:264 msgid "optional categories that this brand is associated with" msgstr "与该品牌相关的可选类别" -#: core/models.py:259 +#: core/models.py:265 msgid "associated categories" msgstr "类别" -#: core/models.py:276 +#: core/models.py:282 msgid "category this product belongs to" msgstr "该产品所属类别" -#: core/models.py:284 +#: core/models.py:290 msgid "optionally associate this product with a brand" msgstr "可选择将该产品与某个品牌联系起来" -#: core/models.py:290 +#: core/models.py:296 msgid "tags that help describe or group this product" msgstr "有助于描述或归类该产品的标签" -#: core/models.py:295 +#: core/models.py:301 msgid "indicates whether this product is digitally delivered" msgstr "表示该产品是否以数字方式交付" -#: core/models.py:296 +#: core/models.py:302 msgid "is product digital" msgstr "产品是否数字化" -#: core/models.py:302 +#: core/models.py:308 msgid "provide a clear identifying name for the product" msgstr "为产品提供一个明确的标识名称" -#: core/models.py:303 +#: core/models.py:309 msgid "product name" msgstr "产品名称" -#: core/models.py:308 core/models.py:1109 +#: core/models.py:314 core/models.py:1141 msgid "add a detailed description of the product" msgstr "添加产品的详细描述" -#: core/models.py:309 +#: core/models.py:315 msgid "product description" msgstr "产品说明" -#: core/models.py:316 +#: core/models.py:322 msgid "part number for this product" msgstr "该产品的零件编号" -#: core/models.py:317 +#: core/models.py:323 msgid "part number" msgstr "部件编号" -#: core/models.py:381 +#: core/models.py:387 msgid "stores credentials and endpoints required for vendor communication" msgstr "存储供应商应用程序接口通信所需的凭证和端点" -#: core/models.py:382 +#: core/models.py:388 msgid "authentication info" msgstr "认证信息" -#: core/models.py:387 +#: core/models.py:393 msgid "define the markup for products retrieved from this vendor" msgstr "定义从该供应商获取的产品的标记" -#: core/models.py:388 +#: core/models.py:394 msgid "vendor markup percentage" msgstr "供应商加价百分比" -#: core/models.py:392 +#: core/models.py:398 msgid "name of this vendor" msgstr "供应商名称" -#: core/models.py:393 +#: core/models.py:399 msgid "vendor name" msgstr "供应商名称" -#: core/models.py:416 +#: core/models.py:422 msgid "user-provided comments about their experience with the product" msgstr "用户提供的产品使用体验评论" -#: core/models.py:417 +#: core/models.py:423 msgid "feedback comments" msgstr "反馈意见" -#: core/models.py:424 +#: core/models.py:430 msgid "" "references the specific product in an order that this feedback is about" msgstr "引用该反馈意见涉及的订单中的具体产品" -#: core/models.py:425 +#: core/models.py:431 msgid "related order product" msgstr "相关订购产品" -#: core/models.py:430 +#: core/models.py:436 msgid "user-assigned rating for the product" msgstr "用户对产品的评分" -#: core/models.py:431 +#: core/models.py:437 msgid "product rating" msgstr "产品评级" -#: core/models.py:439 +#: core/models.py:445 msgid "feedback" msgstr "反馈意见" -#: core/models.py:452 +#: core/models.py:458 msgid "the billing address used for this order" msgstr "该订单使用的账单地址" -#: core/models.py:460 +#: core/models.py:466 msgid "optional promo code applied to this order" msgstr "此订单可选择使用促销代码" -#: core/models.py:461 +#: core/models.py:467 msgid "applied promo code" msgstr "应用促销代码" -#: core/models.py:469 +#: core/models.py:475 msgid "the shipping address used for this order" msgstr "该订单使用的送货地址" -#: core/models.py:470 +#: core/models.py:476 msgid "shipping address" msgstr "送货地址" -#: core/models.py:476 +#: core/models.py:482 msgid "current status of the order in its lifecycle" msgstr "订单在其生命周期中的当前状态" -#: core/models.py:477 +#: core/models.py:483 msgid "order status" msgstr "订单状态" -#: core/models.py:482 core/models.py:828 +#: core/models.py:488 core/models.py:835 msgid "json structure of notifications to display to users" msgstr "向用户显示的通知的 JSON 结构,在管理用户界面中使用表格视图" -#: core/models.py:488 +#: core/models.py:494 msgid "json representation of order attributes for this order" msgstr "该订单属性的 JSON 表示形式" -#: core/models.py:494 +#: core/models.py:500 msgid "the user who placed the order" msgstr "下订单的用户" -#: core/models.py:495 +#: core/models.py:501 msgid "user" msgstr "用户" -#: core/models.py:501 +#: core/models.py:507 msgid "the timestamp when the order was finalized" msgstr "订单确定的时间戳" -#: core/models.py:502 +#: core/models.py:508 msgid "buy time" msgstr "购买时间" -#: core/models.py:509 +#: core/models.py:515 msgid "a human-readable identifier for the order" msgstr "订单的人工可读标识符" -#: core/models.py:510 +#: core/models.py:516 msgid "human readable id" msgstr "人类可读 ID" -#: core/models.py:516 +#: core/models.py:522 msgid "order" msgstr "订购" -#: core/models.py:531 +#: core/models.py:537 msgid "a user must have only one pending order at a time" msgstr "用户每次只能有一个挂单!" -#: core/models.py:559 +#: core/models.py:566 msgid "you cannot add products to an order that is not a pending one" msgstr "您不能向非待处理订单添加产品" -#: core/models.py:564 +#: core/models.py:571 msgid "you cannot add inactive products to order" msgstr "您不能在订单中添加非活动产品" -#: core/models.py:581 +#: core/models.py:588 msgid "you cannot add more products than available in stock" msgstr "添加的产品数量不能超过现有库存" -#: core/models.py:590 core/models.py:610 core/models.py:634 -#: core/models.py:1218 core/models.py:1230 +#: core/models.py:597 core/models.py:617 core/models.py:641 +#: core/models.py:1250 core/models.py:1262 #, python-brace-format msgid "{name} does not exist: {product_uuid}" msgstr "{name} 不存在:{product_uuid} 不存在" -#: core/models.py:594 core/models.py:618 core/models.py:626 +#: core/models.py:601 core/models.py:625 core/models.py:633 msgid "you cannot remove products from an order that is not a pending one" msgstr "您不能从非待处理订单中删除产品" -#: core/models.py:614 +#: core/models.py:621 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "查询 <{query}> 时 {name} 不存在" -#: core/models.py:645 +#: core/models.py:652 msgid "promocode does not exist" msgstr "促销代码不存在" -#: core/models.py:654 +#: core/models.py:661 msgid "you can only buy physical products with shipping address specified" msgstr "您只能购买指定送货地址的实物产品!" -#: core/models.py:673 +#: core/models.py:680 msgid "address does not exist" msgstr "地址不存在" -#: core/models.py:684 core/models.py:727 +#: core/models.py:691 core/models.py:734 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "您现在无法购买,请稍后再试。" -#: core/models.py:687 +#: core/models.py:694 msgid "invalid force value" msgstr "力值无效" -#: core/models.py:692 core/models.py:730 +#: core/models.py:699 core/models.py:737 msgid "you cannot purchase an empty order!" msgstr "您不能购买空单!" -#: core/models.py:707 +#: core/models.py:714 msgid "insufficient funds to complete the order" msgstr "资金不足,无法完成订单" -#: core/models.py:739 +#: core/models.py:746 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "未经注册不能购买,请提供以下信息:客户姓名、客户电子邮件、客户电话号码" -#: core/models.py:748 +#: core/models.py:755 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "付款方式无效:来自 {available_payment_methods} 的 {payment_method} !" -#: core/models.py:816 +#: core/models.py:823 msgid "the price paid by the customer for this product at purchase time" msgstr "客户购买该产品时支付的价格" -#: core/models.py:817 +#: core/models.py:824 msgid "purchase price at order time" msgstr "订购时的购买价格" -#: core/models.py:822 +#: core/models.py:829 msgid "internal comments for admins about this ordered product" msgstr "管理员对该订购产品的内部评论" -#: core/models.py:823 +#: core/models.py:830 msgid "internal comments" msgstr "内部意见" -#: core/models.py:829 +#: core/models.py:836 msgid "user notifications" msgstr "用户通知" -#: core/models.py:834 +#: core/models.py:841 msgid "json representation of this item's attributes" msgstr "该项属性的 JSON 表示形式" -#: core/models.py:835 +#: core/models.py:842 msgid "ordered product attributes" msgstr "有序的产品属性" -#: core/models.py:840 +#: core/models.py:847 msgid "reference to the parent order that contains this product" msgstr "对包含该产品的父订单的引用" -#: core/models.py:841 +#: core/models.py:848 msgid "parent order" msgstr "父顺序" -#: core/models.py:850 +#: core/models.py:857 msgid "the specific product associated with this order line" msgstr "与该订单项目相关的具体产品" -#: core/models.py:857 +#: core/models.py:864 msgid "quantity of this specific product in the order" msgstr "订单中该特定产品的数量" -#: core/models.py:858 +#: core/models.py:865 msgid "product quantity" msgstr "产品数量" -#: core/models.py:865 +#: core/models.py:872 msgid "current status of this product in the order" msgstr "订单中该产品的当前状态" -#: core/models.py:866 +#: core/models.py:873 msgid "product line status" msgstr "产品系列状态" -#: core/models.py:918 +#: core/models.py:925 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "为反馈指定了错误的操作:{action}" -#: core/models.py:926 +#: core/models.py:933 msgid "you cannot feedback an order which is not received" msgstr "您不能反馈未收到的订单" -#: core/models.py:937 +#: core/models.py:944 core/models.py:969 msgid "internal tag identifier for the product tag" msgstr "产品标签的内部标签标识符" -#: core/models.py:938 +#: core/models.py:945 core/models.py:970 msgid "tag name" msgstr "标签名称" -#: core/models.py:942 +#: core/models.py:949 core/models.py:974 msgid "user-friendly name for the product tag" msgstr "方便用户使用的产品标签名称" -#: core/models.py:943 +#: core/models.py:950 core/models.py:975 msgid "tag display name" msgstr "标签显示名称" -#: core/models.py:951 +#: core/models.py:958 msgid "product tag" msgstr "产品标签" -#: core/models.py:960 +#: core/models.py:983 +msgid "category tag" +msgstr "类别标签" + +#: core/models.py:992 msgid "provide alternative text for the image for accessibility" msgstr "为图像提供替代文字,以便于访问" -#: core/models.py:961 +#: core/models.py:993 msgid "image alt text" msgstr "图片 alt 文本" -#: core/models.py:964 +#: core/models.py:996 msgid "upload the image file for this product" msgstr "上传该产品的图片文件" -#: core/models.py:965 core/models.py:990 +#: core/models.py:997 core/models.py:1022 msgid "product image" msgstr "产品图片" -#: core/models.py:971 +#: core/models.py:1003 msgid "determines the order in which images are displayed" msgstr "确定图像的显示顺序" -#: core/models.py:972 +#: core/models.py:1004 msgid "display priority" msgstr "显示优先级" -#: core/models.py:977 +#: core/models.py:1009 msgid "the product that this image represents" msgstr "该图片所代表的产品" -#: core/models.py:991 +#: core/models.py:1023 msgid "product images" msgstr "产品图片" -#: core/models.py:1001 +#: core/models.py:1033 msgid "unique code used by a user to redeem a discount" msgstr "用户用于兑换折扣的唯一代码" -#: core/models.py:1002 +#: core/models.py:1034 msgid "promo code identifier" msgstr "促销代码标识符" -#: core/models.py:1009 +#: core/models.py:1041 msgid "fixed discount amount applied if percent is not used" msgstr "如果不使用百分比,则使用固定折扣额" -#: core/models.py:1010 +#: core/models.py:1042 msgid "fixed discount amount" msgstr "固定折扣额" -#: core/models.py:1016 +#: core/models.py:1048 msgid "percentage discount applied if fixed amount is not used" msgstr "未使用固定金额时适用的折扣百分比" -#: core/models.py:1017 +#: core/models.py:1049 msgid "percentage discount" msgstr "折扣百分比" -#: core/models.py:1022 +#: core/models.py:1054 msgid "timestamp when the promocode expires" msgstr "促销代码过期的时间戳" -#: core/models.py:1023 +#: core/models.py:1055 msgid "end validity time" msgstr "结束有效时间" -#: core/models.py:1028 +#: core/models.py:1060 msgid "timestamp from which this promocode is valid" msgstr "该促销代码有效的时间戳" -#: core/models.py:1029 +#: core/models.py:1061 msgid "start validity time" msgstr "开始有效时间" -#: core/models.py:1034 +#: core/models.py:1066 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "使用促销代码的时间戳,如果尚未使用,则留空" -#: core/models.py:1035 +#: core/models.py:1067 msgid "usage timestamp" msgstr "使用时间戳" -#: core/models.py:1040 +#: core/models.py:1072 msgid "user assigned to this promocode if applicable" msgstr "分配给此促销代码的用户(如适用" -#: core/models.py:1041 +#: core/models.py:1073 msgid "assigned user" msgstr "指定用户" -#: core/models.py:1048 +#: core/models.py:1080 msgid "promo code" msgstr "促销代码" -#: core/models.py:1049 +#: core/models.py:1081 msgid "promo codes" msgstr "促销代码" -#: core/models.py:1056 +#: core/models.py:1088 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "只能定义一种折扣类型(金额或百分比),而不能同时定义两种类型或两者都不定义。" -#: core/models.py:1071 +#: core/models.py:1103 msgid "promocode already used" msgstr "促销代码已被使用" -#: core/models.py:1085 +#: core/models.py:1117 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "促销代码 {self.uuid} 的折扣类型无效" -#: core/models.py:1097 +#: core/models.py:1129 msgid "percentage discount for the selected products" msgstr "所选产品的折扣百分比" -#: core/models.py:1098 +#: core/models.py:1130 msgid "discount percentage" msgstr "折扣百分比" -#: core/models.py:1103 +#: core/models.py:1135 msgid "provide a unique name for this promotion" msgstr "为该促销活动提供一个独特的名称" -#: core/models.py:1104 +#: core/models.py:1136 msgid "promotion name" msgstr "推广名称" -#: core/models.py:1110 +#: core/models.py:1142 msgid "promotion description" msgstr "促销说明" -#: core/models.py:1115 +#: core/models.py:1147 msgid "select which products are included in this promotion" msgstr "选择促销活动包括哪些产品" -#: core/models.py:1116 +#: core/models.py:1148 msgid "included products" msgstr "包括产品" -#: core/models.py:1120 +#: core/models.py:1152 msgid "promotion" msgstr "促销活动" -#: core/models.py:1135 +#: core/models.py:1167 msgid "the vendor supplying this product stock" msgstr "提供该产品库存的供应商" -#: core/models.py:1136 +#: core/models.py:1168 msgid "associated vendor" msgstr "相关供应商" -#: core/models.py:1140 +#: core/models.py:1172 msgid "final price to the customer after markups" msgstr "加价后给客户的最终价格" -#: core/models.py:1141 +#: core/models.py:1173 msgid "selling price" msgstr "销售价格" -#: core/models.py:1146 +#: core/models.py:1178 msgid "the product associated with this stock entry" msgstr "与该库存条目相关的产品" -#: core/models.py:1154 +#: core/models.py:1186 msgid "the price paid to the vendor for this product" msgstr "为该产品支付给供应商的价格" -#: core/models.py:1155 +#: core/models.py:1187 msgid "vendor purchase price" msgstr "供应商购买价格" -#: core/models.py:1159 +#: core/models.py:1191 msgid "available quantity of the product in stock" msgstr "产品的可用库存量" -#: core/models.py:1160 +#: core/models.py:1192 msgid "quantity in stock" msgstr "库存数量" -#: core/models.py:1164 +#: core/models.py:1196 msgid "vendor-assigned SKU for identifying the product" msgstr "供应商指定的 SKU,用于识别产品" -#: core/models.py:1165 +#: core/models.py:1197 msgid "vendor sku" msgstr "供应商 SKU" -#: core/models.py:1171 +#: core/models.py:1203 msgid "digital file associated with this stock if applicable" msgstr "与该库存相关的数字文件(如适用" -#: core/models.py:1172 +#: core/models.py:1204 msgid "digital file" msgstr "数字文件" -#: core/models.py:1181 +#: core/models.py:1213 msgid "stock entries" msgstr "库存条目" -#: core/models.py:1190 +#: core/models.py:1222 msgid "products that the user has marked as wanted" msgstr "用户标记为想要的产品" -#: core/models.py:1198 +#: core/models.py:1230 msgid "user who owns this wishlist" msgstr "拥有此愿望清单的用户" -#: core/models.py:1199 +#: core/models.py:1231 msgid "wishlist owner" msgstr "心愿单所有者" -#: core/models.py:1207 +#: core/models.py:1239 msgid "wishlist" msgstr "愿望清单" -#: core/models.py:1252 +#: core/models.py:1284 msgid "download" msgstr "下载" -#: core/models.py:1253 +#: core/models.py:1285 msgid "downloads" msgstr "下载" -#: core/models.py:1261 +#: core/models.py:1293 msgid "you can not download a digital asset for a non-finished order" msgstr "您无法下载未完成订单的数字资产" -#: core/models.py:1273 +#: core/models.py:1305 msgid "documentary" msgstr "纪录片" -#: core/models.py:1274 +#: core/models.py:1306 msgid "documentaries" msgstr "纪录片" -#: core/models.py:1284 +#: core/models.py:1316 msgid "unresolved" msgstr "未解决" -#: core/models.py:1293 +#: core/models.py:1325 msgid "address line for the customer" msgstr "客户地址栏" -#: core/models.py:1294 +#: core/models.py:1326 msgid "address line" msgstr "地址栏" -#: core/models.py:1296 +#: core/models.py:1328 msgid "street" msgstr "街道" -#: core/models.py:1297 +#: core/models.py:1329 msgid "district" msgstr "地区" -#: core/models.py:1298 +#: core/models.py:1330 msgid "city" msgstr "城市" -#: core/models.py:1299 +#: core/models.py:1331 msgid "region" msgstr "地区" -#: core/models.py:1300 +#: core/models.py:1332 msgid "postal code" msgstr "邮政编码" -#: core/models.py:1301 +#: core/models.py:1333 msgid "country" msgstr "国家" -#: core/models.py:1304 +#: core/models.py:1336 msgid "geolocation point: (longitude, latitude)" msgstr "地理位置点(经度、纬度)" -#: core/models.py:1307 +#: core/models.py:1339 msgid "full JSON response from geocoder for this address" msgstr "地理编码器对此地址的完整 JSON 响应" -#: core/models.py:1309 +#: core/models.py:1341 msgid "stored JSON response from the geocoding service" msgstr "存储的来自地理编码服务的 JSON 响应" -#: core/models.py:1316 +#: core/models.py:1348 msgid "address" msgstr "地址" -#: core/models.py:1317 +#: core/models.py:1349 msgid "addresses" msgstr "地址" -#: core/serializers/utility.py:76 +#: core/serializers/utility.py:77 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "您必须提供评论、评级和订单产品 uuid 才能添加反馈。" @@ -2070,7 +2174,7 @@ msgstr "您只能下载一次数字资产" msgid "favicon not found" msgstr "未找到 favicon" -#: core/viewsets.py:680 +#: core/viewsets.py:677 #, python-brace-format msgid "Geocoding error: {e}" msgstr "地理编码错误:{e}" diff --git a/core/management/commands/purify_translated.py b/core/management/commands/check_translated.py similarity index 100% rename from core/management/commands/purify_translated.py rename to core/management/commands/check_translated.py diff --git a/core/management/commands/fix_fuzzy.py b/core/management/commands/fix_fuzzy.py index 86bbfb1e..ce047e32 100644 --- a/core/management/commands/fix_fuzzy.py +++ b/core/management/commands/fix_fuzzy.py @@ -12,28 +12,29 @@ class Command(BaseCommand): def add_arguments(self, parser): parser.add_argument( - '-b', '--base-dir', + "-b", + "--base-dir", default=settings.BASE_DIR, - help="Root directory to start searching for .po files (default: settings.BASE_DIR)." + help="Root directory to start searching for .po files (default: settings.BASE_DIR).", ) def handle(self, *args, **options): - base_dir = options['base_dir'] - for root, dirs, files in os.walk(base_dir): + base_dir = options["base_dir"] + for root, _dirs, files in os.walk(base_dir): for fname in files: - if not fname.endswith('.po'): + if not fname.endswith(".po"): continue path = os.path.join(root, fname) self.stdout.write(f"→ Processing {path}") self._clean_po_file(path) def _clean_po_file(self, filepath): - with open(filepath, 'r', encoding='utf-8') as f: + with open(filepath, encoding="utf-8") as f: lines = f.readlines() entries, curr = [], [] for line in lines: - if line.strip() == '': + if line.strip() == "": if curr: entries.append(curr) curr = [] @@ -48,33 +49,30 @@ class Command(BaseCommand): for ent in entries: if ent and ent[0].startswith('msgid ""'): new_lines.extend(ent) - new_lines.append('\n') + new_lines.append("\n") continue - fuzzy_idx = next( - (i for i, l in enumerate(ent) if l.startswith('#,') and 'fuzzy' in l), - None - ) + fuzzy_idx = next((i for i, line in enumerate(ent) if line.startswith("#,") and "fuzzy" in line), None) if fuzzy_idx is not None: flag_line = ent[fuzzy_idx] - remaining = [f.strip() for f in flag_line[2:].split(',') if f.strip() != 'fuzzy'] + remaining = [f.strip() for f in flag_line[2:].split(",") if f.strip() != "fuzzy"] if remaining: - ent[fuzzy_idx] = '#, ' + ', '.join(remaining) + '\n' + ent[fuzzy_idx] = "#, " + ", ".join(remaining) + "\n" else: del ent[fuzzy_idx] - ent = [l for l in ent if not l.startswith('#| msgid')] + ent = [line for line in ent if not line.startswith("#| msgid")] - ent = ['msgstr ""\n' if l.startswith('msgstr') else l for l in ent] + ent = ['msgstr ""\n' if line.startswith("msgstr") else line for line in ent] changed = True new_lines.extend(ent) - new_lines.append('\n') + new_lines.append("\n") if changed: - with open(filepath, 'w', encoding='utf-8') as f: + with open(filepath, "w", encoding="utf-8") as f: f.writelines(new_lines) self.stdout.write(self.style.SUCCESS(f" → Updated {filepath}")) else: - self.stdout.write(f" (no fuzzy entries found)") + self.stdout.write(" (no fuzzy entries found)") diff --git a/core/managers.py b/core/managers.py index 2eab6e71..e329565b 100644 --- a/core/managers.py +++ b/core/managers.py @@ -10,17 +10,9 @@ logger = logging.getLogger("django.request") class AddressManager(models.Manager): def create(self, raw_data: str, **kwargs): - """ - Create an Address instance by geocoding the provided raw address string. - - Args: - raw_data (str): The raw address input from the user (e.g., '36 Mornington Rd Loughton England'). - **kwargs: Additional fields to pass to the Address model (e.g., user). - """ if not raw_data: raise ValueError("'raw_data' (address string) must be provided.") - # Query Nominatim params = { "format": "json", "addressdetails": 1, @@ -33,7 +25,6 @@ class AddressManager(models.Manager): raise ValueError(f"No geocoding result for address: {raw_data}") data = results[0] - # Parse address components addr = data.get("address", {}) street = f"{addr.get('road', '') or addr.get('pedestrian', '')}, {addr.get('house_number', '')}" district = addr.get("city_district") or addr.get("suburb") or "" @@ -42,7 +33,6 @@ class AddressManager(models.Manager): postal_code = addr.get("postcode") or "" country = addr.get("country") or "" - # Parse location try: lat = float(data.get("lat")) lon = float(data.get("lon")) @@ -51,16 +41,15 @@ class AddressManager(models.Manager): location = None try: - address_line_1 = kwargs.pop('address_line_1') - except KeyError: + address_line_1 = kwargs.pop("address_line_1") + except KeyError as e: raise ValueError("Missing required field 'address_line_1'") from e try: - address_line_2 = kwargs.pop('address_line_2') + address_line_2 = kwargs.pop("address_line_2") except KeyError: address_line_2 = "" - # Create the model instance, storing both the input string and full API response return super().get_or_create( raw_data=raw_data, address_line=f"{address_line_1}, {address_line_2}", @@ -70,6 +59,6 @@ class AddressManager(models.Manager): region=region, postal_code=postal_code, country=country, - user=kwargs.pop('user'), + user=kwargs.pop("user"), defaults={"api_response": data, "location": location}, )[0] diff --git a/core/models.py b/core/models.py index ad9a6d63..eefae210 100644 --- a/core/models.py +++ b/core/models.py @@ -206,6 +206,12 @@ class Category(ExportModelOperationsMixin("category"), NiceModel, MPTTModel): editable=False, null=True, ) + tags = ManyToManyField( + "core.CategoryTag", + blank=True, + help_text=_("tags that help describe or group this category"), + verbose_name=_("category tags"), + ) def __str__(self): return self.name @@ -550,8 +556,9 @@ class Order(ExportModelOperationsMixin("order"), NiceModel): def total_quantity(self) -> int: return sum([op.quantity for op in self.order_products.all()]) - def add_product(self, product_uuid: str | None = None, attributes: Optional[list] = None, - update_quantity: bool = True): + def add_product( + self, product_uuid: str | None = None, attributes: Optional[list] = None, update_quantity: bool = True + ): if attributes is None: attributes = [] @@ -952,6 +959,31 @@ class ProductTag(ExportModelOperationsMixin("product_tag"), NiceModel): verbose_name_plural = _("product tags") +class CategoryTag(ExportModelOperationsMixin("category_tag"), NiceModel): + is_publicly_visible = True + + tag_name = CharField( + blank=False, + null=False, + max_length=255, + help_text=_("internal tag identifier for the product tag"), + verbose_name=_("tag name"), + ) + name = CharField( + max_length=255, + help_text=_("user-friendly name for the product tag"), + verbose_name=_("tag display name"), + unique=True, + ) + + def __str__(self): + return self.tag_name + + class Meta: + verbose_name = _("category tag") + verbose_name_plural = _("category tags") + + class ProductImage(ExportModelOperationsMixin("product_image"), NiceModel): is_publicly_visible = True diff --git a/core/permissions.py b/core/permissions.py index 2bb31dc8..3553fdf4 100644 --- a/core/permissions.py +++ b/core/permissions.py @@ -49,7 +49,7 @@ class EvibesPermission(permissions.BasePermission): if action == "create" and view.additional.get("create") == "ALLOW": return True - if action == 'retrieve' and view.additional.get("retrieve") == "ALLOW": + if action == "retrieve" and view.additional.get("retrieve") == "ALLOW": return True if action in self.USER_SCOPED_ACTIONS: @@ -75,8 +75,12 @@ class EvibesPermission(permissions.BasePermission): return bool(perm_prefix and request.user.has_perm(f"{app_label}.{perm_prefix}_{model_name}")) perm_prefix = self.ACTION_PERM_MAP.get(view.action) - return bool(perm_prefix and request.user.has_perm( - f"{view.queryset.model._meta.app_label}.{perm_prefix}_{view.queryset.model._meta.model_name}")) + return bool( + perm_prefix + and request.user.has_perm( + f"{view.queryset.model._meta.app_label}.{perm_prefix}_{view.queryset.model._meta.model_name}" + ) + ) def has_queryset_permission(self, request, view, queryset): model = view.queryset.model diff --git a/core/serializers/utility.py b/core/serializers/utility.py index d845d993..f36b0603 100644 --- a/core/serializers/utility.py +++ b/core/serializers/utility.py @@ -1,3 +1,4 @@ +from django.utils.translation import gettext_lazy as _ from rest_framework.exceptions import ValidationError from rest_framework.fields import CharField, DictField, FloatField, IntegerField from rest_framework.serializers import ModelSerializer, Serializer diff --git a/core/translation.py b/core/translation.py index 0073ec87..67a6743f 100644 --- a/core/translation.py +++ b/core/translation.py @@ -1,7 +1,17 @@ from modeltranslation.decorators import register from modeltranslation.translator import TranslationOptions -from core.models import Attribute, AttributeGroup, AttributeValue, Brand, Category, Product, ProductTag, Promotion +from core.models import ( + Attribute, + AttributeGroup, + AttributeValue, + Brand, + Category, + CategoryTag, + Product, + ProductTag, + Promotion, +) @register(AttributeGroup) @@ -39,6 +49,11 @@ class ProductTagOptions(TranslationOptions): fields = ("name",) +@register(CategoryTag) +class CategoryTagOptions(TranslationOptions): + fields = ("name",) + + @register(Promotion) class PromotionOptions(TranslationOptions): fields = ("name", "description") diff --git a/core/viewsets.py b/core/viewsets.py index 2ae85311..44f93d2a 100644 --- a/core/viewsets.py +++ b/core/viewsets.py @@ -229,10 +229,12 @@ class ProductViewSet(EvibesViewSet): lookup_val = kwargs.get(self.lookup_field) try: product = Product.objects.get(uuid=lookup_val) - feedbacks = Feedback.objects.filter(order_product__product=product) if request.user.has_perm( - "core.view_feedback") else Feedback.objects.filter(order_product__product=product, is_active=True) - return Response( - data=FeedbackDetailSerializer(feedbacks, many=True).data) + feedbacks = ( + Feedback.objects.filter(order_product__product=product) + if request.user.has_perm("core.view_feedback") + else Feedback.objects.filter(order_product__product=product, is_active=True) + ) + return Response(data=FeedbackDetailSerializer(feedbacks, many=True).data) except Product.DoesNotExist: name = "Product" return Response(status=status.HTTP_404_NOT_FOUND, data={"detail": _(f"{name} does not exist: {uuid}")}) @@ -267,8 +269,8 @@ class FeedbackViewSet(EvibesViewSet): @extend_schema_view(**ORDER_SCHEMA) class OrderViewSet(EvibesViewSet): - lookup_field = 'lookup_value' - lookup_url_kwarg = 'lookup_value' + lookup_field = "lookup_value" + lookup_url_kwarg = "lookup_value" queryset = Order.objects.prefetch_related("order_products").all() filter_backends = [DjangoFilterBackend] filterset_class = OrderFilter @@ -279,9 +281,7 @@ class OrderViewSet(EvibesViewSet): "add_order_product": AddOrderProductSerializer, "remove_order_product": RemoveOrderProductSerializer, } - additional = { - "retrieve": "ALLOW" - } + additional = {"retrieve": "ALLOW"} def get_serializer_class(self): return self.action_serializer_classes.get(self.action, super().get_serializer_class()) @@ -308,10 +308,7 @@ class OrderViewSet(EvibesViewSet): except ValueError: uuid_q = Q() - obj = get_object_or_404( - qs, - uuid_q | Q(human_readable_id=lookup_val) - ) + obj = get_object_or_404(qs, uuid_q | Q(human_readable_id=lookup_val)) self.check_object_permissions(self.request, obj) return obj diff --git a/evibes/api_urls.py b/evibes/api_urls.py index 7d800448..9c5be57c 100644 --- a/evibes/api_urls.py +++ b/evibes/api_urls.py @@ -11,7 +11,7 @@ from core.views import CustomGraphQLView, CustomRedocView, CustomSwaggerView, fa from evibes.settings import SPECTACULAR_PLATFORM_SETTINGS urlpatterns = [ - path('prometheus/', include('django_prometheus.urls')), + path("prometheus/", include("django_prometheus.urls")), path(r"graphql/", csrf_exempt(CustomGraphQLView.as_view(graphiql=True, schema=schema))), path( r"docs/", diff --git a/evibes/b2b_urls.py b/evibes/b2b_urls.py index 9aa49002..8bd89af0 100644 --- a/evibes/b2b_urls.py +++ b/evibes/b2b_urls.py @@ -8,7 +8,7 @@ from evibes.settings import SPECTACULAR_B2B_SETTINGS urlpatterns = [ # path(r'graphql/', csrf_exempt(CustomGraphQLView.as_view(graphiql=True, schema=schema))), - path('prometheus/', include('django_prometheus.urls')), + path("prometheus/", include("django_prometheus.urls")), path( r"docs/", SpectacularAPIView.as_view(urlconf="evibes.b2b_urls", custom_settings=SPECTACULAR_B2B_SETTINGS), diff --git a/evibes/middleware.py b/evibes/middleware.py index f4270f64..75e0a03c 100644 --- a/evibes/middleware.py +++ b/evibes/middleware.py @@ -69,15 +69,17 @@ class BlockInvalidHostMiddleware: self.get_response = get_response def __call__(self, request): - allowed_hosts = ["app:8000", - "worker:8000", - "beat:8000", - "localhost:8000", - "api.localhost:8000", - "b2b.localhost:8000", - "127.0.0.1:8000", - "api.127.0.0.1:8000", - "b2b.127.0.0.1:8000"] + allowed_hosts = [ + "app:8000", + "worker:8000", + "beat:8000", + "localhost:8000", + "api.localhost:8000", + "b2b.localhost:8000", + "127.0.0.1:8000", + "api.127.0.0.1:8000", + "b2b.127.0.0.1:8000", + ] if DEBUG: allowed_hosts += ["*"] diff --git a/evibes/settings/base.py b/evibes/settings/base.py index a0dab491..ae1167a0 100644 --- a/evibes/settings/base.py +++ b/evibes/settings/base.py @@ -2,22 +2,24 @@ import logging from os import getenv from pathlib import Path -EVIBES_VERSION = "2.8.0" +EVIBES_VERSION = "2.8.5" BASE_DIR = Path(__file__).resolve().parent.parent.parent SECRET_KEY = getenv("SECRET_KEY") DEBUG = bool(int(getenv("DEBUG"))) -ALLOWED_HOSTS = ["app:8000", - "worker:8000", - "beat:8000", - "localhost:8000", - "api.localhost:8000", - "b2b.localhost:8000", - "127.0.0.1:8000", - "api.127.0.0.1:8000", - "b2b.127.0.0.1:8000"] +ALLOWED_HOSTS = [ + "app:8000", + "worker:8000", + "beat:8000", + "localhost:8000", + "api.localhost:8000", + "b2b.localhost:8000", + "127.0.0.1:8000", + "api.127.0.0.1:8000", + "b2b.127.0.0.1:8000", +] if DEBUG: ALLOWED_HOSTS += ["*"] @@ -126,7 +128,7 @@ MIDDLEWARE = [ "evibes.middleware.CustomLocaleMiddleware", "django_hosts.middleware.HostsResponseMiddleware", "djangorestframework_camel_case.middleware.CamelCaseMiddleWare", - "django_prometheus.middleware.PrometheusAfterMiddleware" + "django_prometheus.middleware.PrometheusAfterMiddleware", ] TEMPLATES = [ diff --git a/poetry.lock b/poetry.lock index e5414712..4bf28ea4 100644 --- a/poetry.lock +++ b/poetry.lock @@ -4496,13 +4496,13 @@ xmlsec = ["xmlsec (>=0.6.1)"] [[package]] name = "zipp" -version = "3.22.0" +version = "3.23.0" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.9" files = [ - { file = "zipp-3.22.0-py3-none-any.whl", hash = "sha256:fe208f65f2aca48b81f9e6fd8cf7b8b32c26375266b009b413d45306b6148343" }, - { file = "zipp-3.22.0.tar.gz", hash = "sha256:dd2f28c3ce4bc67507bfd3781d21b7bb2be31103b51a4553ad7d90b84e57ace5" }, + { file = "zipp-3.23.0-py3-none-any.whl", hash = "sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e" }, + { file = "zipp-3.23.0.tar.gz", hash = "sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166" }, ] [package.extras] @@ -4510,7 +4510,7 @@ check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] enabler = ["pytest-enabler (>=2.2)"] -test = ["big-O", "importlib_resources", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more_itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] +test = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more_itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] type = ["pytest-mypy"] [extras] diff --git a/pyproject.toml b/pyproject.toml index b21df5c1..e545c5c3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "eVibes" -version = "2.8.0" +version = "2.8.5" description = "eVibes is an open-source eCommerce backend service built with Django. It’s designed for flexibility, making it ideal for various use cases and learning Django skills. The project is easy to customize, allowing for straightforward editing and extension." authors = ["fureunoir "] readme = "README.md" diff --git a/vibes_auth/docs/drf/viewsets.py b/vibes_auth/docs/drf/viewsets.py index d9f6587c..0b74cd97 100644 --- a/vibes_auth/docs/drf/viewsets.py +++ b/vibes_auth/docs/drf/viewsets.py @@ -6,6 +6,7 @@ from core.docs.drf import BASE_ERRORS from vibes_auth.serializers import ( ActivateEmailSerializer, ConfirmPasswordResetSerializer, + MergeRecentlyViewedSerializer, ResetPasswordSerializer, UserSerializer, ) @@ -38,8 +39,7 @@ USER_SCHEMA = { request={ "multipart/form-data": { "type": "object", - "properties": { - "avatar": {"type": "string", "format": "binary"}}, + "properties": {"avatar": {"type": "string", "format": "binary"}}, }, }, responses={ @@ -67,4 +67,12 @@ USER_SCHEMA = { **BASE_ERRORS, }, ), + "merge_recently_viewed": extend_schema( + summary=_("merge client-stored recently viewed products"), + request=MergeRecentlyViewedSerializer, + responses={ + status.HTTP_202_ACCEPTED: UserSerializer, + **BASE_ERRORS, + }, + ), } diff --git a/vibes_auth/locale/ar_AR/LC_MESSAGES/django.mo b/vibes_auth/locale/ar_AR/LC_MESSAGES/django.mo index 8b1beb6b..447662aa 100644 Binary files a/vibes_auth/locale/ar_AR/LC_MESSAGES/django.mo and b/vibes_auth/locale/ar_AR/LC_MESSAGES/django.mo differ diff --git a/vibes_auth/locale/ar_AR/LC_MESSAGES/django.po b/vibes_auth/locale/ar_AR/LC_MESSAGES/django.po index fc189b84..80d0d187 100644 --- a/vibes_auth/locale/ar_AR/LC_MESSAGES/django.po +++ b/vibes_auth/locale/ar_AR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-08 19:42+0100\n" +"POT-Creation-Date: 2025-06-10 03:32+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -74,29 +74,29 @@ msgstr "التحقق من الرمز المميز (التحديث أو الوص msgid "the token is valid" msgstr "الرمز المميز صالح" -#: vibes_auth/docs/drf/viewsets.py:15 +#: vibes_auth/docs/drf/viewsets.py:16 msgid "create a new user" msgstr "إنشاء مستخدم جديد" -#: vibes_auth/docs/drf/viewsets.py:19 +#: vibes_auth/docs/drf/viewsets.py:20 msgid "retrieve a user's details" msgstr "استرداد تفاصيل المستخدم" -#: vibes_auth/docs/drf/viewsets.py:23 +#: vibes_auth/docs/drf/viewsets.py:24 msgid "update a user's details" msgstr "تحديث تفاصيل المستخدم" -#: vibes_auth/docs/drf/viewsets.py:28 +#: vibes_auth/docs/drf/viewsets.py:29 msgid "delete a user" msgstr "حذف مستخدم" -#: vibes_auth/docs/drf/viewsets.py:32 +#: vibes_auth/docs/drf/viewsets.py:33 msgid "reset a user's password by sending a reset password email" msgstr "" -"إعادة تعيين كلمة مرور المستخدم عن طريق إرسال بريد إلكتروني لإعادة تعيين كلمة " -"المرور" +"إعادة تعيين كلمة مرور المستخدم عن طريق إرسال بريد إلكتروني لإعادة تعيين كلمة" +" المرور" -#: vibes_auth/docs/drf/viewsets.py:37 +#: vibes_auth/docs/drf/viewsets.py:38 msgid "handle avatar upload for a user" msgstr "التعامل مع تحميل الصورة الرمزية للمستخدم" @@ -105,7 +105,7 @@ msgid "confirm a user's password reset" msgstr "تأكيد إعادة تعيين كلمة مرور المستخدم" #: vibes_auth/docs/drf/viewsets.py:57 vibes_auth/graphene/mutations.py:307 -#: vibes_auth/viewsets.py:72 +#: vibes_auth/viewsets.py:73 msgid "passwords do not match" msgstr "كلمات المرور غير متطابقة" @@ -117,6 +117,10 @@ msgstr "تنشيط حساب مستخدم" msgid "activation link is invalid or account already activated" msgstr "رابط التفعيل غير صالح أو أن الحساب مفعل بالفعل" +#: vibes_auth/docs/drf/viewsets.py:71 +msgid "merge client-stored recently viewed products" +msgstr "دمج المنتجات التي تم عرضها مؤخراً المخزنة لدى العميل" + #: vibes_auth/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "معرّف المستخدم الذي تم ترميزه بـ b64 الذي أحال المستخدم الجديد إلينا." @@ -144,8 +148,8 @@ msgstr "رقم هاتف مشوّه: {phone_number}" msgid "Invalid attribute format: {attribute_pair}" msgstr "تنسيق السمة غير صالح: {attribute_pair}" -#: vibes_auth/graphene/mutations.py:263 vibes_auth/viewsets.py:115 -#: vibes_auth/viewsets.py:134 +#: vibes_auth/graphene/mutations.py:263 vibes_auth/viewsets.py:116 +#: vibes_auth/viewsets.py:135 msgid "activation link is invalid!" msgstr "رابط التفعيل غير صالح!" @@ -157,14 +161,14 @@ msgstr "تم تفعيل الحساب بالفعل..." msgid "something went wrong: {e!s}" msgstr "حدث خطأ ما: {e!s}" -#: vibes_auth/graphene/mutations.py:314 vibes_auth/viewsets.py:83 +#: vibes_auth/graphene/mutations.py:314 vibes_auth/viewsets.py:84 msgid "token is invalid!" msgstr "الرمز غير صالح!" #: vibes_auth/graphene/object_types.py:39 msgid "" -"the products this user has viewed most recently (max 48), in reverse‐" -"chronological order" +"the products this user has viewed most recently (max 48), in " +"reverse‐chronological order" msgstr "" "المنتجات التي شاهدها هذا المستخدم مؤخرًا (بحد أقصى 48)، بترتيب زمني عكسي." @@ -277,23 +281,23 @@ msgstr "الرمز المميز المدرج في القائمة السوداء" msgid "blacklisted tokens" msgstr "الرموز المميزة المدرجة في القائمة السوداء" -#: vibes_auth/serializers.py:106 vibes_auth/serializers.py:128 +#: vibes_auth/serializers.py:107 vibes_auth/serializers.py:129 msgid "no active account" msgstr "لم يتم العثور على حساب نشط" -#: vibes_auth/serializers.py:199 +#: vibes_auth/serializers.py:200 msgid "token_blacklisted" msgstr "تم إدراج الرمز المميز في القائمة السوداء" -#: vibes_auth/serializers.py:204 +#: vibes_auth/serializers.py:205 msgid "invalid token" msgstr "رمز غير صالح" -#: vibes_auth/serializers.py:210 +#: vibes_auth/serializers.py:211 msgid "no user uuid claim present in token" msgstr "لا توجد مطالبة معرف المستخدم في الرمز المميز" -#: vibes_auth/serializers.py:212 +#: vibes_auth/serializers.py:213 msgid "user does not exist" msgstr "المستخدم غير موجود" @@ -416,10 +420,10 @@ msgstr "" msgid "the token is invalid" msgstr "الرمز المميز غير صالح" -#: vibes_auth/viewsets.py:87 +#: vibes_auth/viewsets.py:88 msgid "password reset successfully" msgstr "تمت إعادة تعيين كلمة المرور بنجاح!" -#: vibes_auth/viewsets.py:120 +#: vibes_auth/viewsets.py:121 msgid "account already activated!" msgstr "لقد قمت بتفعيل الحساب بالفعل..." diff --git a/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.mo b/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.mo index 17d30a6b..aba2bffa 100644 Binary files a/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.mo and b/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.mo differ diff --git a/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.po b/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.po index 4c96ab95..51a5a0b6 100644 --- a/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.po +++ b/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-08 19:42+0100\n" +"POT-Creation-Date: 2025-06-10 03:32+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -74,27 +74,27 @@ msgstr "Ověření tokenu (obnovení nebo přístup)." msgid "the token is valid" msgstr "Token je platný" -#: vibes_auth/docs/drf/viewsets.py:15 +#: vibes_auth/docs/drf/viewsets.py:16 msgid "create a new user" msgstr "Vytvoření nového uživatele" -#: vibes_auth/docs/drf/viewsets.py:19 +#: vibes_auth/docs/drf/viewsets.py:20 msgid "retrieve a user's details" msgstr "Získání údajů o uživateli" -#: vibes_auth/docs/drf/viewsets.py:23 +#: vibes_auth/docs/drf/viewsets.py:24 msgid "update a user's details" msgstr "Aktualizace údajů uživatele" -#: vibes_auth/docs/drf/viewsets.py:28 +#: vibes_auth/docs/drf/viewsets.py:29 msgid "delete a user" msgstr "Odstranění uživatele" -#: vibes_auth/docs/drf/viewsets.py:32 +#: vibes_auth/docs/drf/viewsets.py:33 msgid "reset a user's password by sending a reset password email" msgstr "Obnovení hesla uživatele odesláním e-mailu s obnovením hesla." -#: vibes_auth/docs/drf/viewsets.py:37 +#: vibes_auth/docs/drf/viewsets.py:38 msgid "handle avatar upload for a user" msgstr "Zpracování nahrávání avataru pro uživatele" @@ -103,7 +103,7 @@ msgid "confirm a user's password reset" msgstr "Potvrzení obnovení hesla uživatele" #: vibes_auth/docs/drf/viewsets.py:57 vibes_auth/graphene/mutations.py:307 -#: vibes_auth/viewsets.py:72 +#: vibes_auth/viewsets.py:73 msgid "passwords do not match" msgstr "Hesla se neshodují" @@ -115,6 +115,10 @@ msgstr "Aktivace účtu uživatele" msgid "activation link is invalid or account already activated" msgstr "Aktivační odkaz je neplatný nebo je účet již aktivován" +#: vibes_auth/docs/drf/viewsets.py:71 +msgid "merge client-stored recently viewed products" +msgstr "Sloučení naposledy zobrazených produktů uložených u klienta" + #: vibes_auth/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "Uuid uživatele s kódem b64, který nám nového uživatele doporučil." @@ -142,8 +146,8 @@ msgstr "Chybně zadané telefonní číslo: {phone_number}" msgid "Invalid attribute format: {attribute_pair}" msgstr "Nesprávný formát atributu: {attribute_pair}" -#: vibes_auth/graphene/mutations.py:263 vibes_auth/viewsets.py:115 -#: vibes_auth/viewsets.py:134 +#: vibes_auth/graphene/mutations.py:263 vibes_auth/viewsets.py:116 +#: vibes_auth/viewsets.py:135 msgid "activation link is invalid!" msgstr "Aktivační odkaz je neplatný!" @@ -155,14 +159,14 @@ msgstr "Účet byl již aktivován..." msgid "something went wrong: {e!s}" msgstr "Něco se pokazilo: {e!s}" -#: vibes_auth/graphene/mutations.py:314 vibes_auth/viewsets.py:83 +#: vibes_auth/graphene/mutations.py:314 vibes_auth/viewsets.py:84 msgid "token is invalid!" msgstr "Token je neplatný!" #: vibes_auth/graphene/object_types.py:39 msgid "" -"the products this user has viewed most recently (max 48), in reverse‐" -"chronological order" +"the products this user has viewed most recently (max 48), in " +"reverse‐chronological order" msgstr "" "Produkty, které si tento uživatel prohlížel naposledy (max. 48), seřazené v " "opačném pořadí." @@ -276,23 +280,23 @@ msgstr "Token na černé listině" msgid "blacklisted tokens" msgstr "Tokeny na černé listině" -#: vibes_auth/serializers.py:106 vibes_auth/serializers.py:128 +#: vibes_auth/serializers.py:107 vibes_auth/serializers.py:129 msgid "no active account" msgstr "Nebyl nalezen žádný aktivní účet" -#: vibes_auth/serializers.py:199 +#: vibes_auth/serializers.py:200 msgid "token_blacklisted" msgstr "Token na černé listině" -#: vibes_auth/serializers.py:204 +#: vibes_auth/serializers.py:205 msgid "invalid token" msgstr "Neplatný token" -#: vibes_auth/serializers.py:210 +#: vibes_auth/serializers.py:211 msgid "no user uuid claim present in token" msgstr "V tokenu není deklarace uuid uživatele" -#: vibes_auth/serializers.py:212 +#: vibes_auth/serializers.py:213 msgid "user does not exist" msgstr "Uživatel neexistuje" @@ -376,8 +380,7 @@ msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" msgstr "" -"Pokud výše uvedené tlačítko nefunguje, zkopírujte a vložte následující " -"adresu URL\n" +"Pokud výše uvedené tlačítko nefunguje, zkopírujte a vložte následující adresu URL\n" " do webového prohlížeče:" #: vibes_auth/templates/user_verification_email.html:101 @@ -416,10 +419,10 @@ msgstr "" msgid "the token is invalid" msgstr "Token je neplatný" -#: vibes_auth/viewsets.py:87 +#: vibes_auth/viewsets.py:88 msgid "password reset successfully" msgstr "Heslo bylo úspěšně resetováno!" -#: vibes_auth/viewsets.py:120 +#: vibes_auth/viewsets.py:121 msgid "account already activated!" msgstr "Účet jste již aktivovali..." diff --git a/vibes_auth/locale/da_DK/LC_MESSAGES/django.mo b/vibes_auth/locale/da_DK/LC_MESSAGES/django.mo index 7cebad7b..351f15d7 100644 Binary files a/vibes_auth/locale/da_DK/LC_MESSAGES/django.mo and b/vibes_auth/locale/da_DK/LC_MESSAGES/django.mo differ diff --git a/vibes_auth/locale/da_DK/LC_MESSAGES/django.po b/vibes_auth/locale/da_DK/LC_MESSAGES/django.po index 94678e78..99e3029c 100644 --- a/vibes_auth/locale/da_DK/LC_MESSAGES/django.po +++ b/vibes_auth/locale/da_DK/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-08 19:42+0100\n" +"POT-Creation-Date: 2025-06-10 03:32+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -74,29 +74,29 @@ msgstr "Bekræft et token (opdatering eller adgang)." msgid "the token is valid" msgstr "Tokenet er gyldigt" -#: vibes_auth/docs/drf/viewsets.py:15 +#: vibes_auth/docs/drf/viewsets.py:16 msgid "create a new user" msgstr "Opret en ny bruger" -#: vibes_auth/docs/drf/viewsets.py:19 +#: vibes_auth/docs/drf/viewsets.py:20 msgid "retrieve a user's details" msgstr "Hent oplysninger om en bruger" -#: vibes_auth/docs/drf/viewsets.py:23 +#: vibes_auth/docs/drf/viewsets.py:24 msgid "update a user's details" msgstr "Opdater en brugers oplysninger" -#: vibes_auth/docs/drf/viewsets.py:28 +#: vibes_auth/docs/drf/viewsets.py:29 msgid "delete a user" msgstr "Slet en bruger" -#: vibes_auth/docs/drf/viewsets.py:32 +#: vibes_auth/docs/drf/viewsets.py:33 msgid "reset a user's password by sending a reset password email" msgstr "" "Nulstil en brugers adgangskode ved at sende en e-mail om nulstilling af " "adgangskode" -#: vibes_auth/docs/drf/viewsets.py:37 +#: vibes_auth/docs/drf/viewsets.py:38 msgid "handle avatar upload for a user" msgstr "Håndter upload af avatar for en bruger" @@ -105,7 +105,7 @@ msgid "confirm a user's password reset" msgstr "Bekræft nulstilling af en brugers adgangskode" #: vibes_auth/docs/drf/viewsets.py:57 vibes_auth/graphene/mutations.py:307 -#: vibes_auth/viewsets.py:72 +#: vibes_auth/viewsets.py:73 msgid "passwords do not match" msgstr "Adgangskoderne stemmer ikke overens" @@ -117,6 +117,10 @@ msgstr "Aktivér en brugers konto" msgid "activation link is invalid or account already activated" msgstr "Aktiveringslinket er ugyldigt, eller kontoen er allerede aktiveret" +#: vibes_auth/docs/drf/viewsets.py:71 +msgid "merge client-stored recently viewed products" +msgstr "Flet nyligt viste produkter, der er gemt af klienten" + #: vibes_auth/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "Brugerens b64-kodede uuid, som henviste den nye bruger til os." @@ -144,8 +148,8 @@ msgstr "Misdannet telefonnummer: {phone_number}." msgid "Invalid attribute format: {attribute_pair}" msgstr "Ugyldigt attributformat: {attribute_pair}" -#: vibes_auth/graphene/mutations.py:263 vibes_auth/viewsets.py:115 -#: vibes_auth/viewsets.py:134 +#: vibes_auth/graphene/mutations.py:263 vibes_auth/viewsets.py:116 +#: vibes_auth/viewsets.py:135 msgid "activation link is invalid!" msgstr "Aktiveringslinket er ugyldigt!" @@ -157,14 +161,14 @@ msgstr "Kontoen er allerede aktiveret..." msgid "something went wrong: {e!s}" msgstr "Noget gik galt: {e!s}" -#: vibes_auth/graphene/mutations.py:314 vibes_auth/viewsets.py:83 +#: vibes_auth/graphene/mutations.py:314 vibes_auth/viewsets.py:84 msgid "token is invalid!" msgstr "Token er ugyldig!" #: vibes_auth/graphene/object_types.py:39 msgid "" -"the products this user has viewed most recently (max 48), in reverse‐" -"chronological order" +"the products this user has viewed most recently (max 48), in " +"reverse‐chronological order" msgstr "" "De produkter, som denne bruger har set for nylig (maks. 48), i omvendt " "kronologisk rækkefølge." @@ -278,23 +282,23 @@ msgstr "Sortlistet token" msgid "blacklisted tokens" msgstr "Sortlistede tokens" -#: vibes_auth/serializers.py:106 vibes_auth/serializers.py:128 +#: vibes_auth/serializers.py:107 vibes_auth/serializers.py:129 msgid "no active account" msgstr "Ingen aktiv konto fundet" -#: vibes_auth/serializers.py:199 +#: vibes_auth/serializers.py:200 msgid "token_blacklisted" msgstr "Token blacklistet" -#: vibes_auth/serializers.py:204 +#: vibes_auth/serializers.py:205 msgid "invalid token" msgstr "Ugyldigt token" -#: vibes_auth/serializers.py:210 +#: vibes_auth/serializers.py:211 msgid "no user uuid claim present in token" msgstr "Ingen bruger-uuid-krav til stede i token" -#: vibes_auth/serializers.py:212 +#: vibes_auth/serializers.py:213 msgid "user does not exist" msgstr "Brugeren findes ikke" @@ -379,8 +383,7 @@ msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" msgstr "" -"Hvis ovenstående knap ikke virker, bedes du kopiere og indsætte følgende " -"URL\n" +"Hvis ovenstående knap ikke virker, bedes du kopiere og indsætte følgende URL\n" " i din webbrowser:" #: vibes_auth/templates/user_verification_email.html:101 @@ -419,10 +422,10 @@ msgstr "" msgid "the token is invalid" msgstr "Tokenet er ugyldigt" -#: vibes_auth/viewsets.py:87 +#: vibes_auth/viewsets.py:88 msgid "password reset successfully" msgstr "Adgangskoden er blevet nulstillet med succes!" -#: vibes_auth/viewsets.py:120 +#: vibes_auth/viewsets.py:121 msgid "account already activated!" msgstr "Du har allerede aktiveret kontoen..." diff --git a/vibes_auth/locale/de_DE/LC_MESSAGES/django.mo b/vibes_auth/locale/de_DE/LC_MESSAGES/django.mo index 4cfbf4c4..3f904489 100644 Binary files a/vibes_auth/locale/de_DE/LC_MESSAGES/django.mo and b/vibes_auth/locale/de_DE/LC_MESSAGES/django.mo differ diff --git a/vibes_auth/locale/de_DE/LC_MESSAGES/django.po b/vibes_auth/locale/de_DE/LC_MESSAGES/django.po index 5f6695e4..fc1fa53a 100644 --- a/vibes_auth/locale/de_DE/LC_MESSAGES/django.po +++ b/vibes_auth/locale/de_DE/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-08 19:42+0100\n" +"POT-Creation-Date: 2025-06-10 03:32+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -75,29 +75,29 @@ msgstr "Überprüfen eines Tokens (Aktualisierung oder Zugriff)." msgid "the token is valid" msgstr "Das Token ist gültig" -#: vibes_auth/docs/drf/viewsets.py:15 +#: vibes_auth/docs/drf/viewsets.py:16 msgid "create a new user" msgstr "Einen neuen Benutzer anlegen" -#: vibes_auth/docs/drf/viewsets.py:19 +#: vibes_auth/docs/drf/viewsets.py:20 msgid "retrieve a user's details" msgstr "Abrufen der Details eines Benutzers" -#: vibes_auth/docs/drf/viewsets.py:23 +#: vibes_auth/docs/drf/viewsets.py:24 msgid "update a user's details" msgstr "Aktualisieren der Benutzerdaten" -#: vibes_auth/docs/drf/viewsets.py:28 +#: vibes_auth/docs/drf/viewsets.py:29 msgid "delete a user" msgstr "Einen Benutzer löschen" -#: vibes_auth/docs/drf/viewsets.py:32 +#: vibes_auth/docs/drf/viewsets.py:33 msgid "reset a user's password by sending a reset password email" msgstr "" "Zurücksetzen des Kennworts eines Benutzers durch Senden einer E-Mail zum " "Zurücksetzen des Kennworts" -#: vibes_auth/docs/drf/viewsets.py:37 +#: vibes_auth/docs/drf/viewsets.py:38 msgid "handle avatar upload for a user" msgstr "Avatar-Upload für einen Benutzer verwalten" @@ -106,7 +106,7 @@ msgid "confirm a user's password reset" msgstr "Bestätigen Sie das Zurücksetzen des Passworts eines Benutzers" #: vibes_auth/docs/drf/viewsets.py:57 vibes_auth/graphene/mutations.py:307 -#: vibes_auth/viewsets.py:72 +#: vibes_auth/viewsets.py:73 msgid "passwords do not match" msgstr "Passwörter stimmen nicht überein" @@ -118,11 +118,16 @@ msgstr "Aktivieren eines Benutzerkontos" msgid "activation link is invalid or account already activated" msgstr "Aktivierungslink ist ungültig oder Konto bereits aktiviert" +#: vibes_auth/docs/drf/viewsets.py:71 +msgid "merge client-stored recently viewed products" +msgstr "" +"Zusammenführen der vom Kunden gespeicherten, zuletzt angesehenen Produkte" + #: vibes_auth/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" -"Die b64-kodierte uuid des Benutzers, der den neuen Benutzer an uns verwiesen " -"hat." +"Die b64-kodierte uuid des Benutzers, der den neuen Benutzer an uns verwiesen" +" hat." #: vibes_auth/graphene/mutations.py:61 msgid "password too weak" @@ -147,8 +152,8 @@ msgstr "Fehlerhafte Telefonnummer: {phone_number}" msgid "Invalid attribute format: {attribute_pair}" msgstr "Ungültiges Attributformat: {attribute_pair}" -#: vibes_auth/graphene/mutations.py:263 vibes_auth/viewsets.py:115 -#: vibes_auth/viewsets.py:134 +#: vibes_auth/graphene/mutations.py:263 vibes_auth/viewsets.py:116 +#: vibes_auth/viewsets.py:135 msgid "activation link is invalid!" msgstr "Der Aktivierungslink ist ungültig!" @@ -160,14 +165,14 @@ msgstr "Das Konto wurde bereits aktiviert..." msgid "something went wrong: {e!s}" msgstr "Etwas ist schief gelaufen: {e!s}" -#: vibes_auth/graphene/mutations.py:314 vibes_auth/viewsets.py:83 +#: vibes_auth/graphene/mutations.py:314 vibes_auth/viewsets.py:84 msgid "token is invalid!" msgstr "Token ist ungültig!" #: vibes_auth/graphene/object_types.py:39 msgid "" -"the products this user has viewed most recently (max 48), in reverse‐" -"chronological order" +"the products this user has viewed most recently (max 48), in " +"reverse‐chronological order" msgstr "" "Die Produkte, die dieser Benutzer zuletzt angesehen hat (maximal 48), in " "umgekehrter chronologischer Reihenfolge." @@ -282,23 +287,23 @@ msgstr "Token auf der schwarzen Liste" msgid "blacklisted tokens" msgstr "Token auf der schwarzen Liste" -#: vibes_auth/serializers.py:106 vibes_auth/serializers.py:128 +#: vibes_auth/serializers.py:107 vibes_auth/serializers.py:129 msgid "no active account" msgstr "Kein aktives Konto gefunden" -#: vibes_auth/serializers.py:199 +#: vibes_auth/serializers.py:200 msgid "token_blacklisted" msgstr "Token auf der schwarzen Liste" -#: vibes_auth/serializers.py:204 +#: vibes_auth/serializers.py:205 msgid "invalid token" msgstr "Ungültiges Token" -#: vibes_auth/serializers.py:210 +#: vibes_auth/serializers.py:211 msgid "no user uuid claim present in token" msgstr "Kein Benutzer uuid-Anspruch im Token vorhanden" -#: vibes_auth/serializers.py:212 +#: vibes_auth/serializers.py:213 msgid "user does not exist" msgstr "Benutzer existiert nicht" @@ -344,8 +349,8 @@ msgstr "" #: vibes_auth/templates/user_reset_password_email.html:88 msgid "if you did not send this request, please ignore this email." msgstr "" -"Wenn Sie diese Anfrage nicht gesendet haben, ignorieren Sie bitte diese E-" -"Mail." +"Wenn Sie diese Anfrage nicht gesendet haben, ignorieren Sie bitte diese " +"E-Mail." #: vibes_auth/templates/user_reset_password_email.html:89 #, python-format @@ -384,8 +389,7 @@ msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" msgstr "" -"Wenn die obige Schaltfläche nicht funktioniert, kopieren Sie bitte die " -"folgende URL und fügen Sie sie in Ihren Browser ein\n" +"Wenn die obige Schaltfläche nicht funktioniert, kopieren Sie bitte die folgende URL und fügen Sie sie in Ihren Browser ein\n" " in Ihren Webbrowser ein:" #: vibes_auth/templates/user_verification_email.html:101 @@ -424,10 +428,10 @@ msgstr "" msgid "the token is invalid" msgstr "Das Token ist ungültig" -#: vibes_auth/viewsets.py:87 +#: vibes_auth/viewsets.py:88 msgid "password reset successfully" msgstr "Das Passwort wurde erfolgreich zurückgesetzt!" -#: vibes_auth/viewsets.py:120 +#: vibes_auth/viewsets.py:121 msgid "account already activated!" msgstr "Sie haben das Konto bereits aktiviert..." diff --git a/vibes_auth/locale/en_GB/LC_MESSAGES/django.mo b/vibes_auth/locale/en_GB/LC_MESSAGES/django.mo index ad7c21d4..7bc2ff83 100644 Binary files a/vibes_auth/locale/en_GB/LC_MESSAGES/django.mo and b/vibes_auth/locale/en_GB/LC_MESSAGES/django.mo differ diff --git a/vibes_auth/locale/en_GB/LC_MESSAGES/django.po b/vibes_auth/locale/en_GB/LC_MESSAGES/django.po index 3a709f79..80d8bf5a 100644 --- a/vibes_auth/locale/en_GB/LC_MESSAGES/django.po +++ b/vibes_auth/locale/en_GB/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-08 19:42+0100\n" +"POT-Creation-Date: 2025-06-10 03:32+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -78,27 +78,27 @@ msgstr "Verify a token (refresh or access)." msgid "the token is valid" msgstr "The token is valid" -#: vibes_auth/docs/drf/viewsets.py:15 +#: vibes_auth/docs/drf/viewsets.py:16 msgid "create a new user" msgstr "Create a new user" -#: vibes_auth/docs/drf/viewsets.py:19 +#: vibes_auth/docs/drf/viewsets.py:20 msgid "retrieve a user's details" msgstr "Retrieve a user's details" -#: vibes_auth/docs/drf/viewsets.py:23 +#: vibes_auth/docs/drf/viewsets.py:24 msgid "update a user's details" msgstr "Update a user's details" -#: vibes_auth/docs/drf/viewsets.py:28 +#: vibes_auth/docs/drf/viewsets.py:29 msgid "delete a user" msgstr "Delete a user" -#: vibes_auth/docs/drf/viewsets.py:32 +#: vibes_auth/docs/drf/viewsets.py:33 msgid "reset a user's password by sending a reset password email" msgstr "Reset a user's password by sending a reset password email" -#: vibes_auth/docs/drf/viewsets.py:37 +#: vibes_auth/docs/drf/viewsets.py:38 msgid "handle avatar upload for a user" msgstr "Handle avatar upload for a user" @@ -107,7 +107,7 @@ msgid "confirm a user's password reset" msgstr "Confirm a user's password reset" #: vibes_auth/docs/drf/viewsets.py:57 vibes_auth/graphene/mutations.py:307 -#: vibes_auth/viewsets.py:72 +#: vibes_auth/viewsets.py:73 msgid "passwords do not match" msgstr "Passwords do not match" @@ -119,6 +119,10 @@ msgstr "Activate a user's account" msgid "activation link is invalid or account already activated" msgstr "Activation link is invalid or account already activated" +#: vibes_auth/docs/drf/viewsets.py:71 +msgid "merge client-stored recently viewed products" +msgstr "Merge client-stored recently viewed products" + #: vibes_auth/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "The user's b64-encoded uuid who referred the new user to us." @@ -146,8 +150,8 @@ msgstr "Malformed phone number: {phone_number}" msgid "Invalid attribute format: {attribute_pair}" msgstr "Invalid attribute format: {attribute_pair}" -#: vibes_auth/graphene/mutations.py:263 vibes_auth/viewsets.py:115 -#: vibes_auth/viewsets.py:134 +#: vibes_auth/graphene/mutations.py:263 vibes_auth/viewsets.py:116 +#: vibes_auth/viewsets.py:135 msgid "activation link is invalid!" msgstr "Activation link is invalid!" @@ -159,14 +163,14 @@ msgstr "Account has been already activated..." msgid "something went wrong: {e!s}" msgstr "Something went wrong: {e!s}" -#: vibes_auth/graphene/mutations.py:314 vibes_auth/viewsets.py:83 +#: vibes_auth/graphene/mutations.py:314 vibes_auth/viewsets.py:84 msgid "token is invalid!" msgstr "Token is invalid!" #: vibes_auth/graphene/object_types.py:39 msgid "" -"the products this user has viewed most recently (max 48), in reverse‐" -"chronological order" +"the products this user has viewed most recently (max 48), in " +"reverse‐chronological order" msgstr "" "The products this user has viewed most recently (max 48), in reverse-" "chronological order." @@ -280,23 +284,23 @@ msgstr "Blacklisted token" msgid "blacklisted tokens" msgstr "Blacklisted tokens" -#: vibes_auth/serializers.py:106 vibes_auth/serializers.py:128 +#: vibes_auth/serializers.py:107 vibes_auth/serializers.py:129 msgid "no active account" msgstr "No active account found" -#: vibes_auth/serializers.py:199 +#: vibes_auth/serializers.py:200 msgid "token_blacklisted" msgstr "Token blacklisted" -#: vibes_auth/serializers.py:204 +#: vibes_auth/serializers.py:205 msgid "invalid token" msgstr "Invalid token" -#: vibes_auth/serializers.py:210 +#: vibes_auth/serializers.py:211 msgid "no user uuid claim present in token" msgstr "No user uuid claim present in token" -#: vibes_auth/serializers.py:212 +#: vibes_auth/serializers.py:213 msgid "user does not exist" msgstr "User does not exist" @@ -419,16 +423,13 @@ msgstr "" msgid "the token is invalid" msgstr "The token is invalid" -#: vibes_auth/viewsets.py:87 +#: vibes_auth/viewsets.py:88 msgid "password reset successfully" msgstr "Password has been reset successfully!" -#: vibes_auth/viewsets.py:120 +#: vibes_auth/viewsets.py:121 msgid "account already activated!" msgstr "You have already activated the account..." -#~ msgid "recently viewed products" -#~ msgstr "Recently viewed products" - #~ msgid "recently viwed" #~ msgstr "Recently viewed" diff --git a/vibes_auth/locale/en_US/LC_MESSAGES/django.mo b/vibes_auth/locale/en_US/LC_MESSAGES/django.mo index f030cff1..9d858b79 100644 Binary files a/vibes_auth/locale/en_US/LC_MESSAGES/django.mo and b/vibes_auth/locale/en_US/LC_MESSAGES/django.mo differ diff --git a/vibes_auth/locale/en_US/LC_MESSAGES/django.po b/vibes_auth/locale/en_US/LC_MESSAGES/django.po index f19e3d94..cb550b71 100644 --- a/vibes_auth/locale/en_US/LC_MESSAGES/django.po +++ b/vibes_auth/locale/en_US/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-08 19:42+0100\n" +"POT-Creation-Date: 2025-06-10 03:32+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -74,27 +74,27 @@ msgstr "Verify a token (refresh or access)." msgid "the token is valid" msgstr "The token is valid" -#: vibes_auth/docs/drf/viewsets.py:15 +#: vibes_auth/docs/drf/viewsets.py:16 msgid "create a new user" msgstr "Create a new user" -#: vibes_auth/docs/drf/viewsets.py:19 +#: vibes_auth/docs/drf/viewsets.py:20 msgid "retrieve a user's details" msgstr "Retrieve a user's details" -#: vibes_auth/docs/drf/viewsets.py:23 +#: vibes_auth/docs/drf/viewsets.py:24 msgid "update a user's details" msgstr "Update a user's details" -#: vibes_auth/docs/drf/viewsets.py:28 +#: vibes_auth/docs/drf/viewsets.py:29 msgid "delete a user" msgstr "Delete a user" -#: vibes_auth/docs/drf/viewsets.py:32 +#: vibes_auth/docs/drf/viewsets.py:33 msgid "reset a user's password by sending a reset password email" msgstr "Reset a user's password by sending a reset password email" -#: vibes_auth/docs/drf/viewsets.py:37 +#: vibes_auth/docs/drf/viewsets.py:38 msgid "handle avatar upload for a user" msgstr "Handle avatar upload for a user" @@ -103,7 +103,7 @@ msgid "confirm a user's password reset" msgstr "Confirm a user's password reset" #: vibes_auth/docs/drf/viewsets.py:57 vibes_auth/graphene/mutations.py:307 -#: vibes_auth/viewsets.py:72 +#: vibes_auth/viewsets.py:73 msgid "passwords do not match" msgstr "Passwords do not match" @@ -115,6 +115,10 @@ msgstr "Activate a user's account" msgid "activation link is invalid or account already activated" msgstr "Activation link is invalid or account already activated" +#: vibes_auth/docs/drf/viewsets.py:71 +msgid "merge client-stored recently viewed products" +msgstr "Merge client-stored recently viewed products" + #: vibes_auth/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "The user's b64-encoded uuid who referred the new user to us." @@ -142,8 +146,8 @@ msgstr "Malformed phone number: {phone_number}" msgid "Invalid attribute format: {attribute_pair}" msgstr "Invalid attribute format: {attribute_pair}" -#: vibes_auth/graphene/mutations.py:263 vibes_auth/viewsets.py:115 -#: vibes_auth/viewsets.py:134 +#: vibes_auth/graphene/mutations.py:263 vibes_auth/viewsets.py:116 +#: vibes_auth/viewsets.py:135 msgid "activation link is invalid!" msgstr "Activation link is invalid!" @@ -155,14 +159,14 @@ msgstr "Account has been already activated..." msgid "something went wrong: {e!s}" msgstr "Something went wrong: {e!s}" -#: vibes_auth/graphene/mutations.py:314 vibes_auth/viewsets.py:83 +#: vibes_auth/graphene/mutations.py:314 vibes_auth/viewsets.py:84 msgid "token is invalid!" msgstr "Token is invalid!" #: vibes_auth/graphene/object_types.py:39 msgid "" -"the products this user has viewed most recently (max 48), in reverse‐" -"chronological order" +"the products this user has viewed most recently (max 48), in " +"reverse‐chronological order" msgstr "" "The products this user has viewed most recently (max 48), in reverse-" "chronological order." @@ -276,23 +280,23 @@ msgstr "Blacklisted token" msgid "blacklisted tokens" msgstr "Blacklisted tokens" -#: vibes_auth/serializers.py:106 vibes_auth/serializers.py:128 +#: vibes_auth/serializers.py:107 vibes_auth/serializers.py:129 msgid "no active account" msgstr "No active account found" -#: vibes_auth/serializers.py:199 +#: vibes_auth/serializers.py:200 msgid "token_blacklisted" msgstr "Token blacklisted" -#: vibes_auth/serializers.py:204 +#: vibes_auth/serializers.py:205 msgid "invalid token" msgstr "Invalid token" -#: vibes_auth/serializers.py:210 +#: vibes_auth/serializers.py:211 msgid "no user uuid claim present in token" msgstr "No user uuid claim present in token" -#: vibes_auth/serializers.py:212 +#: vibes_auth/serializers.py:213 msgid "user does not exist" msgstr "User does not exist" @@ -415,10 +419,10 @@ msgstr "" msgid "the token is invalid" msgstr "The token is invalid" -#: vibes_auth/viewsets.py:87 +#: vibes_auth/viewsets.py:88 msgid "password reset successfully" msgstr "Password has been reset successfully!" -#: vibes_auth/viewsets.py:120 +#: vibes_auth/viewsets.py:121 msgid "account already activated!" msgstr "You have already activated the account..." diff --git a/vibes_auth/locale/es_ES/LC_MESSAGES/django.mo b/vibes_auth/locale/es_ES/LC_MESSAGES/django.mo index 877c3dda..594a46e3 100644 Binary files a/vibes_auth/locale/es_ES/LC_MESSAGES/django.mo and b/vibes_auth/locale/es_ES/LC_MESSAGES/django.mo differ diff --git a/vibes_auth/locale/es_ES/LC_MESSAGES/django.po b/vibes_auth/locale/es_ES/LC_MESSAGES/django.po index 03b073d3..1b772ae1 100644 --- a/vibes_auth/locale/es_ES/LC_MESSAGES/django.po +++ b/vibes_auth/locale/es_ES/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-08 19:42+0100\n" +"POT-Creation-Date: 2025-06-10 03:32+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -74,29 +74,29 @@ msgstr "Verificar un token (actualización o acceso)." msgid "the token is valid" msgstr "El token es válido" -#: vibes_auth/docs/drf/viewsets.py:15 +#: vibes_auth/docs/drf/viewsets.py:16 msgid "create a new user" msgstr "Crear un nuevo usuario" -#: vibes_auth/docs/drf/viewsets.py:19 +#: vibes_auth/docs/drf/viewsets.py:20 msgid "retrieve a user's details" msgstr "Recuperar los datos de un usuario" -#: vibes_auth/docs/drf/viewsets.py:23 +#: vibes_auth/docs/drf/viewsets.py:24 msgid "update a user's details" msgstr "Actualizar los datos de un usuario" -#: vibes_auth/docs/drf/viewsets.py:28 +#: vibes_auth/docs/drf/viewsets.py:29 msgid "delete a user" msgstr "Eliminar un usuario" -#: vibes_auth/docs/drf/viewsets.py:32 +#: vibes_auth/docs/drf/viewsets.py:33 msgid "reset a user's password by sending a reset password email" msgstr "" "Restablecer la contraseña de un usuario enviando un correo electrónico de " "restablecimiento de contraseña" -#: vibes_auth/docs/drf/viewsets.py:37 +#: vibes_auth/docs/drf/viewsets.py:38 msgid "handle avatar upload for a user" msgstr "Gestionar la subida de avatares de un usuario" @@ -105,7 +105,7 @@ msgid "confirm a user's password reset" msgstr "Confirmar el restablecimiento de la contraseña de un usuario" #: vibes_auth/docs/drf/viewsets.py:57 vibes_auth/graphene/mutations.py:307 -#: vibes_auth/viewsets.py:72 +#: vibes_auth/viewsets.py:73 msgid "passwords do not match" msgstr "Las contraseñas no coinciden" @@ -117,6 +117,10 @@ msgstr "Activar la cuenta de un usuario" msgid "activation link is invalid or account already activated" msgstr "El enlace de activación no es válido o la cuenta ya está activada" +#: vibes_auth/docs/drf/viewsets.py:71 +msgid "merge client-stored recently viewed products" +msgstr "Fusionar productos vistos recientemente almacenados por el cliente" + #: vibes_auth/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" @@ -145,8 +149,8 @@ msgstr "Número de teléfono malformado: {phone_number}" msgid "Invalid attribute format: {attribute_pair}" msgstr "Formato de atributo no válido: {attribute_pair}" -#: vibes_auth/graphene/mutations.py:263 vibes_auth/viewsets.py:115 -#: vibes_auth/viewsets.py:134 +#: vibes_auth/graphene/mutations.py:263 vibes_auth/viewsets.py:116 +#: vibes_auth/viewsets.py:135 msgid "activation link is invalid!" msgstr "El enlace de activación no es válido." @@ -158,14 +162,14 @@ msgstr "La cuenta ya ha sido activada..." msgid "something went wrong: {e!s}" msgstr "Algo salió mal: {e!s}." -#: vibes_auth/graphene/mutations.py:314 vibes_auth/viewsets.py:83 +#: vibes_auth/graphene/mutations.py:314 vibes_auth/viewsets.py:84 msgid "token is invalid!" msgstr "¡La ficha no es válida!" #: vibes_auth/graphene/object_types.py:39 msgid "" -"the products this user has viewed most recently (max 48), in reverse‐" -"chronological order" +"the products this user has viewed most recently (max 48), in " +"reverse‐chronological order" msgstr "" "Los productos que este usuario ha visto más recientemente (máx. 48), en " "orden cronológico inverso." @@ -279,23 +283,23 @@ msgstr "Ficha en la lista negra" msgid "blacklisted tokens" msgstr "Fichas en la lista negra" -#: vibes_auth/serializers.py:106 vibes_auth/serializers.py:128 +#: vibes_auth/serializers.py:107 vibes_auth/serializers.py:129 msgid "no active account" msgstr "No se ha encontrado ninguna cuenta activa" -#: vibes_auth/serializers.py:199 +#: vibes_auth/serializers.py:200 msgid "token_blacklisted" msgstr "Ficha en la lista negra" -#: vibes_auth/serializers.py:204 +#: vibes_auth/serializers.py:205 msgid "invalid token" msgstr "Token no válido" -#: vibes_auth/serializers.py:210 +#: vibes_auth/serializers.py:211 msgid "no user uuid claim present in token" msgstr "No user uuid claim present in token" -#: vibes_auth/serializers.py:212 +#: vibes_auth/serializers.py:213 msgid "user does not exist" msgstr "El usuario no existe" @@ -418,10 +422,10 @@ msgstr "" msgid "the token is invalid" msgstr "El token no es válido" -#: vibes_auth/viewsets.py:87 +#: vibes_auth/viewsets.py:88 msgid "password reset successfully" msgstr "La contraseña se ha restablecido correctamente." -#: vibes_auth/viewsets.py:120 +#: vibes_auth/viewsets.py:121 msgid "account already activated!" msgstr "Ya ha activado la cuenta..." diff --git a/vibes_auth/locale/fr_FR/LC_MESSAGES/django.mo b/vibes_auth/locale/fr_FR/LC_MESSAGES/django.mo index 17046aa3..7d4ed9dc 100644 Binary files a/vibes_auth/locale/fr_FR/LC_MESSAGES/django.mo and b/vibes_auth/locale/fr_FR/LC_MESSAGES/django.mo differ diff --git a/vibes_auth/locale/fr_FR/LC_MESSAGES/django.po b/vibes_auth/locale/fr_FR/LC_MESSAGES/django.po index 33d03599..5287de0e 100644 --- a/vibes_auth/locale/fr_FR/LC_MESSAGES/django.po +++ b/vibes_auth/locale/fr_FR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-08 19:42+0100\n" +"POT-Creation-Date: 2025-06-10 03:32+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -76,29 +76,29 @@ msgstr "Vérifier un jeton (rafraîchissement ou accès)." msgid "the token is valid" msgstr "Le jeton est valide" -#: vibes_auth/docs/drf/viewsets.py:15 +#: vibes_auth/docs/drf/viewsets.py:16 msgid "create a new user" msgstr "Créer un nouvel utilisateur" -#: vibes_auth/docs/drf/viewsets.py:19 +#: vibes_auth/docs/drf/viewsets.py:20 msgid "retrieve a user's details" msgstr "Récupérer les données d'un utilisateur" -#: vibes_auth/docs/drf/viewsets.py:23 +#: vibes_auth/docs/drf/viewsets.py:24 msgid "update a user's details" msgstr "Mettre à jour les coordonnées d'un utilisateur" -#: vibes_auth/docs/drf/viewsets.py:28 +#: vibes_auth/docs/drf/viewsets.py:29 msgid "delete a user" msgstr "Supprimer un utilisateur" -#: vibes_auth/docs/drf/viewsets.py:32 +#: vibes_auth/docs/drf/viewsets.py:33 msgid "reset a user's password by sending a reset password email" msgstr "" "Réinitialiser le mot de passe d'un utilisateur en envoyant un courriel de " "réinitialisation du mot de passe" -#: vibes_auth/docs/drf/viewsets.py:37 +#: vibes_auth/docs/drf/viewsets.py:38 msgid "handle avatar upload for a user" msgstr "Gérer le téléchargement d'un avatar pour un utilisateur" @@ -107,7 +107,7 @@ msgid "confirm a user's password reset" msgstr "Confirmer la réinitialisation du mot de passe d'un utilisateur" #: vibes_auth/docs/drf/viewsets.py:57 vibes_auth/graphene/mutations.py:307 -#: vibes_auth/viewsets.py:72 +#: vibes_auth/viewsets.py:73 msgid "passwords do not match" msgstr "Les mots de passe ne correspondent pas" @@ -119,6 +119,10 @@ msgstr "Activer le compte d'un utilisateur" msgid "activation link is invalid or account already activated" msgstr "Le lien d'activation n'est pas valide ou le compte est déjà activé" +#: vibes_auth/docs/drf/viewsets.py:71 +msgid "merge client-stored recently viewed products" +msgstr "Fusionner les produits récemment consultés stockés par le client" + #: vibes_auth/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" @@ -148,8 +152,8 @@ msgstr "Numéro de téléphone malformé : {phone_number}" msgid "Invalid attribute format: {attribute_pair}" msgstr "Format d'attribut non valide : {attribute_pair}" -#: vibes_auth/graphene/mutations.py:263 vibes_auth/viewsets.py:115 -#: vibes_auth/viewsets.py:134 +#: vibes_auth/graphene/mutations.py:263 vibes_auth/viewsets.py:116 +#: vibes_auth/viewsets.py:135 msgid "activation link is invalid!" msgstr "Le lien d'activation n'est pas valide !" @@ -161,17 +165,17 @@ msgstr "Le compte a déjà été activé..." msgid "something went wrong: {e!s}" msgstr "Quelque chose a mal tourné : {e!s}" -#: vibes_auth/graphene/mutations.py:314 vibes_auth/viewsets.py:83 +#: vibes_auth/graphene/mutations.py:314 vibes_auth/viewsets.py:84 msgid "token is invalid!" msgstr "Le jeton n'est pas valide !" #: vibes_auth/graphene/object_types.py:39 msgid "" -"the products this user has viewed most recently (max 48), in reverse‐" -"chronological order" +"the products this user has viewed most recently (max 48), in " +"reverse‐chronological order" msgstr "" -"Les produits que cet utilisateur a consultés le plus récemment (max 48), par " -"ordre chronologique inverse." +"Les produits que cet utilisateur a consultés le plus récemment (max 48), par" +" ordre chronologique inverse." #: vibes_auth/graphene/object_types.py:41 vibes_auth/models.py:108 msgid "groups" @@ -285,23 +289,24 @@ msgstr "Jeton sur liste noire" msgid "blacklisted tokens" msgstr "Jetons sur liste noire" -#: vibes_auth/serializers.py:106 vibes_auth/serializers.py:128 +#: vibes_auth/serializers.py:107 vibes_auth/serializers.py:129 msgid "no active account" msgstr "Aucun compte actif trouvé" -#: vibes_auth/serializers.py:199 +#: vibes_auth/serializers.py:200 msgid "token_blacklisted" msgstr "Token sur liste noire" -#: vibes_auth/serializers.py:204 +#: vibes_auth/serializers.py:205 msgid "invalid token" msgstr "Jeton non valide" -#: vibes_auth/serializers.py:210 +#: vibes_auth/serializers.py:211 msgid "no user uuid claim present in token" -msgstr "Aucune revendication d'uuid d'utilisateur n'est présente dans le jeton" +msgstr "" +"Aucune revendication d'uuid d'utilisateur n'est présente dans le jeton" -#: vibes_auth/serializers.py:212 +#: vibes_auth/serializers.py:213 msgid "user does not exist" msgstr "L'utilisateur n'existe pas" @@ -347,7 +352,8 @@ msgstr "" #: vibes_auth/templates/user_reset_password_email.html:88 msgid "if you did not send this request, please ignore this email." -msgstr "Si vous n'avez pas envoyé cette demande, veuillez ignorer ce courriel." +msgstr "" +"Si vous n'avez pas envoyé cette demande, veuillez ignorer ce courriel." #: vibes_auth/templates/user_reset_password_email.html:89 #, python-format @@ -370,8 +376,8 @@ msgid "" "thank you for signing up for %(project_name)s. please activate your account " "by clicking the button below:" msgstr "" -"Merci de vous être inscrit à %(project_name)s. Veuillez activer votre compte " -"en cliquant sur le bouton ci-dessous :" +"Merci de vous être inscrit à %(project_name)s. Veuillez activer votre compte" +" en cliquant sur le bouton ci-dessous :" #: vibes_auth/templates/user_verification_email.html:95 msgid "" @@ -386,8 +392,7 @@ msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" msgstr "" -"Si le bouton ci-dessus ne fonctionne pas, veuillez copier et coller l'URL " -"suivante\n" +"Si le bouton ci-dessus ne fonctionne pas, veuillez copier et coller l'URL suivante\n" " suivante dans votre navigateur web :" #: vibes_auth/templates/user_verification_email.html:101 @@ -426,10 +431,10 @@ msgstr "" msgid "the token is invalid" msgstr "Le jeton n'est pas valide" -#: vibes_auth/viewsets.py:87 +#: vibes_auth/viewsets.py:88 msgid "password reset successfully" msgstr "Le mot de passe a été réinitialisé avec succès !" -#: vibes_auth/viewsets.py:120 +#: vibes_auth/viewsets.py:121 msgid "account already activated!" msgstr "Vous avez déjà activé le compte..." diff --git a/vibes_auth/locale/hi_IN/LC_MESSAGES/django.po b/vibes_auth/locale/hi_IN/LC_MESSAGES/django.po index fd1393e3..2ff1a39f 100644 --- a/vibes_auth/locale/hi_IN/LC_MESSAGES/django.po +++ b/vibes_auth/locale/hi_IN/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-08 19:42+0100\n" +"POT-Creation-Date: 2025-06-10 03:32+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -77,27 +77,27 @@ msgstr "" msgid "the token is valid" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:15 +#: vibes_auth/docs/drf/viewsets.py:16 msgid "create a new user" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:19 +#: vibes_auth/docs/drf/viewsets.py:20 msgid "retrieve a user's details" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:23 +#: vibes_auth/docs/drf/viewsets.py:24 msgid "update a user's details" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:28 +#: vibes_auth/docs/drf/viewsets.py:29 msgid "delete a user" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:32 +#: vibes_auth/docs/drf/viewsets.py:33 msgid "reset a user's password by sending a reset password email" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:37 +#: vibes_auth/docs/drf/viewsets.py:38 msgid "handle avatar upload for a user" msgstr "" @@ -106,7 +106,7 @@ msgid "confirm a user's password reset" msgstr "" #: vibes_auth/docs/drf/viewsets.py:57 vibes_auth/graphene/mutations.py:307 -#: vibes_auth/viewsets.py:72 +#: vibes_auth/viewsets.py:73 msgid "passwords do not match" msgstr "" @@ -118,6 +118,10 @@ msgstr "" msgid "activation link is invalid or account already activated" msgstr "" +#: vibes_auth/docs/drf/viewsets.py:71 +msgid "merge client-stored recently viewed products" +msgstr "" + #: vibes_auth/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" @@ -145,8 +149,8 @@ msgstr "" msgid "Invalid attribute format: {attribute_pair}" msgstr "" -#: vibes_auth/graphene/mutations.py:263 vibes_auth/viewsets.py:115 -#: vibes_auth/viewsets.py:134 +#: vibes_auth/graphene/mutations.py:263 vibes_auth/viewsets.py:116 +#: vibes_auth/viewsets.py:135 msgid "activation link is invalid!" msgstr "" @@ -158,7 +162,7 @@ msgstr "" msgid "something went wrong: {e!s}" msgstr "" -#: vibes_auth/graphene/mutations.py:314 vibes_auth/viewsets.py:83 +#: vibes_auth/graphene/mutations.py:314 vibes_auth/viewsets.py:84 msgid "token is invalid!" msgstr "" @@ -277,23 +281,23 @@ msgstr "" msgid "blacklisted tokens" msgstr "" -#: vibes_auth/serializers.py:106 vibes_auth/serializers.py:128 +#: vibes_auth/serializers.py:107 vibes_auth/serializers.py:129 msgid "no active account" msgstr "" -#: vibes_auth/serializers.py:199 +#: vibes_auth/serializers.py:200 msgid "token_blacklisted" msgstr "" -#: vibes_auth/serializers.py:204 +#: vibes_auth/serializers.py:205 msgid "invalid token" msgstr "" -#: vibes_auth/serializers.py:210 +#: vibes_auth/serializers.py:211 msgid "no user uuid claim present in token" msgstr "" -#: vibes_auth/serializers.py:212 +#: vibes_auth/serializers.py:213 msgid "user does not exist" msgstr "" @@ -404,10 +408,10 @@ msgstr "" msgid "the token is invalid" msgstr "" -#: vibes_auth/viewsets.py:87 +#: vibes_auth/viewsets.py:88 msgid "password reset successfully" msgstr "" -#: vibes_auth/viewsets.py:120 +#: vibes_auth/viewsets.py:121 msgid "account already activated!" msgstr "" diff --git a/vibes_auth/locale/it_IT/LC_MESSAGES/django.mo b/vibes_auth/locale/it_IT/LC_MESSAGES/django.mo index 3be6a736..d33cce98 100644 Binary files a/vibes_auth/locale/it_IT/LC_MESSAGES/django.mo and b/vibes_auth/locale/it_IT/LC_MESSAGES/django.mo differ diff --git a/vibes_auth/locale/it_IT/LC_MESSAGES/django.po b/vibes_auth/locale/it_IT/LC_MESSAGES/django.po index 617f6454..ce91b619 100644 --- a/vibes_auth/locale/it_IT/LC_MESSAGES/django.po +++ b/vibes_auth/locale/it_IT/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-08 19:42+0100\n" +"POT-Creation-Date: 2025-06-10 03:32+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -75,29 +75,29 @@ msgstr "Verifica di un token (aggiornamento o accesso)." msgid "the token is valid" msgstr "Il token è valido" -#: vibes_auth/docs/drf/viewsets.py:15 +#: vibes_auth/docs/drf/viewsets.py:16 msgid "create a new user" msgstr "Creare un nuovo utente" -#: vibes_auth/docs/drf/viewsets.py:19 +#: vibes_auth/docs/drf/viewsets.py:20 msgid "retrieve a user's details" msgstr "Recuperare i dettagli di un utente" -#: vibes_auth/docs/drf/viewsets.py:23 +#: vibes_auth/docs/drf/viewsets.py:24 msgid "update a user's details" msgstr "Aggiornare i dettagli di un utente" -#: vibes_auth/docs/drf/viewsets.py:28 +#: vibes_auth/docs/drf/viewsets.py:29 msgid "delete a user" msgstr "Eliminare un utente" -#: vibes_auth/docs/drf/viewsets.py:32 +#: vibes_auth/docs/drf/viewsets.py:33 msgid "reset a user's password by sending a reset password email" msgstr "" "Reimpostare la password di un utente inviando un'e-mail di reimpostazione " "della password" -#: vibes_auth/docs/drf/viewsets.py:37 +#: vibes_auth/docs/drf/viewsets.py:38 msgid "handle avatar upload for a user" msgstr "Gestire il caricamento dell'avatar per un utente" @@ -106,7 +106,7 @@ msgid "confirm a user's password reset" msgstr "Confermare la reimpostazione della password di un utente" #: vibes_auth/docs/drf/viewsets.py:57 vibes_auth/graphene/mutations.py:307 -#: vibes_auth/viewsets.py:72 +#: vibes_auth/viewsets.py:73 msgid "passwords do not match" msgstr "Le password non corrispondono" @@ -118,6 +118,10 @@ msgstr "Attivare l'account di un utente" msgid "activation link is invalid or account already activated" msgstr "Il link di attivazione non è valido o l'account è già stato attivato." +#: vibes_auth/docs/drf/viewsets.py:71 +msgid "merge client-stored recently viewed products" +msgstr "Unire i prodotti memorizzati dal cliente e visti di recente" + #: vibes_auth/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "L'uuid b64-encoded dell'utente che ci ha segnalato il nuovo utente." @@ -145,8 +149,8 @@ msgstr "Numero di telefono malformato: {phone_number}" msgid "Invalid attribute format: {attribute_pair}" msgstr "Formato attributo non valido: {attribute_pair}" -#: vibes_auth/graphene/mutations.py:263 vibes_auth/viewsets.py:115 -#: vibes_auth/viewsets.py:134 +#: vibes_auth/graphene/mutations.py:263 vibes_auth/viewsets.py:116 +#: vibes_auth/viewsets.py:135 msgid "activation link is invalid!" msgstr "Il link di attivazione non è valido!" @@ -158,14 +162,14 @@ msgstr "L'account è già stato attivato..." msgid "something went wrong: {e!s}" msgstr "Qualcosa è andato storto: {e!s}" -#: vibes_auth/graphene/mutations.py:314 vibes_auth/viewsets.py:83 +#: vibes_auth/graphene/mutations.py:314 vibes_auth/viewsets.py:84 msgid "token is invalid!" msgstr "Il gettone non è valido!" #: vibes_auth/graphene/object_types.py:39 msgid "" -"the products this user has viewed most recently (max 48), in reverse‐" -"chronological order" +"the products this user has viewed most recently (max 48), in " +"reverse‐chronological order" msgstr "" "I prodotti che questo utente ha visualizzato più di recente (max 48), in " "ordine cronologico inverso." @@ -281,23 +285,23 @@ msgstr "Token in lista nera" msgid "blacklisted tokens" msgstr "Gettoni nella lista nera" -#: vibes_auth/serializers.py:106 vibes_auth/serializers.py:128 +#: vibes_auth/serializers.py:107 vibes_auth/serializers.py:129 msgid "no active account" msgstr "Nessun conto attivo trovato" -#: vibes_auth/serializers.py:199 +#: vibes_auth/serializers.py:200 msgid "token_blacklisted" msgstr "Token nella lista nera" -#: vibes_auth/serializers.py:204 +#: vibes_auth/serializers.py:205 msgid "invalid token" msgstr "Token non valido" -#: vibes_auth/serializers.py:210 +#: vibes_auth/serializers.py:211 msgid "no user uuid claim present in token" msgstr "Nessuna richiesta di uuid utente presente nel token" -#: vibes_auth/serializers.py:212 +#: vibes_auth/serializers.py:213 msgid "user does not exist" msgstr "L'utente non esiste" @@ -420,10 +424,10 @@ msgstr "" msgid "the token is invalid" msgstr "Il token non è valido" -#: vibes_auth/viewsets.py:87 +#: vibes_auth/viewsets.py:88 msgid "password reset successfully" msgstr "La password è stata reimpostata con successo!" -#: vibes_auth/viewsets.py:120 +#: vibes_auth/viewsets.py:121 msgid "account already activated!" msgstr "Avete già attivato l'account..." diff --git a/vibes_auth/locale/ja_JP/LC_MESSAGES/django.mo b/vibes_auth/locale/ja_JP/LC_MESSAGES/django.mo index 783f1fbe..a70d76a5 100644 Binary files a/vibes_auth/locale/ja_JP/LC_MESSAGES/django.mo and b/vibes_auth/locale/ja_JP/LC_MESSAGES/django.mo differ diff --git a/vibes_auth/locale/ja_JP/LC_MESSAGES/django.po b/vibes_auth/locale/ja_JP/LC_MESSAGES/django.po index a50ce9f5..f6d9da85 100644 --- a/vibes_auth/locale/ja_JP/LC_MESSAGES/django.po +++ b/vibes_auth/locale/ja_JP/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-08 19:42+0100\n" +"POT-Creation-Date: 2025-06-10 03:32+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -74,27 +74,27 @@ msgstr "トークンを確認する(リフレッシュまたはアクセス) msgid "the token is valid" msgstr "トークンは有効です" -#: vibes_auth/docs/drf/viewsets.py:15 +#: vibes_auth/docs/drf/viewsets.py:16 msgid "create a new user" msgstr "新規ユーザーの作成" -#: vibes_auth/docs/drf/viewsets.py:19 +#: vibes_auth/docs/drf/viewsets.py:20 msgid "retrieve a user's details" msgstr "ユーザーの詳細を取得する" -#: vibes_auth/docs/drf/viewsets.py:23 +#: vibes_auth/docs/drf/viewsets.py:24 msgid "update a user's details" msgstr "ユーザー情報の更新" -#: vibes_auth/docs/drf/viewsets.py:28 +#: vibes_auth/docs/drf/viewsets.py:29 msgid "delete a user" msgstr "ユーザーを削除する" -#: vibes_auth/docs/drf/viewsets.py:32 +#: vibes_auth/docs/drf/viewsets.py:33 msgid "reset a user's password by sending a reset password email" msgstr "パスワード再設定メールを送信して、ユーザーのパスワードを再設定する。" -#: vibes_auth/docs/drf/viewsets.py:37 +#: vibes_auth/docs/drf/viewsets.py:38 msgid "handle avatar upload for a user" msgstr "ユーザーのアバターアップロードを処理する" @@ -103,7 +103,7 @@ msgid "confirm a user's password reset" msgstr "ユーザーのパスワード・リセットを確認する" #: vibes_auth/docs/drf/viewsets.py:57 vibes_auth/graphene/mutations.py:307 -#: vibes_auth/viewsets.py:72 +#: vibes_auth/viewsets.py:73 msgid "passwords do not match" msgstr "パスワードが一致しない" @@ -113,9 +113,11 @@ msgstr "ユーザーアカウントの有効化" #: vibes_auth/docs/drf/viewsets.py:66 msgid "activation link is invalid or account already activated" -msgstr "" -"アクティベーションリンクが無効であるか、アカウントがすでにアクティベーション" -"されています。" +msgstr "アクティベーションリンクが無効であるか、アカウントがすでにアクティベーションされています。" + +#: vibes_auth/docs/drf/viewsets.py:71 +msgid "merge client-stored recently viewed products" +msgstr "クライアントが最近閲覧した商品をマージする" #: vibes_auth/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." @@ -144,8 +146,8 @@ msgstr "不正な電話番号:{phone_number}。" msgid "Invalid attribute format: {attribute_pair}" msgstr "無効な属性形式です:{attribute_pair}。" -#: vibes_auth/graphene/mutations.py:263 vibes_auth/viewsets.py:115 -#: vibes_auth/viewsets.py:134 +#: vibes_auth/graphene/mutations.py:263 vibes_auth/viewsets.py:116 +#: vibes_auth/viewsets.py:135 msgid "activation link is invalid!" msgstr "アクティベーションリンクが無効です!" @@ -157,14 +159,14 @@ msgstr "アカウントはすでに有効になっています..." msgid "something went wrong: {e!s}" msgstr "何かが間違っていた:{e!s}" -#: vibes_auth/graphene/mutations.py:314 vibes_auth/viewsets.py:83 +#: vibes_auth/graphene/mutations.py:314 vibes_auth/viewsets.py:84 msgid "token is invalid!" msgstr "トークンが無効です!" #: vibes_auth/graphene/object_types.py:39 msgid "" -"the products this user has viewed most recently (max 48), in reverse‐" -"chronological order" +"the products this user has viewed most recently (max 48), in " +"reverse‐chronological order" msgstr "このユーザーが最近閲覧した商品(最大48件)を逆順に表示します。" #: vibes_auth/graphene/object_types.py:41 vibes_auth/models.py:108 @@ -276,23 +278,23 @@ msgstr "ブラックリストトークン" msgid "blacklisted tokens" msgstr "ブラックリストに載ったトークン" -#: vibes_auth/serializers.py:106 vibes_auth/serializers.py:128 +#: vibes_auth/serializers.py:107 vibes_auth/serializers.py:129 msgid "no active account" msgstr "アクティブなアカウントが見つかりません" -#: vibes_auth/serializers.py:199 +#: vibes_auth/serializers.py:200 msgid "token_blacklisted" msgstr "トークンのブラックリスト入り" -#: vibes_auth/serializers.py:204 +#: vibes_auth/serializers.py:205 msgid "invalid token" msgstr "無効なトークン" -#: vibes_auth/serializers.py:210 +#: vibes_auth/serializers.py:211 msgid "no user uuid claim present in token" msgstr "トークンにユーザー uuid クレームが存在しない" -#: vibes_auth/serializers.py:212 +#: vibes_auth/serializers.py:213 msgid "user does not exist" msgstr "ユーザーが存在しない" @@ -319,9 +321,7 @@ msgstr "こんにちは、%(user_first_name)sです、" msgid "" "we have received a request to reset your password. please reset your " "password by clicking the button below:" -msgstr "" -"パスワードの再設定依頼が届いております。以下のボタンをクリックして、パスワー" -"ドをリセットしてください:" +msgstr "パスワードの再設定依頼が届いております。以下のボタンをクリックして、パスワードをリセットしてください:" #: vibes_auth/templates/user_reset_password_email.html:84 msgid "reset password" @@ -331,9 +331,7 @@ msgstr "パスワードのリセット" msgid "" "if the button above does not work, please copy and paste the following URL " "into your web browser:" -msgstr "" -"上記のボタンが機能しない場合は、以下のURLをコピーしてウェブブラウザに貼り付け" -"てください:" +msgstr "上記のボタンが機能しない場合は、以下のURLをコピーしてウェブブラウザに貼り付けてください:" #: vibes_auth/templates/user_reset_password_email.html:88 msgid "if you did not send this request, please ignore this email." @@ -359,9 +357,7 @@ msgstr "アカウントの有効化" msgid "" "thank you for signing up for %(project_name)s. please activate your account " "by clicking the button below:" -msgstr "" -"%(project_name)sにご登録いただきありがとうございます。下のボタンをクリックし" -"てアカウントを有効にしてください:" +msgstr "%(project_name)sにご登録いただきありがとうございます。下のボタンをクリックしてアカウントを有効にしてください:" #: vibes_auth/templates/user_verification_email.html:95 msgid "" @@ -376,8 +372,7 @@ msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" msgstr "" -"上記のボタンが機能しない場合は、次のURLをコピーしてウェブブラウザに貼り付けて" -"ください。\n" +"上記のボタンが機能しない場合は、次のURLをコピーしてウェブブラウザに貼り付けてください。\n" " をウェブブラウザに貼り付けてください:" #: vibes_auth/templates/user_verification_email.html:101 @@ -408,18 +403,16 @@ msgstr "{config.PROJECT_NAME}。| パスワードのリセット" msgid "" "invalid phone number format. the number must be entered in the format: " "\"+999999999\". up to 15 digits allowed." -msgstr "" -"電話番号の形式が無効です。電話番号は次の形式で入力してください:" -"\"+999999999\".15桁まで入力可能です。" +msgstr "電話番号の形式が無効です。電話番号は次の形式で入力してください:\"+999999999\".15桁まで入力可能です。" #: vibes_auth/views.py:57 msgid "the token is invalid" msgstr "トークンが無効" -#: vibes_auth/viewsets.py:87 +#: vibes_auth/viewsets.py:88 msgid "password reset successfully" msgstr "パスワードのリセットに成功しました!" -#: vibes_auth/viewsets.py:120 +#: vibes_auth/viewsets.py:121 msgid "account already activated!" msgstr "あなたはすでにアカウントを有効にしています..." diff --git a/vibes_auth/locale/kk_KZ/LC_MESSAGES/django.po b/vibes_auth/locale/kk_KZ/LC_MESSAGES/django.po index fd1393e3..2ff1a39f 100644 --- a/vibes_auth/locale/kk_KZ/LC_MESSAGES/django.po +++ b/vibes_auth/locale/kk_KZ/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-08 19:42+0100\n" +"POT-Creation-Date: 2025-06-10 03:32+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -77,27 +77,27 @@ msgstr "" msgid "the token is valid" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:15 +#: vibes_auth/docs/drf/viewsets.py:16 msgid "create a new user" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:19 +#: vibes_auth/docs/drf/viewsets.py:20 msgid "retrieve a user's details" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:23 +#: vibes_auth/docs/drf/viewsets.py:24 msgid "update a user's details" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:28 +#: vibes_auth/docs/drf/viewsets.py:29 msgid "delete a user" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:32 +#: vibes_auth/docs/drf/viewsets.py:33 msgid "reset a user's password by sending a reset password email" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:37 +#: vibes_auth/docs/drf/viewsets.py:38 msgid "handle avatar upload for a user" msgstr "" @@ -106,7 +106,7 @@ msgid "confirm a user's password reset" msgstr "" #: vibes_auth/docs/drf/viewsets.py:57 vibes_auth/graphene/mutations.py:307 -#: vibes_auth/viewsets.py:72 +#: vibes_auth/viewsets.py:73 msgid "passwords do not match" msgstr "" @@ -118,6 +118,10 @@ msgstr "" msgid "activation link is invalid or account already activated" msgstr "" +#: vibes_auth/docs/drf/viewsets.py:71 +msgid "merge client-stored recently viewed products" +msgstr "" + #: vibes_auth/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" @@ -145,8 +149,8 @@ msgstr "" msgid "Invalid attribute format: {attribute_pair}" msgstr "" -#: vibes_auth/graphene/mutations.py:263 vibes_auth/viewsets.py:115 -#: vibes_auth/viewsets.py:134 +#: vibes_auth/graphene/mutations.py:263 vibes_auth/viewsets.py:116 +#: vibes_auth/viewsets.py:135 msgid "activation link is invalid!" msgstr "" @@ -158,7 +162,7 @@ msgstr "" msgid "something went wrong: {e!s}" msgstr "" -#: vibes_auth/graphene/mutations.py:314 vibes_auth/viewsets.py:83 +#: vibes_auth/graphene/mutations.py:314 vibes_auth/viewsets.py:84 msgid "token is invalid!" msgstr "" @@ -277,23 +281,23 @@ msgstr "" msgid "blacklisted tokens" msgstr "" -#: vibes_auth/serializers.py:106 vibes_auth/serializers.py:128 +#: vibes_auth/serializers.py:107 vibes_auth/serializers.py:129 msgid "no active account" msgstr "" -#: vibes_auth/serializers.py:199 +#: vibes_auth/serializers.py:200 msgid "token_blacklisted" msgstr "" -#: vibes_auth/serializers.py:204 +#: vibes_auth/serializers.py:205 msgid "invalid token" msgstr "" -#: vibes_auth/serializers.py:210 +#: vibes_auth/serializers.py:211 msgid "no user uuid claim present in token" msgstr "" -#: vibes_auth/serializers.py:212 +#: vibes_auth/serializers.py:213 msgid "user does not exist" msgstr "" @@ -404,10 +408,10 @@ msgstr "" msgid "the token is invalid" msgstr "" -#: vibes_auth/viewsets.py:87 +#: vibes_auth/viewsets.py:88 msgid "password reset successfully" msgstr "" -#: vibes_auth/viewsets.py:120 +#: vibes_auth/viewsets.py:121 msgid "account already activated!" msgstr "" diff --git a/vibes_auth/locale/nl_NL/LC_MESSAGES/django.mo b/vibes_auth/locale/nl_NL/LC_MESSAGES/django.mo index 39257f6e..f4ca48f5 100644 Binary files a/vibes_auth/locale/nl_NL/LC_MESSAGES/django.mo and b/vibes_auth/locale/nl_NL/LC_MESSAGES/django.mo differ diff --git a/vibes_auth/locale/nl_NL/LC_MESSAGES/django.po b/vibes_auth/locale/nl_NL/LC_MESSAGES/django.po index 6f8d501d..db7d5cfe 100644 --- a/vibes_auth/locale/nl_NL/LC_MESSAGES/django.po +++ b/vibes_auth/locale/nl_NL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-08 19:42+0100\n" +"POT-Creation-Date: 2025-06-10 03:32+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -74,29 +74,29 @@ msgstr "Een token verifiëren (verversen of toegang)." msgid "the token is valid" msgstr "The token is valid" -#: vibes_auth/docs/drf/viewsets.py:15 +#: vibes_auth/docs/drf/viewsets.py:16 msgid "create a new user" msgstr "Een nieuwe gebruiker maken" -#: vibes_auth/docs/drf/viewsets.py:19 +#: vibes_auth/docs/drf/viewsets.py:20 msgid "retrieve a user's details" msgstr "De gegevens van een gebruiker ophalen" -#: vibes_auth/docs/drf/viewsets.py:23 +#: vibes_auth/docs/drf/viewsets.py:24 msgid "update a user's details" msgstr "De gegevens van een gebruiker bijwerken" -#: vibes_auth/docs/drf/viewsets.py:28 +#: vibes_auth/docs/drf/viewsets.py:29 msgid "delete a user" msgstr "Een gebruiker verwijderen" -#: vibes_auth/docs/drf/viewsets.py:32 +#: vibes_auth/docs/drf/viewsets.py:33 msgid "reset a user's password by sending a reset password email" msgstr "" "Het wachtwoord van een gebruiker opnieuw instellen door een e-mail met het " "wachtwoord opnieuw in te stellen" -#: vibes_auth/docs/drf/viewsets.py:37 +#: vibes_auth/docs/drf/viewsets.py:38 msgid "handle avatar upload for a user" msgstr "Avatar uploaden voor een gebruiker afhandelen" @@ -105,7 +105,7 @@ msgid "confirm a user's password reset" msgstr "Bevestig het resetten van het wachtwoord van een gebruiker" #: vibes_auth/docs/drf/viewsets.py:57 vibes_auth/graphene/mutations.py:307 -#: vibes_auth/viewsets.py:72 +#: vibes_auth/viewsets.py:73 msgid "passwords do not match" msgstr "Wachtwoorden komen niet overeen" @@ -117,6 +117,10 @@ msgstr "Een gebruikersaccount activeren" msgid "activation link is invalid or account already activated" msgstr "Activeringslink is ongeldig of account is al geactiveerd" +#: vibes_auth/docs/drf/viewsets.py:71 +msgid "merge client-stored recently viewed products" +msgstr "Laatst bekeken producten samenvoegen" + #: vibes_auth/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" @@ -146,8 +150,8 @@ msgstr "Misvormd telefoonnummer: {phone_number}" msgid "Invalid attribute format: {attribute_pair}" msgstr "Ongeldig attribuutformaat: {attribute_pair}" -#: vibes_auth/graphene/mutations.py:263 vibes_auth/viewsets.py:115 -#: vibes_auth/viewsets.py:134 +#: vibes_auth/graphene/mutations.py:263 vibes_auth/viewsets.py:116 +#: vibes_auth/viewsets.py:135 msgid "activation link is invalid!" msgstr "Activeringslink is ongeldig!" @@ -159,14 +163,14 @@ msgstr "Account is al geactiveerd..." msgid "something went wrong: {e!s}" msgstr "Er ging iets mis: {e!s}" -#: vibes_auth/graphene/mutations.py:314 vibes_auth/viewsets.py:83 +#: vibes_auth/graphene/mutations.py:314 vibes_auth/viewsets.py:84 msgid "token is invalid!" msgstr "Token is invalid!" #: vibes_auth/graphene/object_types.py:39 msgid "" -"the products this user has viewed most recently (max 48), in reverse‐" -"chronological order" +"the products this user has viewed most recently (max 48), in " +"reverse‐chronological order" msgstr "" "De producten die deze gebruiker het laatst heeft bekeken (max 48), in " "omgekeerd-chronologische volgorde." @@ -280,23 +284,23 @@ msgstr "Token op zwarte lijst" msgid "blacklisted tokens" msgstr "Tokens op de zwarte lijst" -#: vibes_auth/serializers.py:106 vibes_auth/serializers.py:128 +#: vibes_auth/serializers.py:107 vibes_auth/serializers.py:129 msgid "no active account" msgstr "Geen actieve account gevonden" -#: vibes_auth/serializers.py:199 +#: vibes_auth/serializers.py:200 msgid "token_blacklisted" msgstr "Token op zwarte lijst" -#: vibes_auth/serializers.py:204 +#: vibes_auth/serializers.py:205 msgid "invalid token" msgstr "Invalid token" -#: vibes_auth/serializers.py:210 +#: vibes_auth/serializers.py:211 msgid "no user uuid claim present in token" msgstr "Geen gebruiker uuid claim aanwezig in token" -#: vibes_auth/serializers.py:212 +#: vibes_auth/serializers.py:213 msgid "user does not exist" msgstr "Gebruiker bestaat niet" @@ -324,8 +328,8 @@ msgid "" "we have received a request to reset your password. please reset your " "password by clicking the button below:" msgstr "" -"We hebben een verzoek ontvangen om je wachtwoord opnieuw in te stellen. Klik " -"op de knop hieronder om je wachtwoord opnieuw in te stellen:" +"We hebben een verzoek ontvangen om je wachtwoord opnieuw in te stellen. Klik" +" op de knop hieronder om je wachtwoord opnieuw in te stellen:" #: vibes_auth/templates/user_reset_password_email.html:84 msgid "reset password" @@ -364,8 +368,8 @@ msgid "" "thank you for signing up for %(project_name)s. please activate your account " "by clicking the button below:" msgstr "" -"Bedankt voor het aanmelden bij %(project_name)s. Activeer je account door op " -"de onderstaande knop te klikken:" +"Bedankt voor het aanmelden bij %(project_name)s. Activeer je account door op" +" de onderstaande knop te klikken:" #: vibes_auth/templates/user_verification_email.html:95 msgid "" @@ -419,10 +423,10 @@ msgstr "" msgid "the token is invalid" msgstr "Het token is ongeldig" -#: vibes_auth/viewsets.py:87 +#: vibes_auth/viewsets.py:88 msgid "password reset successfully" msgstr "Wachtwoord is succesvol gereset!" -#: vibes_auth/viewsets.py:120 +#: vibes_auth/viewsets.py:121 msgid "account already activated!" msgstr "Je hebt de account al geactiveerd..." diff --git a/vibes_auth/locale/pl_PL/LC_MESSAGES/django.mo b/vibes_auth/locale/pl_PL/LC_MESSAGES/django.mo index 98b928e1..f44ab7a3 100644 Binary files a/vibes_auth/locale/pl_PL/LC_MESSAGES/django.mo and b/vibes_auth/locale/pl_PL/LC_MESSAGES/django.mo differ diff --git a/vibes_auth/locale/pl_PL/LC_MESSAGES/django.po b/vibes_auth/locale/pl_PL/LC_MESSAGES/django.po index ef4bd4ef..db2393c2 100644 --- a/vibes_auth/locale/pl_PL/LC_MESSAGES/django.po +++ b/vibes_auth/locale/pl_PL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-08 19:42+0100\n" +"POT-Creation-Date: 2025-06-10 03:32+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -52,7 +52,8 @@ msgstr "Uzyskanie pary tokenów" #: vibes_auth/docs/drf/views.py:16 msgid "obtain a token pair (refresh and access) for authentication." -msgstr "Uzyskanie pary tokenów (odświeżenie i dostęp) w celu uwierzytelnienia." +msgstr "" +"Uzyskanie pary tokenów (odświeżenie i dostęp) w celu uwierzytelnienia." #: vibes_auth/docs/drf/views.py:35 msgid "refresh a token pair" @@ -74,29 +75,29 @@ msgstr "Weryfikacja tokena (odświeżenie lub dostęp)." msgid "the token is valid" msgstr "Token jest ważny" -#: vibes_auth/docs/drf/viewsets.py:15 +#: vibes_auth/docs/drf/viewsets.py:16 msgid "create a new user" msgstr "Tworzenie nowego użytkownika" -#: vibes_auth/docs/drf/viewsets.py:19 +#: vibes_auth/docs/drf/viewsets.py:20 msgid "retrieve a user's details" msgstr "Pobieranie danych użytkownika" -#: vibes_auth/docs/drf/viewsets.py:23 +#: vibes_auth/docs/drf/viewsets.py:24 msgid "update a user's details" msgstr "Aktualizacja danych użytkownika" -#: vibes_auth/docs/drf/viewsets.py:28 +#: vibes_auth/docs/drf/viewsets.py:29 msgid "delete a user" msgstr "Usuwanie użytkownika" -#: vibes_auth/docs/drf/viewsets.py:32 +#: vibes_auth/docs/drf/viewsets.py:33 msgid "reset a user's password by sending a reset password email" msgstr "" "Zresetowanie hasła użytkownika poprzez wysłanie wiadomości e-mail " "resetującej hasło." -#: vibes_auth/docs/drf/viewsets.py:37 +#: vibes_auth/docs/drf/viewsets.py:38 msgid "handle avatar upload for a user" msgstr "Obsługa przesyłania awatara dla użytkownika" @@ -105,7 +106,7 @@ msgid "confirm a user's password reset" msgstr "Potwierdzenie zresetowania hasła użytkownika" #: vibes_auth/docs/drf/viewsets.py:57 vibes_auth/graphene/mutations.py:307 -#: vibes_auth/viewsets.py:72 +#: vibes_auth/viewsets.py:73 msgid "passwords do not match" msgstr "Hasła nie są zgodne" @@ -117,6 +118,10 @@ msgstr "Aktywacja konta użytkownika" msgid "activation link is invalid or account already activated" msgstr "Link aktywacyjny jest nieprawidłowy lub konto zostało już aktywowane." +#: vibes_auth/docs/drf/viewsets.py:71 +msgid "merge client-stored recently viewed products" +msgstr "Scalanie ostatnio oglądanych produktów przechowywanych przez klienta" + #: vibes_auth/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" @@ -146,8 +151,8 @@ msgstr "Zniekształcony numer telefonu: {phone_number}" msgid "Invalid attribute format: {attribute_pair}" msgstr "Nieprawidłowy format atrybutu: {attribute_pair}" -#: vibes_auth/graphene/mutations.py:263 vibes_auth/viewsets.py:115 -#: vibes_auth/viewsets.py:134 +#: vibes_auth/graphene/mutations.py:263 vibes_auth/viewsets.py:116 +#: vibes_auth/viewsets.py:135 msgid "activation link is invalid!" msgstr "Link aktywacyjny jest nieprawidłowy!" @@ -159,14 +164,14 @@ msgstr "Konto zostało już aktywowane..." msgid "something went wrong: {e!s}" msgstr "Coś poszło nie tak: {e!s}" -#: vibes_auth/graphene/mutations.py:314 vibes_auth/viewsets.py:83 +#: vibes_auth/graphene/mutations.py:314 vibes_auth/viewsets.py:84 msgid "token is invalid!" msgstr "Token jest nieprawidłowy!" #: vibes_auth/graphene/object_types.py:39 msgid "" -"the products this user has viewed most recently (max 48), in reverse‐" -"chronological order" +"the products this user has viewed most recently (max 48), in " +"reverse‐chronological order" msgstr "" "Produkty ostatnio przeglądane przez tego użytkownika (maks. 48), w " "kolejności odwrotnej do chronologicznej." @@ -280,23 +285,23 @@ msgstr "Token na czarnej liście" msgid "blacklisted tokens" msgstr "Tokeny znajdujące się na czarnej liście" -#: vibes_auth/serializers.py:106 vibes_auth/serializers.py:128 +#: vibes_auth/serializers.py:107 vibes_auth/serializers.py:129 msgid "no active account" msgstr "Nie znaleziono aktywnego konta" -#: vibes_auth/serializers.py:199 +#: vibes_auth/serializers.py:200 msgid "token_blacklisted" msgstr "Token na czarnej liście" -#: vibes_auth/serializers.py:204 +#: vibes_auth/serializers.py:205 msgid "invalid token" msgstr "Nieprawidłowy token" -#: vibes_auth/serializers.py:210 +#: vibes_auth/serializers.py:211 msgid "no user uuid claim present in token" msgstr "Brak oświadczenia uuid użytkownika w tokenie" -#: vibes_auth/serializers.py:212 +#: vibes_auth/serializers.py:213 msgid "user does not exist" msgstr "Użytkownik nie istnieje" @@ -412,17 +417,17 @@ msgid "" "invalid phone number format. the number must be entered in the format: " "\"+999999999\". up to 15 digits allowed." msgstr "" -"Nieprawidłowy format numeru telefonu. Numer musi być wprowadzony w formacie: " -"\"+999999999\". Dozwolone do 15 cyfr." +"Nieprawidłowy format numeru telefonu. Numer musi być wprowadzony w formacie:" +" \"+999999999\". Dozwolone do 15 cyfr." #: vibes_auth/views.py:57 msgid "the token is invalid" msgstr "Token jest nieprawidłowy" -#: vibes_auth/viewsets.py:87 +#: vibes_auth/viewsets.py:88 msgid "password reset successfully" msgstr "Hasło zostało pomyślnie zresetowane!" -#: vibes_auth/viewsets.py:120 +#: vibes_auth/viewsets.py:121 msgid "account already activated!" msgstr "Konto zostało już aktywowane..." diff --git a/vibes_auth/locale/pt_BR/LC_MESSAGES/django.mo b/vibes_auth/locale/pt_BR/LC_MESSAGES/django.mo index 73a2d8f6..12fe9085 100644 Binary files a/vibes_auth/locale/pt_BR/LC_MESSAGES/django.mo and b/vibes_auth/locale/pt_BR/LC_MESSAGES/django.mo differ diff --git a/vibes_auth/locale/pt_BR/LC_MESSAGES/django.po b/vibes_auth/locale/pt_BR/LC_MESSAGES/django.po index 0ba3f168..ca12911f 100644 --- a/vibes_auth/locale/pt_BR/LC_MESSAGES/django.po +++ b/vibes_auth/locale/pt_BR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-08 19:42+0100\n" +"POT-Creation-Date: 2025-06-10 03:32+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -74,28 +74,28 @@ msgstr "Verificar um token (atualização ou acesso)." msgid "the token is valid" msgstr "O token é válido" -#: vibes_auth/docs/drf/viewsets.py:15 +#: vibes_auth/docs/drf/viewsets.py:16 msgid "create a new user" msgstr "Criar um novo usuário" -#: vibes_auth/docs/drf/viewsets.py:19 +#: vibes_auth/docs/drf/viewsets.py:20 msgid "retrieve a user's details" msgstr "Recuperar os detalhes de um usuário" -#: vibes_auth/docs/drf/viewsets.py:23 +#: vibes_auth/docs/drf/viewsets.py:24 msgid "update a user's details" msgstr "Atualizar os detalhes de um usuário" -#: vibes_auth/docs/drf/viewsets.py:28 +#: vibes_auth/docs/drf/viewsets.py:29 msgid "delete a user" msgstr "Excluir um usuário" -#: vibes_auth/docs/drf/viewsets.py:32 +#: vibes_auth/docs/drf/viewsets.py:33 msgid "reset a user's password by sending a reset password email" msgstr "" "Redefinir a senha de um usuário enviando um e-mail de redefinição de senha" -#: vibes_auth/docs/drf/viewsets.py:37 +#: vibes_auth/docs/drf/viewsets.py:38 msgid "handle avatar upload for a user" msgstr "Manipular o upload do avatar de um usuário" @@ -104,7 +104,7 @@ msgid "confirm a user's password reset" msgstr "Confirmar a redefinição de senha de um usuário" #: vibes_auth/docs/drf/viewsets.py:57 vibes_auth/graphene/mutations.py:307 -#: vibes_auth/viewsets.py:72 +#: vibes_auth/viewsets.py:73 msgid "passwords do not match" msgstr "As senhas não correspondem" @@ -116,6 +116,10 @@ msgstr "Ativar a conta de um usuário" msgid "activation link is invalid or account already activated" msgstr "O link de ativação é inválido ou a conta já está ativada" +#: vibes_auth/docs/drf/viewsets.py:71 +msgid "merge client-stored recently viewed products" +msgstr "Mesclar produtos recentemente visualizados armazenados pelo cliente" + #: vibes_auth/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "O uuid codificado em b64 do usuário que nos indicou o novo usuário." @@ -143,8 +147,8 @@ msgstr "Número de telefone malformado: {phone_number}" msgid "Invalid attribute format: {attribute_pair}" msgstr "Formato de atributo inválido: {attribute_pair}" -#: vibes_auth/graphene/mutations.py:263 vibes_auth/viewsets.py:115 -#: vibes_auth/viewsets.py:134 +#: vibes_auth/graphene/mutations.py:263 vibes_auth/viewsets.py:116 +#: vibes_auth/viewsets.py:135 msgid "activation link is invalid!" msgstr "O link de ativação é inválido!" @@ -156,17 +160,17 @@ msgstr "A conta já foi ativada..." msgid "something went wrong: {e!s}" msgstr "Algo deu errado: {e!s}" -#: vibes_auth/graphene/mutations.py:314 vibes_auth/viewsets.py:83 +#: vibes_auth/graphene/mutations.py:314 vibes_auth/viewsets.py:84 msgid "token is invalid!" msgstr "O token é inválido!" #: vibes_auth/graphene/object_types.py:39 msgid "" -"the products this user has viewed most recently (max 48), in reverse‐" -"chronological order" +"the products this user has viewed most recently (max 48), in " +"reverse‐chronological order" msgstr "" -"Os produtos que esse usuário visualizou mais recentemente (máximo de 48), em " -"ordem cronológica inversa." +"Os produtos que esse usuário visualizou mais recentemente (máximo de 48), em" +" ordem cronológica inversa." #: vibes_auth/graphene/object_types.py:41 vibes_auth/models.py:108 msgid "groups" @@ -277,23 +281,23 @@ msgstr "Token na lista negra" msgid "blacklisted tokens" msgstr "Tokens na lista negra" -#: vibes_auth/serializers.py:106 vibes_auth/serializers.py:128 +#: vibes_auth/serializers.py:107 vibes_auth/serializers.py:129 msgid "no active account" msgstr "Nenhuma conta ativa encontrada" -#: vibes_auth/serializers.py:199 +#: vibes_auth/serializers.py:200 msgid "token_blacklisted" msgstr "Token na lista negra" -#: vibes_auth/serializers.py:204 +#: vibes_auth/serializers.py:205 msgid "invalid token" msgstr "Token inválido" -#: vibes_auth/serializers.py:210 +#: vibes_auth/serializers.py:211 msgid "no user uuid claim present in token" msgstr "Nenhuma reivindicação de uuid de usuário presente no token" -#: vibes_auth/serializers.py:212 +#: vibes_auth/serializers.py:213 msgid "user does not exist" msgstr "O usuário não existe" @@ -333,8 +337,8 @@ msgid "" "if the button above does not work, please copy and paste the following URL " "into your web browser:" msgstr "" -"Se o botão acima não funcionar, copie e cole o seguinte URL em seu navegador " -"da Web:" +"Se o botão acima não funcionar, copie e cole o seguinte URL em seu navegador" +" da Web:" #: vibes_auth/templates/user_reset_password_email.html:88 msgid "if you did not send this request, please ignore this email." @@ -416,10 +420,10 @@ msgstr "" msgid "the token is invalid" msgstr "O token é inválido" -#: vibes_auth/viewsets.py:87 +#: vibes_auth/viewsets.py:88 msgid "password reset successfully" msgstr "A senha foi redefinida com sucesso!" -#: vibes_auth/viewsets.py:120 +#: vibes_auth/viewsets.py:121 msgid "account already activated!" msgstr "Você já ativou a conta..." diff --git a/vibes_auth/locale/ro_RO/LC_MESSAGES/django.mo b/vibes_auth/locale/ro_RO/LC_MESSAGES/django.mo index cb57cb83..7e591fce 100644 Binary files a/vibes_auth/locale/ro_RO/LC_MESSAGES/django.mo and b/vibes_auth/locale/ro_RO/LC_MESSAGES/django.mo differ diff --git a/vibes_auth/locale/ro_RO/LC_MESSAGES/django.po b/vibes_auth/locale/ro_RO/LC_MESSAGES/django.po index 2ef17757..26e75927 100644 --- a/vibes_auth/locale/ro_RO/LC_MESSAGES/django.po +++ b/vibes_auth/locale/ro_RO/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-08 19:42+0100\n" +"POT-Creation-Date: 2025-06-10 03:32+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -75,29 +75,29 @@ msgstr "Verificarea unui jeton (reîmprospătare sau acces)." msgid "the token is valid" msgstr "Jetonul este valid" -#: vibes_auth/docs/drf/viewsets.py:15 +#: vibes_auth/docs/drf/viewsets.py:16 msgid "create a new user" msgstr "Creați un utilizator nou" -#: vibes_auth/docs/drf/viewsets.py:19 +#: vibes_auth/docs/drf/viewsets.py:20 msgid "retrieve a user's details" msgstr "Recuperarea detaliilor unui utilizator" -#: vibes_auth/docs/drf/viewsets.py:23 +#: vibes_auth/docs/drf/viewsets.py:24 msgid "update a user's details" msgstr "Actualizarea detaliilor unui utilizator" -#: vibes_auth/docs/drf/viewsets.py:28 +#: vibes_auth/docs/drf/viewsets.py:29 msgid "delete a user" msgstr "Ștergeți un utilizator" -#: vibes_auth/docs/drf/viewsets.py:32 +#: vibes_auth/docs/drf/viewsets.py:33 msgid "reset a user's password by sending a reset password email" msgstr "" "Resetați parola unui utilizator prin trimiterea unui e-mail de resetare a " "parolei" -#: vibes_auth/docs/drf/viewsets.py:37 +#: vibes_auth/docs/drf/viewsets.py:38 msgid "handle avatar upload for a user" msgstr "Gestionarea încărcării avatarului pentru un utilizator" @@ -106,7 +106,7 @@ msgid "confirm a user's password reset" msgstr "Confirmați resetarea parolei unui utilizator" #: vibes_auth/docs/drf/viewsets.py:57 vibes_auth/graphene/mutations.py:307 -#: vibes_auth/viewsets.py:72 +#: vibes_auth/viewsets.py:73 msgid "passwords do not match" msgstr "Parolele nu se potrivesc" @@ -118,6 +118,10 @@ msgstr "Activați contul unui utilizator" msgid "activation link is invalid or account already activated" msgstr "Linkul de activare este invalid sau contul este deja activat" +#: vibes_auth/docs/drf/viewsets.py:71 +msgid "merge client-stored recently viewed products" +msgstr "Fuzionați produsele recent vizualizate stocate de client" + #: vibes_auth/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" @@ -146,8 +150,8 @@ msgstr "Număr de telefon malformat: {phone_number}" msgid "Invalid attribute format: {attribute_pair}" msgstr "Format de atribut invalid: {attribute_pair}" -#: vibes_auth/graphene/mutations.py:263 vibes_auth/viewsets.py:115 -#: vibes_auth/viewsets.py:134 +#: vibes_auth/graphene/mutations.py:263 vibes_auth/viewsets.py:116 +#: vibes_auth/viewsets.py:135 msgid "activation link is invalid!" msgstr "Linkul de activare este invalid!" @@ -159,14 +163,14 @@ msgstr "Contul a fost deja activat..." msgid "something went wrong: {e!s}" msgstr "Ceva nu a mers bine: {e!s}" -#: vibes_auth/graphene/mutations.py:314 vibes_auth/viewsets.py:83 +#: vibes_auth/graphene/mutations.py:314 vibes_auth/viewsets.py:84 msgid "token is invalid!" msgstr "Token-ul nu este valabil!" #: vibes_auth/graphene/object_types.py:39 msgid "" -"the products this user has viewed most recently (max 48), in reverse‐" -"chronological order" +"the products this user has viewed most recently (max 48), in " +"reverse‐chronological order" msgstr "" "Produsele pe care acest utilizator le-a vizualizat cel mai recent (max 48), " "în ordine cronologică inversă." @@ -280,23 +284,23 @@ msgstr "Token pe lista neagră" msgid "blacklisted tokens" msgstr "Jetoane pe lista neagră" -#: vibes_auth/serializers.py:106 vibes_auth/serializers.py:128 +#: vibes_auth/serializers.py:107 vibes_auth/serializers.py:129 msgid "no active account" msgstr "Nu s-a găsit niciun cont activ" -#: vibes_auth/serializers.py:199 +#: vibes_auth/serializers.py:200 msgid "token_blacklisted" msgstr "Token pe lista neagră" -#: vibes_auth/serializers.py:204 +#: vibes_auth/serializers.py:205 msgid "invalid token" msgstr "Jeton invalid" -#: vibes_auth/serializers.py:210 +#: vibes_auth/serializers.py:211 msgid "no user uuid claim present in token" msgstr "În jeton nu este prezentă nicio cerere uuid a utilizatorului" -#: vibes_auth/serializers.py:212 +#: vibes_auth/serializers.py:213 msgid "user does not exist" msgstr "Utilizatorul nu există" @@ -380,8 +384,7 @@ msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" msgstr "" -"Dacă butonul de mai sus nu funcționează, vă rugăm să copiați și să lipiți " -"următoarea adresă URL\n" +"Dacă butonul de mai sus nu funcționează, vă rugăm să copiați și să lipiți următoarea adresă URL\n" " în browserul dvs. web:" #: vibes_auth/templates/user_verification_email.html:101 @@ -420,10 +423,10 @@ msgstr "" msgid "the token is invalid" msgstr "Jetonul nu este valabil" -#: vibes_auth/viewsets.py:87 +#: vibes_auth/viewsets.py:88 msgid "password reset successfully" msgstr "Parola a fost resetată cu succes!" -#: vibes_auth/viewsets.py:120 +#: vibes_auth/viewsets.py:121 msgid "account already activated!" msgstr "Ați activat deja contul..." diff --git a/vibes_auth/locale/ru_RU/LC_MESSAGES/django.mo b/vibes_auth/locale/ru_RU/LC_MESSAGES/django.mo index 4b4ed414..45df0244 100644 Binary files a/vibes_auth/locale/ru_RU/LC_MESSAGES/django.mo and b/vibes_auth/locale/ru_RU/LC_MESSAGES/django.mo differ diff --git a/vibes_auth/locale/ru_RU/LC_MESSAGES/django.po b/vibes_auth/locale/ru_RU/LC_MESSAGES/django.po index 1ab4ac34..22f8a62a 100644 --- a/vibes_auth/locale/ru_RU/LC_MESSAGES/django.po +++ b/vibes_auth/locale/ru_RU/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-08 19:42+0100\n" +"POT-Creation-Date: 2025-06-10 03:32+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -74,29 +74,29 @@ msgstr "Проверка маркера (обновление или досту msgid "the token is valid" msgstr "Токен действителен" -#: vibes_auth/docs/drf/viewsets.py:15 +#: vibes_auth/docs/drf/viewsets.py:16 msgid "create a new user" msgstr "Создайте нового пользователя" -#: vibes_auth/docs/drf/viewsets.py:19 +#: vibes_auth/docs/drf/viewsets.py:20 msgid "retrieve a user's details" msgstr "Получение информации о пользователе" -#: vibes_auth/docs/drf/viewsets.py:23 +#: vibes_auth/docs/drf/viewsets.py:24 msgid "update a user's details" msgstr "Обновление данных пользователя" -#: vibes_auth/docs/drf/viewsets.py:28 +#: vibes_auth/docs/drf/viewsets.py:29 msgid "delete a user" msgstr "Удалить пользователя" -#: vibes_auth/docs/drf/viewsets.py:32 +#: vibes_auth/docs/drf/viewsets.py:33 msgid "reset a user's password by sending a reset password email" msgstr "" "Сброс пароля пользователя путем отправки электронного сообщения о сбросе " "пароля" -#: vibes_auth/docs/drf/viewsets.py:37 +#: vibes_auth/docs/drf/viewsets.py:38 msgid "handle avatar upload for a user" msgstr "Обработка загрузки аватара для пользователя" @@ -105,7 +105,7 @@ msgid "confirm a user's password reset" msgstr "Подтверждение сброса пароля пользователя" #: vibes_auth/docs/drf/viewsets.py:57 vibes_auth/graphene/mutations.py:307 -#: vibes_auth/viewsets.py:72 +#: vibes_auth/viewsets.py:73 msgid "passwords do not match" msgstr "Пароли не совпадают" @@ -117,6 +117,11 @@ msgstr "Активация учетной записи пользователя" msgid "activation link is invalid or account already activated" msgstr "Ссылка на активацию недействительна или аккаунт уже активирован" +#: vibes_auth/docs/drf/viewsets.py:71 +msgid "merge client-stored recently viewed products" +msgstr "" +"Объедините недавно просмотренные продукты, хранящиеся в памяти клиента" + #: vibes_auth/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" @@ -146,8 +151,8 @@ msgstr "Некорректный номер телефона: {phone_number}" msgid "Invalid attribute format: {attribute_pair}" msgstr "Недопустимый формат атрибута: {attribute_pair}" -#: vibes_auth/graphene/mutations.py:263 vibes_auth/viewsets.py:115 -#: vibes_auth/viewsets.py:134 +#: vibes_auth/graphene/mutations.py:263 vibes_auth/viewsets.py:116 +#: vibes_auth/viewsets.py:135 msgid "activation link is invalid!" msgstr "Ссылка на активацию недействительна!" @@ -159,17 +164,17 @@ msgstr "Аккаунт уже активирован..." msgid "something went wrong: {e!s}" msgstr "Что-то пошло не так: {e!s}" -#: vibes_auth/graphene/mutations.py:314 vibes_auth/viewsets.py:83 +#: vibes_auth/graphene/mutations.py:314 vibes_auth/viewsets.py:84 msgid "token is invalid!" msgstr "Токен недействителен!" #: vibes_auth/graphene/object_types.py:39 msgid "" -"the products this user has viewed most recently (max 48), in reverse‐" -"chronological order" +"the products this user has viewed most recently (max 48), in " +"reverse‐chronological order" msgstr "" -"Продукты, которые этот пользователь просматривал в последнее время (не более " -"48), в обратном хронологическом порядке." +"Продукты, которые этот пользователь просматривал в последнее время (не более" +" 48), в обратном хронологическом порядке." #: vibes_auth/graphene/object_types.py:41 vibes_auth/models.py:108 msgid "groups" @@ -280,23 +285,23 @@ msgstr "Токен в черном списке" msgid "blacklisted tokens" msgstr "Токены, внесенные в черный список" -#: vibes_auth/serializers.py:106 vibes_auth/serializers.py:128 +#: vibes_auth/serializers.py:107 vibes_auth/serializers.py:129 msgid "no active account" msgstr "Активная учетная запись не найдена" -#: vibes_auth/serializers.py:199 +#: vibes_auth/serializers.py:200 msgid "token_blacklisted" msgstr "Токен занесен в черный список" -#: vibes_auth/serializers.py:204 +#: vibes_auth/serializers.py:205 msgid "invalid token" msgstr "Неверный токен" -#: vibes_auth/serializers.py:210 +#: vibes_auth/serializers.py:211 msgid "no user uuid claim present in token" msgstr "В токене отсутствует утверждение uuid пользователя" -#: vibes_auth/serializers.py:212 +#: vibes_auth/serializers.py:213 msgid "user does not exist" msgstr "Пользователь не существует" @@ -381,8 +386,7 @@ msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" msgstr "" -"Если кнопка выше не работает, пожалуйста, скопируйте и вставьте следующий " -"URL-адрес\n" +"Если кнопка выше не работает, пожалуйста, скопируйте и вставьте следующий URL-адрес\n" " в свой веб-браузер:" #: vibes_auth/templates/user_verification_email.html:101 @@ -421,10 +425,10 @@ msgstr "" msgid "the token is invalid" msgstr "Токен недействителен" -#: vibes_auth/viewsets.py:87 +#: vibes_auth/viewsets.py:88 msgid "password reset successfully" msgstr "Пароль был успешно сброшен!" -#: vibes_auth/viewsets.py:120 +#: vibes_auth/viewsets.py:121 msgid "account already activated!" msgstr "Вы уже активировали учетную запись..." diff --git a/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.mo b/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.mo index 184a1cc9..e5d7d8e4 100644 Binary files a/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.mo and b/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.mo differ diff --git a/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.po b/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.po index 13bf9e79..d900bb7e 100644 --- a/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.po +++ b/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-08 19:42+0100\n" +"POT-Creation-Date: 2025-06-10 03:32+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -74,27 +74,27 @@ msgstr "验证令牌(刷新或访问)。" msgid "the token is valid" msgstr "令牌有效" -#: vibes_auth/docs/drf/viewsets.py:15 +#: vibes_auth/docs/drf/viewsets.py:16 msgid "create a new user" msgstr "创建新用户" -#: vibes_auth/docs/drf/viewsets.py:19 +#: vibes_auth/docs/drf/viewsets.py:20 msgid "retrieve a user's details" msgstr "读取用户详细信息" -#: vibes_auth/docs/drf/viewsets.py:23 +#: vibes_auth/docs/drf/viewsets.py:24 msgid "update a user's details" msgstr "更新用户信息" -#: vibes_auth/docs/drf/viewsets.py:28 +#: vibes_auth/docs/drf/viewsets.py:29 msgid "delete a user" msgstr "删除用户" -#: vibes_auth/docs/drf/viewsets.py:32 +#: vibes_auth/docs/drf/viewsets.py:33 msgid "reset a user's password by sending a reset password email" msgstr "通过发送重置密码电子邮件重置用户密码" -#: vibes_auth/docs/drf/viewsets.py:37 +#: vibes_auth/docs/drf/viewsets.py:38 msgid "handle avatar upload for a user" msgstr "处理用户的头像上传" @@ -103,7 +103,7 @@ msgid "confirm a user's password reset" msgstr "确认用户密码重置" #: vibes_auth/docs/drf/viewsets.py:57 vibes_auth/graphene/mutations.py:307 -#: vibes_auth/viewsets.py:72 +#: vibes_auth/viewsets.py:73 msgid "passwords do not match" msgstr "密码不匹配" @@ -115,6 +115,10 @@ msgstr "激活用户帐户" msgid "activation link is invalid or account already activated" msgstr "激活链接无效或账户已激活" +#: vibes_auth/docs/drf/viewsets.py:71 +msgid "merge client-stored recently viewed products" +msgstr "合并客户存储的最近查看的产品" + #: vibes_auth/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "将新用户推荐给我们的用户的 b64-encoded uuid。" @@ -142,8 +146,8 @@ msgstr "畸形电话号码: {phone_number}" msgid "Invalid attribute format: {attribute_pair}" msgstr "属性格式无效:{attribute_pair}" -#: vibes_auth/graphene/mutations.py:263 vibes_auth/viewsets.py:115 -#: vibes_auth/viewsets.py:134 +#: vibes_auth/graphene/mutations.py:263 vibes_auth/viewsets.py:116 +#: vibes_auth/viewsets.py:135 msgid "activation link is invalid!" msgstr "激活链接无效!" @@ -155,14 +159,14 @@ msgstr "帐户已激活..." msgid "something went wrong: {e!s}" msgstr "出了问题:{e!s}" -#: vibes_auth/graphene/mutations.py:314 vibes_auth/viewsets.py:83 +#: vibes_auth/graphene/mutations.py:314 vibes_auth/viewsets.py:84 msgid "token is invalid!" msgstr "令牌无效!" #: vibes_auth/graphene/object_types.py:39 msgid "" -"the products this user has viewed most recently (max 48), in reverse‐" -"chronological order" +"the products this user has viewed most recently (max 48), in " +"reverse‐chronological order" msgstr "该用户最近查看过的产品(最多 48 个),按倒序排列。" #: vibes_auth/graphene/object_types.py:41 vibes_auth/models.py:108 @@ -274,23 +278,23 @@ msgstr "黑名单令牌" msgid "blacklisted tokens" msgstr "黑名单令牌" -#: vibes_auth/serializers.py:106 vibes_auth/serializers.py:128 +#: vibes_auth/serializers.py:107 vibes_auth/serializers.py:129 msgid "no active account" msgstr "未找到活动账户" -#: vibes_auth/serializers.py:199 +#: vibes_auth/serializers.py:200 msgid "token_blacklisted" msgstr "令牌被列入黑名单" -#: vibes_auth/serializers.py:204 +#: vibes_auth/serializers.py:205 msgid "invalid token" msgstr "无效令牌" -#: vibes_auth/serializers.py:210 +#: vibes_auth/serializers.py:211 msgid "no user uuid claim present in token" msgstr "令牌中没有用户 uuid 声明" -#: vibes_auth/serializers.py:212 +#: vibes_auth/serializers.py:213 msgid "user does not exist" msgstr "用户不存在" @@ -399,17 +403,16 @@ msgstr "{config.PROJECT_NAME} 重置密码| 重置密码" msgid "" "invalid phone number format. the number must be entered in the format: " "\"+999999999\". up to 15 digits allowed." -msgstr "" -"电话号码格式无效。电话号码必须按格式输入:\"+999999999\".最多允许 15 位数字。" +msgstr "电话号码格式无效。电话号码必须按格式输入:\"+999999999\".最多允许 15 位数字。" #: vibes_auth/views.py:57 msgid "the token is invalid" msgstr "令牌无效" -#: vibes_auth/viewsets.py:87 +#: vibes_auth/viewsets.py:88 msgid "password reset successfully" msgstr "密码已重置成功!" -#: vibes_auth/viewsets.py:120 +#: vibes_auth/viewsets.py:121 msgid "account already activated!" msgstr "您已经激活了账户..." diff --git a/vibes_auth/managers.py b/vibes_auth/managers.py index 46a7c999..779a7763 100644 --- a/vibes_auth/managers.py +++ b/vibes_auth/managers.py @@ -2,6 +2,8 @@ from django.contrib import auth from django.contrib.auth.base_user import BaseUserManager from django.contrib.auth.hashers import make_password +from core.models import Order + class UserManager(BaseUserManager): use_in_migrations = True @@ -11,6 +13,14 @@ class UserManager(BaseUserManager): user = self.model(email=email, **extra_fields) user.password = make_password(password) user.save(using=self._db) + for order in Order.objects.filter(attributes__icontains=user.email): + if not order.user: + order.user = user + order.save() + for order in Order.objects.filter(attributes__icontains=user.phone_number): + if not order.user: + order.user = user + order.save() return user def create_user(self, email=None, password=None, **extra_fields): diff --git a/vibes_auth/serializers.py b/vibes_auth/serializers.py index 7f60b2ea..3838324c 100644 --- a/vibes_auth/serializers.py +++ b/vibes_auth/serializers.py @@ -13,6 +13,7 @@ from rest_framework.fields import ( BooleanField, CharField, EmailField, + ListField, SerializerMethodField, ) from rest_framework.serializers import ModelSerializer, Serializer @@ -229,3 +230,7 @@ class ResetPasswordSerializer(Serializer): class ActivateEmailSerializer(Serializer): uidb64 = CharField(required=True) token = CharField(required=True) + + +class MergeRecentlyViewedSerializer(Serializer): + product_uuids = ListField(required=True, child=CharField(required=True)) diff --git a/vibes_auth/viewsets.py b/vibes_auth/viewsets.py index 0c8dd9ba..4515325c 100644 --- a/vibes_auth/viewsets.py +++ b/vibes_auth/viewsets.py @@ -22,6 +22,7 @@ from evibes.settings import DEBUG from vibes_auth.docs.drf.viewsets import USER_SCHEMA from vibes_auth.models import User from vibes_auth.serializers import ( + MergeRecentlyViewedSerializer, UserSerializer, ) from vibes_auth.utils.emailing import send_reset_password_email_task @@ -141,6 +142,17 @@ class UserViewSet( response_data["access"] = str(tokens.access_token) return Response(response_data, status=status.HTTP_200_OK) + @action(detail=True, methods=["put"], permission_classes=[IsAuthenticated]) + def merge_recently_viewed(self, request, **kwargs): + user = self.get_object() + if request.user != user: + return Response(status=status.HTTP_403_FORBIDDEN) + serializer = MergeRecentlyViewedSerializer(request.data) + serializer.is_valid(raise_exception=True) + for product_uuid in serializer.validated_data["product_uuids"]: + user.add_to_recently_viewed(product_uuid) + return Response(status=status.HTTP_202_ACCEPTED, data=self.serializer_class(user).data) + def retrieve(self, request, pk=None, *args, **kwargs): instance = self.get_object() serializer = self.get_serializer(instance)